Je huis besturen met je stem! Hoe gaaf is dat?! Met deze blogpost ga ik je laten zien dat het instellen van de koppeling tussen Google Assistant en Domoticz helemaal niet moeilijk is.
Om de koppeling mogelijk te maken maken we gebruik van Node Red. Node Red is een programmeer tool die verschillende hardware, software en online services aan elkaar kan knopen en kan laten communiceren met elkaar. De tool is gebaseerd op nodes en wires. De nodes voeren een actie uit en de wires verbinden de acties met elkaar.
Het eindresultaat is dus dat je tegen je Google Assistant speaker, Nest Hub of Google Assistant op je telefoon roept dat de lampen uit gaan, dat ze uit gaan via domoticz!
De communicatie tussen Google Assistant en Node Red verloopt via NORA, de communicatie tussen Node Red en Domoticz via MQTT.
Stappenplan koppeling Google Assistant met Domoticz
Om de koppeling tussen Google Assistant en domoticz te maken gaan we de volgende stappen doorlopen.
- Installeer alle benodigde software
We hebben een aantal verschillende software pakketten nodig die draaien op je Raspberry Pi of in mijn geval een Synology NAS.
Denk aan Python, Mosquitto, Node_js, Node red en Putty - Configureer Node-red en nora
Wanneer alles geïnstalleerd is en werkt kunnen we nora gaan instellen. De plugin voor node-red maakt de koppeling tussen Google Assistant en Node-red.
- Koppel apparaten
Begin met het bouwen van flows door domoticz apparaten te koppelen aan nora. Automatisch verschijnen deze in Google Assistant en de Google Home app.
- Start met praten
Begin te praten tegen je Google Home, Assistant of Nest Hub en zie dat het werkt!
Voorbereidingen
Om aan de gang te gaan met Google Assistant en Domoticz zijn er een aantal dingen noodzakelijk om te installeren. Mijn domoticz draait op een Synology NAS en ga hierop ook node red installeren.
- Domoticz met Python van Jahdal
- Mosquitto voor de MQTT communicatie uit het Package center (voeg repo synocommunity toe)
- Node_js v12 uit het DSM Package Center
- root rechten op je nas
- Putty
Alternatieven
Natuurlijk zijn er meerdere manieren om de koppeling te maken tussen Google Home en Google Assistant met Domoticz. De manier van dit artikel op basis van NORA en node-red kost niets en ik wilde ervaring opdoen met node-red. Onderstaande alternatieve methoden kun je ook overwegen:
- Controlicz
- Gratis en betaalde versie om je domoticz apparaten binnen het Google ecosysteem te bedienen.
- DZGA
- Gratis webapp om je domoticz apparaten te bedienen met Google Assistant/Home. Werkt ook erg stabiel en snel, er is een apart synology installatie script beschikbaar. Wel wat lastiger te configureren met https certificaten en tunnels.
Installeren van node red op Synology NAS
Log in op je NAS via putty met rootrechten. Via de NPM (Node Package Manager) gaat we node-red installeren. Ik gebruik versie 6.14.10 van npm en Node_js12.20.1. Om te controleren welke versie je gebruikt voer je in:
npm -v
of voor de versie van node
node -v
Wanneer je errors krijgt, heb je waarschijnlijk nog geen Node_js geïnstalleerd. Installeer Node_js vanuit het Package center in DSM.
Om node red te installeren geef je het volgende commando:
sudo npm install -g --unsafe-perm node-red
Veel errors
In mijn geval ging de installatie niet vlekkeloos de eerste keren. Ik kreeg veel errors en begon de moed al op te geven. Dat wil niet zeggen dat op andere systemen zich dezelfde errors moeten voordoen. Dus houd vol!
Ik heb het een aantal keer opnieuw geprobeerd en goed naar de errors gekeken. Ik kreeg errors op de pakketten bcrypt, make-dir en node-gyp. Deze bleken verouderd of te ontbreken en heb ik geïnstalleerd middels:
sudo npm i node-red-contrib-bcrypt sudo npm i node-gyp sudo npm i make-dir
Er was ook een error ‘no such file or directory’ in het bestand package.json. Dit bestand heb ik opgezocht met WinSCP, een bestandsverkenner voor je NAS waarmee je ook de beveiligde systeembestanden kunt zien. In de map /volume1/homes/GEBR NAAM/package.json zou het bestand package.json moeten staan. Het bestand stond er inderdaad niet, alleen package-lock.json. Het bestand heb ik hernoemd en de bovenstaande commando’s nog eens uitgevoerd. Uiteindelijk ook het install commando voor node red nog eens uitgevoerd en het werkte!
Wat mij tijdens het starten van node red is opgevallen, is dat wanneer je nodejs 8 gebruikt er geen verbinding gemaakt kan worden met de mqtt broker, daarom gebruik ik nodejs v12.
Starten van node red
Nu het installeren van node red gelukt is, gaan we het starten. Dat kun je doen door simpelweg het commando node-red in te typen. In mijn geval was er weer een error:
-sh: node-red: command not found
Het commando node-red kon niet worden gevonden. Ik heb daarvoor een symlink aangemaakt. Die zorgt ervoor dat er een soort snelkoppeling gemaakt wordt naar de werkelijke locatie van node red. Vermoedelijk doordat het PATH niet goed ingesteld staat.
Met Winscp kun je zo’n koppeling makkelijk maken, maar via putty kan het ook. Maak in de map usr/bin een koppeling met de naam node-red naar /volume1/@appstore/Node.js_v8/usr/local/bin/node-red.
Start nu opnieuw het commando en node red zou moeten starten.
Node red start op en vertelt je hoe je de interface kunt benaderen. Check ook of de MQTT broker verbonden is. Wanneer dat niet zo is, kun je niet communiceren met domoticz.
Je kunt proberen mqtt te installeren of te updaten mocht het niet werken. Gebruik het commando:
sudo npm install -g mqtt url request
Hiermee installeer je de pakketten MQTT, URL en request. Herstart daarna node-red.
Navigeer in je browser naar het ipadres en poort van node red, in mijn geval het ip adres van de nas met poort 1880. Je ziet nu het beginscherm van Node red.
Nora installeren
Klik in het menu op manage packages. Vul in het zoekscherm nora en installeer de laatste versie van node-red-contrib-nora.
In het palette staan nu nieuwe nodes. Voordat we die kunnen gebruiken moeten we eerst NORA configureren. Pak daarvoor je telefoon erbij.
Google home app instellen
Installeer vanuit de Play Store of App Store de Google Home app of als je de app al hebt open ‘m. Tik linksbovenin op de +. Kies daarna voor Apparaat instellen. Tik nu op ‘Heb je al iets ingesteld?’. Zoek op NORA. Maak een nieuw account aan bij NORA. Autoriseer Google en er verschijnt een code in het scherm. Deze code heb je nodig in de NORA config node. Je kunt de token ook verkrijgen via de NORA site. Ga terug naar node-red en voeg een NORA light node toe.
Nora nodes instellen
Dubbelklik op de Light node en daarna op het potloodje achter config. Voer een naam in voor de config en plak hier de token. Group kun je leeg laten. In het properties venster kun je nu een naam aanmaken voor de lamp die je wilt bedienen. Als de lamp een dimmer heeft vink je “Allow brightness control” en eventueel “Turn on when brightness/color changes”.
Achter het veld Topic vul je de IDX uit domoticz in. Geef je node nog een naam en klik op Done. Terug in het hoofdscherm van Node-red klik je rechtsboven op Deploy. Onder je node komt nu Connected te staan.
Ga nu weer naar je Google Home app. In het hoofdscherm staat nu een nieuw item onder “Aan jou gekoppeld. 1 apparaat niet in een huis.”. Klik op de lamp en kies voor “Toevoegen aan een ruimte”. In het volgende scherm toevoeg je de lamp toe aan het juiste huis. Geef vervolgens aan waar het apparaat staat, in mijn geval de woonkamer en je komt weer terug in het scherm van je lamp. Verander hier de helderheid (bij een dimmer) of de aan/uit status. Kijk in Node-red of de status veranderd.
Domoticz communicatie van en naar NORA
Nu we weten dat de koppeling tussen NORA en Google werkt, gaan we een stap veder. We gaan de koppeling naar domoticz maken. Zoals eerder geschreven verloopt die via MQTT. Het is dus belangrijk dat je dat eerst hebt draaien. Gelukkig is dat zeer eenvoudig. Volg daarvoor mijn MQTT instellen in domoticz blog.
Domoticz richting Google assistant
Zoek tussen de nodes de “MQTT in” node. Plaats de node en dubbelklik op de node. Configureer een MQTT broker door op het potloodje te klikken achter server. Geef in het volgende scherm de config een naam en geef het ipadres van de MQTT server op. In mijn geval draait de MQTT broker op hetzelfde apparaat als domoticz en node-red, dus vul ik localhost of 127.0.0.1 in. De poort is standaard 1883. De rest van de config is standaard goed.
Terug in het vorige scherm vul je bij Topic “domoticz/out” in. Hiermee luistert de node naar alle berichten die domoticz hier plaatst.
Plaats nu een “json” node. In de instellingen kies je bij Action voor “Convert between JSON string & Object”. Bij property vul je “payload” in. De berichten in JSON taal worden vertaald naar berichten die Node-red begrijpt.
Schakelaar node
Voeg nu een “switch” node in. Geef het de naam “Schakelaar type”. De property is “payload.switchType”. We maken hier verschil tussen de uit te voeren actie voor dimmers en aan/uit lampen. Maak twee condities aan zoals op onderstaande screenshot, een voor “Dimmer” en een voor “On/Off”.
Voeg nu twee function nodes toe. Koppel het bovenste bolletje van de Schakelaar Type node aan de eerste en de andere aan de tweede function node. Geef het de namen “Convert On/Off” en “Convert Dimmer”. Plak onderstaande code in de nodes:
msg.topic = msg.payload.idx if (msg.payload.nvalue == 1) { msg.payload = true } else if (msg.payload.nvalue === 0) { msg.payload = false } return msg;
msg.topic = msg.payload.idx var Level = msg.payload.svalue1 if (msg.payload.nvalue >= 1) { msg.payload.on = true msg.payload.brightness = Level } if (msg.payload.nvalue === 0) { msg.payload.on = false msg.payload.brightness = 0 } return msg;
Maak weer een switch node aan. Geef deze de naam “Domoticz IDX check”. Koppel beide function nodes aan deze switch node. De property is ’topic’. Maak de regels aan voor de IDX van het apparaat dat gekoppeld gaat worden.
Koppel nu de juiste NORA lampen aan de juiste IDX outputballetjes.
Klik nu op Deploy. De MQTT node krijgt een groen connected lampje en de NORA nodes ook. Ga nu naar domoticz en verander het device met de IDX die je gebruikt hebt. De status wordt gecommuniceerd via MQTT en veranderd nu ook in Node red!
Google Assistant richting domoticz
Voor de communicatie vanaf Google Assistant richting domoticz koppelen we een nieuwe function node aan de output van de NORA nodes. Vul onderstaande code in in het code block.
var idx = parseInt(msg.topic); if ( msg.payload === true ) { msg.payload = { "command": "switchlight", "idx": idx, "switchcmd": "On" }; } else if ( msg.payload === false ) { msg.payload = { "command": "switchlight", "idx": idx, "switchcmd": "Off" }; } return msg
Deze node zorgt ervoor dat de switchcommando’s van NORA vertaald worden naar MQTT. Koppel aan deze function node een volgende node van het type json. Kies de optie Convert between JSON String and Object. De property is payload.
Voeg als laatste stap de MQTT out node toe. Selecteer je configuratie en typ achter topic ‘domoticz/in’. Deploy nu de flow en test of wijzigingen aankomen in domoticz, de lampen en node-red. Alles werkt nu!
Auto start node red
Wanneer je NAS herstart is het fijn dat node-red ook weer gestart word. Dat kun je doen door pm2 te gebruiken. Installeer PM2 door middel van het volgende commando in putty:
sudo pm2 npm install -g pm2
Start daarna node-red met pm2 door middel van het commando:
sudo pm2 start /volume1/@appstore/Node.js_v8/usr/local/bin/node-red
Template
Maak het jezelf makkelijk en importeer mijn flow! Via het menu kun je kiezen voor import.
Plak onderstaande in het venster en de volledige flow wordt geladen. Pas de juiste IDX’en en MQTT gegevens aan en wijzig de config nodes. Bouw verder en in mum van tijd is de koppeling van je apparaten tussen domoticz en google home gereed!
Nora is inmiddels vervangen door Smart Nora, vanwege de problemen met performance (wat een gevolg is van de populariteit). Palette node-red-contrib-smartnora toevoegen, nodes aanpassen en klaar. Werkt superfijn!
Hoi Jacob,
Bedankt voor je toevoeging! Ik zag inderdaad dat er nu ook smart nora bestaat. Mooi dat het hetzelfde werkt. Het artikel heb ik alweer een tijd geleden geschreven maar nooit eerder gepubliceerd.
Groet Wouter
En als de verbinding Google Assistant, NodeRed en Domoticz er dan toch ligt. Kun je ook simpel een bericht laten uitspreken door Google Assistent. Dit doe je met de node “Cast” Knalgeel onder menu Function. In de config noem je het IP adres van Google Assitant met poort 8009. Voer een Message in en stel taal in. Handig om bij het omroepen van een alarm om Volume ook op 100 te zetten. Snel en eenvoudig.