Nest Protect rookmelder

Last Updated on 30 december 2021 by Syds

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
    • Als je two-factor authenticatie hebt ingesteld, bevestig het inloggen op nest.com op je tweede device
  • 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&include_granted_scopes=true
    • 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&include_granted_scopes=true‘; $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 Noot 29-12-2021: Onderstaande aanpassingen in Stap 5 zijn door mij als verbeteringen aangedragen op github en intussen door Robert Breeveld verwerkt in de master branch. Dus als je een verse installatie vanaf github hebt gedaan, dan hoef je onderstaande aanpassingen niet uit te voeren, dit met uitzondering van het verwerken van het serienummer van je Nest protect in de nest_devices.cfg file zoals beschreven net boven Stap 6. Je kunt eventueel ook een git pull commando uitvoeren in de map /home/pi/nest-api om de laatste versie van github down te loaden en te installeren. Tip: maak eerst een backup van de huidige map /home/pi/nest-api met het commando cp -R nest-api nest-api.backup vanuit de directory /home/pi
    • 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

18 gedachten over “Nest Protect rookmelder

  1. Herbert Blom zegt:

    Syds,

    Kom toch net iets programmeer skills te kort om het 1 en ander goed te begrijpen.
    Heb de nest thermostaat werkend en ga nu verder met de nest protect (3). Leek mij wel leuk.
    Echter loop ik weer vast.
    Ik ben met toevoegen, op of na de regels in get_nest.sh, verder gegaan in de get_nest.sh van de nest thermostaat.
    Wanneer ik regel 110 (145) ga toevoegen kom ik er niet achter welke TEMP er precies wordt bedoeld.
    Ik kom dit if [ “${TYPE}” == “TEMP” ] tegen. (Regel 198)
    Klopt dat?
    Als ik het hierboven toevoeg komen er allerlei foutmeldingen voor terug tijdens de debugmode.
    Kan jij mij misschien een zetje in de goede richting geven waar ik de mist in ga?
    Of kan je jouw get_nest.sh ter lering en vergelijk opsturen?
    Ik hoor graag van je.

    Met vriendelijke groet,
    Herbert Blom

    Beantwoorden
    1. Syds zegt:

      Herbert,

      Volgens mij heb je de goede plek met het inserten van de SMOKSTAT en COSTAT boven if [ “${TYPE}” == “TEMP” ], echter die zit bij nog steeds op regel 145. Als je de laatste versie van github hebt gehaald dan hoef je niets meer aan te passen. Heb mijn verbeteringen namelijk aangedragen en die zijn door Roland overgenomen in master branch op github. Wellicht moet je nog even het commando “git pull” uitvoeren in de directory /home/pi/nest-api om de laatste versie te downloaden. (Tip: maak eerst wel even een backup van de huidige situatie)

      Zal dat nog even vermelden in mijn tutorial.

      Syds

      P.S. Onderstaand nog even mijn actieve get_nest.sh

      $ cat get_nest.sh
      #!/bin/bash

      # =========================================
      # /home/pi/nest-api/get_nest.sh
      # =========================================
      # Roland@Breedveld.net
      #
      # See README.md for info

      cd /home/pi/nest-api

      DOMOTICZ=$(grep “^DOMOTICZ ” nest_devices.cfg|awk ‘{print $NF}’)
      if [ -z “${DOMOTICZ}” ]
      then
      export DOMOTICZ=”127.0.0.1:8080″
      fi

      if [ “${1}” == “-d” ]
      then
      export DEBUG=1
      else
      export DEBUG=0
      fi

      function print_debug ()
      {
      if [ “${DEBUG}” == “1” ]
      then
      echo “$(date “+%Y-%m-%d %H:%M”) DEBUG: ${*}”
      fi
      }

      function print_action ()
      {
      echo “$(date “+%Y-%m-%d %H:%M”) ${*}”
      }

      TARGET_SET=0
      php get_nest.php| while read LINE
      do
      VALUE=”$(echo ${LINE}|awk ‘{print $2}’|sed ‘s/,$//;s/\”//g’)”
      # if [ ! -z “$(echo ${VALUE}|grep [0-9])” ]
      # then
      # VALUE=”$(echo ${VALUE}|awk ‘{print sprintf(“%.1f”,$1)}’)”
      # fi
      case “$(echo ${LINE}|awk ‘{print $1}’)” in
      ‘”target”:’)
      TARGET_SET=1
      # 1st temp is normaltemp, the same after target is the setpoint
      ;;
      ‘”device_id”:’)
      DEVICE_ID=${VALUE}
      ;;
      ‘”temperature”:’)
      if [ “${TARGET_SET}” == “1” ]
      then
      TYPE=SETPOINT
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      else
      TYPE=TEMP
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      TEMP=${VALUE}
      fi
      ;;
      ‘”humidity”:’)
      TYPE=HUMIDITY
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      # if Multi sensor is used
      TEMPHUM_VALUE=”${TEMP};${VALUE};0″
      ;;
      ‘”away”:’)
      TYPE=AWAYMODE
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      if [ “${VALUE}” == “true” ]
      then
      VALUE=”On”
      else
      VALUE=”Off”
      fi
      ;;
      ‘”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
      ;;
      ‘”eco_mode”:’)
      TYPE=ECOMODE
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      if [ “${VALUE}” == “manual-eco” ]
      then
      VALUE=”On”
      else
      VALUE=”Off”
      fi
      ;;
      ‘”heat”:’)
      if [ “${VALUE}” == “true” ]
      then
      TYPE=HEAT
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      VALUE=”On”
      fi
      if [ “${VALUE}” == “false” ]
      then
      TYPE=HEAT
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      VALUE=”Off”
      fi
      ;;
      *)
      IDX=””
      ;;
      esac
      print_debug “json: $LINE”
      print_debug “vars: TYPE:$TYPE VALUE:$VALUE IDX:$IDX”
      if [ ! -z “${IDX}” ]
      then
      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
      if [ “${TYPE}” == “TEMP” ]
      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)”
      fi
      if [ “${TYPE}” == “HUMIDITY” ]
      then
      print_action “Update ${TYPE} to $VALUE”
      print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=udevice&idx=${IDX}&nvalue=${VALUE}&svalue=0″ 2>&1)”
      fi
      if [ “${TYPE}” == “SETPOINT” ]
      then
      CURRENT=$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=devices&rid=${IDX}” 2>/dev/null|grep ‘”SetPoint” : ‘|sed ‘s/\”//g;s/,$//’|awk ‘{print sprintf(“%.1f”,$3)}’)
      if [ “${CURRENT}” != “${VALUE}” ]
      then
      print_action “Update ${TYPE} to $VALUE”
      print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=setused&idx=${IDX}&setpoint=${VALUE}&used=true” 2>&1)”
      else
      # check last update, to avoid red sensor
      LASTUPDATE=$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=devices&rid=${IDX}” 2>/dev/null|grep ‘”LastUpdate” :’|awk -F\” ‘{print $4}’)
      print_debug “vars: LASTUPDATE SETPOINT:${LASTUPDATE}”
      if [ “$(($(date ‘+%s’) – $(date –date=”${LASTUPDATE}” +%s)))” -gt “3600” ]
      then
      print_action “Update ${TYPE} to $VALUE : LastUpdate older then 60 minutes ”
      print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=setused&idx=${IDX}&setpoint=${VALUE}&used=true” 2>&1)”
      fi
      fi
      fi
      if [ “${VALUE}” == “On” ]
      then
      if curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=devices&rid=${IDX}” 2>/dev/null|grep Status|grep Off >/dev/null 2>&1
      then
      print_action “Update ${TYPE} state to ${VALUE}”
      print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=switchlight&idx=${IDX}&switchcmd=${VALUE}” 2>&1)”
      fi
      fi
      if [ “${VALUE}” == “Off” ]
      then
      if curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=devices&rid=${IDX}” 2>/dev/null|grep Status|grep On >/dev/null 2>&1
      then
      print_action “Update ${TYPE} state to ${VALUE}”
      print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=switchlight&idx=${IDX}&switchcmd=${VALUE}” 2>&1)”
      fi
      fi
      if [ ! -z “${TEMPHUM_VALUE}” ]
      then
      TYPE=”TEMPHUM”
      IDX=$(grep “^${TYPE} ” nest_devices.cfg|awk ‘{print $NF}’)
      if [ ! -z “${IDX}” ]
      then
      print_action “Update ${TYPE} to $TEMPHUM_VALUE”
      print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command&param=udevice&idx=${IDX}&nvalue=0&svalue=${TEMPHUM_VALUE}” 2>&1)”
      fi
      TEMPHUM_VALUE=””
      fi
      fi
      done

      Beantwoorden
  2. Herbert Blom zegt:

    Syds,
    Bestanden naast elkaar gelegd, gecontroleerd en daar waar nodig aangepast. ( ook de hele tekst in een nieuwe gezet maar toen ook deze foutmelding )
    Zo op het oog identiek, maar toch is daar een foutmelding.

    /home/pi/nest-api$ /home/pi/nest-api/get_nest.sh -d
    /home/pi/nest-api/get_nest.sh: line 215: unexpected EOF while looking for matching `”‘
    /home/pi/nest-api/get_nest.sh: line 219: syntax error: unexpected end of file

    Nogmaals, zo op het oog zit er niets tussen.
    Weet jij waar het fout gaat?
    Nu al bedankt.

    Groet ,
    Herbert

    Beantwoorden
    1. Syds zegt:

      Herbert,

      Zo aan de foutmelding af te lezen ontbreekt er ergens een aanhalingsteken (“), dat kan al eerder in het script zijn dus je zult van bovenaf aan alle strings en stringvergelijkingen even na moeten lopen op aanhalingsteken voor en na de string of stringvergelijking.

      Syds

      Beantwoorden
  3. Herbert Blom zegt:

    Syds,

    Van de github van Roland alles nieuw geïnstalleerd maar dan komt het “corrupt” binnen.
    Het deel dat voor de TEMP moet worden geplaatst staat met ‘”smoke_status”:’) in plaats van de “. Dan werkt de debug mode.
    Vervang ik deze tekst met jouw versie dan werkt het niet meer.
    Ik blijf zoeken maar raar is het wel.

    Groet,
    Herbert

    Beantwoorden
    1. Syds zegt:

      Herbert,

      Zelf even uitgeprobeerd op een “schone” raspberry pi zero. De plugin onder /home/pi geïnstalleerd met git clone https://github.com/rolandbreedveld/nest-api. nest_devices.cfg_example gerenamed naar nest_devices.cfg, nest.auth.php gekopieerd van mijn werkende installatie. ./get-nest.sh -d werkt ‘like a charm’. Dus waar jou probleem precies zit weet ik niet. Misschien ook even uitgaan van een schone (her)installatie van de plugin, en van daaruit verder werken.

      Syds

      Beantwoorden
  4. Herbert Blom zegt:

    Syds
    Dank voor je antwoord. Weet ook niet waar het aan schort. Ik ga nog een keer een schone installatie doen.
    Ik laat weer van me horen.

    Groet
    Herbert

    Beantwoorden
  5. Herbert Blom zegt:

    Syds,

    heb volgens mij de get_nest.sh storingvrij, via de debug, werkend, maar er komen nog geen gegevens binnen. nest_devices.cfg aangepast met de ID nummers uit domoticz.
    Moet ik ook nog een keer die nest.auth.php vullen met de laatste gegevens? Heb dat namelijk geprobeerd, maar ook dat krijg ik niet voor elkaar.
    De thermostaat ging , uiteindelijk, wel maar dit is next level.
    Laat het even rusten.
    Goed uiteinde en bedankt.
    Groet,
    Herbert

    Beantwoorden
    1. Syds zegt:

      Herbert, het autorisatie token van Google is inderdaad onlangs gewijzigd, je moet inderdaad de stappen voor het vullen van nest auth.php even opnieuw doorlopen. Heb de tutorial erop aangepast. Jij ook een goed uiteinde en alvast de beste wensen voor 2022.

      Syds

      Beantwoorden
  6. Herbert Blom zegt:

    Syds,

    met de inlog op google nest bezig geweest. Ander wachtwoord moeten maken, maar daarna alles gevolgd en gedaan zoals hierboven beschreven, maar ik kan niet meer inloggen met de nest.auth.php.
    Dat heb ik weer.
    Jij als NEST goeroe nog een heldere ingeving hoe dit op te lossen?

    Groet,
    Herbert

    Beantwoorden
  7. herbert blom zegt:

    Syds,

    ben weer binnen bij google nest met nieuw wachtwoord en oude issuetoken.
    Maar nog geen nest protect.
    Ik blijf verder zoeken.

    Groet,
    Herbert

    Beantwoorden
  8. Herbert Blom zegt:

    Syds,

    Ik krijg de nieuwe issuetoken niet voor elkaar. Nest thermostaat werkt prima. Nest protect niet. Wat er fout gaat, geen idee. Volg de beschrijving nauwgezet maar dan nog lukt het niet.
    Hier stopt het.
    Bedankt voor je luisterend oor en je geduld.
    Groet,
    Herbert

    Pa
    Mocht je nog iets te binnen schieten dan hoor ik dat graag.

    Beantwoorden
  9. Edwin Plat zegt:

    Hi Syb,

    Ik heb wat aanloop problemen gehad, maar na wat debugging een heel eind gekomen met de NEST integratie in Domoticz. Ik heb 4 Protect devices, in de debug zie il ook de IDX’en van de devices voorbij komen. Echter geen status update. Kan je wellicht helpen het probleem te zoeken?

    Beantwoorden
    1. Syds zegt:

      Edwin, uiteraard wil ik je helpen. Paar vraagjes:
      a) heb je de laatste versie van de plugin gedownload van GitHub ?
      b) heb je de file nest_devices.cfg aangepast conform mijn beschrijving in de laatste bullit van stap 5 ?
      c) indien je a) en b) bevestigend kunt beantwoorden, zou je dan de output van get_nest.sh -d kunnen delen?

      Syds

      Beantwoorden
      1. Edwin Plat zegt:

        Thx Syds,

        Jawel, ik heb de laatste versie van de plugin van Github.
        Echter eb ik wel het get_nest.sh bestand moeten editten met behulp van WinSCP en Notepad++. Ik had net als Herbert Ԡinplaats van quote’s en dubbel quote’s. Ook stonden diverse quote’s en dubbel quote’s als cursief en struikelde het scriot daarover. Het was wat monnikenwerk omdat goed te krijgen met Notepad++ maar het is gelukt.
        Ook moest ik omdat er 4 nest protects zijn regel 42 tot 46 nog van een # voorzien om ze te skippen.
        Toen dat gedaan was zag ik als ik de optie -d achter het script zetten, enkele IDX’en van de protects in het debug log.

        Als het goed is zie jij het email adres wat ik gebruik als ik hier post. Zou je daar een mail naar kunnen sturen? Ik mail liever de output van get_nest.sh -d, dit omdat er allerlei serials etc. in staan. Die slinger ik liever niet zo op internet, vandaar.

        Alvast bedankt

        Beantwoorden

Geef een reactie

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