Notify, DOIF, PRESENCE oder wie? Keine Ahnung!

Begonnen von rhrawr, 29 Juli 2015, 21:33:32

Vorheriges Thema - Nächstes Thema

rhrawr

Hallo zusammen!

Nun gebe ich nach vielem Lesen auch mal meinen Einstand im Forum. Natürlich direkt mal mit einem Problem.

Seit 4 Tagen läuft bei mir Zuhause ein Raspberry Pi mit fhem und ich probiere seitdem verschiedene Dinge mit den vorhandenen HUE's und dem HarmonyHub aus. Doch nun bin ich mit den Nerven langsam am Ende. Bin wie gesagt absoluter Neuling auf dem Gebiet und seit 4 Tagen schaffe ich es nicht, einen gewissen Ablauf zu generieren und scheitere über verschiedenste Lösungswege immer wieder kläglich. Notify, at, DOIF, etc...ich weiß nicht mehr weiter, nichts möchte so richtig und mir raucht der Kopf.

Vielleicht zunächst die allgemeine Frage, wie ich mein Vorhaben in fhem am besten Umsetze? Vielleicht gehe ich ja da bereits völlig falsch vor.

Meine Geräte werden über PRESENCE gepingt und in einer structure zusammengefasst. Klappt auch wunderbar, keine Probleme. Über notify klappt es auch, dass bei Änderung des Status von absent auf present eine bestimmte Aktion ausgeführt wird (in meinem Fall eine Lightscene) bzw. bei Abwesenheit alle Geräte, auch alle Verbraucher über die scene ausgeschaltet werden.

define ZuHause notify
AlleHandys:present set Media scene LichtNachmittag

define Unterwegs notify
AlleHandys:absent set Media scene AllesAus


Reicht mir aber nicht. Ich möchte das verschiedene Aktionen (Lightscenes) zu verschiedenen Zeiten (fest definiert), nicht nur, wenn PRESENCE von absent auf present springt, sondern auch, wenn bereits eine Lightscene aktiv ist. Komme ich z.B. um 18 Uhr nach Hause, aktiviert sich Scene1. Komme ich erst um 19 Uhr nach Hause, aktiviert sich Scene2. Bin ich aber um 18 Uhr zu Hause gewesen, soll um 19 Uhr trotzdem Scene2 beginnen. Mit welchen commandrefs setze ich dies am einfachsten und sinnvollsten um? Hatte mich heute ins Thema DOIF eingelsen und da mal was probiert, aber auch hier ohne Erfolg.

define Zuhause DOIF ([18:30-20:00] and [AlleHandys:present]) (set Media scene LichtAbend1)
DOELSE ([20:00-22:00] and [AlleHandys:present]) (set Media scene LichtAbend2)
DOELSE ([22:00-00:00] and [AlleHandys:present]) (set Media scene LichtAbend3)


Hoffentlich könnt ihr damit was anfangen. Bin über jeden Tipp dankbar.
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

Otto123

Hi,

Du hast das mit dem DOIF nicht richtig verstanden: DOELSEIF DOELSEIF DOELSEIF .... kannst Du machen DOELSE nur einmal am Ende!
Steht ganz oben im Abschnitt der Commandref  8)
ZitatSyntax:

define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rhrawr

Achso...dachte ich könnte mehrere "Befehle" damit abfragen bzw. ausführen.

Ich habe es jetzt erstmal wieder über watchdogs gelöst.

define Unterwegs watchdog AlleHandys:absent 00:01 AlleHandys:present set Media scene AllesAus ;; setstate Zuhause defined
define Zuhause watchdog AlleHandys:present 00:00 AlleHandys:absent set Media scene Zuhause ;; setstate Zuhause defined


Nun möchte ich da allerdings noch einen Zeitraum festlegen. Also der watchdog Zuhause sollte nur auslösen, wenn es z.B. zwischen 18:00 und 23:00 Uhr ist. Wie wäre da nun der eleganteste Weg, das umzusetzen? Ich brauch nicht unbedingt einen geschriebenen Code, nur bitte erstmal die Info wie ich am besten vorgehe.
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

Brockmann

Zitat von: rhrawr am 30 Juli 2015, 13:53:23
Achso...dachte ich könnte mehrere "Befehle" damit abfragen bzw. ausführen.
Kannst Du ja auch. Nur dann musst Du für die weiteren Befehle DOELSEIF verwenden. DOELSE kannst Du in jedem DOIF nur einmal am Ende und dann ohne Bedingung verwenden.
Im Prinzip war Dein DOIF schon richtig, nur müsste es so lauten:


define Zuhause DOIF ([18:30-20:00] and [AlleHandys:present]) (set Media scene LichtAbend1)
DOELSEIF ([20:00-22:00] and [AlleHandys:present]) (set Media scene LichtAbend2)
DOELSEIF ([22:00-00:00] and [AlleHandys:present]) (set Media scene LichtAbend3)
DOELSE (setMedia scene AllesAus) (oder was weiß ich, damit um 0.00 Uhr ausgeschaltet wird)


Das DOELSE am Ende ist optional, Du kannst es also auch weglassen, wenn Du es nicht brauchst.

Otto123

Habe ich das jetzt so schlecht geschrieben?   :o
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rhrawr

Danke, euch beiden. Werde es nochmals testen, wenn ich daheim bin.

Nein, Otto. Eigentlich nicht. Ich war nur zu schnell und habe nicht richtig gelesen.  ::) 8)
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

VB90

meine Erfahrung ganz allgemein:
ob notify, doif oder was auch sonst ist am Ende wahrscheinlich ne Glaubensfrage.
Niemand macht es richtig richtig oder falsch weil er das eine oder das andere einsetzt.

Egal was, man bekommt es gelöst.

Ich denke, man sollte - um keinen Knoten im Kopf zu bekommen - sich jedoch für einen, "seinen", Weg entscheiden.

Nachdem ich auf DOIF gestossen bin und es meine verstanden zu haben, habe ich fast alle notifys nach und nach entsorgt.
Neues wird nur noch mittels DOIF geregelt.

zu deinem Problem speziell:
Ich würde es - für die Übersicht -vielleicht auftrennen.
Gerade am Anfang ist meiner Erfahrung nach wichtig, kleine Schritte zu machen.

Also erstmal schauen das Scene 1 um 18:00 klappt.
Danach ein zweites DOIF was um 19:00 schaut, ob jemand da ist und Scene2 aktiviert.

Klar kann man alles in eins schreiben, aber wenn man nah nem halben Jahr nicht mehr recht nachvollziehen kann, warum und wieso es so gemacht wurde, bringt es einen auch nicht weiter.
Wie gesagt, grade am Anfang ist alles bischen schwerer.
Unter dem Strich macht es rein technisch keinen Unterschied, ob da ein, zwei oder drei DOIF involviert sind...

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

rhrawr

#7
Hallo vb,

du hast schon recht. Obwohl ich erst wenige Tage in der Thematik bin, habe ich festgestellt, dass oft viele Wege nach Rom führen. Sicherlich ist es auch eine Glaubens- oder Geschmacksfrage auf welche Art man die Dinge steuert.

Ich habe deinen Rat befolgt und mal versucht, mit nur der ersten "Regel" zu arbeiten, weil ...

define Zuhause DOIF ([18:30-20:00] and [AlleHandys:present]) (set Media scene LichtAbend1) DOELSEIF ([20:00-22:00] and [AlleHandys:present]) (set Media scene LichtAbend2) DOELSEIF ([22:00-03:00] and [AlleHandys:present]) (set Media scene LichtAbend3) DOELSE (set Media scene AllesAus)

...leider nicht funktioniert. Also habe ich nur den DOIF und den DOELSE verwendet, aber selbst da regt sich nichts.

define Zuhause DOIF ([18:30-20:00] and [AlleHandys:present]) (set Media scene LichtAbend1) DOELSE (set Media scene AllesAus)

Verstehe es nicht. AlleHandys spring auf present, aber nix geht. Im Log steht:

Zuhause: reading does not exist: [AlleHandys:present]

Veraltete Module schließe ich aus, da ich jeden Tag ein Update gemacht habe. Irgendwie scheint er mit der Abfrage der PRESENCE was nicht zu mögen.
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

VB90

versuch mal:

[AlleHandys:state] eq "present"

der Rest wie gehabt

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

rhrawr

#9
Und genau da lag der Fehler! Jetzt akzeptiert er auch mein DOIF mit den drei DOELSEIF.
Recht herzlichen Dank, vb!

Ich werde jetzt versuchen, über Twilight die drei Lichtszenen je nach zu aktiveren.
Also den Zeitaktor durch einen Twilightaktor zu ersetzen. So bin ich nicht an feste Zeiten gebunden.
Ich mach mich mal ran. Danke nochmal.

