Licht zum TV Backlight mit Bedingung zuschalten

Begonnen von sTaN, 22 Februar 2013, 14:41:43

Vorheriges Thema - Nächstes Thema

sTaN

Hallo,

gestern habe ich mich an den ersten Structure-Elementen versucht und noch ein paar Schwierigkeiten.

Ziel ist es in Abhängigkeit der Uhrzeit beim Drücken der Taste (Fernbedienung FS20 S20) für mein TV Backlight die Stehlampe hinzu zuschalten.
Dazu gibt es ja das Modul srunrise_el.

Aktuell habe ich folgendes realisiert:

define TVLampenStruc structure room TVBacklight Stehlampe
attr TVLampenStruc room Wohnzimmer
define AlleLampen FS20 a3a3 f0
attr AlleLampen group Multimedia
attr AlleLampen room Multimedia,Wohnzimmer
define TVLampenAufFernbedienung notify TVLampen set TVLampenStruc %


Mein erstes Problem bei diesem Konstrukt ist, dass wenn ich den Dummy AlleLampen über die FHEM-Weboberfläche oder auf dem iPhone schalte, nichts passiert. Drücke ich die Taste auf der Fernbedienung gehen aber beide Lampen an oder aus.
Auch wenn ich im Raum Wohnzimmer die Structure TVLampenStruc schalte, werden beide Lampen geschaltet. Habe ich an der Stelle einen Denkfehler oder wie bekomme ich den Dummy AlleLampen auch geschaltet?

Im nächsten Schritt möchte ich gern die Stehlampe nur wenn es dunkel ist zuschalten. Bin ich auf dem richtigen Weg, wenn ich die if-Bedingung lediglich dem define TVLampenAufFernbedienung hinzufüge?
Also zum Beispiel:
define TVLampenAufFernbedienung notify TVLampen set TVLampenStruc % { \
  if($data{lastOffTime}+20*60 < time() &&\
     sunset_abs(1800) lt sprintf("%%02d:%%02d", $hour, $min)) {\
    fhem "set light on";;\
  }\


Die if-Bedingung habe ich aus diesem Wiki-Einträg.

Vielleicht hat noch jemand eine einfachere Möglichkeit, eine Lampe nur zu einer bestimmten Uhrzeit zu zuschalten.

EDIT: Als ich gerade den Post verfasst und noch mal Korrektur gelesen habe, ist mir aufgefallen, dass AlleLampen in TVLampen umbenannt wurde, aber dies nicht auf die Attribute übernommen wurde. Ich glaube das sollte zumindest das erste Problem beheben, werde ich nachher gleich testen.

Viele Grüße
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

MisterEltako

Problem 1 hast du selbst gelöst.
Zu Problem2 würde ich vorschlagen:

define n_TVLampen at *{sunset_abs(1800)} set stehlampe on

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

MisterEltako

...und abhänig vom Licht Stehlampe an:
structure gibt an alle definierten Device on bzw off weiter!!!!

define TVLampenaufFernbdienung notify TVLampen {\
       if ($hour<"16:30") {\
          fhem(`set Stehlampe on`);;}\
       fhem("set TVBacklight on");;\
}

oder eben sunset....

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Zrrronggg!

Zitatdefine n_TVLampen at *{sunset_abs(1800)} set stehlampe on

Ich glaube nicht, dass es das ist was sTaN machen will, denn das würde die Stehlampe ja IMMER anmachen, wenn's Dunkel ist.

Soweit ich verstanden habe will er aber, dass die Lampe nur angehet wenn es dunkel ist UND er die Taste der FS20 S20 für sein TVLicht drückt.

Oder?

Ich finde so oder so die ganze Konstruktion zu komplex und schaffe es nicht, in meiner zugegeben arroganten "ich gebe jedem Eintrag 20 Sekunden" Zeitgrenze zu begreifen, was du hast und was da machen soll.

Speziell gefährlich finde ich solche Dinge:

Zitatdefine TVLampenAufFernbedienung notify TVLampen set TVLampenStruc %

da die recht schwer zu debuggen sind.

Insbesondere ist es leicht FS20 Fernbedienung so zu programieren oder auch nur zu bedienen, das sie ganz anderen Kram als "on" oder "off" senden und dann kann

  set TVLampenStruc %

zu echt lustigen Effekten führen, besonders, wenn man mit structure Aktoren mit unterschiedlichen Eigenschaften zusammenfasst.

Ich würde da klar sowas wie:

Zitatdefine TVLampenFernbedienungAN notify TVLampen:on.* set TVLampe1,TVLampe2,TVLampe3 on
define TVLampenFernbedienungAUS notify TVLampen:off.* set TVLampe1,TVLampe2,TVLampe3 off

vorziehen, schon allein weil FHEM hier die von der Fernbedienung einkommenden Komandos abstraiert UND man auch sofort erkennen kann, welche Lampen alle regieren sollten. Ist aber natürlich einen Geschmacksfrage.

Aus der Prosa entnehme ich aber, dass du mehrere Lampen hast und bestimmte sollen immer angehen wenn du  auf deine FS20 S20 drückst und die Stehlampe soll nur angehen, wenn es zusätzlich auch dunkel ist. Stimmt das so?

Dann würde ich sowas vorschlagen wie:

Zitatdefine TVLampenFernbedienungAN notify TVLampen:on.*  { if (isday()) { fhem("set TVLampe1,TVLampe2,TVLampe3 on") } else { fhem("set TVLampe1,TVLampe2,TVLampe3, Stehlampe on") }}
define TVLampenFernbedienungAUS notify TVLampen:off.* set TVLampe1,TVLampe2,TVLampe3,Stehlampe off

isday richtet sich nach bürgerlicher Dämmerung und erspart einem  - sofern das genau genug ist - einiges an Code.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

sTaN

[quote title=Zrrronggg! schrieb am Fr, 22 Februar 2013 18:41]
ZitatAus der Prosa entnehme ich aber, dass du mehrere Lampen hast und bestimmte sollen immer angehen wenn du  auf deine FS20 S20 drückst und die Stehlampe soll nur angehen, wenn es zusätzlich auch dunkel ist. Stimmt das so?

Genau so ist es! Wao vielen dank für die ausführliche Hilfe!!!
Momentan existiert zwar "nur" eine TV Backlight "Lampe" bzw. viel mehr LED Stripes, aber evtl. kommt eine zweite dazu. Und genau wie du es erkannt hast, soll es geschehen. Mache ich die TV Backlight an, soll die Stehlampe, wenn es dunkel ist dazu geschalten werden. (Dämmerung natürlich noch besser!). Ansonsten soll nur das TV Backlight angehen.

Das macht natürlich alles Sinn was du schreibst und ich habe es nun folgendermaßen umgesetzt:

Folgende Zeilen habe ich gelöscht:

define TVLampenStruc structure room TVBacklight Stehlampe
attr TVLampenStruc room Wohnzimmer


und diese dafür eingefügt:

define TVLampenFernbedienungAN notify TVLampen:on.*  { if (isday()) { fhem("set TVBacklight on") } else { fhem("set TVBacklight,Stehlampe on") }}
define TVLampenFernbedienungAUS notify TVLampen:off.* set TVBacklight,Stehlampe off


Nun sieht die Konfiguration wie folgt aus:

define TVLampen FS20 a3a3 f0
attr TVLampen fm_view 0,1
attr TVLampen group Multimedia
attr TVLampen room Multimedia,Wohnzimmer
define TVLampenFernbedienungAN notify TVLampen:on.*  { if (isday()) { fhem("set TVBacklight on") } else { fhem("set TVBacklight,Stehlampe on") }}
define TVLampenFernbedienungAUS notify TVLampen:off.* set TVBacklight,Stehlampe off


Sieht echt einfach aus, wenn man es mal richtig gemacht hat und isday() macht an der Stelle absolut Sinn.
Also die Änderungen funktionieren schon mal insoweit, dass alles an und alles aus geht.
Morgen früh, wenn es hell wird, werde ich mal testen ob die Stehlampe ausbleibt. ;-)
Obwohl ich dies sicher mit !isday() jetzt schon testen könnte.

Vielen vielen Dank für die schnelle und kompetente Rückmeldung!

Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

sTaN

Hallo again,

es klappt nun super! Hatte es gestern auch schon mit !isday() getestet.

Nun habe ich meine Idee weiter gesponnen und ich möchte bei eintretender Dämmerung die Stehlampe automatisch anschalten, wenn das TV Backlight bereits an ist.

isday() gibt ja nur true und false zurück. Nach welchem at trigger ich das Ereignis am Besten?

define StehlampeAutoON at ...???... {\
   if (!isday() && "$value(TVLampen)" eq "on" && "$value(Stehlampe)" eq "off" ) {\
     {fhem("set Stehlampe on") }\
  }\
}


Würde dies funktionieren und Sinn machen oder ist eine andere Alternative besser?

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Puschel74

Hallo,

schau dir mal twilight an.
Evtl. hilft dir das mehr.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

sTaN

Hallo,

danke für die Rückmeldung. Ich schau mal wie es mit folgendem Code aussieht:

at *{sunset("REAL",0,"18:00","21:00")}

define StehlampeAutoON at *{sunset("REAL",0,"18:00","21:00")} {\
   if (!isday() && "$value(TVLampen)" eq "on" && "$value(Stehlampe)" eq "off" ) {\
     {fhem("set Stehlampe on") }\
  }\
}


Das dürfte sich ja ähnlich wie isday() verhalten, da beides aus dem Modul Sunrise_EL ist. Nun müsste sich meine Stehlampe, vorausgesetzt meine TVLampen sind an, frühstens um 18 Uhr von allein dazu schalten aber maximal bis 21 Uhr.

Ich werde berichten.
Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Zrrronggg!

Lustig... ich dachte mir : "Na mal sehen, bestimmt hätte er als nächstes gern, dass..." Bingo.

Ich hab mir den Code nicht angesehen, wenn der nicht klappt melde dich, dann nagel ich dir schnell was zusammen, ist nicht schwer.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

sTaN

Zitat von: Zrrronggg! schrieb am Sa, 23 Februar 2013 14:28Lustig... ich dachte mir : "Na mal sehen, bestimmt hätte er als nächstes gern, dass..." Bingo.

:D Was glaubst du was mir noch alles in meinem Kopf rumschwirrt. Aber ich versuche so viel wie möglich zunächst allein und ansonsten die Threads wie eine Art Anleitung für Neueinsteiger (wie mich auch) zu verfassen. Hoffe das ist in Ordnung so.

Zitat von: Zrrronggg! schrieb am Sa, 23 Februar 2013 14:28Ich hab mir den Code nicht angesehen, wenn der nicht klappt melde dich, dann nagel ich dir schnell was zusammen, ist nicht schwer.

Das weiß ich sehr zu schätzen, danke! Wenn ich mal soweit bin, werde ich es auch für Andere versuchen. ;-)

Alle anderen Themen werde ich in einen separaten Thread packen.
Da fallen mir zum Beispiel FS20-IRU mit Harmony 900 ein, Dreambox Status (on/off) an Fhem mitteilen und und und. Aber zu vielen Dingen gibt es ja bereits Ansätze.

Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

sTaN

Ich glaub ich habe da noch einen Fehler in meinem Code ;-)
Laut Google, sollte um 17:59 Uhr Sonnenuntergang sein. Weiterhin erhalte ich folgende Fehlermeldung im Logfile:

Global symbol "$value" requires explicit package name at (eval 23) line 1.
2013.02.23 17:54:33 3: Global symbol "$value" requires explicit package name at (eval 23) line 1.


Ich glaub das $-Zeichen ist dort zu viel? Ist eine andere Prüfung auf den Status sinnvoller? ReadingValue oder Ähnliches?

isday() scheint Stand jetzt (18:10 Uhr) auch noch kein true zurückzugeben, da meine Stehlampe auch noch beim betätigen des Schalters ausbleibt.
Überhaupt werde ich noch irgendwo ein Offset von ca. 30 Minuten einbauen müssen, da es in meiner Dachwohnung schon früher recht dunkel ist.

Bei sunset kann man das anstelle der 0 in 1800 Sekunden ja angeben, oder?
Wie mache ich das bei isday() ?

EDIT: Setze ich temporär die min Zeit mal in die Zukunft und öffne den Event Monitor bekomme ich folgende Ausgabe:
2013-02-23 18:15:59 Global global DELETED StehlampeAutoON
2013-02-23 18:15:59 Global global DEFINED StehlampeAutoON


Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

sTaN

Okay ich sollte mir definitiv mehr Zeit nehmen, bevor ich poste. Entschuldigung schon mal dafür.
Syntaxfehler gefunden. Ich hatte eine geschweifte Klammer vor dem fhem zu viel.

