Centralina livello 1/Notes

Da raspibo.

Torna a Centralina livello 1

Indice

Chiavi e codici extra

Nell'ultimo device ho inserito delle nuove definizioni utili per debug e controllo dei devices.

I/<C>/<P>/<S>/Start { "ID" : "WDT", "Valore" : "1" }
Questa stringa viene inviata ad ogni avvio del device.
Per controllare quanti riavvi "automatici" si siano avuti, dovrebbe essere suffciente controllare quanti valori contiene il record nel database redis.
I/<C>/<P>/<S>/DelayRead { "ID" : "KTdelay", "Valore" : "<numero>" }
Questa stringa viene inviata ad ogni cambio temporizzazione di lettura.
Utile per sapere a quanto e` impostato il timer di lettura sul device.
I/<C>/<P>/<S>/Errore { "ID" : "Errore", "Valore" : "<?>" }
Questa stringa viene inviata ad ogni errore ?
Usata nell'ultimo device per sapere quando viene riavviata la WiFi.

Chiavi e codici, esempi da ultimo device

I/Test/Test/Test/Luce { "ID" : "Luce", "Valore" : "516" }

I/Test/Test/Test/Temperatura { "ID" : "STtemp", "Valore" : "21.80" }

I/Test/Test/Test/Umidita { "ID" : "SThum", "Valore" : "58.20" }

Appunti sparsi

Caso PIR

Invio da remoto, alla posizione:

I/Casa/Piano1/Sala/Messaggi

questa stringa:

{ "ID" : "PIR0", "Valore" : "0" }

La centralina legge, eventualmente manipola (aggiungendo "DataOra" : "2016-03-20 09:45:11"), e modifica/aggiunge il sensore a Redis ..

Nel caso cambi il valore, stessa cosa, arriva la stringa:

{ "ID" : "PIRangoloTV", "Valore" : "1" }

La centralina legge, eventualmente manipola, e modifica/aggiunge il sensore a Redis ..

Caso 1

Invio da remoto ad MQTT, alla posizione:

"I/C/P/S/Type"

questa stringa:

{ "ID" : "TEMProv1", "Valore" : "18.5" }

La centralina legge, manipola (aggiungendo "DataOra" : "2016-03-20 09:45:11"), e modifica/aggiunge il sensore a Redis ..

Vengono create due chiavi:

"I:C:P:S:Type:ID" e "I:C:P:S:Type:ID:Valori"

Nelle successive letture sara` solo inserito il valore nella lista "Valori" (l'utenza e` gia` inserita, non e` piu` necessario)

Tramite apposita pagina sara` poi possibile manipolare il resto dei dati, come la descrizione ed altre informazioni (un paio ancora al vaglio).

 ?

Ma se ci fosse una spia/lampada da accendere ?

Si potrebbe fare arrivare il feedback, ma come riconoscere che e` un'uscita ? Visto che arriverebbe come ingresso ?

Forse serve un TipoIO "F" ?

Record da/per MQTT

Percorso di ricevimento dato, dove una "centralina" remota scrive il valore:

TipoIO(I)/PosizioneC/PosizioneP/PosizioneS/Tipo

Percorso d'invio comando, dove scrivere l'eventuale comando utenza che sia letto dalla "centralina" remota:

TipoIO(O)/PosizioneC/PosizioneP/Possession/Tipo

Il dato in arrivo avra` solo informazioni di base, esempio di input:

{ "ID" : "NomeUtenza", "Valore" : "1" }

Sono omesse { "TipoIO" : "I" , "PosizioneC" : "Casa", "PosizioneP" : "Piano0", "PosizioneS" : "Corridoio", "Tipo" : "PIR" }, perche` ricavabili da struttura directory.
Ho eliminato anche "DataOra" : "2016-03-16 09:46:01", perche` non sempre e` a disposizione, mentre lo sara` nella centralina, quindi si occupera` lei di inserirlo nella fase di manipolazione dati pre-inserimento in redis.

Il dato per 'comando' avra`, per esempio, queste informazioni:

{ "ID" : "NomeUtenza", "Valore" : "1" }

Anche qua, possono essere omesse le info ricavabili dal percorso di "scambio" dati.

4

RPI3

apt-get install redis-server redis-tools python3-redis

apt-get install mosquitto mosquitto-clients

apt-get install python3-pip

apt-get install nginx-full fcgiwrap

pip3 install paho-mqtt

3

http://docs.python-guide.org/en/latest/scenarios/json/

2

Per ricordarsi come estrarre le info:

Python 3.4.2 (default, Oct 19 2014, 13:31:11) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> var = "/I/Casa1/Piano2/Stanza4/Message"
>>> var.split()
['/I/Casa1/Piano2/Stanza4/Message']
>>> var.split("/")
['', 'I', 'Casa1', 'Piano2', 'Stanza4', 'Message']
>>> var.split("/")[1]
'I'
>>> var.split("/")[2]                                                                                                                                                                                               
'Casa1'
>>> var.split("/")[3]
'Piano2'
>>> var.split("/")[4]
'Stanza4'
>>> var.split("/")[5]
'Message'
>>> var = "/I/Casa1/Piano2/Stanza4/Message"
>>> while (var != "/"):
...   #print(var)
...   print(os.path.basename(var))                                                                                                                                                                                  
...   var=os.path.split(var)[0]                                                                                                                                                                                     
... 
Message
Stanza4
Piano2
Casa1
I
>>> 

Ho controllato, sembra che mosquitto scriva senza il primo backslash, quindi:

>>> var = "I/Casa1/Piano2/Stanza4/Message"
>>> while (var != ""):
...   #print(var)
...   print(os.path.basename(var))
...   var=os.path.split(var)[0]
... 
Message
Stanza4
Piano2
Casa1
I
>>> 

1

http://nginx.org/en/docs/http/configuring_https_servers.html

apt-get install ssl-cert

make-ssl-cert generate-default-snakeoil --force-overwrite


pip3 install paho-mqtt

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti