Soft Presence Sensor unter Linux AP + ESP8266

TL; DR

Durch die Überwachung der Änderung des Pegels des Wi-Fi-Signals von IoT-Geräten, die sich permanent im Haus befinden, können Sie einen volumetrischen Bewegungssensor mit vollständiger Software (dedizierte Hardware fehlt) in der Wohnung erstellen, der die Anwesenheit von sich aktiv bewegenden (tatsächlich nicht schlafenden) Personen ziemlich genau anzeigt.





Hintergrund

Es gibt eine gewöhnliche "Wohnung eines IT-Spezialisten" mit einem "Smart Home" -System, das auf Home Assistant basiert:





  • Selbstgemachte Lichtschalter basierend auf ESP8266 + MSP430





  • Mehrere Sensoren für Temperatur / Luftfeuchtigkeit, CO2 und Luftqualität.





  • Steuerung des Bad- / Toilettenventilators





  • ein Paar Sonoff Mini für den Rest.





Kommunikation zwischen Geräten - über Wi-Fi + MQTT. Um die Auswirkungen von ESPs mit niedriger Geschwindigkeit auf ein "funktionierendes" Wi-Fi-Netzwerk zu minimieren, wird ein separates Wi-Fi-Netzwerk für IoT auf einem separaten Raspberry Pi 3 gestartet, das auf dem Standard- Hostapd basiert . Insgesamt befinden sich 12 Geräte im IoT-Wi-Fi-Netzwerk .







Ein MQTT-Broker wurde auf RPi und Home Assistant auf dem "Home Server" gestartet.





Idee

Wi-Fi . / RSSI, . , wi-fi - .





- , , " " - .





iw dev wlan0 station dump, :





Station 60:01:94:21:f8:4c (on wlan0)
        inactive time:  8000 ms
        rx bytes:       11269629
        rx packets:     91423
        tx bytes:       6159821
        tx packets:     70707
        tx failed:      0
        signal:         -53 [-53] dBm
        tx bitrate:     1.0 MBit/s
        rx bitrate:     54.0 MBit/s
        ...
        connected time: 763375 seconds
Station 18:fe:34:98:dc:81 (on wlan0)
        inactive time:  4000 ms
        rx bytes:       11388688
        rx packets:     92101
        tx bytes:       6143200
        tx packets:     70205
        tx failed:      39
        signal:         -40 [-40] dBm
        tx bitrate:     1.0 MBit/s
        rx bitrate:     18.0 MBit/s
        ...
        connected time: 763378 seconds
      
      



RSSI ("signal: -40 [-40] dBm") , iw - .





iw RSSI - :





, "" +/- 10 dBm. , "" .





:





  • (" ")









  • , " "





, . - , .

4 :





~4:30. , - . , - , " " .





" " - .





  • 500 RSSI iw dev wlan0 station dump.

    , Raspberry Pi .





  • 1024 " ":





$RSSI = -65; #   iw dev dump
$baseline = ($RSSI + 1023 * $baseline) / 1024;
      
      



  • 256 " ".





  • " " "" "" wi-fi .





:





("IW Signal Distance") . - .





Empirisch können wir annehmen, dass IW-Signalabstand> 1 (grüne Horizontale) der Aktivität von Personen im Raum entspricht. Diese Grenze ist jedoch wahrscheinlich für andere Raumkonfigurationen und Gerätezahlen unterschiedlich.





Ergebnisse

Das System ist seit über zwei Jahren in dieser Form in Betrieb und zeigt zuverlässig Aktivitäten innerhalb der Wohnung mit minimalem Einfluss der Nachbarn.







Meine Implementierung des Algorithmus ist auf github (https://github.com/k-korn/misc-scripts/tree/main/iwmon) verfügbar, aber ziemlich spezifisch (Perl + Zabbix + Visualisierung in Grafana) - und daher ein Plug-in für eine vorgefertigte Lösung und spielen "kann immer noch nicht dienen.












All Articles