Logitech Harmony, Twilight und DOIF

Begonnen von Kai-Uwe, 09 Dezember 2015, 14:52:38

Vorheriges Thema - Nächstes Thema

Kai-Uwe

Ahhhh!

Das sieht sehr gut aus!

Habe das mal ohne Dummy getestet. Einfach > gegen < getauscht. Einmal geht das Licht entsprechend an und einmal bleibt es aus. Jetzt muss ich nur  noch mal morgen wenn es Dämmert den richtigen Wert einsetzen!

Ich denke das war es!

ich werfe mal (eine leider nur virtuelle) Kiste Bier für die Helfer auf den Markt!

Grüße Kai-Uwe

PS: Ich melde mich Morgen/Übermorgen dann nochmal kurz wenn es alles richtig geklappt hat.

Kai-Uwe

Ja,

wenn ich das richtig verstanden habe gibt es einen Wert(nicht light), an dem kann dann auch Vormittag bzw. Nachmittag erkannt werden.
Ich möchte aber ja nur die Helligkeit. Wenn es im Winter früh morgens noch dunkel ist soll das ja auch funktionieren. Ich meine der light-Wert ist da der richtige und ja, je niedriger der Wert desto dunkler ist es. Hier ist es gerade 2 :-)

Grüße Kai-Uwe

Kai-Uwe

So,

wie versprochen melde ich mich nun nochmal.

Klappt alles wie gewünscht. Als Helligkeitswert kommt mir die 5 bisher ganz passend vor. Das DEF sieht damit nun so aus:

SZ.Harmony.currentActivity:.Fernsehen IF ([LichtWetter:light]<5) (set FBDECT_FritzBox_19 off,set FBDECT_FritzBox_16 on,set FBDECT_FritzBox_17 on)

Damit wird nun, sobald die Helligkeit draussen unter 5 liegt beim Starten der Aktion Fernsehen mit der Harmony das Licht entsprechend geschaltet.
Ich habe aus dem .starting.Fernsehen ein .Fernsehen gemacht, weil ich der Meinung war das dann evtl. wenn man im hellen beginnt Fernsehen zu sehen automatisch das Licht gewechselt wird wenn es dunkler wird (Twilight unter 5). Dem ist aber leider nicht so. Schade eigentlich....Würde die Sache perfektionieren. Geht das überhaupt so einfach? Der Unterschied ist einfach derzeit der, das einmal schon beim Starten der Aktion auf der Harmony schon geschaltet wird und einmal erst wenn die Harmony durch ist, was mir sogar etwas besser gefällt.

Grüße Kai-Uwe

Ellert

Mir ist der Beitrag erst jetzt aufgefallen.

Dein erster Ansatz ein DOIF zu verwenden, ist bei der Problemstellung schon richtig gewesen.

Das DOIF vereint Zeit- und Ereignissteuerung, und ist sehr mächtig in seiner Funktionalität.

Es ist unerlässlich sich mit der Syntax und der Funktionalität vertraut zu machen und sich als Einstieg die Abschnitte Ereignissteuerung und Zeitsteuerung in der Commandref zu erarbeiten.

Deine Fragestellung lässt sich etwa so lösen:
1. DOIF als Merker für den Fernseherstatus oder ggf. PRESENCE nutzen
TVStatus DOIF ([FB:Action] eq "TVan")
DOELSEIF  ([FB:Action] eq "TVaus")

2. DOIF für die Lichtlogik
TVLicht  DOIF ([TVStatus] eq "cmd_1" and [?twilight:light] < 5 or [?TVStatus] eq "cmd_1" and [twilight:light] < 5) (set Licht an, ...)
DOELSEIF ([TVStatus] eq "cmd_2" or [twilight:light] > 5) (set Licht aus, ...)

Dann geht das Licht nicht nur an, wenn es abends dunkler wird, sondern es geht auch aus, wenn es beim morgendlichen Fernsehen heller wird, oder wenn Du den Fernseher ausschaltest.
Das kannst Du auf abends begrenzen mit ([?18:00-23:00] and ([TVStatus] eq "cmd_1" and [?twilight:light] < 5 or [?TVStatus] eq "cmd_1" and [twilight:light] < 5))

Nicht getestet, Syntax ggf. unvollständig

Hier gibt es noch ein paar allgemeine Tipps zum DOIF: http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668

Kai-Uwe

Hmm..

das habe ich noch nicht so ganz kapiert...

Ich habe das entsprechend auf mich angepasst (War das schon falsch?) Es tut sich dann jedoch nichts. :

TVLicht  DOIF ([TVStatus] eq "Fernsehen" and [?twilight:light] <5 or [?TVStatus] eq "Fernsehen" and [twilight:light] <5) (set FBDECT_FritzBox_19 off,set FBDECT_FritzBox_16 on,set FBDECT_FritzBox_17 on)
DOELSEIF ([TVStatus] eq "cmd_2" or [twilight:light] >5) (set FBDECT_FritzBox_16 off,set FBDECT_FritzBox_17 off)

Anstatt "cmd_1" habe ich wie hier angegeben auch mal "Fernsehen" getestet. So heist die Aktion auf der Harmony ja.

Wenn ich die Syntax richtig verstehe heisst das auf "deutsch": Wenn der Status der Harmony auf "Fernsehen" steht und das Licht dunkler als 5 ist mach das was mit Set in Klammern steht. Warum dann aber doppelt:  "... DOIF ([TVStatus] eq "Fernsehen" and [?twilight:light] <5 or [?TVStatus] eq "Fernsehen" and [twilight:light] <5)..." wozu ist der Teil hinter OR gedacht? Es gibt in diesem Fall doch eigentlich keine Oder-Bedingung? Oder :-)

Muss ich den Code 1 von dir ebenfalls mit nutzen? Oder war das, so wie ich es verstanden habe nur ein Erklärungsbeispiel?

Und was ganz anderes...Irgendwie will der Editor hier im Forum nicht so wie ich. Die Formatierungen kann ich zwar anklicken, bleiben jedoch ohne Funktion. :-(

Grüße Kai-Uwe

Ellert

Ich gehe mal davon aus, dass Deine Fernbedienung (FB) ein Reading (Action) hat, das je nach Tastendruck einen Wert an nimmt. Das 1. DOIF speichert den Tastendruck in seinem "state", wenn das Reading den Wert "TVan" an nimmt, als cmd_1. Den Wert "TVan" müsstest Du anpassen, wohl auf "Fernsehen". Wenn Du mit der FB den Fernseher aus stellst (Action eq "TVaus", dann speichert das DOIF den Tastendruck als cmd_1. Den Wert "TVaus" müsstest Du anpassen, da ich nicht weiss, was deine FB für einen Wert an nimmt, wenn Du den Fernseher aus stellst. Selbstberständlich musst Du, im 2. DOIF,  den Namen Deines Twilight-Gerätes nehmen. Für mich ist es aber einfacher einen Ersatznamen zu benutzen als mich in Deine Namensgebung einzulesen. Der Wert des Tastendrucks Deiner FB muss deshalb zwischen gespeichert werden, weil Du mit der FB zwischendurch auch andere Aktionen auslösen könntest, dann würde der Teil nach dem "or" nicht mehr funktionieren.
Wenn Du das Presence Modul verwendest und Deinen Fernseher mit LAN-Ping auf Anwesendheit prüfst, dann benötigst Du das 1. DOIF nicht. Dann musst Du das 2. DOIF anpassen und zwar [TVStatus] eq "cmd_1" nach [Presence-Gerätename] eq "present" bzw. "absent" im zweiten Bedingungszweig.
ZitatWenn ich die Syntax richtig verstehe heisst das auf "deutsch": Wenn der Status der Harmony auf "Fernsehen" steht und das Licht dunkler als 5 ist mach das was mit Set in Klammern steht. Warum dann aber doppelt:  "... DOIF ([TVStatus] eq "Fernsehen" and [?twilight:light] <5 or [?TVStatus] eq "Fernsehen" and [twilight:light] <5)..." wozu ist der Teil hinter OR gedacht? Es gibt in diesem Fall doch eigentlich keine Oder-Bedingung? Oder :-)
Wenn es dunkel ist und Du schaltest den Fernseher ein, dann werden die set-Befehle ausgeführt, Hier triggert der Fernseher. Oder Du schaltest den Fernseher ein wenn es hell ist, dann wird es dunkel, dann werden die set-Befehle auch ausgeführt. Dieses Mal triggert Twilight.
Das hatte ich deswegen eingebaut:
ZitatIch habe aus dem .starting.Fernsehen ein .Fernsehen gemacht, weil ich der Meinung war das dann evtl. wenn man im hellen beginnt Fernsehen zu sehen automatisch das Licht gewechselt wird wenn es dunkler wird (Twilight unter 5). Dem ist aber leider nicht so. Schade eigentlich....Würde die Sache perfektionieren.

Also, ein bisschen Arbeit bleibt für Dich noch übrig. In der deutschen Commandref, findest Du eine Erläuterung zur Befehlsstruktur und Syntax des DOIF mit vielen Beispielen.