Anwesendheitserkennung in einem Raum per Bewegungssensor

Begonnen von marko1420, 11 Juni 2015, 01:34:34

Vorheriges Thema - Nächstes Thema

Rince

Oh, dann ist es eher easy. Warum machst du kein "presence" auf die Geräte?
Solange du sie brav aus machst, ist das durchaus zuverlässig.

Wenn dein TV keinen Netzwerkanschluss hat, käme eine Steckdose mit Leistungsmessung in betracht. Auch am PC, wenn Downloads länger brauchen (aber hoffentlich der Monitor aus ist).

So könntest du auch die Glotze aus machen, wenn du davor einschläfst...
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

marko1420

Hallo Rince

Ich schalte kein Gerät aus wenn ich aus dem Zimmer gehe sondern erwarte das dies FHEM nach 30 min.  für mich erledigt.
Funktioniert ja auch gut.

Mein Problem ist der Bewegungssensor der vermutet ich wäre nicht im Zimmer solange ich mich nicht nennenswert bewege.

Angesprochen wurde Präsenzmelder, ist aber zu teuer.
Ich versuche einen "Präsenzmelder" preisgünstig hin zu bekommen.

Aber Danke.

Marko


justme1968

#18
genau. das ist die einzige methode die zuverlässigkeit verspricht und neben bei auch noch eine personen erkennung bietet.

der einzige nachteil ist die viel reichweite. also gleich konsequent in die fußsohlen implantieren und die empfänger in den estrich zu beiden seiten jeder tür.

das sollte eine ziemlich perfekte lösung ergeben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Rince

@marko1420

Für deinen Desktop PC dürfte es ziemlich gut machbar sein. Ne WebCam hast du?
Dann OpenCV drauf (ok, das dauert etwas) und ein kleines bisserl FaceDetection skripten. Kann ich versuchen zu machen, wird aber ein bisserl dauern (Sommer). Ich übernehme auch keine Garantie, dass es läuft. Aber prinzipiell interessiert es mich selber ;)

Dann lassen wir, statt einer grafischen Anzeige, einfach auf deinen fhem Rechner nen Dummy setzen, von wegen "no_face_detected" oder "face_detected".
Das machen wir z.b. alle 60 Sekunden. Sollte locker ausreichen, um 30 Minuten Dauerabwesenheit zu erkennen und ggfs. false positives rauszufiltern. Damit halten wir auch die CPU Last sehr gering.

Ein kleines config Skript dazu, fertig.
IP-Adresse vom fhem Rechner
Namen vom Dummy
Zeitintervall
Parameter (FaceDetection-spezifisch, damit kann man ggfs. etwas spielen)
Grafik ja/nein (also WebCam Bild mit Gesicht)
Kamera (wenn mehr da sind, welche wir nehmen sollen; vermutlich wird sie fürs erste quasi dauerhaft blockiert)

Die restliche Auswertung machen wir dann in fhem direkt. Dann brauche ich keinen fehleranfälligen Programmcode schreiben, und du kannst selber entscheiden, was fhem tut, wenn du weg bist (und z.B. die Netzwerkkarte hochgradig aktiv ist. weil der Download länger dauert)


Für den Fernseher brauchen wir allerdings was anderes, da wird das so nicht funktionieren...



Die Frage geht jetzt an dich, ob du das ausprobieren willst.
OpenCV installieren, 3rd Party Software installieren (Python, Numpy, Matplotlib)

Ich teste die Installation bei mir durch, dann bekommst du eine Step by Step Anleitung.


Wenn dir das den Aufwand wert ist, legen wir los.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Prof. Dr. Peter Henning

Das wird so nicht gut funktionieren. Denn wenn er sich hinlegt und den Kopf zur Seite dreht => Keine Anwesenheit...

Der Ansatz ist also den Aufwand _nicht_ wert.

