“RECYCLED “ Rendiamo liberi i Gateway Xiaomi (Zigbee2Mqtt – Ble – Audio) con il firmware OpenWrt!
Premessa ,la sostituzione del firmware originale è prevista solo per i seguenti modelli:
Versione EU DGNWG05LM Versione CN ZHWG11LM.
Prima di iniziare :
- Ricordatevi di abbinare il Gateway alla rete wifi tramite Mi home.
- Configurate e avviate il broker MQTT nel vostro Home Assistant.
Per poter accedere all’interno del nostro Gateway e sostituire i firmware c’è bisogno di avere l’accesso come “root”.
Per avere tale accesso dobbiamo eseguire una modifica hardware, saldando 3 fili a una interfaccia FT232RL FTDI da USB a TTL (senza saldate nessuna alimentazione).
Per smontare il Gateway, vanno tolti i 3 gommini, sotto vi troverete le viti di smontaggio come da foto.
Usate il seguente cacciavite Spanner Head.
Punti di saldatura.
Saldare 3 contatti GND, RX, TX.
Eseguite le saldature, colleghiamo rispettivi cavi alla UART e attacchiamo il Gateway alla presa di corrente.
ATTENZIONE!!!
IL GATEWAY E’ ALIMENTATO 220V, PER CUI PRENDETE LE DOVUTE PRECAUZIONI !!!!
Per poter interagire con il Gateway e abilitare il root , useremo Putty con un baudrate di 115200 e la COM abbinata all’USB del FTDI
Avviato Putty via Serial e alimentato il Gateway vi comparirà la seguente schermata.
Dovete essere veloci a inserire tramite copia e incolla il seguente comando, ripetutamente:
setenv bootargs "${bootargs} single rw init=/bin/bash" && boot
Se il comando passa durante il boot vi si presenterà una bash consolle, quindi digitate:
passwd
Inserite una password di vostra scelta , oppure premete tre volte invio lasciando la password vuota.
Nel caso in cui non si presentasse la bash consolle, riavviate il Gateway e rifate la procedura inserendo i 2 comandi qui sopra.
Eseguito il root, possiamo abilitare il servizio SSH per gestire il Gateway da una consolle alternativa, lasciando da parte il collegamento con la seriale.
Per abilitare il server ssh sul gateway aggiungere la seguente riga al file /etc/rc.local aiutandoti con il file editor vi, digitate :
vi /etc/rc.local
All’interno del file rc.local prima della riga “/home/root/fac/fac_test” inerite il seguente comando:
/etc/init.d/dropbear start &
Salvate ed uscite dall’editor.
Vi consiglio di leggervi come usare l’editor “vi” cercando in google.
L’inserimento del comando “dropbear” abiliterà al boot del Gateway il collegamento SSH da poter gestire poi da consolle.
A questo punto staccate ftdi dalla presa USB e dal Gateway. Riavviate il gateway e tramite Putty collegatevi via SSH .
IP GATEWAY porta 22
Se il collegamento SSH avrà buon fine , ci troveremo in questa situazione :
Ora siamo pronti a flashare il firmware alternativo OPENWRT con il metodo “OVER THE AIR”
Eseguiamo prima di tutto un backup completo del Gateway .
Nel caso voleste tornare al gateway originale, tale ipotesi è fattibile tramite un cavo usb collegato e saldato alla scheda del gateway .
Usando MGTOOLS che trovate all’interno di questo file.
Ora siamo pronti a flashare il firmware alternativo OPENWRT con il METODO OVER THE AIR
Eseguiamo prima di tutto un backup completo del Gateway .
Colleghiamoci via ssh al nostro Device e digitiamo :
tar -cvpzf /tmp/lumi_stock.tar.gz -C / . --exclude = ' ./tmp/* ' --exclude = ' ./proc/* ' --exclude = ' ./sys/* '
Al termine del backup usate Winscp, collegatevi al gateway con protollo SCP nome utente “root” password “pw_scelta”.
Recatevi nella directory top/lumi e salvatevi il file “lumi_stock.tar.gz” , una volta salvato potete cancellarlo dal gateway.
Ora passiamo al flash del nuovo Firmware OVER THE AIR.
Collegati via SSH ed inviamo il seguente comando da consolle:
-
echo -e "GET /openlumi/owrt-installer/main/install.sh HTTP/1.0\nHost: raw.githubusercontent.com\n" | openssl s_client -quiet -connect raw.githubusercontent.com:443 2>/dev/null | sed '1,/^\r$/d' | bash
Questo comando interromperà tutti i processi sul gateway.
È un comportamento normale se la tua connessione ssh viene interrotta.
Il processo di flashing richiede alcuni minuti. Al termine, il gateway creerà una rete Wi-Fi aperta con il nome “OpenWrt”.
Non abbiate fretta, aspettate! (circa 10 min.)
Si tratta di attendere che il gateway venga flashato e si metta in modalità Access Point.
Nel caso il flash non andasse a buon fine , con un cavo usb saldato al gateway, come detto sopra , con il software MGTOOLS potete rifare il flash del firmware con “OpenWrt”.
Collegatevi al gateway in modalità Acess Point, digitate nel browser http:// 192.168.1.1 e vi ritroverete collegati alla consolle OPENWRT, entrate e configurate la rete wifi seguendo gli screenshot
immagine
Premete il pulsante Scan sulla prima interfaccia “radio0”, dopo pochi secondi, vedrete un elenco reti.
Scegliete la vostra e “Accedi alla rete”.
Immagine
Nella finestra pop-up impostare la casella di controllo “Sostituisci configurazione wireless”. Inserisci la passphrase dalla tua rete Wi-Fi di seguito.
immagine
Confermate le impostazioni nella finestra successiva, premete il pulsante Salva.
Immagine
Per applicare correttamente le modifiche, è necessario disabilitare Access Point premendo il pulsante “Disabilita” nella connessione per la seconda interfaccia.
Immagine
All’interno del firmware avrete:
• OpenWrt LuCi GUI sulla porta 80
• Un utility di comando per il flashing del modulo zigbee jn5169
• Plugin Web per LuCi per eseguire il flashing di firmware OPENWRT
RICORADATE ! NON abilitare contemporaneamente le modalità Wi-Fi e modalità AP. Il firmware non può gestire contemporaneamente entrambe le modalità.
Se avete fatto degli errori premete il pulsante sul gateway per 10 secondi. Lampeggerà 3 volte di color giallo e tornerà alla modalità AP di partenza.
PASSIAMO ORA A INSTALLARE ZIGBEE2MQTT
La parte hardware Zigbee è gestita dal chip jn5169 e flasheremo un firmware Zigate all’interno.
Digitiamo:
wget https://github.com/openlumi/ZiGate/releases/download/snapshot-20201201/ZigbeeNodeControlBridge_JN5169_FULL_FUNC_DEVICE_31e_115200.bin -O /tmp/zigate.bin
Poi:
jnflash /tmp/zigate.bin
Infine:
jntool erase_pdm
Se a qualcuno interessa c’e’ anche la possibilità di flashare un firmware zigbee ed usare il Gateway come router link
Abbiamo flashato il firmware zigbee, ora aggiungiamo la seguente repository “OpenLumi” dando il seguente comando:
[ -f /lib/libustream-ssl.so ] && echo "libustream already installed" || opkg install libustream-mbedtls (! grep -q openlumi /etc/opkg/customfeeds.conf) && ( wget -q https://openlumi.github.io/openwrt-packages/public.key -O /tmp/public.key && opkg-key add /tmp/public.key && rm /tmp/public.key && echo 'src/gz openlumi https://openlumi.github.io/openwrt-packages/packages/19.07/arm_cortex-a9_neon' >> /etc/opkg/customfeeds.conf && echo "Feed added successfully!" ) || echo "Feed added already. Skip."
A questo punto installiamo le librerie per Zigbee2mqtt dando i sehuenti comandi:
opkg update
Successivamente:
opkg install mosquitto node node-zigbee2mqtt
Digitiamo:
sed -i 's/port: 8080/port: 8090/' /etc/zigbee2mqtt/configuration.yaml
Digitiamo:
sed -i 's/baudrate: 1000000/baudrate: 115200/' /etc/zigbee2mqtt/configuration.yaml
Digitiamo:
sed -i 's/homeassistant: false/homeassistant: true/' /etc/zigbee2mqtt/configuration.yaml
Vi consiglio di usare winscp ed editare il file congifuration.yaml nella cartella “/etc/zigbee2mqtt/“ ed inserire i dati del vostro broker MQTT, altrimenti zigbee2mqtt non partirà
Vi inserisco un esempio :
# Home Assistant integration (MQTT discovery) homeassistant: true # allow new devices to join permit_join: false # MQTT settings mqtt: # MQTT base topic for zigbee2mqtt MQTT messages base_topic: zigbee2mqtt # MQTT server URL server: 'mqtt://192.168.178.89' # MQTT server authentication, uncomment if required: user: user_name password: password # Serial settings serial: port: /dev/ttymxc1 adapter: zigate advanced: baudrate: 115200 log_level: info # Optional: Location of log directory (default: shown below) log_directory: /tmp/log/zigbee2mqtt/%TIMESTAMP% # Optional: Log file name, can also contain timestamp, e.g.: zigbee2mqtt_%TIMESTAMP%.log (default: shown below) log_file: log.txt # Optional: Log rotation (default: shown below) log_rotation: true # Optional: Output location of the log (default: shown below), leave empty to supress logging (log_output: []) # possible options: 'console', 'file', 'syslog' log_output: # - console - file devices: devices.yaml groups: groups.yaml frontend: port: 8090 experimental: new_api: true
Appena avete salvato il file ritorniamo alla nostra consolle SSH e diamo il comando:
/etc/init.d/zigbee2mqtt restart
Ora potete connettervi all’interfaccia Zigbee2mqtt tramite browser http://tuo_ip:8090 e configurare tutti i vostri Device Zigbee.
Ma come sempre , noi di HASSIOHELP, non ci fermiamo al primo traguardo.
Il Gateway all’interno ha una luce Led Rgb e una Cassa Audio.
Vogliamo sfruttare anche quelle!!
Dobbiamo quindi farci aiutare sempre dal nostro broker Mqtt, abilitare anche queste due caratteristiche da poter sfruttare in Home Assitant
CONFIGRARE LUCE GATEWAY E AUDIO
Colleghiamoci via SSH con putty al nostro Gateway e diamo i seguenti comand::
wget https://openlumi.github.io/openwrt-packages/public.key -O /tmp/public.key
Comando:
opkg-key add /tmp/public.key
Comando:
echo ‘src/gz openlumi https://openlumi.github.io/openwrt-packages/packages/19.07/arm_cortex-a9_neon’ >> /etc/opkg/customfeeds.conf
Comando:
opkg update && opkg install node git-http mpc mpd-full
Proseguiamo:
Comando:
mkdir /opt
Comando
cd /opt
Comando
git clone https://github.com/Beetle-II/lumi.git
Comando
cd lumi
Comando
cp config_example.json config.json
Editiamo sempre con l’aiuto di winscp il file config.json
{ "sensor_debounce_period": 300, "sensor_treshhold": 50, "homeassistant": true, "use_ble": false, "mqtt_url": "mqtt://192.168.178.89", "mqtt_topic": "lumi", "use_mac_in_mqtt_topic": false, "mqtt_options": { "port": 1883, "username":"zigbee2mqtt", "password": "5P86AB", "keepalive": 60, "reconnectPeriod": 1000, "clean": true, "encoding": "utf8" } }
Testiamo il funzionamento dando il comando:
node /opt/lumi/lumi.js
Nel cao di errori riavviate il Gateway digitando “reboot” in consolle.
Poi ricollegatevi via ssh e ridate il comando:
node /opt/lumi/lumi.js
Dovreste vedere i primi topic mqtt partire verso il vostro broker .
Se tutto e’ andato a buon fine uscite dall’avvio di “lumi.js” con i tasti “ctrl-c” e attivate l’avvio al boot del gateway con i seguenti comandi:
cd /opt/lumi
Comando
chmod +x lumi
Comando
cp lumi /etc/init.d/lumi
Comando
/etc/init.d/lumi enable
Comando
/etc/init.d/lumi start
Entrate nel vostro Home Assistant e vi ritroverete dentro all’integrazione Mqtt light.light_gategay gestibile con tutti i colori rgb.
Per quanto riguarda la gestione dell’audio ho fatto un package per rendervi la vita più’ semplice:
link.Package
All’interno del package ho messo tutti i topic sfruttabili e degli script per rendere semplice l’uso delle notifiche tts google in italiano.
Non e’ finita qui !!
È stato riscontrato che il modulo wifi rtl8723bs della versione europea del gateway ha un bluetooth integrato con supporto BLE.
E’ possibile gestire device come , LYWSDCGQ, LYWSD02, LYWSD03MMC, BILANCIA MI, Mi BAND 3, HHCCJCY01, MIFLORA …
Conosco i seguenti comandi per abilitare l’adattatore Bluetooth.
• Con il comando “hciconfig hci0 up”
• Modificando il parametro “AutoEnable” in config /etc/bluetooth/main.conf in “true”
Scelgo il secondo.
Quando l’interfaccia è in esecuzione. Puoi eseguire una scansione per verificare il funzionamento digitando “hcitool lescan”
Per gestire I device ble useremo EspruinoHub
Installiamolo…
Comando
opkg update
Comando
opkg install node-espruinohub
Con winscp editiamo il file che si trova “/etc/espurinohub/config.json”
Con la seguente configurazione di esempio link
Se conosci gli indirizzi Mac dei tuoi dispositivi, ti consiglio di inserirli nella configurazione, modificando “only_known_devices: true” .
Questo permettrà al gatway di controllare solo i device noti.
Per interagire con HomeAssistant, è sufficiente che i dati arrivino in formato json. Impostate le tre voci in “true” :
“mqtt_format_json”: true,
“homeassistant”: true,
“mqtt_cache_state”: true
Anche questa è fatta, spero di essere stato d’aiuto a qualcuno…..
ble DGNWG05LM EspruinoHub gateway mqtt Openwrt xiaomi ZHWG11LM zigbee2mqtt
36 risposte
Quindi mi confermate che la modifica può essere fatta anche su gateway Aqara M1 ZHWG11LM?
Si i due modelli dell’articolo.
Unica differenza, nel modello ZHWG11LM non c’e’ il bluetooth… e quindi non lo puoi attivare.
Io ho il modello DGNWG02LM cinese. E’ inutile che ci provo perchè non funzionerà sicuramente o potrebbe funzionare?
Non ho paura di rendere il gateway inutilizzabile.
Buongiorno,
i modelli sono solo quelli inseriti nell’articolo.
Gli altri hanno un hardware che non potrebbe supportare il flash di un Sistema Operativo come OpenWrt.
Mi dispiace.
Ciao Luigi anche io ho questo modello e volevo provare visto che non lo uso…tu hai provato?
Ciao Alesoft73, ottimo articolo sul gateway xiaomi.
Ho alcuni dubbi. 🙂
Parliamo del gateway v2, quello che si connette tranquillamente ad hassio, una volta abilitato il token (cliccando più volte in un passo di menu di Mi Home nelle impostazioni, se ricordo bene) e poi con l’integrazione aqara, giusto?
Se ho ben capito, questo gateway si connette tramite wifi alla rete di casa. Utilizza sia lo zigbee che il bluetooth per riconoscere i dispositivi (parliamo della versione DGNWG05LM, per il bluetooth).
Con il flash del firmware che proponi, metti dentro un openwrt (grandissima cosa!!!! ) per gestire tutto il dispositivo e poi carichi i protocolli zigbee e bluetooth per utilizzarli.
Quello che ti volevo chiedere era circa la cassa audio. Come viene gestita?
Con il firmware originale lumi la cassa viene usata con il servizio “xiaomi_aqara.play_ringtone” con quei “ringtone_id” fissi che non si possono cambiare.
Flashandolo con il tuo metodo, alla fine avrò una casa che posso utilizzare come un mediaplayer? tipo voglio sentire un mp3 e attraverso il servizio “media_player.play_media” lo posso sentire, creando su hassio un entità tipo “entity_id: media_player.gateway” per esempio?
Grazie in anticipo per la tua risposta
Grazie!!
Andiamo al punto, il modello del Gateway lo ritrovi vicino al plug della corrente.
La cassa audio viene gestita tramite protocollo MQTT.
Tramite comandi MQTT puoi selezionare il file da riprodurre oppure l’url di una radio.
Per semplificare le cose ho inserito un package con degli script da richiamare per la gestione audio e TTS.
Inoltre ho creato una piccola radio con alcune stazioni.
I servizi xiaomi e sevizi mediaplayer non vengono assolutamenti usati in questo device , gira tutto via MQTT come anche la light.
Salve,
intanto complimenti per l’articolo.
Sono riuscito a fare i collegamente, nonostante le saldature su spazio microscopico
riesco a collegarmi con la seriale
arrivo al cambio password
ma quando provo a modificare il file rc.local il terminale inizia a fare le bizze
mette caratteri spuri, non funzioano i comandi base vi e dopo poco devo ricominciare da capo
esempio di caratteri strani :
:▒>▒>▒▒>▒>▒▒
il collegamento sembra corretto , non so da cosa possa dipendere
non credo si surriscaldino le saldature
qualche idea ?
grazie
Ti ringrazio,
i problemi potrebbero essere molteplici, o hai settato la velocità della porta seriale in putty errata o qualche saldatura fa contatto.
Scrivimi nel gruppo, in caso mi fai vedere che problema ti da con un video in pvt.
Telegram : https://t.me/HassioHelp
A presto 😉
dopo l’aggiornamento firmware, potrá essere gestito da HA il sensore di luminositá e il pulsante?
Buongiorno,
sarà possibile gestire una light Rgb e il suo sensore luminosità.
E’ la milionesima volta che riavvio l’hub… non riesco a capire come fare per bloccarne il boot. Credo di averle provate tutte. C’è un momento preciso o una combinazione di tasti specifica o basta un “invio”, un ctrl+z durante lo scorrere le log?
Grazie, Lucio
Se può essere d’aiuto a qualcun altro, visto che ci ho perso un paio d’ore… bisogna premere “invio” appena si alimenta l’hub ed incollare il comando “setenv …” altrimenti il boot parte e non si ferma più.
Pur comprendendo l’1% di quello che stavo facendo, ho portato a termine la guida senza alcun problema o intoppo.
Grazie, è stato divertente.
Lucio
Perfetto, molto probabile che ti abbia preso, per tua fortuna ;), subito il comando per il root.
Ottimo.
Buongiorno,
devi copiarti il comando con copia incolla. e incollarlo piu’ volte mentre fa il boot premendo invio.
Devi essere ababstanza veloce.
Se prende il comando mentre fa il boot, ti esce il “bash”.
Allora puoi procedere con il cambio password.
C’è un errore nella riga relativa al comando di flash del firmware over the air. In particolare il punto sbagliato è: raw.githubusercontent.comn, invece dovrebbe essere: raw.githubusercontent.com\n.
Poi avrei un paio di domande, si può anche gestire il colore della luce via MQTT? e funziona anche il sensore di luminosità integrato nel Gateway via MQTT?
Se volessi assegnare un IP fisso al gateway, dove lo imposto?
Ho visto nella scheda Network->Interface che ci sono due Interfacce, una chiamata LAN in cui è scritto Protocollo: stati address e una WWAN con scritto Protocollo: DHCP Client.
E’ quest’ultima da cambiare in Static Address?
Il firmware Openwrt e’ stato adattato per essere usato con il Gateway.
Ti conviene prenotare un Ip dal DHCP del router con cui gestisci tutta la rete.
Saluti.
Si, alla fine ho fatto cosi. Una domanda, se avessi piu di un gateway, per riprodurre un file mp3 su uno specifico gateway, come faccio?
Se hai piu’ Gateway ti consiglio di flashare il firmware come router e gestire allo stesso modo l’audio, ovviamente dovrai cambiare il topic mqtt altrimenti non direzioni l’audio al gateway corretto.
Grazie. Ma se utilizzo il firmware per farlo diventare router, posso sempre utilizzare la luce rgb seguendo la guida LUCE E AUDIO?
Esattamente.. Ma evita di installare zigbee2mqtt in quanto non ti serve e non fuinzionerebbe flashando firmware come router 😉
Quale è il topic da cambiare sul gateway per distinguerli ed indirizzare l’audio sul gateway corretto?
Buongiorno.
Devi sostituire il topic “mqtt_topic” : “lumi” in “mqtt_topic” : “lumi2” (per esempio) nel file “config.json”.
Trovi l’esempio nella guida in cui si configura “LUCE E AUDIO”
Saluti e grazie 😉
Ho un problema con il funzionamento della cassa del gateway. Fiano a qualche giorno fa funzionava perfettamente, adesso nulla. La luce funziona perfettamente, ma non riesco piu a riprodurre nulla dalla cassa. Da cosa potrebbe dipendere? Grazie
Buongiorno,
molto probabile che il problema sia altrove.
Nel senso che se tutto andava fino a poco tempo fa, forse dipende dall’Addon che gestisce Mqtt.
Con questa modifica abbinata al gateway DGNWG05LM si possono abbinare i sensori xiaomi non compatibili di serie come temperatura o porte aquara?
Se parliamo di device zigbee , certamente. Qualsiasi Device che si trova in questa lista è gestibile: https://zigbee2mqtt.io/information/supported_devices.html#
Ciao finalmente sono riuscito a fare quanto descritto. Il repository per attivare led e audio del gateway europeo vale solo per la versione 19 di openwrt. Con la nuova la 21 non funziona.
Non vedo però tra le entità il media player del gateway.
Inoltre è possibile sapere come si integrano gli script per la gestione dello speaker? Grazie
Buongiorno,
con la Ver.21 non funziona perchè la guida è basta su Openwrt 19 e quindi ha le sue repo.
Non c’e’ nessuna entità mediaplayer del gateway perchè tutto è controllato via mqtt come da package che ho inserito nella guida.
Il package va inserito nella cartella package di Home Assistant e in automatico, leggendo il mio doc, sfrutti gli script per l’audio.
Se hai installato openwrt ver.21 ti posso dare dei link con gli aggiornamenti, ma esula dalla guida che ho inserito.
Ecco il link : https://github.com/DivanX10/Openwrt-scripts-for-gateway-dgnwg05lm
Puoi trovare tutte le repo aggiornate per la tua versione.
Buongiorno,
durante la modifica del gateway DGNWG05LM dissaldando i collegamenti della seriale si e’ staccata la piazzola del pinout GND dalla scheda. Dovendo ripetere la procedura, dove posso trovare un punto alternativo per poter saldare il GND?
Bungiorno,
puoi usare un altro gnd come quello indicato nella foto per fare il flash via usb…
Contattami pure il pvt https://t.me/@Alesoft73 cosi’ ti giro eventualmente le immagini.
Tieni presente che la guida la sto aggiornado in quanto ci sono degli aggiornamenti nei servizi OpenWrt 21.02.
Buongiorno,
ti ringrazio innanzitutto per l’interesse, poi però controllando bene la scheda PCB xiaomi ho notato che sia il pin GND che il TX si sono dissaldati …. quindi il problema non è tanto per il GND (che immaginavo fosse possibile collegarlo in più punti) quanto per il TX.
Hai qualche soluzione per rimediare a questo problema?
Grazie.
Buongiorno.
Devi per forza di cose ricotruire le piste.
TX / RX ti serve per forza, in alternativa non puoi modificarlo.
Mi spiace.
Saluti e grz
Ciao, sarebbe possibile avere una guida per la versione 21.02?
Anche con la possibilità di usare la luce e lo speaker.
Grazie
Buongiorno,
la guida non si discosta di molto con la 21.02
Ti linko il sito ufficiale.
https://github.com/openlumi/openlumi.github.io
Appena riesco cerco di aggiornarla.
Saluti