Gruppo Meteo/RemoteProcedure
r-map implementation overview
MQTT e Json-rpc
Un elemento fondamentale per il concentramento di osservazioni e campionamenti è il BUS MQTT http://en.wikipedia.org/wiki/MQ_Telemetry_Transport . E' su questo che vengono convogliati tutti i dati dei sensori; r-map definisce uno standard per pubblicare i dati nel root path rmap.
I moduli propedeutici alla pubblicazione MQTT sono connessi tramite 3 differenti trasporti:
- porta seriale (USB)
- TCP/IP
- radiofrequenza con modulo RF24Network
Sopra questi trasporti transitano remote procedure call in formato Json, rpc-json versione 2.0 http://en.wikipedia.org/wiki/JSON-RPC. Tutte le operazioni che vengono richieste ai moduli, o che i moduli richiedono ad altri moduli sono rpc-json.
Il trasporto RF24Network include crittografia AES, messaggi multipacchetto con topologia ad albero (http://it.wikipedia.org/wiki/Topologia_di_rete#Topologia_ad_albero).
I moduli possono essere così caratterizzati dal trasporto supportato, se eseguono RPC, se richiedono RPC, se pubblicano su MQTT.
I tre moduli prototipati in r-map sono coì demoninati e caratterizzati:
att/pas | Seriale | TCP/IP | radio RF24Network | pubblish on MQTT | funzioni server | |
Modulo Base | attivo | Si | Si | da svilupare | Si | Si |
Modulo master | attivo/passivo | Si | Si | Si | Si | No |
Modulo satellite | passivo | Si | No | Si | No | No |
procedure supportate
Ogni comando/risposta Jsonrpc sarebbe meglio rimanesse entro i 144 caratteri.
configure
configura il modulo.
parametri:
- bool reset: riporta le configurazioni ai valori di default
- char mqttrootpath: prima parte del path di pubblicazione su MQTT
- int mqttsampletime: intervallo tra le minure in secondi
- char mqttserver: server MQTT
- char mqttuser: MQTT user
- char mqttpassword: MQTT password
- int[16] key: AES key
- int[16] iv: AES CBC iv
- char ntpserver: server MQTT
- int[6] date: date and time [2014,2,10,18,45,18]
- bool save: salva le configurazioni permanentemente
- long int thisnode: RF24Network node address
- int channel: RF 24 channel
- byte mac[6]= ethernet mac address; use (0,0,0,0,0,1) for master1, use (0,0,0,0,0,2) for master2
relativi a un sensore:
- char mqttpath: seconda parte del path di pubblicazione su MQTT
- char driver: driver locale del sensore
- int node: RF24Network node
- char type: driver remoto
- int address: address I2C
getvalues
torna i valori di una o più osservazione/campionamento.
parametri:
- char driver: driver locale del sensore
- int node: RF24Network node
- char type: driver remoto
- int address: address I2C
rf24rpc
Esegue una procedura remota su un altro nodo tramite trasporto RF24Network. In pratica incapula una RPC in una RPC.
- node": nodo su cui eseguire la remote call procedure
- tutti parametri standard di una json-rpc del tipo
"jsonrpc":"2.0","method":"configure","params":{"reset":true},"id":0},"id":0
toggleled
Attuatore che accende e spegne un led.
parametri: bool status: true=on; false=off
Moduli prototipizzati
le opzioni sono 3, i prezzi solo indicativi:
- modulo base
- modulo base+master
- modulo base+master+satellite
- Il modulo base acquisisce dai sensori con un task temporizzato al fine di pubblicare dati sul bus MQTT , svolge funzioni di archiviazione, calcolo, composizione report e invio all'acentratore tramite AMQP e molt altre cose
- Il modulo master acquisisce dai sensori con un task temporizzato al fine di pubblicare dati sul bus MQTT
- Il modulo satellite è a bassissimo consumo e appartiene a una rete radio sui 2Ghz ad albero nRF24Network
Modulo base
Il modulo A richiede alimentazione 220V (o in alternativa qui non prevista power over ethernet) e cavo ethernet
Hardware
(approssimativamente 75 E):
- raspberry B
- sdcard
- alimentatore
- connettore gpio
- breadboard
- sensori
Programmazione
Attualmente è possibile scaricare una immagine già pronta di scheda SD nella pagina software alla voce Software pronto all'uso.
Modulo master
Il modulo B richiede cavo ethernet con power over ethernet.
hardware
(approssimativamente 65 E)
- arduino mega 2560
- breadborad
- modulo RTC
- modulo mini ethernet ENC60
- modulo radio RF24
- cavo power over ethernet
- stabilizzatore dcdc switched
- sensori
Schema
Verifiche hardware
La prima verifica da fare ovviamente è di non aver fatto cortocircuiti sull'alimentazione.
Poi si può iniziare a controllare che tutto si accenda sia arduino che il led sulla scheda di rete che quello sul convertitore dc/dc.
Conviene verificare da subito se i sensori I2C vengono visti, questo è necessario per la configurazione del modulo.
C'è uno schech già pronto all'uso nel repository:
cd /home/rmap/svn/r-map-code/trunk/arduino/ino/i2cscanner ino build -m mega2560 ino upload -m mega2560 ino serial
Perciò
[rmap@pidora i2cscanner]$ ino serial Guessing serial port ... /dev/ttyACM0 picocom v1.7 port is : /dev/ttyACM0 flowcontrol : none baudrate is : 9600 parity is : none databits are : 8 escape is : C-a local echo is : no noinit is : no noreset is : no nolock is : yes send_cmd is : sz -vv receive_cmd is : rz -vv imap is : omap is : emap is : crcrlf,delbs, Terminal ready I2CScanner ready! starting scanning of I2C bus from 1 to 7F...Hex addr: 1 addr: 2 addr: 3 addr: 4 addr: 5 addr: 6 addr: 7 addr: 8 addr: 9 addr: A addr: B addr: C addr: D addr: E addr: F addr: 10 addr: 11 addr: 12 addr: 13 addr: 14 addr: 15 addr: 16 addr: 17 addr: 18 addr: 19 addr: 1A addr: 1B addr: 1C addr: 1D addr: 1E addr: 1F addr: 20 addr: 21 addr: 22 addr: 23 addr: 24 addr: 25 addr: 26 addr: 27 addr: 28 addr: 29 addr: 2A addr: 2B addr: 2C addr: 2D addr: 2E addr: 2F addr: 30 addr: 31 addr: 32 addr: 33 addr: 34 addr: 35 addr: 36 addr: 37 addr: 38 addr: 39 addr: 3A addr: 3B addr: 3C addr: 3D addr: 3E addr: 3F addr: 40 addr: 41 addr: 42 addr: 43 addr: 44 addr: 45 addr: 46 addr: 47 addr: 48 found! <<< questo è il sensore di temperatura TMP102 (può essere trovato anche all'indirizzo 40 a seconda di come è collegato il pin ADD0, va aggiornata anche la conf) addr: 49 addr: 4A addr: 4B addr: 4C addr: 4D addr: 4E addr: 4F addr: 50 found! <<<< modulo RTC ci deve essere addr: 51 addr: 52 addr: 53 addr: 54 addr: 55 addr: 56 addr: 57 addr: 58 addr: 59 addr: 5A addr: 5B addr: 5C addr: 5D addr: 5E addr: 5F addr: 60 addr: 61 addr: 62 addr: 63 addr: 64 addr: 65 addr: 66 addr: 67 addr: 68 addr: 69 addr: 6A addr: 6B addr: 6C addr: 6D addr: 6E addr: 6F addr: 70 addr: 71 addr: 72 addr: 73 addr: 74 addr: 75 addr: 76 addr: 77 addr: 78 addr: 79 addr: 7A addr: 7B addr: 7C addr: 7D addr: 7E addr: 7F done
Per uscire: CTRL+A e CTRL+X
Thanks for using picocom
Lo scan dovrebbe durare pochi secondi se rimane piantato così:
starting scanning of I2C bus from 1 to 7F...Hex
c'è qualcosa che non va sul bus I2C
Programmazione
Utilizzare il modulo A, accedere con l'utente rmap (pass rmap).
E' presente sulla home una dir svn che contiene tutto il software:
cd /home/rmap/svn/r-map-code/trunk svn up cd arduino/ino/rmap ino clean ln -sf /home/rmap/svn/r-map-code/trunk/arduino/ino/rmap/src/rmap_master.h /home/rmap/svn/r-map-code/trunk/arduino/ino/rmap/src/rmap_config.h ino build -m mega2560 ino upload -m mega2560 ino serial
un pò di spiegazione: nella home dell'utente rmap è presente tutto l'archivio software
con il comando svn up si aggiorna l'archivio scaricando l'utima versione dal repository
ino clean pulisce l'ambiente per la compilazione
linkiamo nello skecth la configurazione per il modulo master dato, l'unica cosa che cambia tra lo sketch del modulo master e quella del modulo satellite è questa e viene gestita cambiando il puntamento al file di configurazione
ino build compila il software per la piattaforma mega 2560
ino upload carica lo schetcjh su arduino
ino serial attiva il monitor seriale
Configurazione
aggiornare le info sul file station_configure.py
inserendo le ccordinate geografiche del luogo i cui si troverà il sensore, le coordinate si trovano in due punti del file
cd /home/rmap/svn/r-map-code/trunk/python python station_configure.py start configuration reset: False reset: False reset: False **** Collegare il pin 8 a massa e premere il pulsante Reset **** reset: False reset: False reset: False reset: {'reset': True} save {'save': True} mqttrootpath: {'mqttrootpath': 'meteo/-/1012345,4412345/rmap/'} mqttserver: {'mqttsampletime': 5, 'mqttserver': 'mqttserver'} mqtt user and password: {'mqttpassword': 'abracadabra', 'mqttuser': 'testuser'} ntpserver: {'ntpserver': 'ntpserver'} thisnode: {'thisnode': 0, 'mac': 'OK', 'channel': 93} key: {'key': 'OK'} iv: {'iv': 'OK'} add driver: {'id': 0} add driver: {'id': 1} save {'save': True}
Modulo satellite
Il modulo C richiede batterie con stabilizzatore (e pannellino solare con regolatore di corrente
hardware
(approssimativamente 45 E)
- moulo microduino core+ (ATmega644p@5V 16MHz)
- modulo microduino RF24 con antenna
- modulo microduino seriale USB FT232R
- sensori