Ich denke, man sollte hier einen Zustandsautomaten bauen, der mit einer Vielzahl von Sensoren arbeiten kann, die sich gegenseitig korrigieren. Beispielsweise kann der Event "Fernseher geht an" verwendet werden, um den Status auf "anwesend" zu stellen, falls das noch nicht geschehen ist (z.B. wegen fehlerhafter Detektion des Tierchips ...).

LG

pah


Rince

Zitat von: pahDas wird so nicht gut funktionieren. Denn wenn er sich hinlegt und den Kopf zur Seite dreht => Keine Anwesenheit...
Zitat von: RinceFür den Fernseher brauchen wir allerdings was anderes, da wird das so nicht funktionieren...

Ja, und? Das schrieb ich bereits.
Für die PC Erkennung sind es ca. 100 Zeilen Python Skript... Das meiste ist schon fertig, 0815...
Wenn er vor dem PC in der horizontalen schläft, weiß ich allerdings auch nicht weiter ;)
Die OpenCV default hog human detection method ist mir bis jetzt fremd, und vermutlich ist es ein ziemlicher Aufwand sie zu integrieren.


Zitat von: pahDer Ansatz ist also den Aufwand _nicht_ wert.
Nur für die PC Anwesenheit mag es ein leichter Overkill sein. Andererseits schwebt mir da schon mehr vor. Wenn die FaceDetection klappt, können wir im nächsten Schritt ne Kaskade für FaceRecognition bauen. Damit weiß die Automatisierung dann gleich, wer vor dem PC sitzt. Das könnte man dann genauso gut auf die Kamera vor der Haustür loslassen...

Spannend wird es auch, wenn mehr Leute zu Hause sind und anfangen auf den fhem Tabletts rumzuspielen. Die Kiddies dürfen Ihre Playlists verändern, die Heizungssteuerung aber nicht...
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Mathea

#22
Hallo marko1420,

ich habe leider keinen Vorschlag für deinen Fernseher, aber immerhin das gleiche Problem an meinem Computer gelöst. Meine Zimmer-Anwesenheitssteuerung funktioniert auch über Bewegungsmelder, welche aber in meinem Arbeitszimmer nicht funktionierte, da ich mich am Computer nicht ausreichend bewege, um erkannt zu werden.

Was ich letztendlich gemacht habe und bis heute perfekt funktioniert: Ich habe mir auf meinem iMac ein Script geschrieben welches bei Nutzung alle 30 Sekunden (oder eine andere beliebige Zeit) einen Dummy in fhem auf ON setzt. Wird der Dummy eine Minute lang (oder deine Wunschzeit) nicht auf ON gesetzt, schaltet sie ein watchdog auf OFF und fhem geht davon aus, dass ich vom Computer weggegangen bin. Für die Erkennung, ob der Computer in Benutzung ist oder nicht, frage ich in meinem Script die Variable "IdleTime" meines Macs ab. Das Betriebssystem nutzt diese Variable, um nach einer gewissen Inaktivität den Bildschirm abzuschalten und den Rechner in den Standby zu versetzen. Sie wird also bei jeder Maus- / Tastaturbewegung erneut auf 0 gesetzt. Wie eine solche Variable unter Windows oder Linux heißt kann ich leider nicht sagen. Voraussetzung für den Erfolg dieser Lösung ist natürlich, dass das Script bei jedem Hochfahren des Computers automatisch permanent im Hintergrund ausgeführt wird.

Ich bin mit der Lösung super zufrieden und in anbetracht dessen, dass das nur ca. 10 Zeilen Script-Code sind ist das Aufwand- / Leistungsverhältnis nicht zu übertreffen.

Die Schwachstelle dieses Ansatzes: Schaue ich gerade zum Beispiel einen Film, ist der Computer nicht aktiv in Benutzung und ich bewege mich nur minimal. In diesem Fall würde der watchdog den Dummy in fhem auf OFF setzen obwohl ich den Computer ja in einer gewissen Weise benutze. Ich denke aber, dass sich das auch irgendwie abfangen lässt.

Gruß,
Mathea

Rince

Hab mal auf die Schnelle was gestrickt.

Also, bei 1 Bild/Sekunde komme ich auf ca. 4% CPU Auslastung.
Getestet auf nem älteren i5-2500k @3,3GHz, 8GB RAM, Windows 7 64Bit

Bei 1 Bild / 5 Sekunden fällt es wohl unter die Messgrenze...

Erkennt mein Gesicht ab ca. 1,20m vor der Webcam, ziemliches Dämmerlicht aber Monitore an.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Ich glaube ich bekomme auch ne einfache EXE Datei hin :)
Dann gibt es keinen Stress mit den 4 Programmen zum installieren :)

Muss noch rausfinden, wie ich das Ding mit den Abhängigkeiten paketieren kann, und dennoch das Config-File eben nicht...

Tendentiell würde ich es so machen:
Bei erkanntem Gesicht eine Meldung an fhem. Ohne Gesicht, keine Meldung. Wenn die Meldung bei fhem älter ist als 30 Minuten, ist kein User mehr da :)
Das könnte dann ein einfacher watchdog erledigen.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Fertig :)

Sort of.

Ein Timer von 10 Sekunden klappt gut.
Kann jetzt auch einen Befehl an fhem lostreten.
Damit ist es funktionell fertig.


Was fehlt:
Code aufräumen (wird vermutlich wirklich länger dauern ;) )
Config-File einbinden
EXE Datei erzeugen

Der Prozess im TaskManager dümpelt so zwischen 0 und 1% rum, also eher witzlos.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

marko1420

Meine Güte, so viele Antworten und Lösungsmöglichkeiten.

Die muss ich erstmal alle ausprobiern.

Meine Lösung ist der von Mathea sehr ähnlich.

ZitatWas ich letztendlich gemacht habe und bis heute perfekt funktioniert: Ich habe mir auf meinem iMac ein Script geschrieben welches bei Nutzung alle 30 Sekunden (oder eine andere beliebige Zeit) einen Dummy in fhem auf ON setzt. Wird der Dummy eine Minute lang (oder deine Wunschzeit) nicht auf ON gesetzt, schaltet sie ein watchdog auf OFF und fhem geht davon aus, dass ich vom Computer weggegangen bin

Ich mach das selbe nur über einen Attiny den ich als Monoflop mit 10 min. benutze. (Vom Bewegungsmelder gesteuert)

Dies ist aber nur eine Bastlerlösung, mich interessiert wie man das besser machen könnte.

@Rice

das sollte ja nicht auf einerem älteren PC laufen sondern auf RPI

Hallo pah

Um einen Zustandsautomaten geht es hier vermutlich sogar.
Alledings brauche ich da noch etwas länger bis ich mit einer Vielzahl von Sensoren arbeiten kann, die sich gegenseitig korrigieren.
Im Moment habe ich ja nur einen Bewegungssensor mit Monoflop.

Marko, der an weiteren Meinungen interessiert ist.






Rince

Zitatdas sollte ja nicht auf einerem älteren PC laufen sondern auf RPI
Ich dachte auf deinem Rechner?

Die Lösung für den RasPi muss anders aussehen, weil dein Gesicht beim TV sehen vermutlich nicht immer zur verfügung steht...
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

marko1420

Hallo Rince

Schöner Lögungsansatz. Werde ich weiter vefolgen.

Das Problem Anwesentheitserkennung nur in einem Raum scheint alles andere als einfach zu sein.

Ich benutze im Moment einen Bewegungssensor mit nachgeschaltem Monoflop (retriggerbar und Zeitkonstante derzeit 25 min.) als Präsensmelder.
Um alles im Zimmer auszuschalten muss es ja nicht sehr genau sein.

Ich logge derzeit nur meine Anwesentheit mit, scheint aber gut zu funktionieren.

Haben auch andere Interesse an einer sehr einfachen Lösung die wir entwikeln könnten?

Marko