Nest Protect rookmelder

In deze tutorial leg ik uit hoe je een Nest Protect (of ander Nest product) kunt integreren met Domoticz.

De Nest Protect is een slimme rook- en CO2 melder die je aan je WIFI netwerk kunt koppelen en kunt bedienen met een app. De Nest Protect kan dus zowel rook als CO2 detecteren en genereert bij voorkomen van rook en/of CO2 een alarm. Dit alarm wordt tevens doorgegeven aan de app.

De Nest plugin maakt gebruik van API’s van de Nest server en logt in met de credentials van je Nest account.

Benodigdheden:

  • Nest Protect V2
  • Smartphone
  • Google account

Reeds geïnstalleerd en up-and-running:

  • Chrome browser op je laptop of desktop
  • Domoticz

Testopstelling:

Pak de Nest Protect uit en verwijder alle verpakking- en bescherm foliën, je testopstelling is klaar.

Stappenplan:

 

Stap 1. Nest app gedownload vanuit Play store op mijn Smartphone

Stap 2. Ingelogd in de Nest app m.b.v. mijn google account en de volgende instellingen gedaan

  • Woning (Thuis) toegevoegd
  • Thuisadres ingevuld
  • Exacte adres locatie gekoppeld
  • Instellingen geopend
  • Thuis/Afwezig-functie ingesteld

Stap 3. Nest protect toegevoegd aan de app

  • Kies binnen instellingen van huis voor + Product toevoegen
  • Zorg dat je WIFI-wachtwoord bij de hand hebt
  • Scan de code achterop de Nest Protect
  • Selecteer in welke ruimte de Nest Protect hangt
  • Stel de WIFI in
  • En het apparaat wordt toegevoegd aan je account

