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
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 (;)
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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)” print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=addlogmessage&message=${IDX}|${TYPE}|${VALUE}&level=2″ 2>&1)”fiif [ “${TYPE}” == “COSTAT” ]then print_action “Update ${TYPE} to $VALUE” print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)” print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=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)
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 79TEMP 82HUMIDITY 81AWAYMODE 80ECOMODE 83HEAT 78TEMPHUM 77COSTAT_06CA01AC1320038L 83SMOKSTAT_06CA01AC1320038L 82
COSTAT_06AA01AC4720005J 210SMOKSTAT_06AA01AC4720005J 209DOMOTICZ 192.168.2.29:8080Stap 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>&1Stap 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”
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.
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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)”
print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)”
print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${TEMPHUM_VALUE}” 2>&1)”
fi
TEMPHUM_VALUE=””
fi
fi
done
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.
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.
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.
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.
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
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.
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?
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.
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?
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?
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.
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
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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)”
print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${VALUE}” 2>&1)”
print_debug “$(curl -4 -X GET “http://${DOMOTICZ}/json.htm?type=command¶m=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¶m=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¶m=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¶m=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¶m=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¶m=udevice&idx=${IDX}&nvalue=0&svalue=${TEMPHUM_VALUE}” 2>&1)”
fi
TEMPHUM_VALUE=””
fi
fi
done
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
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
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
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
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
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
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
Syds,
Dan ga ik daar nog een keer mee aan de slag.
Groet,
Herbert
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
Syds,
ben weer binnen bij google nest met nieuw wachtwoord en oude issuetoken.
Maar nog geen nest protect.
Ik blijf verder zoeken.
Groet,
Herbert
Herbert, bij mij was het issue token ook gewijzigd …, Syds
Syds,
gaan we verder met dat gegeven.
Dank je.
Herbert
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.
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?
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
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