Capteur de présence souple sur Linux AP + ESP8266

TL; DR

Surveiller le changement du niveau du signal Wi-Fi des appareils IoT stationnaires situés autour de la maison vous permet de créer un capteur de mouvement volumétrique entièrement logiciel (il manque du matériel dédié) dans l'appartement, qui montre assez précisément la présence de personnes en mouvement actif (en fait, ne dormant pas).





Contexte

Il existe un "appartement de spécialiste informatique" ordinaire avec un système "maison intelligente" basé sur Home Assistant:





  • Interrupteurs d'éclairage faits maison basés sur ESP8266 + MSP430





  • Plusieurs capteurs de température / humidité, CO2 et qualité de l'air.





  • Contrôleur de ventilateur de salle de bain / toilettes





  • une paire de Sonoff Mini pour le reste.





Communication entre appareils - via Wi-Fi + MQTT. Pour minimiser l'impact des ESP à faible vitesse sur le réseau Wi-Fi «opérationnel», un réseau Wi-Fi séparé pour l'IoT est lancé sur un Raspberry Pi 3 séparé, basé sur le standard hostapd . Au total, il y a 12 appareils dans le réseau Wi-Fi IoT .







Un courtier MQTT fonctionne également sur RPi et Home Assistant se trouve sur le «serveur domestique» à proximité.





Idée

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") . - .





Empiriquement, nous pouvons supposer que la distance du signal IW> 1 (horizontal vert) correspond à l'activité des personnes présentes dans la pièce. Mais cette limite est susceptible d'être différente pour les autres configurations de pièce et le nombre d'appareils.





résultats

Le système fonctionne sous cette forme depuis plus de deux ans et montre de manière assez fiable l'activité à l'intérieur de l'appartement, avec une influence minimale des voisins.







Mon implémentation de l'algorithme est disponible sur github (https://github.com/k-korn/misc-scripts/tree/main/iwmon), mais elle est assez spécifique (Perl + Zabbix + visualisation dans Grafana) - et donc une solution prête à l'emploi "plug et jouer "ne peut toujours pas servir.












All Articles