Code sieht nun wie folgt aus:

define StehlampeAutoON at *{sunset("REAL",-1800,"17:00","21:00")} {\
   if (!isday() && Value("TVLampen") eq "on" && Value("Stehlampe") eq "off" ) {\
     fhem("set Stehlampe on") }\
   }\
}


Zufrieden bin ich damit allerdings noch nicht.

1. isday ist mir zu spät. Ich würde dort gern 30-60 Minuten früher agieren.
2. sunset() ist mir ebenfalls zu spät. Dort habe ich ein Offset von -1800 Sekunden einbauen können, sodass das nächste Event um 17:26 getriggert wird. Geht das so?

Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Zrrronggg!

sunset/sunrise kann offsets, isday nicht. Wenn isday für dich nicht geht musst du dafür entweder auch sunset nehmen oder dir ein eigenes isday mit einem Dummy basteln.

Das habe ich mal gemacht: Ein Dummy nehmen, den z.b. TagNacht nennen, und denn dann mit einer sunset-Routine befüllen, etwa in der Art


define Set_TagNachtNacht  at *{sunset(-2100)} set TagNacht Nacht
define Set_TagNachtTag  at *{sunrise(+2100)} set TagNacht Tag


Damit hast du einen isday-ersatz, der zu den von dir gewünschten Zeiten den Wert wechselt und kannst dann mit Sachen wie

if (value("TagNacht")  eq "Nacht" && Value("TVLampen")... lalala

arbeiten.

Ausserdem könntest du dein tagNacht-Dummy auch mit anderen Werten füllen, wie "Abend(Daemmerung)"  oder so, und damit ggf Lampen nur dim50% schalten und so sachen.

Etwa so

define Set_TagNachtAbend  at *{sunset(-3900)} set TagNacht Abend
define Set_TagNachtNacht  at *{sunset(-2000)} set TagNacht Nacht
define Set_TagNachtTag  at *{sunrise(+1100)} set TagNacht Tag
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

sTaN

Perfekt!
Um den Thread an der Stelle mal abzuschließen, hier mein kompletter Code:

# FB Schalter für TVLampen (Kanal 9)
define TVLampen FS20 a3a3 f0
attr TVLampen fm_order 1
attr TVLampen fm_type on-off
attr TVLampen group Multimedia
attr TVLampen model fs20st
attr TVLampen room Multimedia,Wohnzimmer
define FileLog_TVLampen FileLog ./log/TVLampen-%Y.log TVLampen
attr FileLog_TVLampen logtype text
attr FileLog_TVLampen room FS20
# Tag/Nacht Dummy als Ersatz für isday() dusk = Abenddämmerung, dawn = Morgendämmerung
define DayNight dummy
define set_DayNightDusk at *{sunset(-3600)} set DayNight dusk
define set_DayNightDawn at *{sunrise(+3600)} set DayNight dawn
# Schalte TVLampen (TVBacklight und Stehlampe) an. Stehlampe nur anschalten, wenn Dämmerung = true
define TVLampenFernbedienungAN notify TVLampen:on.*  {\
   if (value("DayNight") eq "dawn") {\
      fhem("set TVBacklight on")\
   } else {\
   if (value("DayNight") eq "dusk") {\
      fhem("set TVBacklight,Stehlampe on")\
   }\
}
# Schalte TVLampen (TVBacklight und Stehlampe) aus.
define TVLampenFernbedienungAUS notify TVLampen:off.* set TVBacklight,Stehlampe off
# Schalte Stehlampe an, wenn die Sonne untergegangen ist, frühstens 18 Uhr, spätestens 21 Uhr
# vorausgesetzt die TVBacklight ist an
define StehlampeAutoON at *{sunset("REAL",-1800,"17:00","21:00")} {\
   if (!isday() && Value("TVLampen") eq "on" && Value("Stehlampe") eq "off" ) {\
     fhem("set Stehlampe on") }\
   }\
}


Vielen Dank für die Unterstützung.
Gruß
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

sTaN

Etwas zu früh gefreut. Die Methode value("DayNight") gibt mir nicht den Inhalt des Dummys wieder, sondern einen Fehler:

Undefined subroutine &main::value called at (eval 46) line 1.
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover