Hallo an alle,
ich wollte meine Anwesenheitserkennung ein wenig ausbauen und möchte folgendes machen:
- alle Bewohner müssen mindestens 1 Stunde nicht mehr zuhause sein (Residents Modul).
Wenn dann ein Bewohner in den wayhome status wechselt (wiederum abzufragen über Residents), sollen gewisse Sachen geschalten werden.
Unten mal der Code den ich mir ausgedacht hatte. Mir kommt es aber so vor, dass ich innerhalb eines "define" keinen anderen "define" machen kann - ist das so?
Wenn ja, wie könnte man so etwas lösen?
define watchdog_Anwesenheit watchdog rgr_Residents:absent 01:00 rgr_Residents:present {\
fhem ("set pushmsg msg 'FHEM' 'Watchdog angeloffen'");;\
define checkWayHome at +*00:01:00 {\
if(ReadingsVal("rgr_Residents","residentsTotalWayhome","0") ne "0"){\
fhem ("set Wz.FritzSofalampe on");;\
fhem ("set pushmsg msg 'FHEM' 'Someone is coming home after absence of 2 minutes...'");;\
}\
}\
fhem ("setstate watchdog_Anwesenheit defined");;\
}
Danke
Ingo
Hallo,
innerhalb eines define ein define definieren ist aber kein Hexenwerk ;)
fhem ("define EG_Eingang_Licht_aussen_aus at +00:02:30 set EG_Eingang_Licht_aussen off");
Grüße
Edith: Sorry aber das wäre etwas für Anfängerfragen :P
Edith2: Grad gesehen - ist aber auch kein Problem. Du kannst in dem at ein Makro triggern.
Sprich deinen Code aus dem define - at
if(ReadingsVal("rgr_Residents","residentsTotalWayhome","0") ne "0"){\
fhem ("set Wz.FritzSofalampe on");;\
fhem ("set pushmsg msg 'FHEM' 'Someone is coming home after absence of 2 minutes...'");;\
}\
in ein notify packen und das at das notify triggern lassen - eben als Macro
Edith: Grad umgebaut.
define watchdog_Anwesenheit watchdog rgr_Residents:absent 01:00 rgr_Residents:present {
fhem ("set pushmsg msg 'FHEM' 'Watchdog angeloffen'");
fhem("define checkWayHome at +*00:01:00 trigger n_check_Wayhome");
fhem ("setstate watchdog_Anwesenheit defined");
}
define n_check_Wayhome notify n_check_Wayhome {
if(ReadingsVal("rgr_Residents","residentsTotalWayhome","0") ne "0"){
fhem ("set Wz.FritzSofalampe on");
fhem ("set pushmsg msg 'FHEM' 'Someone is coming home after absence of 2 minutes...'");
}
}
Ich hoff es sind nicht allzuviele Fehler drinnen.
Meine Codes gehören NICHT in die fhem.cfg - ich bearbeite meine Konfig ausschlieslich per Befehlszeile und DEF.
Allfällige Fehlermeldungen bitte hier posten.
Hi,
ja, vielleicht auch ne Anfängerfrage ;-)
Hab mal versucht deine Kommentare umzusetzen, danke dafür!
define watchdog_Anwesenheit watchdog rgr_Residents:absent 00:02 rgr_Residents:present {\
fhem ("set pushmsgIngo msg 'FHEM' 'Watchdog angeloffen'");;\
fhem("trigger ONOFF_Anwesenheit");;\
fhem ("setstate watchdog_Anwesenheit defined");;\
}
define ONOFF_Anwesenheit dummy
define NTFY_Watchdog_Anwesenheit notify ONOFF_Anwesenheit{\
if(ReadingsVal("rgr_Residents","residentsTotalWayhome","0") ne "0"){\
fhem ("set Wz.FritzSofalampe on");;\
fhem ("set pushmsgIngo msg 'FHEM' 'Someone is coming home after absence of 2 minutes...'");;\
}\
}
In der Hoffnung es richtig verstanden zu haben... :-)
Allerdings greift der notify nicht. Wann spricht den der watchdog an? Nur einmal, wenn die Zeit von 2 Minuten erreicht ist?
Wenn dem so wäre, ist das natürlich blöd, weil ich da ja vielleicht noch nicht im Status "wahome" bin .
Ingo
So, etz hatte ich deinen letzten Edit nicht gelsen, sorry. Nochmal anschauen...
Ok, hab mir deinen code jetzt nochmal angeschaut und - hoffe ich - :o verstanden.
Soo falsch lag ich ja gar nicht :-)
Was jetzt natürlich passiert ist, dass wenn ich mich im Status "wayhome" befinde, er jede Minute den notify ausführt.
Das sollte er natürlich nur einmal machen - will damit mal kurz den Boost Modus der Heizung schalten und vielleicht die Beleuchtung an der Haustür schalten.
Kann ich ihm irgendwie mitgeben, dass er das nur einmal erfolgreich ausführt und dann den at wieder zurücksetzen?
Noch was anderes:
Ich komme aus einer anderen Programmierwelt, bei uns sind so zeitgesteurte minütlichen Routinen nicht ganz so gern gesehen, weil es viel performance schluckt.
Wie ist das bei fhem, wenn er minütlich etwas überprüft? Ist das auf dauer gut?
Danke, Ingo
Hallo,
es macht perfomancetechnische wenig Sinn jede Minute auf ein Ereigniss zu prüfen das nur einige Male pro Tag eintrifft.
Schlauer ist natürlich per notify direkt auf das eintreten des Events zu reagieren.
Grüße
Hi,
Das heisst ich würde anstatt dem at einen notify einbauen, der dann "rgr_Residents" abfrägt, ob "residentsTotalWayhome" grösser 0 ist.
Und da waren sie wieder die Anfängerfragen...wie ist denn dafür die Notation?
Denn State abzufragen versteh ich, aber ein anderes Reading in einem Notify?
Ingo
Abschliessend hierzu vielleicht nochmal ein Kommentar zwecks Automatisierung:
Der Code klappt soweit wunderbar.
Das grössere Problem ist, dass die iPhone Geofency App nicht zuverlässig meldet, dass ich "wayhome" bin.
Das macht das Ganze zum Killerfeature...
Mag durchaus sein, dass es auf dem weg zu mir nach Hause an Empfang usw. hängt...
In Großstädten geht die app fast auf den Meter genau...