Google Home - Niko Home Control

Hey Lezers,

Als jij Niko Home Control 1 hebt en je wil Google Home assistent gebruiken om je installatie te bedienen... dan ben je op het juiste adres.

Voor NHC2 is het niet zo elegant als voor NHC1 (Danku Niko),
Hiervoor een afzonderlijke bijkomende gids onderaan die stap 2 en 3 vervangen.

Neem een drankje, zet je gemakkelijk.
Dit gaat even duren.

Eerst en vooral een boodschappenlijstje,
Dit heb je nodig:
- Niko Home Control IP-Interface
- Raspberry Pi
- Google Home / Home Mini / Android telefoon...

Software:
- Putty
- VNC - Vieuwer
- Raspbian img voor je Pi

En veel tijd...

Stap 1: Je Raspberry Pi gebruiksklaar maken

Begin bij het begin,
Download de laatste Raspbian img en start je Pi.
Gebruik een toetsenbord en beeldscherm om in de therminal de SSH en VNC toetteto laten.
je kan nu vanop een andere computer verder gaan.

Via de therminal (Putty) en/of Remote desktop (VNC) open je de settings file van Node-Red.
Navigeer naar :
cd .node-red

Open het bestand :
sudo nano settings.js

In mijn geval was er nog geen settings.js bestand aanwezig,
Je vind dit bestand hier.
Kopier de tekst en kleef deze in nano met 1 klik op de rechter muisknop.

Zoek de lijn //httpAdminRoot: '/Admin',
verwijder de "//" Wijzig deze Admin in iets dat je kan onthouden, het maakt de toegang tot de interface iets minder voordehandliggend voor eventuele onwelkome gasten.

Je kan ook een user en password instellen,
Iets gecompliceerder en volgens mij niet echt nodig.
Meer info daarover hier.

Gebruik het volgende comando om de node-red service automatisch te starten bij elke boot van je Pi.

sudo systemctl enable nodered.service

Reboot je Pi met:
sudo reboot

Nu ben je klaar voor de volgende software, OpenHab.
Update eerst je Pi voor je Openhab installeerd.:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install screen mc vim git htop

Eerst heb je de Bintray nodig, kopier dit commando en rechtsklik in je putty:
wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
sudo apt-get install apt-transport-https

Vervolgens link je de repository van openhab:
echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.list

Ten slotte volgende commando's:
sudo apt-get update
sudo apt-get install openhab2
sudo apt-get install openhab2-addons

Herstart je Pi:
sudo reboot

Nu heb je OpenHab maar deze start nog niet vanzelf.
Dit is ook niet nodig, we gebruiken deze enkel om de "id's" van je acties in Niko Home Control te vinden.

Na het herstarten van je Pi voer je volgend commando in de therminal in:
sudo service openhab2 start

In de browser van je PC open je nu best 2 tabs, 1 met Openhab, (deze start de eerste keer zeer langzaam), en een andere voor Node-Red:
OpenHab: raspberrypi.IP:8080
Node-Red: raspberrypi.IP:1880/"vervangen in service.js"

Stap 2: Niko Home Control adressen ophalen

In de Openhab Browser ga je naar Paper UI.
Onder Add-ons ga je naar BINDINGS, zoek hier naar Niko home control.
Onder de tab "Inbox" komen nu je acties tevoorschijn die je in de niko app en/off touchscreen kan bedienen.

Het adress van elke actie vind je achteraan elke actie, zoals in dit voorbeeld "44"

Nu heb je bijna alles wat je nodig hebt;

Gebruik in putty volgende commando op het IP adres van je IP-interface te achterhalen:

netstat -nputw




We zoeken communicatie tussen een aparaat met poort 8000, dit is je ip-interface.

Stap 3: communicatie, Programmatie

Nodige informatie uit vorige stappen:
- IP van Raspberry
- IP van IP-Interface
- id van elke actie

Open de Node-Red Gui en start een flow.

Verklaring van elke node:
http: Aanwezig om time-out te voorkomen
Webhook URL: Ontvangt de webhook die google zal sturen na een voice command.
Functieblok "prepare statemant": hierin word de hook ontcijfert en de variabele gebruikt.
Json: vormt de uitkomst van de functie om in json, die Niko kan ontvangen.
TCP output node "Inject TCP": maakt verbinding met de IP-interface voor het commando.

1) http
gewoon toevoegen, verder geen instellingen nodig

2) Webhook URL
Met oog op veiligheid voegen we hier een sleutel toe, deze kan je zelf bepalen.
gebruik bijvoorbeeld een wilkeurige nummer generator om een code te genereren.

API code generator
vb: "c38476ea-ac70-4347-ab76-3ea56566e05c"

deze heb je nodig in elke webhook die je zal aanmaken. en zorgt ervoor dat wilkeurige webhooks niet ontvangen worden.
Tenslotten creren we hier ons eerste variabel, hier worde alle berichten via Webhook geimporteerd.
Deze mag je zelf kiezen.
In dit voorbeeld : "/swithes" achter je sleutels.
3)Functieblok:

This is where the magic happens,
Niko Gebruikt een TCP protocol, gelukkig niet versleuteld.
Hierdoor kunnen we met tools als Wireshark de pakketten opvangen en analyseren.
Lang verhaal kort ziet het er zo uit:

{"id":69,"value1":254,"cmd":"executeactions"}

id is de actie identificatie,
Value1 is de waarde van de actie,
cmd voor het uitvoeren van de actie (constante).

Belangrijkste waarde van "Value1":
- 0 uit
- 100 aan
- 0-100 dimmer preset
- 254 aan met laatste waarde
- 255 uit na opslaan van waarde

Met dit in gedachten gaan we naar de code:

Na een Crashcursus Java Code is het niet zo moeilijk,
Je kan onderstaande code kopieren en aanpassen naar jouw wensen. ik heb het vrij logis opgesteld.
Input1 zijn commando's die acties activeren, Input 2 die acties uitschakelen, en input3 zijn dimmende acties.
Variabel "dimming" is de waarde uit het commando.
Het achtereinde van de webhook zal er als volgt uitzien:
http://yourdns.dns.org:1880/AC8...C77/switches/?dim=office&value=60

In de code zie je hoe we "office" en "60" in variabels input3 en dimming opslaan,
vervolgens gaan we naar de switch.case commando, deze vergelijkt "input3" met de waarde achter "case" als ze matchen krijgen we een output "msg.payload".
Bij het schakelen gebruiken we normaal gezien vaste waarde, 0, 100, 254, 254.
Bij het dimmen gebruiken we in de output "+dimming" zodat de waarde die de webhook aanleverd doorgaat naar de IP-interface verstuuverkan worden.

var input1  = (msg.payload.switchon);
var input2  = (msg.payload.switchoff);
var input3  = (msg.payload.dim);
var dimming = (msg.payload.value);
switch(input1) {
case"island"      :msg.payload=       {"id":69, "value1":254,"cmd":"executeactions"};break;
case"kitchen"     :msg.payload=       {"id":70, "value1":254,"cmd":"executeactions"};break;
case"office"      :msg.payload=       {"id":74, "value1":254,"cmd":"executeactions"};break;
case"workshop"    :msg.payload=       {"id":118,"value1":100,"cmd":"executeactions"};break;
case"media centre":msg.payload=       {"id":113,"value1":100,"cmd":"executeactions"};break;
}
switch(input2) {
case"all"         :msg.payload=       {"id":44, "value1":255,"cmd":"executeactions"};break;
case"island"      :msg.payload=       {"id":69, "value1":255,"cmd":"executeactions"};break;
case"kitchen"     :msg.payload=       {"id":70, "value1":255,"cmd":"executeactions"};break;
case"office"      :msg.payload=       {"id":74, "value1":255,"cmd":"executeactions"};break;
case"media centre":msg.payload=       {"id":113,"value1":0,"cmd"  :"executeactions"};break;
}
switch(input3) {
case"island"      :msg.payload=       {"id":69, "value1":+dimming,"cmd":"executeactions"};break;
case"ireland"     :msg.payload=       {"id":69, "value1":+dimming,"cmd":"executeactions"};break;
case"living room" :msg.payload=       {"id":72, "value1":+dimming,"cmd":"executeactions"};break;
case"kitchen"     :msg.payload=       {"id":70, "value1":+dimming,"cmd":"executeactions"};break;
case"office"      :msg.payload=       {"id":74, "value1":+dimming,"cmd":"executeactions"};break;
}
return msg;

4)Json,
Geen instellingen nodig.

5)TCP output:

Poort 8000, Host is het IP van de IP-interface.
Breek de verbinding na elk bericht.


Het enige dat je nu nog moet doen is poort 1880 openen op je modem. en routen naar het IP van je Raspberry PI.
Bij Telenet is dit vrij simpel, 
ben je belgacom... heb je pech zover ik weet is dat zonder extra kosten niet mogelijk.
Met andere providers heb ik geen ervaring.

Je zal ook een DNS server of Statisch IP nodig hebben.
ook die kan je opzetten via je Raspberry Pi.

Ik raad duck DNS aan als dienst voor je DNS hosting, deze is gratis, en gebruik ik zelf al jaren probleemloos.
Ze hebben ook simpele handleidingen om je dns server op te zette afhankelijk van je platform

Stap 4: Voice commando's en Webhooks

Google's assistant kan gekoppeld worden met IFTTT, een tool die het mogelijk maakt verschillende diensten met elkaar te linken, dus ook "google assistant" en "webhook".

Meld je aan en maak een nieuw Applet,
Klik op "This" en zoek google assistant,
Hier heb je 4 keuzes, in ons geval kiezen we de laaste of voorlaatste.

1) Say a phrase with a text ingredient

Het tekst ingredient is een variabel zoals in de code aangegeven, kitchen, office, living room...
Zo moeten we niet voor elke kamer een commando maken.
Vervolgens kies je Then en zoek je Webhook.
"Turn on $ lights"
--> Webhook URL http://yourdns.dns.org:1880/BC....77/switches/?switchon={{TextField}}
"Turn off $ lights"
--> Webhook URL http://yourdns.dns.org:1880/BC....77/switches/?switchoff={{TextField}}


2) Say a phrase with both a number and a text ingredient

Onder deze optie kunnen we 2 variabels ingeven, elke kamer en een percentage bijvoorbeeld.
"Set $ lights to # %"
--> Webhook URL http://yourdns.dns.org:1880/BC....77/switches/?dim={{TextField}}

Klaar!!

dat zou moeten werken.
Als je vragen hebt contacteer me,
ik sta open voor vragen en help je gerust met problemen bij het opzetten.

Veel Google plezier!!


NHC2

Vervangende stap voor NHC2

Sinds NHC2 heeft Niko alle communicatie tussen de componenten versleuteld,
als resultaat kunnen we dus niet met directe TCP commands kunnen sturen.

De enige "work around" die ik op dit moment kan bedenken is met drukknop interfaces en Ethernet Relay modulen te werken. Hiervoor dus deze extra stap.

2') Extra hardware en installatie

- Ethernet relay module: er zijn verschillende merken en modellen, in dit voorbeeld gebruik ik de ETH008 van Devantech met 8 relais. Als je genoeg hebt aan basis commando's zoals "alles uit" en dergelijke heb je aan 2 of 4 relais misschien al genoeg.
- NHC Drukknop interface




Zoals je op de foto's hierboven kan zien is het vrij simpel,
de interface op de open contacten aansluiten, de common doorlussen, busdraad aansluiten, ethernet kabel en 12V erin... en een beetje dubbelzijdige tape.

3') Programmatie

Door het wegvallen van de TCP functie word de complexiteit maar ook de flexibititeit serieus ingebonden.

We gebruiken nu volgende nodes:


http: Zie stap 3 voor NHC1
Webhook URL: Zie stap 3 voor NHC1
Functie blok "prepare...": Zie stap 3 voor NHC1
http request: Hiermee gaan we rechtstreekse http requests naar het relais bord sturen.

Functieblok code:

De code voor de http link samen te bouwen zal afhangen van jou specifiek model/merk van relais bord, Zorg ervoor dat je een link gebruikt die je relais een bepaalde tijd gaat sluiten en vanzelf weer opent, zoals een drukknop.
Voor mijn ETH008 ziet het er als volgt uit.
In dit voorbeeld sluit de relais 1 seconde.

var ETH008 = "http://192.168.x.xxx/io.cgi?DOA";
var input = (msg.payload.variable);
if        (input=="bedtime")   msg.url = ETH008+"1=1";
else if (input=="all")       msg.url = ETH008+"2=1";
else if (input=="dinner")    msg.url = ETH008+"3=1";
else if (input=="TV")        msg.url = ETH008+"4=1";
else if (input=="workshop")  msg.url = ETH008+"5=1";
else if (input=="workbench") msg.url = ETH008+"6=1";
else if (input=="terras")    msg.url = ETH008+"7=1";
else if (input=="office")    msg.url = ETH008+"8=1";
else null();
return msg;

Zoals je kan zien splitsen we de link in een deel dat altijd hetzelfde is, en slaan deze op in een variabele, en voegen we per input van onze webhook van google assistant het variabele deel toe zoals de relais nummer en hoe lang we de relais gaan aantrekken.

Nu is het een questie van de drukknop functies te te voegen aan sfeer acties in je NHC programma,
ik raad aan geen aan uit acties te gebruiken, webhooks durven wel eens later aankomen waardoor je misschien 2 keer hetzelfde commando gaat geven, en dus je licht week aan of uit doet.
Door een sfeer te gebruiken met slechts 1 functie (aan of uit) heeft dit geen negatief effect.

Meer is het eigenlijk niet, jammer genoeg kunnen we geen dimmende actief afzonderlijk gaan aansturen of zelf vermogens gaan uitlezen zoals bij NHC1, maar tot Niko met een assistant update komt voor NHC2, is dit de oplossing.

Zo, hopelijk zijn jullie hiermee geholpen, het was zeker een leuk projectje,
ik hoop dat Niko meeleest en hieruit een les kan trekken. Er zijn mensen die hier graag mee spelen, en je product hiervoor afschermen kan de evolutie ervan hinderen!

En zoals altijd:

Als je vragen hebt contacteer me,
ik sta open voor vragen en help je gerust met problemen bij het opzetten.

Veel Google plezier!!



19 opmerkingen:

  1. Hello,

    info, gebruik niko home control 550-00003. maar krijg als fout melding"status offline-communication_error. IP adres is ingesteld als poort nr gebruik ik 8000. wat zou het kunnen zijn dat openhab2 niet verbind met niko home controller? Mvg,

    BeantwoordenVerwijderen
    Reacties
    1. Hey Paulus,

      ik vermoed niet dat er in je LAN tussen de openHABian server en je NHC Connected Controller nog netwerkapparatuur zit zoals een firewall? Probeer eens te telnetten van de openHABian server naar het IP adres van de NHC Connected Controller op poort 8000, dan weet je het zeker.

      Mogelijks heeft Niko dan, zoals Bjorn Embrechts hieronder in de comments laat weten, dit dichtgeschroefd?

      Vraag me dan wel af op welke manier de NHC Connected Controller inputs ontvangt en outputs verstuurd, mogelijks dan niet meer zoals beschreven in dit artikel .. misschien encrypted?

      Groetjes,
      Harm

      Verwijderen
  2. hey, ik gebruik NHC nu ook al meer dan een jaar samen met openHAB en sinds kort ook met Google Assistant.
    Bij mij staat alles ook op een Pi dmv openHABian (https://community.openhab.org/t/openhabian-v1-4-v1-4-1-released/37398/65)

    De integratie met Google Assitant werkt ook zo goed als voleldig out-of-the box (https://community.openhab.org/t/official-google-assistant-integration-for-openhab/40425)

    BeantwoordenVerwijderen
  3. Hey Ward,

    dus jij zegt dat NHC integratie met Google Assistant/Home out-of-the-box kan werken zonder alle opzet met een Raspberry Pi met openHAB en NodeRED zoals beschreven in dit artikel van Bjorn?

    Wij hebben binnenkort ook NHC2 en die voice-control lijkt me ook wel iets zeer tof .. zou het dus graag ook willen implementeren.

    Groetjes,
    Harm

    BeantwoordenVerwijderen
    Reacties
    1. Hey Herm,
      Niet met NHC2 jammer genoeg, heb sinds enkele maanden de upgrade naar NHC2 gedaan en komt er op neer dat niko alle poorten gesloten heeft.

      Zonde, en zeker iets dat ik met m'n vertegenwoordiger zal bespreken bij mijn komend bezoek aan het hoofdkantoor in Sint-Niklaas

      Verwijderen
    2. Deze reactie is verwijderd door de auteur.

      Verwijderen
    3. Deze reactie is verwijderd door de auteur.

      Verwijderen
    4. Hey Bjorn,

      OK in orde, laat gerust hier weten wat het resultaat was van dat gesprek ;-)

      Maar het moet dus wel lukken met openHABian, PaperUI, Node-Red en IFTT (mits configuratie duckdns en portforwarding op Telenet modem). Dan moet ik dat maar eens proberen, ziet er inderdaad recht-toe recht-aan uit mede dankzij deze blog van Bjorn!

      Of bedoel je met poorten gesloten dat de NHC Connected Controller de TCP berichten van de openHABian server niet meer kan ontvangen?

      Groetjes,
      Harm

      Verwijderen
    5. Hey Harm,

      Neen, niet dat ik weet, tenzij er in de laatste maanden een grote doorbraak is geweest.

      Niko heeft een versleuteling toegevoegd direkt op de controler; waar vroeger geen versleuteling was, vroager was dit enkel op de gateway, en op je intern netwerk kon je ingrijpen met inversleutelde bootschappen naar de controler te sturen, bij NHC2 loopt alle comunicatie over hun server en dus niet meer lokaal.

      Heel jammer, maar zolang Niko hier geen oplossing voor voorziet, of de sleutel vrijgeeft zitten we vast geloof ik.

      ik ben nu aan het experimenteren met een netwerk relay module en drukknop interfaces... beetje ghetto maar zou moeten werken om ten minste een aantal sferen te activeren.

      groeten,
      Bjorn

      Verwijderen
    6. Hey Bjorn,

      even verder zitten zoeken en ik lees het volgende op Tweakers.net (mei 2018):

      Iemand van R&D afdeling van NHC beweert dat ze bezig zijn met integratie Alexa en Siri. (testopstelling)
      Ook met Google Assistant zijn ze bezig.
      Apple HomeKit, Google Home en IFTTT staan op de backlog.
      Niko zou dit jaar ook zelf nog IP camera's gaan uitbrengen.

      Andere reacties zijn dan weer van dat Niko al vaker dingen beloofd heeft die ze niet waar maken .. jammer.

      Nog een ander projectje ivm. NHC als Apple HomeKit device laten functioneren:
      https://github.com/kevinbungeneers/nhc-homekit

      Om terug te komen op die versleuteling en dat alle communicatie verloopt via Niko: versleuteling OK, die communicatie van de installatie naar Niko en terug minder OK. Om dat te verhinderen zou je je installatie moeten kunnen wijsmaken dat er geen internetconnectie is, dat zullen ze dan wel opvangen in hun code zodat dan het commando rechtstreeks naar de output gaat. Alé dat is toch te verwachten, want zou straf zijn dat je je installatie niet zou kunnen bedienen zonder een werkende internetverbinding (maar soit communicatie is in ieder geval versleuteld ookal had ik dat liever lokaal gehouden).

      PS: net mijn installatie gaan halen, in de loop van de week installeren - hyped

      Groetjes,
      Harm

      Verwijderen
  4. Hi allen, ik heb een vraag. Ik heb een connectie gemaakt tussen Google Home en OpenHAB en zie twee Items in mijn Google Home verschijnen. Het zijn twee switches met de namen 'Alle lichten aan' en 'Alle lichten uit'. Ze werken ook maar ik weet niet hoe ik ze moet bedienen middels voice. Dat lukt me op geen enkele manier. Heeft iemand een idee?

    BeantwoordenVerwijderen
    Reacties
    1. Nhc 1 of 2?
      Naar mijn weten werkt het enkel met nhc1 (met de smalle controler. En op zich heeft openhab er niet echt iets mee te maken. Het maakt het vinden van de juiste actie IDs wat simpeler

      Verwijderen
  5. Dag Bjorn,

    Werkt jou setup nu wel of niet op NHC2 zoals beschreven in jou blog onderaan?
    Want in de comments zie ik precies een reactie van jou dat het toch niet werkt.

    Alvast bedankt.

    BeantwoordenVerwijderen
  6. Sinds half November is er ondersteuning van NHC2 in OpenHAB. Maar nog niet alles is beschikbaar. Bijvoorbeeld lichten uit/aan/dimmen is er, de rest nog niet.

    BeantwoordenVerwijderen
  7. Dag Bjorn,

    ik ben al even bezig met het werkend te krijgen. Ik heb HC1 draaien, OpenHab, Node-Red en IFTTT. heb alles ingesteld, toch krijg ik het niet voorelkaar om het draaiend te krijgen. Ik vermoed dat ik toch een fout maak in de flow of regel in ifttt. Heb je wellicht nog wat meer info of tips voor een beginner?
    Alvast bedankt.

    BeantwoordenVerwijderen
  8. hey Bjorn,

    Ik ben lerende, maar heb hier iets gevonden waar jij net iets meer van kent/snapt. eventueel wel wat nodig is voor NHC+Openhab

    https://community.openhab.org/t/niko-home-control-ii/44586/201

    BeantwoordenVerwijderen
  9. Ongelooflijk Hoe niko geen makkelijkere integratie mogelijk maakt met zwave of ander standaard protocol...nee ze doen on versleutelde data! Zucht!

    BeantwoordenVerwijderen
    Reacties
    1. Hey Bart, ze gaan een hobby API uitgebrengen voor knutselaars zoals ik, ik heb de beta ervan ontvangen, moet enkel nog wat tijd maken om het op te zetten.

      Deze API maakt versleutelde communicatie met de connected controler mogelijk over MQTT.

      Ben hoopvol,
      Niko komt deze zomer ook met Google assistant integratie.
      Welke updates je er voor moet doen zullen we nog moeten afwachten.

      Groeten

      Verwijderen
  10. Beste,

    ik zie dat je een ingewikkeld maar werkend geheel hebt gecreëerd.
    echter is er sinds enkele maanden een veel simpelere manier.

    enkele gebruikers van OpenHab hebben een functie gemaakt voor NHC2, van daar kan je via openhab alles aansturen dat je wilt

    alsook kan je NHC2 rechtstreeks koppelen in je Google Home, dus daar valt ook de stap mee weg dat je een Raspberry Pi nodig hebt.

    Waarschijnlijk wist je dit laatste ook al, maar zo weten de andere bezoekers van deze site het ook ineens ;)

    BeantwoordenVerwijderen