DONOFF iot dimmer luminoso
Posto suIl firmware
Quello che ti servePer compilare e trasferire il firmware DONOFF su un ESP-01 avrai bisogno di:
- L'IDE Arduino
- L'estensione principale ESP8266 (2.4.2 o 2.5.0)
- Installato lo "Strumento di caricamento degli schizzi ESP8266"
- La patch PUYA (per ESP8266 core versione 2.4.2)
Molte schede ESP-01 che puoi acquistare ora hanno un chip flash che causa problemi nella lettura del contenuto della memoria flash (hanno un chip Flash di marca PUYA). Per risolvere i problemi, è disponibile una patch temporanea per la versione 2.4.2 (guarda qui) disponibile (probabilmente questa patch è inclusa nella versione 2.5.0 dell'estensione ESP8266). Per la versione 2.4.2 (e precedenti) è imperativo applicare questa patch nella catena degli strumenti.
WebSocket: una breve introduzione
Il world wide web è stato creato con l'idea che un client (un browser, per esempio) faccia una richiesta a un server e che il server onori questa richiesta inviando una pagina web (modello richiesta-risposta). Lo svantaggio di questo metodo è che il server può inviare qualcosa a un client solo se il client lo richiede espressamente. Ma cosa succede se un server dispone di nuove informazioni che desidera inviare al client? Per far fronte a questo problema, sono state sviluppate diverse strategie che consentono al server di "spingere" i dati al client. Una delle strategie più popolari (al di fuori di AJAX) era il polling lungo. Il server e il client mantengono aperta la connessione HTTP finché il server non dispone di dati da inviare al client.Il problema con tutte queste soluzioni è che implicano l'overhead del protocollo HTTP. Ogni "richiesta HTTP" invia una montagna di intestazioni e cookie al server. E questo diventa rapidamente una grande montagna di dati che devono essere inviati sulla linea, il che a sua volta causa ritardi (latenza). Se vuoi costruire qualcosa come un sistema in tempo REAL basato su browser, vuoi il minor "ritardo" possibile per mantenere le cose senza intoppi.
Ciò di cui il www ha bisogno è una connessione 'persistente', 'a basso ritardo' che supporti le transazioni avviate dal client e/o dal server! Ed è esattamente ciò che offre WebSockets e il firmware DONOFF fa ampio uso di questa funzionalità.
Come funzionano i WebSocket
WebSocket mantiene una connessione tra il client e il server che può essere utilizzata da entrambe le parti per scambiarsi messaggi in qualsiasi momento.Il client stabilisce la connessione WebSocket tramite un processo noto come "handshake WebSocket". Il processo inizia quando il client invia una normale richiesta HTTP al server. Questa richiesta contiene una cosiddetta "intestazione di aggiornamento" attraverso la quale il server sa che il client desidera stabilire una connessione WebSocket.
Se il server supporta il protocollo WebSocket, accetta l'aggiornamento e lo conferma al client restituendo un'intestazione di aggiornamento.
Ora che l'handshake è stato concordato, la connessione HTTP utilizzata fino a quel momento viene sostituita da una connessione WebSocket sulla stessa connessione TCP/IP sottostante. D'ora in poi, entrambe le parti (client e server) possono scambiarsi dati. I dati vengono inviati tramite WebSocket come messaggio tramite uno o più pacchetti contenenti i dati inviati (il payload).
Come funziona il firmware DONOFF
Prima di approfondire il funzionamento del firmware DONOFF, spiego innanzitutto alcuni concetti. Cosa intendo per:- Master – questo è il DONOFF che ha il controllo sul proprio Dispositivo locale e su tutti i DONOFF Slave
- Slave – questo è un DONOFF che controlla solo il proprio dispositivo locale
- Server – questo è il web server su un DONOFF (un Master o uno Slave)
- Client – è il browser che si connette a un web server DONOFF. È l'interfaccia tra l'hardware e l'utente
- local-Device – questo è il dispositivo fisico che ogni DONOFF (Master o Slave) serve
Dopo che un DONOFF è collegato alla rete, avvierà un server web. Se il server web ha un URL come:
“http://nomehost.local/”
dal client, il server invierà la pagina index.html al client.
Questo file index.html contiene, oltre al codice html, anche codice Javascript. Il codice Javascript garantisce che venga stabilita una connessione WebSocket con il server web.
Dopo che questa connessione è stata stabilita, il client invia il messaggio "getDevInfo" al server a cui risponde con un messaggio contenente il nome host di questo DONOFF, che tipo di DONOFF è (Master o Slave) e quale firmware è in esecuzione sul DONOFF.
Il client invia quindi un messaggio chiedendo la versione più recente del DOM ("updateDOM"). Il server ora crea un DOM contenente il suo dispositivo locale (se è un master, di tutti gli altri DONOFF che conosce) e lo invia al client.
Da qui in poi, tutte le comunicazioni tra il client e il server sono guidate dagli eventi. Se l'utente sposta uno slider sullo schermo, il client lo noterà e invierà un nuovo valore dello slider al server che, a sua volta, regolerà l'intensità del suo dispositivo locale. Quando l'utente fa clic sul pulsante On/Off, il client invierà il nuovo stato al server, che intraprenderà quindi le azioni necessarie per soddisfare la richiesta dell'utente.
Tuttavia, c'è qualcos'altro che viene attivato quando lo stato di un dispositivo cambia:
- Se il DONOFF è uno Slave, invierà una richiesta HTTP al DONOFF Master con il nuovo stato del suo dispositivo locale. Il Master elaborerà queste informazioni e il server (Master) invierà questo nuovo stato al suo client. Quindi, se sposti lo slider sullo Slave, la nuova posizione dello slider sarà visibile anche sul client connesso al Master.
- Se il DONOFF è un Master, e non è un cambio del suo Local-Device, allora il Master invierà una richiesta HTTP allo Slave DONOFF con il nuovo stato del Dispositivo-Slave, che a sua volta cambierà il suo Local-Device e il server (slave) invierà il nuovo stato al suo client che quindi aggiornerà il browser. Insomma, ogni modifica sul client Master sarà visibile anche sul client Slave.
Se il Master riceve una richiesta HTTP da uno Slave che ancora non conosce, includerà i nuovi dati dello Slave nella sua lista di dispositivi e costruirà un nuovo DOM. Invierà quindi un DOM aggiornato (con il nuovo dispositivo al suo interno) al suo client. Il nuovo dispositivo sarà quindi visibile nel browser.
Queste informazioni vengono inviate in una richiesta HTTP:
IPaddress // identificazione univoca di questa etichetta DONOFF // come mostrato nella schermata Type // è un D)immer o un S)switch minState // qual è il valore PWM più basso che può essere impostato maxState // qual è il più alto Valore PWM che può essere impostato Stato // qual è il valore PWM corrente OnOff // la lampada è accesa o spenta battito cardiaco // quando è stato visto l'ultima volta questo DONOFF?
Periodicamente, ogni Slave invia una richiesta HTTP al Master per informarlo che è ancora online. Ogni volta che il Master riceve una richiesta HTTP, azzererà l'heartbeat dello Slave. Se il valore dell'heartbeat supera un certo limite, il Master concluderà che lo Slave non è più online e rimuoverà i dati di questo Slave dal suo elenco di dispositivi, costruirà un nuovo DOM e lo invierà al suo client.
Sistema dei nomi di dominio multicast
Il firmware DONOFF fa ampio uso delle funzionalità del Multicast Domain Name System (mDNS). Nelle piccole reti di computer (locali), il protocollo mDNS traduce i nomi host in indirizzi IP. È un cosiddetto servizio a configurazione zero. Grazie a questo protocollo è possibile accedere a un server o altro dispositivo utilizzando il suo nome mDNS (hostname) invece del suo indirizzo IP. In altre parole, se digiti "DONOFF.local" come URL nel tuo browser, mDNS cercherà l'indirizzo IP del dispositivo DONOFF e presenterà la pagina web del DONOFF Master (o Slave).Il firmware DONOFF sullo Slave lo utilizza per trovare l'indirizzo IP del Master DONOFF e tenere traccia delle modifiche nell'indirizzo IP. DONOFF non utilizza indirizzi IP fissi, quindi di volta in volta l'indirizzo IP del Master DONOFF potrebbe cambiare. Sebbene mDNS "funzioni" nella maggior parte delle reti, ci sono alcuni (vecchi) WiFiRouter ed estensori WiFi che bloccano i pacchetti mDNS. Se non riesci ad accedere a DONOFF tramite il suo hostname (