Questa è una guida per costruire un sistema a basso costo che raccolga dati da un qualsiasi numero di sensori wireless. I passi in questa guida utilizzano una SDR USB collegata a un Raspberry Pi, che raccoglie dati dai sensori di temperatura e umidità Acurite. Questo approccio funzionerà con molti altri tipi di sensori di altri produttori e funzionerà su altri tipi di computer e sistemi operativi.
Ogni sensore utilizza 2 batterie AA e in genere durano un paio d'anni a temperature normali. Il Raspberry Pi ha un orologio in tempo reale ed è connesso a un router domestico tramite Ethernet. Non è richiesta una connessione di rete per eseguire il sistema, ma è necessario scaricare il software.
OCCORRENTE
OCCORRENTE | ESEMPIO |
USB SDR | NooElec |
Raspberry Pi | 3B+ |
Scheda Micro SD | SanDisk Ultra 64 |
Case | Qualsiasi |
Alimentatore | Samsung 5V 2A Micro USB |
Sensore di temperatura/umidità | Acurite 06002M |
Termometro | Acurite 606TX |
Sensore di temperatura/umidità | FineOffset WH31 |
Attenzione all'Acurite 606TX! L'identificatore per quel sensore cambia quando viene spento e riacceso. Quindi se lo usi, dovrai riconfigurare Weewx ogni volta che cambi le batterie.
PASSI DA SEGUIRE
Configura il Raspberry Pi
Sono disponibili molte guide per il bootstrap di un Raspberry Pi. Sono disponibili anche molte guide per l'installazione e la configurazione di un orologio in tempo reale nel Raspberry Pi. Fallo!
Il resto di questa guida richiede solo l'accesso alla riga di comando. Quindi puoi eseguire i passaggi seguenti accedendo da remoto tramite SSH o in una finestra di terminale con una tastiera e un monitor collegati.
# install operating system on sdcard, use it to boot the rpi # install a real-time clock and enable it # configure the rpi for remote access and headless operation # get rid of fake clock sudo apt-get remove --purge fake-hwclock # ensure the correct timezone sudo dpkg-reconfigure tzdata
Installa i prerequisiti per la creazione di rtl-sdr e rtl_433
sudo apt-get install cmake libusb-1.0-0-dev build-essential autoconf libtool pkg-config
Installa rtl-sdr
git clone git://git.osmocom.org/rtl-sdr.git cd rtl-sdr mkdir build cd build cmake -DINSTALL_UDEV_RULES=ON .. make sudo make install sudo ldconfig
Installa rtl_433
git clone https://github.com/merbanan/rtl_433 cd rtl_433 mkdir build cd build cmake .. make sudo make install
Installa Weewx
Quando installi Weewx, seleziona Simulator quando richiesto per il tipo di stazione. Lo cambierai in SDR più tardi quando eseguirai il comando wee_config --reconfigure.
# install Weewx wget -qO - http://weewx.com/keys.html | sudo apt-key add - wget -qO - http://weewx.com/apt/weewx.list | sudo tee /etc/apt/sources.list.d/weewx.list sudo apt-get update sudo apt-get install weewx # shut down Weewx sudo /etc/init.d/weewx stop # install weewx-sdr extension and enable the driver git clone https://github.com/matthewwall/weewx-sdr.git sudo wee_extension --install weewx-sdr sudo wee_config --reconfigure
Configuralo
Ora che tutti i pacchetti sono installati, è il momento di dire a Weewx quali dati raccogliere. Questo viene fatto partendo dal livello più basso, rtl_433, fino a weewxd. Per prima cosa eseguirai rtl_433 per verificare che funzioni e per vedere quali segnali raccoglie. Potresti essere sorpreso da quanti dispositivi nella tua casa (o nella casa dei tuoi vicini!) inviano segnali radio che puoi rilevare. Quindi il passo successivo è identificare quale di questi segnali ti interessa. Infine, creerai un sensor_map nella tua configurazione Weewx che mappa nomi e valori dai campi del database che sono usati in Weewx.
# see what devices are broadcasting data - let this run for awhile sudo rtl_433 # or run it like this to see the output in JSON format sudo rtl_433 -M utc -F json
Identifica i sensori uno alla volta. Metti le batterie nel primo sensore, quindi osservalo apparire nell'output rtl_433. Metti un pezzo di nastro adesivo sul sensore, quindi etichettalo con l'identificatore hardware: l'identificatore hardware viene in genere chiamato id nell'output. Quindi inserisci le batterie nel sensore successivo e osservalo apparire. Ti ritroverai con una pila di sensori, ciascuno con il suo identificatore hardware chiaramente contrassegnato. Quindi puoi facilmente tenere traccia dei sensori quando mappi gli identificatori hardware nei campi del database e le posizioni effettive dei sensori.
Quindi dovresti eseguire direttamente il driver weewx-sdr. Questo verificherà che possa catturare l'output da rtl_433 e ti mostrerà i nomi completi per ogni osservazione. Ti serviranno per dire a Weewx come acquisire i dati. Notare l'opzione --cmd. Se dovessi specificare altre opzioni per rtl_433, assicurati di aggiungerle all'opzione --cmd quando invochi sdr.py.
# see how the sensor data from rtl_433 are mapped to fully-qualified names sudo PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/sdr.py --cmd="rtl_433 -M utc -F json" # in particular, look at the 'out' and 'parsed' lines like this: out: ['{"time" : "2019-01-16 11:45:33", "model" : "Acurite tower sensor", "id" : 2453, "sensor_id" : 2453, "channel" : "A", "temperature_C" : 16.700, "humidity" : 31, "battery_low" : 0}\n'] parsed: {'temperature.0995.AcuriteTowerPacket': 16.7, 'dateTime': 1547639133, 'humidity.0995.AcuriteTowerPacket': 31.0, 'status.0995.AcuriteTowerPacket': None, 'battery.0995.AcuriteTowerPacket': 0, 'channel.0995.AcuriteTowerPacket': u'A', 'usUnits': 16}
Ora puoi comunicare a Weewx i nomi completi delle osservazioni di ciascun sensore. In questo esempio, i nomi completi sono temperature.0995.AcuriteTowerPacket o humidity.0995.AcuriteTowerPacket. Devi dire a Weewx come mappare quei nomi ai campi del database che usa per memorizzare i dati. Questo viene fatto nella sezione sensor_map della sezione SDR nel file di configurazione di Weewx.
Ecco un esempio che mostra 4 sensori che ho installato. Gli identificatori del sensore sono -102, 0995, 16B9 e 0ED5, ma ovviamente i tuoi avranno altri valori. I nomi dei campi del database sono inTemp, outTemp, outHumidity, ecc.
# using these names, create the sensor_map in /etc/weewx/weewx.conf [SDR] ... [[sensor_map]] inTemp = temperature.-102.Acurite606TXPacket # mud room inTempBatteryStatus = battery.-102.Acurite606TXPacket outTemp = temperature.0995.AcuriteTowerPacket # back porch outHumidity = humidity.0995.AcuriteTowerPacket outHumidity = battery.0995.AcuriteTowerPacket extraTemp1 = temperature.16B9.AcuriteTowerPacket # bathroom extraHumidity1 = humidity.16B9.AcuriteTowerPacket batteryStatus1 = battery.16B9.AcuriteTowerPacket extraTemp2 = temperature.0ED5.AcuriteTowerPacket # kitchen extraHumidity2 = humidity.0ED5.AcuriteTowerPacket batteryStatus2 = battery.0ED5.AcuriteTowerPacket
Puoi vedere l'elenco completo dei nomi dei campi del database nella sezione dei tipi di archivio della guida alla personalizzazione di Weewx.
Avvia Weewx
Per prima cosa esegui Weewx direttamente per assicurarti che la raccolta dei dati funzioni correttamente e che i dati vengano scritti nel database e nei report. Un minuto o due dopo averlo avviato, dovresti vedere i pacchetti LOOP che contengono i dati dai sensori, associati ai nomi dei campi del database come definiti nel tuo file sensor_map. Ogni 5 minuti dovresti vedere un archivio RECORD segnalato.
# run weewx directly to verify the data collection (ctrl-c to stop) weewxd /etc/weewx/weewx.conf
Dopo aver verificato che funzioni correttamente, termina weewxd. Ora puoi eseguirlo come demone in modo che continui a funzionare, anche dopo esserti disconnesso dal Raspberry Pi.
# run weewx as a daemon and forget about it! sudo /etc/init.d/weewx start
Visualizzazione dei dati e personalizzazione dei report
Weewx salva i dati in un database SQLite su /var/lib/weewx.sdb . Puoi sfogliare i dati direttamente invocando lo strumento da riga di comando SQLite sul Raspberry Pi:
sqlite3 /var/lib/weewx.sdb
Nella sua configurazione predefinita, Weewx inserirà i dati in una pagina situata in /var/www/html. Se hai una tastiera e un monitor collegati al Pi, puoi visualizzare il rapporto direttamente in qualsiasi browser web.
È possibile visualizzare il report in remoto installando un server web sul pi, come nginx, lighttpd, o apache. Consiglio vivamente di utilizzare nginx o lighttpd sul Pi, poiché utilizzano molta meno memoria rispetto a Apache.
sudo apt-get install nginx
Quindi puoi visualizzare i rapporti utilizzando un browser Web su qualsiasi computer/tablet/telefono in grado di vedere il Pi:
http://<name-or-addr-of-pi>/weewx
Per personalizzare i report o aggiungerne altri, consulta la guida alla personalizzazione di Weewx:
RISOLUZIONE PROBLEMI
Modulo del kernel già caricato
Quando esegui rtl_433, potresti ricevere un avviso su un modulo del kernel già caricato. In tal caso, puoi provare a non caricare esplicitamente il modulo del kernel, quindi inserirlo nella lista nera in modo che non venga caricato accidentalmente.
# ensure that the rtl kernel module is not running inappropriately sudo modprobe -r dvb_usb_rtl28xxu echo 'blacklist dvb_usb_rtl28xxu' | sudo tee -a /etc/modprobe.d/blacklist.conf
Il modulo del kernel è in uso
Se ricevi un errore che dvb_usb_rtl28xxu è in uso, scollega il tuo dispositivo SDR, quindi riprova.
La build rtl-sdr non riesce a trovare libusb
Durante la compilazione di rtl-sdr, potresti riscontrare problemi nel collegamento a libusb. In tal caso, prova a eseguire pkg-config come spiegato qui (In Inglese).