Nell’ultimo post riguardante l’impianto domotico MyHome ed il protocollo OpenWebNet abbiamo visto dato un’occhiata ai vari tipi di messaggi e alla modalità di valorizzazione dei relativi campi.
Ora cercheremo di capire come possiamo connetterci ad un gateway MyHome e cosa possiamo fare dopo che ci siamo connessi.
Tutti i gateway TCP (F453AV, F452, Touch Screen, MH200, ...) supportano due tipi di sessioni:
1) Sessione Comando: usata per inviare comandi dal client al gateway
2) Sessione Monitor: usata dal gateway per notificare il client di qualche evento
I gateway restano in ascolto sulla porta TCP 20000.
Gli steps per creare una sessione con il gateway sono 3:
1) Connessione
2) Identificazione
3) Comunicazione
Prima di vedere questi tre steps, cerchiamo di capire cos’è l’IP range, visto che è un concetto che crea abbastanza confusione all’interno della community MyHome.
Possiamo affermare che esistono due tipi di applicazioni: quelle sviluppate da Bticino e quelle sviluppate da noi (non fa una piega :D). Ma quali sono le differenze??
Vediamo un piccolo esempio:
Supponiamo di aver installato la nostra applicazione su una macchina X, quando ci connettiamo al gateway MyHome il gateway verificherà che l’indirizzo IP della macchina X fa parte degli IP “conosciuti” sul gateway (IP range), cioè degli IP che possono connettersi al gateway senza utilizzare il processo di autenticazione (il processo di autenticazione non è stato rilasciato da Bticino). Nel caso l’IP di X sia in quella lista la nostra applicazione potrà connettersi senza problemi, nel caso contrario non riuscirà a connettersi.
E voi direte: e quindi?
Supponiamo che nella macchina X, oltre alla vostra applicazione, sia installato il software di Bticino per la configurazione del gateway. L’IP di X è all’interno dell’IP range. Se provate a connettere l’applicazione sviluppata da Bticino al gateway, la connessione fallirà! Questo perchè:
1) Il gateway controlla se l’IP di X è all’interno dell’IP range
2) Se è così (come nel nostro caso) il gateway non utilizzerà il processo di autenticazione, quindi non invierà all’applicazione determinati messaggi usati nel processo di autenticazione.
3) Le applicazioni sviluppate da Bticino si aspettano questi messaggi e non ricevendole chiudono la connessione
Per cui se volete usare un sw scritto da Bticino (ad esempio Ti453, Ti452, ...) e l’IP della vostra macchina è nella lista degli indirizzi IP aperti dovete cambiare IP alla macchina e assegnarne uno che non sia all’interno dell’IP range.
Bene ora possiamo passare ai tre steps per connettersi al gateway!
Connessione:
Il client effettua una connessione TCP sulla porta 20000 specificando l’indirizzo del server. Se la connessione ha successo il server invia un ACK ( *#*1## )
Il server si mette in attesa del “session identificator” che deve pervenire entro 30 secondi (altrimenti il server chiude la sessione)
Il SESSION IDENTIFICATOR rappresenta il tipo di sessione che vogliamo aprire con il gateway:
- Comando: *99*0##
- Monitor: *99*1##
Identificazione:
Una volta che il server ha ricevuto il SESSION IDENTIFICATOR controllerà se l’indirizzo IP del client richiede l’autenticazione.
Se è necessaria l’autenticazione, il server invia l’open *#SEQ1## e attende (nei 30 secondi) *#SEQ2## e analizza la password.
Bticino non ha rilasciato l’algoritmo per generare la “password” ( SEQ2 ) per cui se creiamo un’applicazione che interagisce con l’impianto MyHome dobbiamo per forza inserire l’IP del computer su cui gira il programma sulla lista degli IP “conosciuti” dal gw (IP range). Questo lo si può fare tramite i programmi di configurazione per i gateway.
Una volta inviato il SESSION IDENTIFICATOR il gateway ci ritornerà un altro ACK ( *#*1## ). Qualora la connessione necessiti di password e la password inviata non è corretta, il server ritornerà un NACK (*#0##)
Communicazione:
Ora a seconda del tipo di sessione stabilita possiamo o mandare comandi all’impianto
oppure aspettare che accada qualcosa all’interno dell’impianto (viene accesa una luce, cambia la temperatura, etc...)
Nel prossimo post vedremo quali sono i comandi per gestire l’illuminazione e le automazioni :)