Sensor de presença soft no Linux AP + ESP8266

TL; DR

Monitorar a mudança no nível do sinal de Wi-Fi de dispositivos IoT permanentemente localizados ao redor da casa permite que você faça um sensor de movimento volumétrico totalmente software (falta hardware dedicado) no apartamento, que mostra com bastante precisão a presença de pessoas se movendo ativamente (na verdade, não dormindo).





fundo

Existe um "apartamento de especialista em TI" comum com um sistema de "casa inteligente" baseado no Home Assistant:





  • Interruptores de luz caseiros baseados em ESP8266 + MSP430





  • Vários sensores de temperatura / umidade, CO2 e qualidade do ar.





  • Controlador de ventilador de banheiro / toalete





  • um par de Sonoff Mini para o resto.





Comunicação entre dispositivos - via Wi-Fi + MQTT. Para minimizar o impacto de ESPs de baixa velocidade em uma rede Wi-Fi "funcional", uma rede Wi-Fi separada para IoT é lançada em um Raspberry Pi 3 separado, com base no hostapd padrão . No total, existem 12 dispositivos na rede Wi-Fi IoT .







Um broker MQTT foi lançado no RPi e o Home Assistant foi lançado no "servidor inicial".





Idéia

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





Empiricamente, podemos supor que a distância do sinal IW> 1 (verde horizontal) corresponde à atividade das pessoas na sala. Mas é provável que esse limite seja diferente para outras configurações de sala e contagens de dispositivos.





resultados

O sistema está operando desta forma há mais de dois anos e mostra com bastante confiabilidade a atividade dentro do apartamento, com mínima influência dos vizinhos.







Minha implementação do algoritmo está disponível no github (https://github.com/k-korn/misc-scripts/tree/main/iwmon), mas é bastante específico (Perl + Zabbix + visualização em Grafana) - e, portanto, uma solução pronta "plug e jogar "ainda não pode servir.












All Articles