Edit:
Hatte ein Problem, dass zwischen den Aktoren die Szene kurz eingeleitet und dann direkt der DOELSE ausgelöst wurde. Habe am Ende dem DOELSE noch mit einem Zeitraum definiert, so funktioniert es tadellos. Vielleicht nur als Tipp, falls jemand ähnliches macht.

define Zuhause DOIF ([18:00-20:00] and [AlleHandys:state] eq "present") (set Media scene LichtAbend1) DOELSEIF ([20:00-22:00] and [AlleHandys:state] eq "present") (set Media scene LichtAbend2) DOELSEIF ([22:00-00:00] and [AlleHandys:state] eq "present") (set Media scene LichtAbend3) DOELSE ([18:00-00:00] and [AlleHandys:state] eq "absent") (set Media scene LichtAus)
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

Brockmann

Zitat von: rhrawr am 30 Juli 2015, 20:35:48
Hatte ein Problem, dass zwischen den Aktoren die Szene kurz eingeleitet und dann direkt der DOELSE ausgelöst wurde. Habe am Ende dem DOELSE noch mit einem Zeitraum definiert, so funktioniert es tadellos. Vielleicht nur als Tipp, falls jemand ähnliches macht.
Nochmal: Bei einem DOELSE kann man keine Bedingung angeben. DOELSE bedeutet "wenn keine der definierten Bedingungen zutrifft".

Hinweis: Wenn bei einem DOIF etwas nicht wie erwartet funktioniert, machst Du am Besten in der Situation ein list <Name des DOIFs> und postest das Ergebnis hier. Da steht dann alles drin, was andere zu dem DOIF wissen müssen, um Dir ggf. helfen zu können. Dass beim Szenenwechsel ein DOELSE ausgelöst wird, könnte mit den Timern zutun haben, die das DOIF für die verschiedenen Zeiträume einrichtet. Das könnte man beispielsweise in diesem list sehen.

rhrawr

#11
Jetzt verstehe ich. Keine Bedingung im DOELSE erlaubt. Trifft also keine meiner zeitlich begrenzten Bedingungen zu, würde immer DOELSE ausgeführt werden.

Ist jemand um z.B. 15 Uhr bei mir und guckt Fernsehen, knallt DOELSE ja ständig alles wieder aus, weil keine Bedingung erfüllt wird. So war mein Gedankengang. Das war der Hintergrund, warum ich die Bedingung eingebaut hatte. Nur zur Erklärung.

Dies müsse sich ja aber wie folgt verhindern lassen können:
define Zuhause DOIF ([00:00-18:00] and [AlleHandys:state] eq "present") (set irgendwas, keine Ahnung) DOELSEIF ([18:00-20:00] and [AlleHandys:state] eq "present") (set Media scene LichtAbend1) DOELSEIF ([20:00-22:00] and [AlleHandys:state] eq "present") (set Media scene LichtAbend2) DOELSEIF ([22:00-00:00] and [AlleHandys:state] eq "present") (set Media scene LichtAbend3) DOELSE (set Media scene AllesAus)

Oder wird DOELSE nur ausgeführt, wenn in dem vorherig definierten Bedingungbereich keine Bedingung zutrifft? Das habe ich noch nicht ganz verstanden.
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

Otto123

DOELSE einmal am Ende! Also kein DOELSEIF hinter DOELSE.

Bitte lies doch wenigsten die erste Seite der zugehörigen Commandref http://fhem.de/commandref_DE.html#DOIF

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rhrawr

Das DOELSE war jetzt nur ein Flüchtigkeitsfehler beim Eintippen, alles gut.
Danke trotzdem für den Hinweis. Habe es mal oben korrigiert.
Raspberry Pi 3 als FHEM-Server (Homematic, Philips Hue, Z-Wave, Logitech Harmony)
Raspberry Pi 2 als TV-Ambilight
Fritz!Box 6490 Cable

Otto123

Wenn ich das jetzt richtig verstehe, machst Du am Anfang ein Dummy DOIF um das DOELSE am Ende zu rechtfertigen.
Wie gesagt, DOELSE muss nicht sein.
Beginne doch einfach damit wenn keiner da dann alles aus:
define Zuhause DOIF ([AlleHandys:state] eq "absent")   (set Media scene AllesAus)
Und dann die DOELSEIF <wenn Zeitraum und einer da dann>

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz