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 20: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}