Hauptmenü

Anwesenheitsüberwachung

Begonnen von crossbike0815, 30 November 2016, 13:26:01

Vorheriges Thema - Nächstes Thema

crossbike0815

Hallo,
mein erstes Projekt war eine Anwesenheitsüberwachung und den Code habe ich aus einer Raspberry-Zeitschrift. Das funktioniert auch hervorragend und ich habe mir für jedes Familienmitglied jeweils eine Pushnachricht schicken lassen können, wenn er das Haus verläßt/nach Hause kommt.
Jetzt wollte ich die einzelnen Personen zusammenfassen und das Beispielskript hat dafür eine Familie definiert, die auch korrekt funktioniert:

define Familie RESIDENTS
attr Familie alias Residents
attr Familie devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home .*:user_unknown:home
attr Familie group Home State
attr Familie icon control_building_filled
attr Familie room Residents
attr Familie webCmd state

Jetzt möchte ich mir bei jeder Statusänderung von "Familie" eine Push schicken lassen. Mein erster Versuch über NOTIFY sah so aus:

define HomeEvent notify Familie { if ([Familie:state] eq "home") {fhem ("set pushmsg msg 'FHEM' 'Jemand zu Hause'")} elsif ([Familie:state] eq "gone") {fhem ("set pushmsg msg 'FHEM' 'Alle unterwegs'")}}

Das hat leider dazu geführt, dass nach einer Statusänderung massenhaft Pushes gesendet wurden. Also hab ich es alternativ über DOIF gemacht:

define KeinerDaEvent DOIF ( if ([Familie:state] eq "home") {fhem ("set pushmsg msg 'FHEM' 'Jemand zu Hause'")} elsif ([Familie:state] eq "gone") {fhem ("set pushmsg msg 'FHEM' 'Alle unterwegs'")})

Das funktioniert fast, denn leider schickt er auch eine Push, wenn der State auf home gesetzt wird aber vorher auch schon auf home stand. Also nicht allein beim ersten, der nach Hause kam, sondern bei jedem.

Wie kann ich das so setzen, dass es tatsächlich nur bei einer Statusänderung greift?

bomi

Hallo.

Ich weiß zwar nicht ob es daran liegt, aber ich würde mal mit der aufgeräumten DOIF-Version probieren.

define KeinerDaEvent DOIF ([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause') DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs')

Gruß

crossbike0815

Hallo Bomi,

danke, das hat schon mal funktioniert. Jetzt wollte ich aber weitermachen und bei den beiden Bedingungen nicht nur eine Push schicken, sondern auch ein GetHTTPFile aufrufen (was mit dem DOIF wie in meinem ersten Post auch lief, ich aber der Übersicht halber rausgenommen hatte  :o).

So sieht mein DEF aus: ([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause') DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs'";GetHttpFile("192.168.178.35:80", "/heizung_aus.php"))

FHEM meckert aber:     
set pushmsg msg 'FHEM' 'Alle unterwegs'";GetHttpFile("192.168.178.35:80", "/heizung_aus.php"): Syntax: pushmsg msg ['<title>'] '<msg>' ['<device>' <priority> '<sound>' [<retry> <expire> ['<url_title>' '<action>']]] Unknown command GetHttpFile("192.168.178.35:80",, try help.

Bin verwirrt von der Klammersetzung...






Otto123

Zitat von: crossbike0815 am 30 November 2016, 13:26:01
Wie kann ich das so setzen, dass es tatsächlich nur bei einer Statusänderung greift?
Hi,

event-on-change-reading wäre ein Stichwort  ;)

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

bomi

Im DOIF Modul werden die einzelnen Befehle mit Komma und nicht mit Semikolon getrennt.
Wenn du im Befehl ein Komma hast musst diesen Befehl nochmal in Klammern packen.
Probiers mal so:
(set pushmsg msg 'FHEM' 'Alle unterwegs', (GetHttpFile("192.168.178.35:80", "/heizung_aus.php")))

Otto123

Zitat von: bomi am 30 November 2016, 17:01:14
(GetHttpFile("192.168.178.35:80", "/heizung_aus.php"))
Was soll das werden? --> http://fhem.de/commandref_DE.html#command
Falls es den Befehl GetHttpFile aus Systemebene gibt, könnte es so gehen:
"GetHttpFile('192.168.178.35:80', '/heizung_aus.php')"

Gut ist das nicht, siehe hier -> https://forum.fhem.de/index.php?topic=39124.0

Im übrigen sind die Code tags über den Smilies mit der # Taste zu erreichen

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

crossbike0815

Danke für die vorherigen Tips. habe es jetzt wie von Otto geschrieben ausprobiert und sehe zumindestens bei den Readings keinen Fehler mehr angezeigt bekommen. Dafür allerdings dann im Logfile, wobei das wirklich sehr nichtssagend ist für mich:

sh: 1: Syntax error: word unexpected (expecting ")")

Das ist jetzt mein aktueller Code:

([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause') DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs',"GetHttpFile('192.168.178.35:80', '/heizung_aus.php')")

crossbike0815

So, Lösung gefunden. Statt Anführungszeichen oder runden Klammern müssen es geschweifte Klammern sein:

([Familie] eq "home") (set pushmsg msg 'FHEM' 'Jemand zu Hause',{GetHttpFile('192.168.178.35:80', '/heizung_an.php')}) DOELSEIF ([Familie] eq "gone") (set pushmsg msg 'FHEM' 'Alle unterwegs',{GetHttpFile('192.168.178.35:80', '/heizung_aus.php')})