FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kai-Uwe am 09 Dezember 2015, 14:52:38

Titel: Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 14:52:38
Hallo Forengemeinde,

nachdem ich hier nun schon lange "lurke" und fast alle meine offenen Fragen durch lesen beantwortet wurden. Gibt es doch noch etwas was ich nicht auf die Reihe bekomme. Also habe ich mich nun endlich registriert um meine Frage zu Posten.

Vorab ein paar Eckdaten:
AVM Fritzbox 7390
AVM Dect Schaltsteckdosen
Raspberry Pi II
Logitech Harmony Ultimate

Alles mit aktueller Firm-/Software

Ich habe meine Logitech Harmony mit in FHEM eingebunden und u.a. ein Notify erstellt welches beim Einschalten des Fernsehers dafür sorgen soll, das die entsprechende Beleuchtung geschaltet wird.
Soweit funktioniert das super.

Der Notify ist mit folgendem Inhalt im DEF erstellt:

SZ.Harmony.currentActivity:.starting.Fernsehen set FBDECT_FritzBox_19 off;set FBDECT_FritzBox_16,FBDECT_FritzBox_17 on

Ergebnis: Eine Lampe geht aus, wenn sie denn an ist und zwei andere gehen an, soweit sie nicht schon an sind. Wunderbar!

Nun möchte ich aber, das z.B. tagsüber, wenn es sowieso noch hell ist, das ganze nicht ausgeführt wird. Dazu habe ich mir gedacht müsste das doch mit DOIF funktionieren. Es soll also erst beiner bestimmten Dunkelheit das licht entsprechend geschaltet werden. Wenn es noch (zu) hell ist soll die Aktion Fernsehen quasi von FHEM unbeachtet bleiben. Leider bekomme ich das absolut nicht auf die Reihe.

Unter anderem habe ich auch sowas hier versucht. Natürlich ohne Erfolg :-( :

SZ.Harmony.currentActivity:.starting.Fernsehen DOIF([Lichtwetter_sr_weather]>5) set FBDECT_FritzBox_19 off;set FBDECT_FritzBox_16,FBDECT_FritzBox_17 on

Hoffentlich hilft mir einer von euch da weiter. Das was Twilight so ausgibt habe ich mal als Anhang angefügt. Evtl. hilft es ja.

Grüße Kai-Uwe code
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: d.schoen am 09 Dezember 2015, 15:01:24
Hallo Kai-Uwe,

erst einmal Hallo als aktives Mitglied :-)

Mit dem notify wirst du da nicht weiter kommen.

Du musst dir dafür ein DOIF Device definieren (statt dem notify).

Als Definition brauchst du etwas in der Richtung:
define SZ.LampenMitFernseher DOIF ([SZ.Harmony.currentActivity] eq ".starting.Fernsehen" and [?Lichtwetter_sr_weather]>5) (set FBDECT_FritzBox_19 off;set FBDECT_FritzBox_16,FBDECT_FritzBox_17 on)
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 15:09:27
Ups, das ging fix! Danke!

Dabei bekomme ich jedoch folgende Fehlermeldung:

SZ.LampenMitFernseher DOIF: no right bracket: (set FBDECT_FritzBox_19 off
Unknown argument on), choose one of msgInterval off on on-for-timer on-till off-for-timer on-till-overnight blink toggle off-till-overnight intervals off-till
Unknown argument on), choose one of msgInterval off on on-for-timer on-till off-for-timer on-till-overnight blink toggle off-till-overnight intervals off-till

Grüße Kai-Uwe
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Dietmar63 am 09 Dezember 2015, 15:33:15
Inwiefern das mit DOIF wie zu machen ist kann ich dir nicht sagen, aber das Problem ist dass viele unabhängige Ereignisse das Schalten beeinflussen können - nicht ganz so einfach zu lösen.

Es ist sehrwohl mit notifys ... möglich.
Du musst alle möglichen Ereignise auf einen Handler(Perlfunktion) umlenken.

Etwa so:

... notify1 {meinFunktionsHandler()}
... notify2 {meinFunktionsHandler()}
... notify3 {meinFunktionsHandler()}


in meinFunktionsHandler() musst du dann sämtliche Bedingungen nochmals prüfen und ggf. schalten.
Das Ganze ist dann sehr leicht durch weitere Ereignisse erweiterbar.
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: igami am 09 Dezember 2015, 15:34:38
Bei DOIF werden FHEM Befehle mit , (Komma) getrennt, wenn diese als Trennzeichen zwischen Devices verwendet werden muss damit speziell umgegangen werden. Näheres dazu liefert die deutsche Commandref.
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 15:38:56
Äh,...Ja...Ok...

Das sprengt dann mein Wissen um längen. Sorry!
Geht's nicht einfacher? :-(
Ich bin absolut kein "Coder" Perl etc. sind für mich absolute "Fremdsprachen". :-)

Wenn ich mir das im WiKi ansehe muss

SZ.Harmony.currentActivity:.starting.Fernsehen DOIF([Lichtwetter_sr_weather]>5)
(set FBDECT_FritzBox_19 off;set FBDECT_FritzBox_16,FBDECT_FritzBox_17 on)

eigentlich aber richtig sein....

????

Grüße Kai-Uwe

Grüße Kai-Uwe
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 16:07:40
So,

ich habe nun mal das hier getestet:

([SZ.Harmony.currentActivity] eq ".starting.Fernsehen" and [?LichtWetter_sr]>5) (set FBDECT_FritzBox_19 off) DOELSE set FBDECT_FritzBox_16,FBDECT_FritzBox_17 on)

Dabei tut sich dann gar nichts mehr. Kann es sein das bei "[?LichtWetter_sr]>5" schon etwas falsch ist?

Grüße Kai-Uwe
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ma_Bo am 09 Dezember 2015, 16:13:00
Hallo Kai-Uwe versuch mal mit einem notify und IF abfrage, das funktioniert bei mir :

SZ.Harmony.currentActivity:.starting.Fernsehen IF ([Lichtwetter_sr_weather]>5) (set FBDECT_FritzBox_19 off,set FBDECT_FritzBox_16 on,set FBDECT_FritzBox_17 on)

Hierbei wird bei deinem alten notify, beim auslösen. überprüft ob die Helligkeit größer 5 ist und dann set FBDECT_FritzBox_19 off,set FBDECT_FritzBox_16 on,set FBDECT_FritzBox_17 on ausgeführt. Die Befehle werden aber ausgeführt ohne das überprüft wird, ob die Lampen an sind oder nicht, dazu müsste man dein notify noch weiter ändern.
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 16:22:31
Hi,

auch da tut sich dann leider gar nichts mehr.

Sobald wieder nur

"SZ.Harmony.currentActivity:.starting.Fernsehen set FBDECT_FritzBox_19 off;set FBDECT_FritzBox_16,FBDECT_FritzBox_17 on"

im Notify steht läuft es. Aber eben unabhängig vom Tageslicht. Habe auch mal testweise das > in ein < geändert ebenso Lichtwetter in LichtWetter. Ohne Erfolg.

Grüße Kai-Uwe
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ma_Bo am 09 Dezember 2015, 16:29:01
in welchem reading von Lichtwetter_sr_weather steht denn die 5 bzw. der Lichtwert ?
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 16:34:46
Die "5" ist nur ein Testwert den ich mal eingegeben habe. Wenn das funktioniert soll da der wert rein der von der Helligkeit her am besten passt. Oder mach ich da schon/auch den "mega Denkfehler"? Die Datei mit den Readings habe ich im ersten Posting mit drangehängt gehabt. Ich meine das steht bei "state"? Da steht jetzt gerade um diese Zeit eine Wert von "9" drin. Ist ja auch dunkel draußen :-)

Wenn das Case Sensitive ist muss das aber auch LichtWetter und nicht Lichtwetter heissen :-)

Grüße Kai-Uwe, der gerade positiv überrascht ist wie viel und wie schnell versucht wird zu helfen! Danke!
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ma_Bo am 09 Dezember 2015, 16:46:46
Was ist Lichtwetter oder LichtWetter, denn für ein device ? ein dummy ?
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 16:50:53
Äh... Das wurde mit der Installation von Twilight automatisch mit angelegt. Steht bei mir unter Twilight. Wie kann ich das rausbekommen?

Grüße Kai-Uwe


Gesendet von iPad mit Tapatalk
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ma_Bo am 09 Dezember 2015, 17:00:00
Somit steht dein wert also im reading "light" von twilight.

Dann ändere mal das notify in

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

oder zum testen legst du dir einen dummy an z.B. :

define LichtWetterDummy dummy
set LichtWetterDummy 4

dann machst du dieses notify :

define LichtWetterDummy_n notify SZ.Harmony.currentActivity:.starting.Fernsehen IF ([LichtWetterDummy]>5) (set FBDECT_FritzBox_19 off,set FBDECT_FritzBox_16 on,set FBDECT_FritzBox_17 on)

jetzt kannst du mit set LichtWetterDummy 6 den Wert verändern und schauen ob beim auslösen dein notify funktioniert.
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ma_Bo am 09 Dezember 2015, 17:04:44
es müsste aber <5 heissen, da der wert vom twilight Modul ja niedriger wird, sobald es dunkler wird
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 17:08:16
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.
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 09 Dezember 2015, 17:11:29
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
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 11 Dezember 2015, 17:29:09
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
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ellert am 11 Dezember 2015, 19:14:29
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 (http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668)
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Kai-Uwe am 12 Dezember 2015, 13:37:00
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
Titel: Antw:Logitech Harmony, Twilight und DOIF
Beitrag von: Ellert am 12 Dezember 2015, 17:15:24
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.