Stap 4. NEST-API van Robert Breedveld geïnstalleerd conform https://github.com/rolandbreedveld/nest-api

  • Voer onderstaande commando’s uit op je Raspberry PI (of ander linux systeem)
  • Open in Chrome een incognitovenster (ctrl-shift-n)
  • Open Hulpprogramma’s voor ontwikkelaars (ctr-shift-i)
  • Klik op de Network tab, zorg ervoor dat de “Preserve log” optie aangevinkt staat
  • Voer “issueToken” in in de Filter Box
  • Ga naar https://home.nest.com
    • (Ik kreeg een melding dat de cookies van de Nest site werden geblokkeerd, middels Instellingen, Privacy en beveiliging, Cookies en andere sitegegevens heb ik “Alle cookies toestaan” aangevinkt)
    • Kies voor Inloggen met Google
    • Log in met je emailadres, wachtwoord
  • Er verschijnt nu een netwerk-call beginnend met “iframerpc” in het hulpprogramma voor ontwikkelaars, klik daar op
  • Kopieer op het Headers tab, onder General de volledige Request URL
    • Beginnend met https://account/google.com
    • Eindigend op nest.com
    • Dit is je $issue_token
  • Open nest.auth.php met je favoriete linux editor, bijv. nano of vi
    • Vervang achter $issue_token alles tussen de twee quotes (‘) met de inhoud vanuit je Klembord (wat je in de vorige stap gekopieerd hebt naar je klembord)
  • Ga terug naar het incognitovenster in Chrome
    • Vul in oauth2/iframe in in de filterbox
    • Meerdere netwerk calls verschijnen in het hulpprogramma voor ontwikkelaars
    • Klik op de laatste iframe call
    • In het Header tab, onder Request Headers, kopieer de hele cookie waarde (zonder de Cookie prefix !)
    • Dit is je $cookies waarde
  • Ga terug naar je terminal venster
    • Vervang achter $cookies alles tussen de quotes (‘) met de inhoud vanuit je Klembord (wat je in de vorige stap gekopieerd hebt naar je klembord)
    • Zorg ervoor dat zowel de waardes achter $issue_token en $cookies tussen quotes (‘) staat, en dat de regels worden afgesloten met een semi-colon (;)
  • Je nest.auth.php ziet er dan als volgt uit
  • <?php
    $issue_token = ‘https://accounts.google.com/o/oauth2/iframerpc?action=issueToken&response_type=token%20id_token&login_hint=AJDLj6LQu-SMCQLMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTYzobKJ-1q4pJZjmUkKTLN2NoeA&client_id=733249279899-4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpps.googleusercontent.com&origin=https%3A%2F%2Fhome.nest.com&scope=openid%20profile%20email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fnest-account&ss_domain=https%3A%2F%2Fhome.nest.com‘;
    $cookies = ‘SID=sgfrxxxxxxxxxxxxxxxTo-j_vf_-2Nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy1df-rxe1WQ.; __Secure-3PSID=sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxO64o74; __Secure-SSID=AxQEaWXSZg-1H2ZKk; __Secure-APISID=3tUvrVrS3ee–006/ApgGjs40awnwM2xFm; __Secure-3PAPISID=p9x18iZgyVgn6fFq/A7xjBbjEtWTgkOlEE; ACCOUNT_CHOOSER=AFx_qI67YjE14CI19N1npadly9l_FaDC_Q0x6stLujg2ispYwS9JCkpNTxXudBApImZ_uiK1DUI1iIr-zS62yUCSRSig4eZ5YJMf80s4c_kud9VdkUVmUmOQb30grwGeKXQjEHU6iQZsyskHzmrcjH1J5rkCOL4t5A; 1P_JAR=2020-1-13-18; NID=195=ZTTDd73Ta21uqwWY9ukPTFzpuAHFTAQd1RErNvg4z6NYKy_f-tuRJ78VGYXjEAaYBg58uVky8glL34mfROU_O2_tSqykTdE2KsJSfWONMXjL9UQtnibTyGEV–wyGX4aifkTflh4decHpLSC-_TlETZY6P2hlUz-c-RgdysyQ_vTegE-kaOb65xLfSu_B1qz; OCAK=hWss9zjy_ldnrr7A19jB3uiqDiMuIaU0dox0X9PTMvE; LSID=lso|s.NL|s.youtube:sgfulHAAN5u0Tzye6kJPb8RCE48c-8-ZPXtpOfuZGrPD7BEtf6r7h1KEc9bjBnm2gYFtkw.; __Host-3PLSID=lso|s.NL|s.youtube:sgfulHAAN5u0Tzye6kJPb8RCE48c-8-ZPXtpOfuZGrPD7BEtOVUIcmmh7iwpdYBOspgN8w.; user_id=11535263xxxxxxxxxxxxx; GAPS=1:0Bk-p2Evy7j9Cywz5JC5_Pv6BdixXBKHIYskyaNf5C32y7zwG5-1TIQakrz2m12ke5CZK1iM4BZh17yf7WZG6qF2jj_c:Zs3mYu8VtozyiY_d; SIDCC=AN0-TYsO6VDzcdyseOsCvt-yMZPxxxxxxxxxxxxxxxx8fZjPoHunLprx4_h4J9irKSjne9EJ‘;

Stap 5. Het shell-script /home/pi/nest-api/get_nest.sh aangepast

    • Het meegeleverde shellscript van Ron ondersteund geen Nest Protect, laat staan meerdere, daarom een aantal toevoegingen/aanpassingen gedaan aan het script
    • Regels 42 t/m 46 uitgecommentarieerd

# if [ ! -z “$(echo ${VALUE}|grep [0-9])” ]
# then
# VALUE=”$(echo ${VALUE}|awk ‘{print sprintf(“%.1f”,$1)}’)”
# fi

    • Na regel 50 de volgende regels toegevoegd

‘”device_id”:’)
DEVICE_ID=${VALUE}
;;

  • Op regel 78, (of 81 nadat je bovenstaande hebt ingevoegd) tussen “away” en “eco_mode” de volgende regels toegevoegd

‘”smoke_status”:’)
  TYPE=SMOKSTAT_$DEVICE_ID
  IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
  if [ “${VALUE}” == “OK” ]
  then
    VALUE=”OK”
  elif [ “${VALUE}” == “WARNING” ]
  then
    VALUE=”WARNING”
  elif [ “${VALUE}” == “EMERGENCY” ]
  then
    VALUE-“EMERGENCY”
  fi

  TYPE=SMOKSTAT
;;
‘”co_status”:’)
  TYPE=COSTAT_$DEVICE_ID
  IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
  if [ “${VALUE}” == “OK” ]
  then
    VALUE=”OK”
  elif [ “${VALUE}” == “WARNING” ]
  then
    VALUE=”WARNING”
  elif [ “${VALUE}” == “EMERGENCY” ]
  then
    VALUE-“EMERGENCY”
  fi

  TYPE=COSTAT

;;

  • Daarna op regel 110 (of 145 nadat je bovenstaande hebt ingevoegd) het volgende toegevoegd boven “TEMP”:

if [ “${TYPE}” == “SMOKSTAT” ]
then
  print_action “Update ${TYPE} to $VALUE”
  print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?    type=command&param=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)”

  print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=addlogmessage&message=${IDX}|${TYPE}|${VALUE}&level=2″ 2>&1)”

fi
if [ “${TYPE}” == “COSTAT” ]
then
  print_action “Update ${TYPE} to $VALUE”
  print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)”

  print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=addlogmessage&message=${IDX}|${TYPE}|${VALUE}&level=2″ 2>&1)”

fi

    • Het meegeleverde php-script get_nest.php van Ron ondersteunde geen meerdere Nest-protects, daarom de volgende aanpassing (in rood) in de file aangebracht (na regel 39):

echo “Devices list (Nest Protect):\n”;
$protects_serials = $nest->getDevices(DEVICE_TYPE_PROTECT);
jlog($protects_serials);
echo “———-\n\n”;

echo “Device information:\n”;
foreach ($protects_serials as $value) {
$infos = $nest->getDeviceInfo($value);
jlog($infos);
}
foreach ($devices_serials as $value) {
$infos = $nest->getDeviceInfo($value);
jlog($infos);
}
echo “———-\n\n”;

    • Het serienummer van de Nest Protect gebruik ik om de individuele Nest’s te kunnen onderscheiden, daarom op regel 288 in nest.class.php de volgende regel toegevoegd:

‘device_id’ => $serial_number,

    • Het serienummer van de Nest vindt je op de achterzijde van je nest (rood omrand)
    • In nest_devices.cfg de devices SMOKSTAT_<serienummer Nest protect> en COSTAT_<serienummer Nest protect> toegevoegd met hun respectievelijke IDX identificatienummers uit Domoticz (Zie stap 6)

Device idx
============
SETPOINT 79
TEMP 82
HUMIDITY 81
AWAYMODE 80
ECOMODE 83
HEAT 78
TEMPHUM 77
COSTAT_06CA01AC1320038L 83
SMOKSTAT_06CA01AC1320038L 82
COSTAT_06AA01AC4720005J 210
SMOKSTAT_06AA01AC4720005J 209
DOMOTICZ 192.168.2.29:8080

    • Het geheel kun je testen in de debug mode met /home/pi/nest-api/get_nest.sh -d

Stap 6. De icons van de Nest Protect uit de ‘Nest protect.zip’ (gedownload van https://github.com/FilipDem/Domoticz-NEST-plugin) toegevoegd aan Domoticz

  • Via Instellingen, Meer opties, Aangepaste pictogrammen

Stap 6. Twee virtuele sensors toegevoegd: Smoke_status en CO_status

 

Label Waarde Doel
Naam Smoke_status Zinvolle naam
Schakelaar type Selector Hierdoor kan de sensor meerdere statussen ontvangen
Schakelaar icoon Google Nest Protect Icoon toegevoegd in Stap 5
Inschakelvertraging 0 Default
Uitschakelvertraging 0 Default
Beschermd Aangevinkt Dit voorkomt dat een gebruiker de status handmatig kan aanpassen
Selectorstijl Knoppengroep Hangt van je smaak af
Verberg uit niveau Niet aangevinkt Default
Keuzeniveaus

0 OK

10 WARNING

20 EMERGENCY

Conform mogelijke waarden uit get_nest.sh
Selectie acties   Default
Omschrijving   Default

 

 

Label Waarde Doel
Naam CO_status Zinvolle naam
Schakelaar type Selector Hierdoor kan de sensor meerdere statussen ontvangen
Schakelaar icoon Google Nest Protect Icoon toegevoegd in Stap 5
Inschakelvertraging 0 Default
Uitschakelvertraging 0 Default
Beschermd Aangevinkt Dit voorkomt dat een gebruiker de status handmatig kan aanpassen
Selectorstijl Knoppengroep Hangt van je smaak af
Verberg uit niveau Niet aangevinkt Default
Keuzeniveaus

0 OK

10 WARNING

20 EMERGENCY

Conform mogelijke waarden uit get_nest.sh
Selectie acties   Default
Omschrijving   Default


Stap 7. De twee schakelaars aan nest_devices.cfg toegevoegd, en het IP-adres van de Domoticz server aangepast

  • Ga terug naar je Terminal venster
  • Voer het volgende commando uit
  • cp nest_devices.cfg-example nest_devices.cfg
  • open met je favorite linux editor nest_devices.cfg
  • Voeg de twee devices met hun IDX’en toe
  • Verander het IP adres en het poortnummer van je Domoticz server

Device   idx
============
SETPOINT 79
TEMP     82
HUMIDITY 81
AWAYMODE 80
ECOMODE  83
HEAT     78
TEMPHUM  77
COSTAT_06CA01AC1320038L 83

SMOKSTAT_06CA01AC1320038L 82
COSTAT_06AA01AC4720005J 210

SMOKSTAT_06AA01AC4720005J 209
DOMOTICZ 192.168.2.29:8080

Stap 8. get-nest.sh toegevoegd aan de crontab van root zodat iedere minuut het script gedraaid wordt en de status van de rook- en koolmonoxide melder uitgelezen wordt:

  • Voer onderstaand commando uit

sudo crontab -e

  • Voeg onderstaande regel onderaan in je crontab toe

* * * * * /home/pi/nest-api/get_nest.sh > /var/log/nest-api.log 2>&1

Stap 9. Groep ‘Brand Alarm’ toegevoegd om verlichting in te schakelen als er alarm is:

Stap 10. Blocky script aangemaakt die er voor zorgt als er brandalarm is:

  • ramen dicht gedaan worden (nog niet geimplementeerd)
  • ventilatie uitgezet wordt
  • ventilator uitgezet wordt
  • lichten aangedaan worden als het donker is

Als de status van Rookmelder Woonkamer of de status van Rookmelder Werkplek op Emergency gezet wordt, dan:

  • schrijf een logbericht naar de logging van Domoticz
  • Zet de Ventilator op Manual
  • Zet de Ventilator uit
  • Als het Donker is, zet de groep lichten ‘Brand’ aan
  • Zet Ventilatie op stand I

Stap 11. Blocky script aangemaakt die er voor zorgt als er koolmonixide-alarm is:

  • schrijf een logbericht naar de logging van Domoticz
  • Zet de Ventilatie op stand III
  • Zet Ventilator op Manual
  • Zet Ventilator aan

Stap 12. Notificaties aangemaakt voor Rook- en koolmonoxidemelders

 

Type

Niveau

Prioriteit

Negeer Interval

Aangepast bericht

Email

FCM

Smoke_status Woonkamer

Inschakelen

Warning

Hoog

Uit

Rookmelder geeft waarschuwing

Aan

Aan

 

Inschakelen

Emergency

Noodgeval

Uit

Alarm ! Rookmelder geeft aan dat er rook gesignaleerd wordt

Aan

Aan

CO_status Woonkamer

Inschakelen

Warning

Hoog

Uit

Koolmonoxidemelder geeft waarschuwing

Aan

Aan

 

Inschakelen

Emergency

Noodgeval

Uit

Alarm ! Koolmonoxidemelder geeft aan dat er koolmonoxide geconstateerd is

Aan

Aan

Smoke_status Werkplek

Inschakelen

Warning

Hoog

Uit

Rookmelder geeft waarschuwing

Aan

Aan

 

Inschakelen

Emergency

Noodgeval

Uit

Alarm ! Rookmelder geeft aan dat er rook gesignaleerd wordt

Aan

Aan

CO_status Werkplek

Inschakelen

Warning

Hoog

Uit

Koolmonoxidemelder geeft waarschuwing

Aan

Aan

 

Inschakelen

Emergency

Noodgeval

Uit

Alarm ! Koolmonoxidemelder geeft aan dat er koolmonoxide geconstateerd is

Aan

Aan

 

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *