Entwicklung eines Personenzählers zur sicheren Anwesenheitserkennung

Begonnen von Mathea, 10 März 2017, 09:26:39

Vorheriges Thema - Nächstes Thema

Mathea

Hallo Leute,

ich sitze nun schon seit einigen Monaten an der Entwicklung eines Personenzählers der im Türrahmen montiert werden kann. Ich möchte die Bastelecke hier im Forum nutzen, um das laufende Projekt vorzustellen, zu dokumentieren und Input der potenziellen Nutzer einzuholen.

Jeder, der darüber nachdenkt Licht, Raumtemperatur, Musik, etc. pro Raum in seinem Haushalt zu automatisieren wird früher oder später auf das Problem der sicheren Detektion von Personen in einem Raum stoßen. Eine Lösungsansätze sind heutzutage:

- Präsenzerkennung über Bewegungsmelder
Vorteile: Bewegungsmelder sind gängig erhältliche Produkte, die ohne großen Aufwand in eine Heimautomationslösung eingebunden werden können. Personendetektion funktioniert ohne dass ein Sender mitgeführt werden muss.
Nachteile: Sich nicht bewegende Personen werden nicht erkannt.

- Präsenzerkennung über Smartphones
Vorteile: Smartphones hat heutzutage jeder und eine Anwesenheitsdetektion über Anpingen oder Bluetooth kann ohne zusätzliche Geräte in fast jede bestehende Heimautomatisierungslösung eingebunden werden.
Nachteile: Detektion nicht raumspezifisch. Man muss das Smartphone ständig mit sich führen. Je nach Smartphone wird das WLAN im Standby abgeschaltet und die Detektion funktioniert nicht mehr.

- Präsenzerkennung via Bluetooth Beacons
Vorteile: Raumspezifische Anwesenheitsdetektion teilweise möglich.
Nachteile: Wer möchte schon permanent einen Sender mit sich in der Wohnung herumtragen.

- Präsenzerkennung mit einer Kamera und Bildverarbeitung
Vorteile: Wahrscheinlich sicherste Detektionsmethode. Kameras können direkt als Überwachungskameras genutzt werden.
Nachteile: Teuer, hoher Energieverbrauch, die NSA schaut mit, WAF: Wie erklärt man seiner Partnerin, dass im Schlafzimmer eine Kamera aufgestellt werden muss?

Es gibt noch einige weitere Methoden, aber diese möchte ich nicht weiter aufführen. Zusammenfassend kann allerdings festgestellt werden, dass es aktuell noch keine vernünftige Methode ohne signifikante Nachteile gibt.

Ich möchte dieses Problem lösen und habe mir dementsprechend folgendes Konzept überlegt:
In jeden Türrahmen oder Durchgang wird ein Personenzähler montiert. Sobald sich eine Person durch diesen Durchgang von Raum A nach Raum B bewegt wird diese im Heimautomatisierungsserver gezählt. So kann man relativ sicher ermitteln ob und wie viele Personen sich in einem Raum befinden und dementsprechend den Raum automatisieren.

Nach langem Herumprobieren mit verschiedenen Methoden habe ich folgendes technisches Konzept entwickelt:
Das Gerät besitzt zwei Distanzmesssensoren, welche so angebracht sind, dass beim Durchlaufen einer Person zunächst ein Sensor getriggert wird und anschließend der andere. Durch die Trigger-Reihenfolge kann ermittelt werden ob eine Person durch den Türrahmen gelaufen ist und in welche Richtung dies erfolgte. Da ein permanentes Messen solcher Sensoren Strom verbraucht und der Personenzähler im Idealfall ein Jahr mit einer Batterieladung betrieben werden soll, wird zusätzlich ein oder mehrere Bewegungsmelder verbaut um das Gerät aufzuwecken sobald eine Person durch den Türrahmen läuft.

Im Anhang habe ich Bilder meines ersten Prototypen angehängt.

Eckdaten des Prototypen:
- Distanzmessung erfolgt über zwei Ultraschallsensoren, welche abwechselnd einen Ping aussenden und über die Dauer bis zum Echo die Distanz berechnen.
- Das Aufwecken übernimmt ein PIR Sensor, welcher die Elektronik mit einem großen Detektionsbereich rechtzeitig weckt.
- Funkkommunikation erfolgt bidirektional über das MySensors Protokoll und einem NRF24L01 Transceiver.
- Herz des Sensors ist ein Arduino Pro Mini.
- Das Gerät wird mit vier AA Eneloop Akkus betrieben.
- Das Gehäuse ist 3D gedruckt und wird in der Ecke des Türrahmens angebracht. Der Messwinkel ist für 80 cm breite Türen optimiert.

Noch eine Anmerkung zum Gehäuse: Ich wollte das Gerät nicht seitlich an der Tür anbringen, da die Batterien relativ viel Platz benötigen und ich den Türdurchgang nicht enger machen möchte. Das ist auch der Grund, warum das Gerät nicht mittig oben im Türrahmen angebracht wird (ich bin auch ein großer Mensch und möchte mir nicht den Kopf stoßen). Dementsprechend wird der Sensor mit 3M Klebepads an der oberen Kante im Türrahmen angeklebt.

Leider hat das Gerät auch viele Nachteile:
- Ultraschallsensoren & der verbaute PIR Sensor benötigen 5 V, weshalb ich am Ende 4 Eneloop Akkus (jeweils 1,2 bis 1,3 V) nehmen musste. Konventionelle AA Batterien können nicht genommen werden weil die Spannung von jeweils 1,5 V dann zu hoch wäre. Einen Voltage-Booster wollte ich nicht nutzen, da diese nach meiner Erfahrung sehr schnell die Batterien ausnudeln.
- Distanzmessung mit zwei Ultraschallsensoren ist langsam, da man abwechselnd pingen muss, damit sie sich nicht gegenseitig zu stören. Gleichzeitig gibt es Fehlmessungen, welche herausgefiltert werden müssen. Langsame Messungen -> Wenige Messungen zur Datenglättung -> Unsicherere Detektion.
- Ultraschallmessung im Türrahmen ist eine schlechte Idee, da es durch die Winkelgeometrie zu störenden Mehrfachreflexionen kommt.

Lange Rede kurzer Sinn: Dieser Sensor funktioniert aufgrund dieser Probleme leider nicht sicher.
Ich stecke mittlerweilung in der Entwicklung des PeopleCounters 2.0 und möchte diesen in den folgenden Tagen im nächsten Post vorstellen.

Ich hoffe ich habe euer Interesse geweckt und bekomme ein wenig Feedback von euch.

Gruß,
Mathea

Mathea

Hier im Anhang noch ein paar mehr Bilder vom Gehäuse und wie das Gerät im Türrahmen angebracht wurde.

Mathea

People Counter die zweite.

Wie schon im ersten Post angedeutet hat mein erster Versuch nicht ganz den erwarteten Erfolg erbracht. Auf meinem Schreibtisch hat alles wunderbar funktioniert aber sobald das Gerät im Türrahmen angebracht ist reagiert er entweder gar nicht oder zählt verkehrt.
Daraus schließe ich, dass die Idee von Ultraschallsensoren, die in einem Türrahmen exakt in der Diagonalen angebracht sind, eine schlechte war. Anscheinend gibt es in dieser Geometrie mehrfach-Echos welche am Ende eine sichere Messung unmöglich machen.

Nun also zur Weiterentwicklung, um die genannten Probleme zu lösen.
In diesem Post möchte ich meinen schon existierenden zweiten Prototypen vorstellen, welcher allerdings nur als Zwischenschritt gesehen werden sollte.

