Differenze tra le versioni di "Gruppo Meteo/RemoteProcedure"

Da raspibo.
Jump to navigation Jump to search
 
(42 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
 
= r-map implementation overview =
 
= r-map implementation overview =
  
=== MQTT e Json-rpc ===
+
=== Remote procedure supportate ===
  
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:
 
 
{|class="wikitable"
 
|                  || 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.
 
Ogni comando/risposta Jsonrpc sarebbe meglio rimanesse entro i 144 caratteri.
  
Riga 48: Riga 18:
 
* int[16] iv: AES CBC iv
 
* int[16] iv: AES CBC iv
 
* char ntpserver:  server MQTT
 
* char ntpserver:  server MQTT
* int[6] date: date and time [2014,2,10,18,45,18]
+
* int[6] date: set date and time [2014,2,10,18,45,18]
* bool save: salva le configurazioni permanentemente
 
 
* long int thisnode: RF24Network node address
 
* long int thisnode: RF24Network node address
 
* int channel: RF 24 channel
 
* 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
 
* byte mac[6]= ethernet mac address; use (0,0,0,0,0,1) for master1, use (0,0,0,0,0,2) for master2
 +
* bool save: save configuration into EEPROM
  
relativi a un sensore:
+
relativi a un sensore (aggiunge un sensore):
 
* char mqttpath: seconda parte del path di pubblicazione su MQTT
 
* char mqttpath: seconda parte del path di pubblicazione su MQTT
 
* char driver: driver locale del sensore
 
* char driver: driver locale del sensore
Riga 61: Riga 31:
 
* int address: address I2C
 
* int address: address I2C
  
==== getvalues ====
+
==== prepare ====
 +
prepare sensors for successive read
 +
return waittime in ms; the time to wait before read the data from sensor
 +
 
 +
parametri:
 +
* char driver: driver locale del sensore
 +
* int node: RF24Network node
 +
* char type: driver remoto
 +
* int address: address I2C
 +
 
 +
==== prepandget ====
 +
get the measure from sensor
 +
 
 +
parametri:
 +
* char driver: driver locale del sensore
 +
* int node: RF24Network node
 +
* char type: driver remoto
 +
* int address: address I2C
 +
 
 +
==== getjson ====
 +
return json with btable and values
 
torna i valori di una o più osservazione/campionamento.
 
torna i valori di una o più osservazione/campionamento.
  
Riga 72: Riga 62:
 
==== rf24rpc ====
 
==== rf24rpc ====
 
Esegue una procedura remota su un altro nodo tramite trasporto RF24Network.
 
Esegue una procedura remota su un altro nodo tramite trasporto RF24Network.
In pratica incapula una RPC in una RPC.
+
In pratica incapsula una RPC in una RPC.
 
* node": nodo su cui eseguire la remote call procedure
 
* node": nodo su cui eseguire la remote call procedure
 
*  tutti parametri standard di una json-rpc del tipo  
 
*  tutti parametri standard di una json-rpc del tipo  
"jsonrpc":"2.0","method":"configure","params":{"reset":true},"id":0},"id":0
 
  
==== toggleled ====
+
{"jsonrpc":"2.0","method":"configure","params":{"reset":true},"id":0},"id":0}
Attuatore che accende e spegne un led.
+
 
 +
==== togglepin ====
 +
Attuatore che accende/spegne uno o più pin.
  
 
parametri:
 
parametri:
bool status: true=on; false=off
+
* integer n: pin number (pins 4,5,6,7 are supported)
 
+
* bool s: 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 [http://www.raspibo.org/wiki/index.php/Gruppo_Meteo/Software 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 ====
 
 
 
[[File:R-map schema.png|800px]]
 
 
 
 
 
==== 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 ====
 
  
  cd /home/rmap/svn/r-map-code/trunk/python
+
  {"jsonrpc": "2.0", "method": "togglepin", "params": [{"n":4,"s":true},{"n":5,"s":false}], "id": 0}
python station_configure.py
 
start configuration
 
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: False
 
add driver: False
 
add driver: False
 
  
 +
==== sdrecovery ====
 +
Richiede il re-invio dei dati non trasmessi al server; senza parametri
  
==== Modulo satellite ====
+
{"jsonrpc": "2.0", "method": "sdrecovery", "params": [], "id": 0}
Il modulo C richiede batterie con stabilizzatore (e pannellino solare con regolatore di corrente
 
  
===== hardware =====
+
==== reboot ====
(approssimativamente 45 E)
+
Richiede il riavvio della stazione
  
* moulo microduino core+ (ATmega644p@5V 16MHz)
+
{"jsonrpc": "2.0", "method": "reboot", "params": [], "id": 0}
* modulo microduino RF24 con antenna
 
* modulo microduino seriale USB FT232R
 
* sensori
 

Versione attuale delle 19:10, 5 ott 2016

r-map implementation overview

Remote 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: set date and time [2014,2,10,18,45,18]
  • 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
  • bool save: save configuration into EEPROM

relativi a un sensore (aggiunge 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

prepare

prepare sensors for successive read return waittime in ms; the time to wait before read the data from sensor

parametri:

  • char driver: driver locale del sensore
  • int node: RF24Network node
  • char type: driver remoto
  • int address: address I2C

prepandget

get the measure from sensor

parametri:

  • char driver: driver locale del sensore
  • int node: RF24Network node
  • char type: driver remoto
  • int address: address I2C

getjson

return json with btable and values 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 incapsula 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}

togglepin

Attuatore che accende/spegne uno o più pin.

parametri:

  • integer n: pin number (pins 4,5,6,7 are supported)
  • bool s: true=on; false=off
{"jsonrpc": "2.0", "method": "togglepin", "params": [{"n":4,"s":true},{"n":5,"s":false}], "id": 0}

sdrecovery

Richiede il re-invio dei dati non trasmessi al server; senza parametri

{"jsonrpc": "2.0", "method": "sdrecovery", "params": [], "id": 0}

reboot

Richiede il riavvio della stazione

{"jsonrpc": "2.0", "method": "reboot", "params": [], "id": 0}