Differenze tra le versioni di "Centralina livello 1/Notes"
(11 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | + | [[Centralina livello 1|Torna a Centralina livello 1]] | |
+ | |||
+ | == Chiavi e codici extra == | ||
+ | |||
+ | Nell'ultimo [[ Centralina_livello_1/Dev_HTRL_wAE | device ]] ho inserito delle nuove definizioni utili per debug e controllo dei devices. | ||
+ | |||
+ | ;<nowiki>I/<C>/<P>/<S>/Start { "ID" : "WDT", "Valore" : "1" }</nowiki> | ||
+ | :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. | ||
+ | |||
+ | ;<nowiki>I/<C>/<P>/<S>/DelayRead { "ID" : "KTdelay", "Valore" : "<numero>" }</nowiki> | ||
+ | :Questa stringa viene inviata ad ogni cambio temporizzazione di lettura. | ||
+ | :Utile per sapere a quanto e` impostato il timer di lettura sul device. | ||
+ | |||
+ | ;<nowiki>I/<C>/<P>/<S>/Errore { "ID" : "Errore", "Valore" : "<?>" }</nowiki> | ||
+ | :Questa stringa viene inviata ad ogni errore ? | ||
+ | :Usata nell'ultimo [[ Centralina_livello_1/Dev_HTRL_wAE | 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.<br/> | ||
+ | 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: | Per ricordarsi come estrarre le info: | ||
<pre> | <pre> | ||
Riga 42: | Riga 151: | ||
>>> | >>> | ||
</pre> | </pre> | ||
+ | |||
+ | Ho controllato, sembra che mosquitto scriva senza il primo backslash, quindi: | ||
+ | <pre> | ||
+ | >>> 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 | ||
+ | >>> | ||
+ | </pre> | ||
+ | |||
+ | == 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 |
Versione attuale delle 11:37, 7 mag 2017
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