Hallo!
Ich habe mittlerweile meine Anwesenheitserkennung per WLAN realisiert, dabei gab es bei mir das Problem, dass sporadisch die Funktion sh.tools.ping() false lieferte, obwohl das Gerät im Netz aktiv war.
Gelöst hab ich das indem ich den aktuellen Wert abfrage und beim Wechsel von An- zu Abwesenheit den Ping mit einer kurzen Pause nochmal ausführe, beim Großteil der Wiederholungen kommt die Antwort dann beim 2. Versuch, spätestens jedoch beim 3. Versuch (ausser man ist natürlich wirklich weg).
Zusätzlich wird noch eine Statusnachricht verschickt, wenn der letzte das Haus verläßt und noch Licht an oder die Fenster auf sind (Auszug).
Die IP und Rufnummern hab ich in der items.conf hinterlegt. Wir nutzen ausschliesslich Telefone mit Android, ich habe gelesen, dass das Ganze mit Iphones nicht funktioniert, da diese im Standby das WLAN (zwischenzeitlich) deaktivieren, müsste man halt probieren.
Bei mir funktioniert es damit sehr gut, vielleicht hilft es ja noch jemanden.
Grüße
David
Grüße
David
Ich habe mittlerweile meine Anwesenheitserkennung per WLAN realisiert, dabei gab es bei mir das Problem, dass sporadisch die Funktion sh.tools.ping() false lieferte, obwohl das Gerät im Netz aktiv war.
Gelöst hab ich das indem ich den aktuellen Wert abfrage und beim Wechsel von An- zu Abwesenheit den Ping mit einer kurzen Pause nochmal ausführe, beim Großteil der Wiederholungen kommt die Antwort dann beim 2. Versuch, spätestens jedoch beim 3. Versuch (ausser man ist natürlich wirklich weg).
Zusätzlich wird noch eine Statusnachricht verschickt, wenn der letzte das Haus verläßt und noch Licht an oder die Fenster auf sind (Auszug).
Die IP und Rufnummern hab ich in der items.conf hinterlegt. Wir nutzen ausschliesslich Telefone mit Android, ich habe gelesen, dass das Ganze mit Iphones nicht funktioniert, da diese im Standby das WLAN (zwischenzeitlich) deaktivieren, müsste man halt probieren.
Bei mir funktioniert es damit sehr gut, vielleicht hilft es ja noch jemanden.
Grüße
David
Code:
#!/usr/bin/env python3 #Statusnachricht zusammensetzen def statusmessage(sh): antwort = "" if sh.Fenster() == 1: antwort += "Fenster offen, " if sh.Licht() == 1: antwort += "Licht an, " return antwort; pingCarla = sh.tools.ping(sh.Anwesenheit.Carla.ip()) #Carla war da und ist jetzt weg if sh.Anwesenheit.Carla() == 1 and pingCarla == 0: i = 0 while i <= 3: pingCarla = sh.tools.ping(sh.Anwesenheit.Carla.ip()) logger.info("Ping Carla {0}/3 - result {1}.".format(i, pingCarla )) if pingCarla == 1: logger.warn("Ping Carla {0}/3 - result {1}.".format(i, pingCarla )) break else: i = i + 1 time.sleep(5) sh.Anwesenheit.Carla(pingCarla ) if pingCarla == 0: logger.warn("Carla war da und ist jetzt weg.") #wenn Carla als letztes geht, #Warnung verschicken, bei offenen Fenster bzw Licht an message = statusmessage(sh) if sh.Anwesenheit() == 0 and message != "": #Alarm Meldung per Whatsapp absetzen sh.whatsapp(message, sh.Anwesenheit.Carla.whatsapp())
David
Kommentar