# OpenWebNet

OpenWebNet è un protocollo di comunicazione progettato e sviluppato da Bticino a partire dal 2000.
Tale protocollo nasce per astrarre il bus di campo SCS, consentendo l'interazione con tutte le funzioni rese disponibili dal sistema di domotica MyHome tramite l'utilizzo di software.
L'evoluzione recente permette di utilizzare il protocollo OpenWebNet per interagire con diversi sistemi di home automation (ad esempio i sistemi basati su bus KNX e DMX) mediante l'utilizzo di appositi gateway.
Lo standard OpenWebNet è divulgato sulla community MyOpen.

## Protocollo OpenWebNet

Il protocollo è pensato per essere indipendente dal mezzo di comunicazione utilizzato. Ad esempio è possibile utilizzare un applicativo su pc collegato o via ethernet o via seriale RS232 o via USB ad un gateway direttamente connesso al sistema domotico da controllare.
Chiunque può richiedere l'estensione dei messaggi che costituiscono il linguaggio di interazione con il campo.
È sufficiente proporre la propria RFC che verrà esaminata e divulgata se risponde ai requisiti della sintassi dell'OpenWebNet.

### Sintassi

Un messaggio OpenWebNet è strutturato con campi successivi che via via specificano il dettaglio dell'informazione contenuta; esso è caratterizzato da una struttura con campi a lunghezza variabile separati dal carattere speciale ‘*' e chiuso con ‘##'.
I caratteri ammessi nei campi sono numeri e il carattere '#'.
La struttura di un messaggio è dunque:
Ad oggi è ammessa la seguente tipologia di campi:
* CHI
* DOVE
* COSA
* GRANDEZZA
* VALORE
CHI
Individua la funzione dell'impianto domotico interessata al messaggio OpenWebNet in questione.
Ad esempio: CHI = 1, individua i messaggi per la gestione dell'illuminazione
DOVE
Individua l'insieme di oggetti interessati al messaggio.
Può essere un singolo oggetto, un gruppo di oggetti, un ambiente specifico, l'intero sistema, etc.
Per ogni CHI (e quindi per ogni funzione) viene specificata una tabella dei DOVE.
Il tag DOVE può anche contenere dei parametri (facoltativi) specificati in questo modo: DOVE#PAR1#PAR2...#PARn.
Esempio di dove: tutte le luci del gruppo 1, il sensore 2 della zona 1 del sistema di antifurto, etc...
COSA
Individua o un'azione da compiere o uno stato da leggere.
Per ogni CHI (e quindi per ogni funzione) viene specificata una tabella dei COSA.
Il campo COSA può anche contenere dei parametri (facoltativi) specificati in questo modo: COSA#PAR1#PAR2...#PARn.
Esempio di azioni: accendi luce, dimmer al 75%, abbassa tapparella, accendi radio, ecc. Esempio di stati: luce accesa, allarme attivo, batteria scarica, ecc.
GRANDEZZA
Individua una grandezza che caratterizza l'oggetto a cui fa riferimento il messaggio.
Per ogni CHI (e quindi per ogni funzione) viene specificata una eventuale tabella delle GRANDEZZE.
È possibile richiedere/leggere/scrivere il valore di una grandezza. Ad ogni grandezza sono associati un numero prefissato di valori, specificati dal campo VALORE
Esempio di grandezza: la temperatura di un sensore, il volume di un altoparlante, la versione firmware di un dispositivo.
VALORE
Individua il valore letto o da scrivere della grandezza richiesta/letta/scritta nel messaggio.

### Messaggi

Sono individuabili 4 tipologie di messaggi OpenWebNet
* Messaggi di Comando / Stato
* Messaggi di Richiesta Stato
* Messaggi di Richiesta/Lettura/Scrittura Grandezza
* Messaggi di Acknowledge
Messaggi di Comando / Stato
Messaggi di Richiesta Stato
Messaggi di Richiesta/Lettura/Scrittura Grandezza
Messaggi di Acknowledge

## Gateway OpenWebNet

È possibile interagire con i bus di campo mediante dei gateway.
Esistono due tipologie di gateway che comunicano mediante diversi standard di comunicazione:
* Gateway ethernet (Linux based)
* Gateway USB / RS232
Gateway ethernet
Sono dei web server embedded, che funzionano da traduttore tra i messaggi OpenWebNet trasmessi su protocollo TCP/IP e i messaggi del bus di campo da controllare.
È possibile controllare tre diversi bus di campo:
* BUS SCS
* Konnex
* DMX
Gateway USB / RS232
Si tratta di un gateway che funziona da traduttore tra i messaggi OpenWebNet trasmessi porta USB e/o sulla porta Seriale RS232 e i messaggi del bus di campo SCS.

## Esempi

Esempi di messaggi OpenWebNet
* Messaggi di comando
Spegnimento della luce di indirizzo 77
CHI = 1 COSA = 0 DOVE = 77
* Messaggi di stato
Attivazione dello scenario 1 del modulo scenari di indirizzo 23
CHI = 0 COSA = 1 DOVE = 23
* Messaggi di richiesta stato
Richiesta stato del termostato di indirizzo 1
CHI = 4 DOVE = 1
* Messaggi di Richiesta Grandezza
Richiesta temperatura misurata dal termostato di indirizzo 44
CHI = 4 DOVE = 44 GRANDEZZA = 0
* Messaggi di Lettura Grandezza
Temperatura misurata dal termostato di indirizzo 44
CHI = 4 DOVE = 44 GRANDEZZA = 0 VALORE1 = 0251 (T=+25,1 °C) VALORE2 = 2 (Impianto in modalità "condizionamento")
* Messaggi di Scrittura Grandezza
Imposta volume in ambiente 2 al 50%
CHI = 16 DOVE = 2 GRANDEZZA = 1 VALORE1 = 16