Änderungen zur ersten Version:
- Anstatt Ultraschallsensoren möchte ich nun so genannte Time of Flight Sensoren nutzen, spezifisch den VL53L0X.
- Meine "Zwischenversion" ist nicht für den Batteriebetrieb ausgelegt, sondern für den Betrieb mit einem Netzteil. In der finalen Version soll beides als Option möglich sein.
- Anstatt des 5 V PIR Sensors nutze ich hier einen Radar Bewegungsmelder. Dieser hat den Vorteil, dass er keine Fresnel Linse braucht, sondern "unsichtbar" im Gehäuse versteckt werden kann. Außerdem ist er sensibler als PIR Sensoren und nicht temperaturempfindlich. Leider verbraucht dieser Sensor zu viel Strom um ihn per Batterie zu speisen.
- Das Gehäuse ist sehr flach, weshalb er oben oder seitlich am Türrahmen montiert werden kann. Die finale Version soll allerdings wieder in der Ecke montiert werden.

Das Gerät habe ich eigentlich nur gebaut, um zu ermitteln, ob die TOF Sensoren parallel in geringem Abstand betrieben werden können ohne sich gegenseitig zu stören. Fazit: Das klappt. Und die Sensoren können ebenfalls ca. doppel so schnell messen wie die ursprünglichen Ultraschallsensoren, bei weniger Fehlmessungen. Dadurch wird die Detektion sicherer. Außerdem sind sie um einiges kleiner und können mit 3,3 V betrieben werden, was einem Batteriebetrieb entgegenkommt.
In dieser Version ist es gedacht, das Kabel zur Stromversorgung durch die Türdichtung zu führen. Ich befürchte, dass dadurch ein kleines Loch in die Dichtung gemacht werden muss, was nicht so schön ist. Da das finale Gerät wieder in der Ecke sitzen soll, kann bei gewünschtem Netzteilbetrieb das Kabel genau am Schnitt der Dichtung eingeführt werden.

Im Anhang wieder Bilder (hier noch ohne Lötverbindungen auf der Platine zwischen den einzelnen Komponenten).

Gruß,
Martin

mumpitzstuff

Warum nimmst du nicht 2 Lichtschranken, eine auf jeder Seite der Tür? In jedem Fall ist aber sowas nie Fehlerfrei. Wenn sich jemand direkt in der Tür überlegt die Richtung zu wechseln oder sich 2 Personen gleichzeitig durch die Tür quetschen oder jemand direkt in der Tür stehen bleibt usw. wird es immer mal wieder zu Fehlmessungen führen. Die Ergebnisse sollten demnach durch ein anderes System Bluetooth Tags oder ähnliches verifiziert und gegebenenfalls korrigiert werden.

Bapt. Reverend Magersuppe

Beim rein-raus-zählen hat man nach einiger Zeit vermutlich immer einen Offset zwischen tatsächlicher Personenzahl und gezählten. Vielleicht dreht einer sich mehrmals im Türrahmen rum und geht dann in die ein oder andere Richtung.

Es gibt diese kleinen Radarmelder, vielleicht ist das ein Ansatz. Solange sich jemand in der Nähe befindet ist das Funkfeld doch dauerhaft verzerrt, vielleicht kann man das auswerten. Stellt man ein neues Sofa auf, müsste man solche Melder vermutlich neu konfigurieren.

--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

JoWiemann

wie wäre es mit einer Personenvereinzelungsanlage im Eingangsbereich... ;)

duck und weg ....
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

peterk_de

Wenn du sowas in funktionierend hinbekämst, ich glaube, damit könntest du reich werden. Allerdings ist das wie schon geschrieben wurde wahrscheinlich einfach nicht ohne Vereinzelungsanlage genau möglich :-(

Ich habe soetwas "in dumm" im Eingangsbereich: Türkontakt, PIR innen, PIR außen. Damit versuche ich festzustellen, ob das Haus gerade verlassen oder betreten wurde, anhand der Reihenfolge der Auslösung der 3 Sensoren. Das klappt zwar meistens, aber a) eben nicht immer und b) daraus auf ne Anzahl Personen im Haus zu schließen ist komplett unmöglich. Um eine "Haus verlassen" Meldung (Offene Fenster ansagen, gezielt Flurlicht oder Außenlicht anschalten etc.) auszulösen reicht das, aber ne Alarmanalge damit Scharfschalten kannste vergessen ...

Also, tolle Bastelei und schicke Lösung, aber ob das jemals so gut funktioniert, wie man es eigentlich haben will...? ;(
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Mathea

Zitat von: mumpitzstuff am 10 März 2017, 11:38:36
Warum nimmst du nicht 2 Lichtschranken, eine auf jeder Seite der Tür? In jedem Fall ist aber sowas nie Fehlerfrei. Wenn sich jemand direkt in der Tür überlegt die Richtung zu wechseln oder sich 2 Personen gleichzeitig durch die Tür quetschen oder jemand direkt in der Tür stehen bleibt usw. wird es immer mal wieder zu Fehlmessungen führen. Die Ergebnisse sollten demnach durch ein anderes System Bluetooth Tags oder ähnliches verifiziert und gegebenenfalls korrigiert werden.

Ich habe lange über Lichtschranken nachgedacht, es gibt aber drei Gründe dagegen:
-Lichtschranken, die permanent an sind können nicht langfristig mit Batterien betrieben werden
-Ich möchte nur ein Gerät haben und nicht auf beiden Seiten einen Sender und Empfänger anbringen müssen
-Lichtschranken mit einem ausreichenden Detektionsabstand sind meiner Meinung nach überteuert. Meine Vorstellung ist ein Gerät, das maximal 15€ - 20€ kostet und eine akzeptable Lichtschranke für solche Distanzen kostet schon mal das doppelte, zusätzlich braucht man auch noch zwei.

Bezüglich der Robustheit stimme ich dir zu. Es wird immer Fälle geben, in denen das Gerät falsch zählt. Meine Methode, dem entgegenzuwirken wäre eine Logik, die zusätzlich Bewegungsmelder in den Räumen abfragt. Nichtsdestotrotz ist ein Personenzähler eine gewaltige Verbesserung in Punkto Anwesenheitserkennung.

Gruß,
Mathea

Mathea

Zitat von: JoWiemann am 10 März 2017, 14:48:08
Und hier was wissenschaftliches zum Thema: http://www.zess.uni-siegen.de/cms/diss/2002/krieger/krieger.pdf

Grüße Jörg

Danke für den Link, das Dokument kenne ich  :)

Ich bin mir darüber bewusst, dass es diverse theoretische Ansätze gibt, dieses Problem zu lösen, aber ich möchte JETZT etwas haben, das funktioniert und jeder zuhause mit einfachsten Mitteln nachbauen kann. Außerdem bin ich davon überzeugt, dass die Sensorik dafür heute schon existiert, nur niemand sich genug Mühe gibt, das Problem praktisch anzugehen. Dementsprechend versuche ich in meiner Freizeit nach der Arbeit etwas zu basteln was halbwegs funktioniert.
Falls mein Ansatz nicht funktionieren sollte, ist es hier wenigstens dokumentiert und andere sparen sich den Fehlversuch zuhause  ;)

Gruß,
Mathea

Mathea

Zitat von: Bapt. Reverend Magersuppe am 10 März 2017, 14:30:40
Beim rein-raus-zählen hat man nach einiger Zeit vermutlich immer einen Offset zwischen tatsächlicher Personenzahl und gezählten. Vielleicht dreht einer sich mehrmals im Türrahmen rum und geht dann in die ein oder andere Richtung.

Es gibt diese kleinen Radarmelder, vielleicht ist das ein Ansatz. Solange sich jemand in der Nähe befindet ist das Funkfeld doch dauerhaft verzerrt, vielleicht kann man das auswerten. Stellt man ein neues Sofa auf, müsste man solche Melder vermutlich neu konfigurieren.

Die Radarmelder kenne ich, und ich glaube jemand mit mehr Talent und Zeit als ich kann darauf basierend bestimmt etwas entwickeln, das noch besser ist. Einfach wird es allerdings nicht, da diese Radarmelder eigentlich nur auf Änderungen im Feld reagieren und nicht auf absolut herrschende Verzerrungen. Man müsste so ein Teil jedenfalls komplett von Grund auf neu entwickeln.

Zitat von: peterk_de am 10 März 2017, 14:49:43
Wenn du sowas in funktionierend hinbekämst, ich glaube, damit könntest du reich werden. Allerdings ist das wie schon geschrieben wurde wahrscheinlich einfach nicht ohne Vereinzelungsanlage genau möglich :-(

Ich habe soetwas "in dumm" im Eingangsbereich: Türkontakt, PIR innen, PIR außen. Damit versuche ich festzustellen, ob das Haus gerade verlassen oder betreten wurde, anhand der Reihenfolge der Auslösung der 3 Sensoren. Das klappt zwar meistens, aber a) eben nicht immer und b) daraus auf ne Anzahl Personen im Haus zu schließen ist komplett unmöglich. Um eine "Haus verlassen" Meldung (Offene Fenster ansagen, gezielt Flurlicht oder Außenlicht anschalten etc.) auszulösen reicht das, aber ne Alarmanalge damit Scharfschalten kannste vergessen ...

Also, tolle Bastelei und schicke Lösung, aber ob das jemals so gut funktioniert, wie man es eigentlich haben will...? ;(

Ich habe sowas ähnliches mit PIR Sensoren auch schon probiert, aber das ist einfach nicht genau genug. Meine Auswertelogik der TOF Distanzmessung war bisher allerdings so robust, dass man vor dem Sensor tanzen konnte und er hat immer noch korrekt gezählt.

Ich muss vielleicht noch ein wenig erläutern wie meine Programmierung aussieht, damit man mir nicht unterstellt, ich würde nicht an die offensichtliche Probleme denken.

So sieht der normale Programmablauf aus:
- Jemand nähert sich der Tür und der / die Bewegungsmelder wecken das Gerät auf
- Sensor A und Sensor B messen beide eine lange Distanz
- Sobald die Person sich direkt unter einem der Sensoren befindet misst dieser schlagartig eine kürzere Distanz
- Um eine gewisse Sicherheit vor Fehlmessungen zu haben müssen mindestens drei aufeinanderfolgende Messwerte eine Hysterese überschreiten
- Dieser Sensor steht dann auf "triggered" und mein Prozessor merkt sich den Timestamp
- Geht die Person weiter durch die Tür wird früher oder später der zweite Sensor getriggered. Auch hier merke ich mir den Timestamp
- Sobald beide Sensoren auf "triggered" stehen, schickt das Gerät ein Bit "Somebody standing in doorframe", auf das man im Automatisierungsserver reagieren kann
- Nach einiger Zeit wird nun der erste Sensor wieder die Hysterese unterschreiten und nach drei aufeinanderfolgenden validen Messwerten auf "untriggered" gesetzt. Gleichzeitig merke ich mir auch diesen Timestamp
- Nachdem der zweite Sensor irgendwann auch wieder auf "untriggered" steht, berechne ich über die timestamps die bewegungsrichtung
- Je nach bewegungsrichtung schicke ich entweder das Bit "Direction 1" oder "Direction 2" und setze "Somebody standing in doorframe" wieder auf 0.
- Nachdem die Bewegungsmelder keine bewegung mehr detektieren schläft das gerät ein um energie zu sparen.

Nun weiß ich, dass es einige Sonderfälle gibt:
Jemand geht in den Türrahmen, läuft dann allerdings wieder in die gleiche richtung zurück: In dem Fall schickt das Gerät das bit "Somebody standing in doorframe" sobald beide sensoren getriggered sind, und setzt es lediglich wieder zurück sobald es über die "untriggered" timestamps berechnet hat, dass die person den türrahmen wieder in die gleiche richtung verlassen hat. Dementsprechend wird kein "Direction" bit gesendet und der server muss auch keine personen hoch- oder runterzählen.

Jemand stellt etwas in den Türrahmen und lässt es dort eine längere Zeit stehen: Der People counter hat zwei verschiedene wartezeiten um wieder in den sleep modus zu gehen. Falls kein Sensor getriggered ist, geht er nachdem keine Bewegung mehr detektiert wird relativ schnell schlafen. Ist mindestens ein Distanzsensor getriggered, wartet das Gerät eine längere Zeit bis ca. eine minute lang mehr keine bewegung detektiert wurde und geht dann auch schlafen. Sofern es sich hierbei doch um eine Person handelt, wird sich diese früher oder später bewegen und die Elektronik wieder aufwecken.

Zwei personen quetschen sich gleichzeitig durch die tür: Das kann man nicht alleine mit dem Personenzähler abfangen. Ich persönlich würde neben dem Personenzähler bewegungsmelder in jedem Raum installieren und den raum einfach nach einer gewissen Zeit ohne bewegung auf "abwesend" setzen, auch wenn der personenzähler eine person hochgezählt hat. Diese Zeit kann man je nach belieben wählen. Sobald der Bewegungsmelder des Raumes allerdings anspringt würde ich den Raum so lange auf "anwesend" setzen bis der Personenzähler irgendeine Art nachricht geschickt hat. Denn ob sich mindestens eine Person im Türrahmen befunden hat kann dieser mit einer 99%igen sicherheit sagen.

Gruß,
Mathea

justme1968

so lange es irgend eine möglichkeit für fehlzählungen gibt wird das ganze meist nicht sinnvoll in eine automation einzubinden sein.

das problem an den fehlern ist das sie sich aufsummieren. selbst eine logik wie <0 personen macht es nur beschränkt besser.

im routine betrieb ist nicht das geordnete einer nach dem anderen die regel sonder es gehen zwei leute nebeneinander, ein kind ist auf dem arm, ... und das in beliebiger kombination und für beide richtungen unterschiedlich.

das ist schon schwierig genug wenn man versucht das per kammera oder rfid auf einzeln identifizierbare personen runter zu brechen. hier kann man tatsächlich über die logik das eine person nur in einem raum sein kann die zuverlässigkeit deutlich erhöhen. ohne diese unterscheidung fehlt fast jede möglichkeit der korrektur.

wenn du es trotzdem schaffst wäre ich sehr interessiert :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

the ratman

ich hatte mal folgendes video gefunden: https://www.youtube.com/watch?v=OWab2_ete7s
das ganze rennt wohl auf opencv http://opencv.org/

ich denke, da könnte sicherlich ein wissender ne schnittstelle zu fhem schaffen *g*.
wenn ich mir div. videos dazu bei deineröhre anschaue, scheint das ganze verdammt zuverlässig zu laufen, man müßte die ganze hardware dann auch nicht mehr an der tür anbringen, usw.

dies nur als ideengeber ...
→do↑p!dnʇs↓shit←

Mathea

Zitat von: the ratman am 10 März 2017, 17:14:20
ich hatte mal folgendes video gefunden: https://www.youtube.com/watch?v=OWab2_ete7s
das ganze rennt wohl auf opencv http://opencv.org/

ich denke, da könnte sicherlich ein wissender ne schnittstelle zu fhem schaffen *g*.
wenn ich mir div. videos dazu bei deineröhre anschaue, scheint das ganze verdammt zuverlässig zu laufen, man müßte die ganze hardware dann auch nicht mehr an der tür anbringen, usw.

dies nur als ideengeber ...

Über diese Geschichte habe ich auch nachgedacht, wollte aber im Endeffekt aus Privatsphäregründen nicht so viele Kameras zuhause haben und auch nicht den damit verbundenen, hohen Stromverbrauch.

Gruß,
Mathea

tomster

Noch dazu ich es bislang nicht geschafft habe opencv auf dem RasPi abzugewöhnen permanent 80-120% CPU zu konsumieren...

Ich verstehe jedoch den Hintergrund dieser Zählung noch nicht ganz. Willst Du mit der Zählmethode nur wissen ob/wieviele im Haus sind, oder wieviele in jedem Raum? Und wenn ja, was machst Du dann mit den Daten? Heizung um 1,54279 Grad absenken?