Netatmo Wetterstation (incl. CO2 Messung) einbinden
Moderator: Co-Administratoren
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Super. Weiter geht es mit dem scope Problem hier: http://homematic-forum.de/forum/viewtop ... 59#p302559
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hmm... weiteres Problem:
Let Deiner Anleitung habe ich das Programm erstellt, welches alle 15 Minuten die Netatmo abfragt.
Doch dieses Programm fragt nun nicht mehr ab.. Warum nicht?
Unter "WebMatic" habe ich einen Knopf zum manuellen Ausführen von Programmen - in der normalen Oberfläche der CCU2 leider nicht... Da kann ich sehen, dass das Programm zuletzt z.B. vor 3 Stunden ausgeführt wurde - statt innerhalb der letzten 15 Minuten.
Wenn ich also das Programm manuell starte funktioniert es einwandfrei und die Werte werden aus der Netatmo ausgelesen.
Wie kann ich die CCU2 Programme überwachen sodass ich sicher gehen kann, dass sie auch tatsächlich ausgeführt werden?
Momentan ist es ja nur Spielerei. Aber wenn irgendwann wichtige Funktionen dran hängen, muss die CCU2 fehlerfrei und zuverlässig laufen...
Let Deiner Anleitung habe ich das Programm erstellt, welches alle 15 Minuten die Netatmo abfragt.
Doch dieses Programm fragt nun nicht mehr ab.. Warum nicht?
Unter "WebMatic" habe ich einen Knopf zum manuellen Ausführen von Programmen - in der normalen Oberfläche der CCU2 leider nicht... Da kann ich sehen, dass das Programm zuletzt z.B. vor 3 Stunden ausgeführt wurde - statt innerhalb der letzten 15 Minuten.
Wenn ich also das Programm manuell starte funktioniert es einwandfrei und die Werte werden aus der Netatmo ausgelesen.
Wie kann ich die CCU2 Programme überwachen sodass ich sicher gehen kann, dass sie auch tatsächlich ausgeführt werden?
Momentan ist es ja nur Spielerei. Aber wenn irgendwann wichtige Funktionen dran hängen, muss die CCU2 fehlerfrei und zuverlässig laufen...
Gruß
Guido
Guido
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo,
Urlaub vorbei.
Das Problem habe ich leider seit ein paar Wochen auch.
Den Urlaub durch lief alles, aber gestern um 18:00 Uhr war wieder Schluss. In unregelmäßigen Abständen stoppt das Programm. Meist läuft es wieder wenn ich das Programm einmal manuell starte. Aber nach ein paar Stunden, Tagen oder ner Woche hängt es plötzlich wieder.
Daher stelle ich gerade auf einen CUxD Timer um der dann das Programm auslösen soll. Das hat auch den Vorteil, dass das Programm nicht zu festen Zeiten sondern irgendwann mittendrin auslöst und dann weniger mit anderen Dingen synchronisiert läuft. Ich werde berichten ob es besser läuft.
Um den Programmablauf zu Monitoren kannst du das auch hier im Forum verwendete Skript nutzen dass einen benachrichtigt wenn eine Servicemeldung aufläuft. Die NetAtmo Geräte generieren bei mir eine Kommunikationsstörung wenn das Programm ca. 1h nicht mehr gestartet wurde.
Grüße
Urlaub vorbei.
Das Problem habe ich leider seit ein paar Wochen auch.
Den Urlaub durch lief alles, aber gestern um 18:00 Uhr war wieder Schluss. In unregelmäßigen Abständen stoppt das Programm. Meist läuft es wieder wenn ich das Programm einmal manuell starte. Aber nach ein paar Stunden, Tagen oder ner Woche hängt es plötzlich wieder.
Daher stelle ich gerade auf einen CUxD Timer um der dann das Programm auslösen soll. Das hat auch den Vorteil, dass das Programm nicht zu festen Zeiten sondern irgendwann mittendrin auslöst und dann weniger mit anderen Dingen synchronisiert läuft. Ich werde berichten ob es besser läuft.
Um den Programmablauf zu Monitoren kannst du das auch hier im Forum verwendete Skript nutzen dass einen benachrichtigt wenn eine Servicemeldung aufläuft. Die NetAtmo Geräte generieren bei mir eine Kommunikationsstörung wenn das Programm ca. 1h nicht mehr gestartet wurde.
Grüße
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Ja, die Kommunikationsstöring habe ich auch schon mal bekommen - aber nicht regelmäßig. Ich habe das dann wieder auf einen nicht funktionierenden Token geschoben.
Gesendet von iPhone mit Tapatalk
Gesendet von iPhone mit Tapatalk
Gruß
Guido
Guido
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
So.
Seit heute Vormittag läuft alles über einen CUxD Timer. Bislang ohne Störung.
So habe ich es gemacht.
Ich verwende einen Kanal des CUxD Timer Gerätes für NetAtmo.
In den Einstellungen des Gerätes gebe ich die gewünschten Werte ein.
Bei mir Ausführen alle 600s.
Es wird kein eigenes Programm mehr benötigt. Einfach einstellen und den Befehl (tclsh /usr/local/addons/netatmo/netatmo.tcl) direkt hinterlegen. fertig. Startet sofort sollte auch neustarts der CCU überleben.
So sieht es bei mir aus. Hier kann man am Zahnrad erkennen, dass der Timer läuft. Ich werde das jetzt mal so laufen lassen und beobachten.
Seit heute Vormittag läuft alles über einen CUxD Timer. Bislang ohne Störung.
So habe ich es gemacht.
Ich verwende einen Kanal des CUxD Timer Gerätes für NetAtmo.
In den Einstellungen des Gerätes gebe ich die gewünschten Werte ein.
Bei mir Ausführen alle 600s.
Es wird kein eigenes Programm mehr benötigt. Einfach einstellen und den Befehl (tclsh /usr/local/addons/netatmo/netatmo.tcl) direkt hinterlegen. fertig. Startet sofort sollte auch neustarts der CCU überleben.
So sieht es bei mir aus. Hier kann man am Zahnrad erkennen, dass der Timer läuft. Ich werde das jetzt mal so laufen lassen und beobachten.
-
- Beiträge: 122
- Registriert: 07.09.2016, 13:33
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Kurzes Feedback:
Habe das so wie von Dir beschrieben umgesetzt und funktioniert seit mehreren Tagen einwandfrei.
Vielen Dank Indigo, hat mir sehr geholfen!
Habe das so wie von Dir beschrieben umgesetzt und funktioniert seit mehreren Tagen einwandfrei.
Vielen Dank Indigo, hat mir sehr geholfen!
Netatmo Wetterstation (incl. CO2 Messung) einbinden
Gerne.
Bei mir läuft es bislang auch ohne Aussetzer.
Dann werde ich das auch mal ins HowTo aufnehmen.
Gesendet von iPhone mit Tapatalk
Bei mir läuft es bislang auch ohne Aussetzer.
Dann werde ich das auch mal ins HowTo aufnehmen.
Gesendet von iPhone mit Tapatalk
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo
Ich habe anhand der Beschreibung meine Netatmo einbinden können. Hat alles super geklappt! 1A Beschreibung!!!
Nur habe ich ein kleines Problem bei meinen 3 Zusatzmodulen COSZ,COGR und COKE. Dort wird alles ausser den CO2 Wert angezeigt.
Habe für alle drei jeweils eine Variable angelegt.
Die CO2 Werte der Zusatzmodule sehe ich via Terminal aber dann in der homematic steht dann einfach nur 0.00
(Beim innensensor sehe ich den CO2 Wert...)
Kann mir Jemand helfen.....
Hier noch den Code:
Ich habe anhand der Beschreibung meine Netatmo einbinden können. Hat alles super geklappt! 1A Beschreibung!!!
Nur habe ich ein kleines Problem bei meinen 3 Zusatzmodulen COSZ,COGR und COKE. Dort wird alles ausser den CO2 Wert angezeigt.
Habe für alle drei jeweils eine Variable angelegt.
Die CO2 Werte der Zusatzmodule sehe ich via Terminal aber dann in der homematic steht dann einfach nur 0.00
(Beim innensensor sehe ich den CO2 Wert...)
Kann mir Jemand helfen.....
Hier noch den Code:
Code: Alles auswählen
#!/bin/tclsh
load tclrega.so
#---------------------------------------------------------------------------------------------------------------#
# CONFIG #
#---------------------------------------------------------------------------------------------------------------#
# to obtain your own client ID and API key please register a new app here: http://dev.netatmo.com/dev/listapps
set clientId ""
set clientSecret ""
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username ""
set password ""
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid ""
set moduleid ""
set rainid ""
set windid ""
set szid ""
set cogrid ""
set cokeid ""
set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
set cfgfile "/tmp/netatmo.dat"
set logtag "netatmo.tcl"
set logfacility "local1"
# 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug
set loglevel 6
#---------------------------------------------------------------------------------------------------------------#
#---------------------------------------------------------------------------------------------------------------#
# GLOBAL VARIABLES #
#---------------------------------------------------------------------------------------------------------------#
set accesstoken ""
set refreshtoken ""
set tokenexpires 0
#---------------------------------------------------------------------------------------------------------------#
set loglevels {panic alert crit err warn notice info debug}
proc log {lvl msg} {
global logtag
global logfacility
global loglevel
global loglevels
set lvlnum [lsearch $loglevels $lvl]
if {$lvlnum <= $loglevel} {
if {$lvlnum <= 3} {
catch {exec logger -s -t $logtag -p $logfacility.$lvl $msg}
} else {
puts "$lvl: $msg"
catch {exec logger -t $logtag -p $logfacility.$lvl $msg}
}
}
}
proc refreshToken {rt ci cs} {
log debug "refreshing token"
set url "https://api.netatmo.net/oauth2/token"
set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
set parameter "grant_type=refresh_token&refresh_token=$rt&client_id=$ci&client_secret=$cs"
catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response
log debug "response was $response"
return $response
}
proc requestToken {ci cs un pw} {
log "debug" "requesting new token"
set url "https://api.netatmo.net/oauth2/token"
set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
set parameter "grant_type=password&client_id=$ci&client_secret=$cs&username=$un&password=$pw"
catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response
log debug "response was $response"
return $response
}
proc parseOAuthResponse {input} {
log debug "parsing authentication result"
global accesstoken
global refreshtoken
regexp {HTTP/1.1\s(\d*)} $input dummy returncode
regexp {\"access_token\":\"(.*?)\"} $input dummy accesstoken
regexp {\"refresh_token\":\"(.*?)\"} $input dummy refreshtoken
regexp {\"expires_in\":(.*?)\,} $input dummy expiresin
log debug "returncode is $returncode"
log debug "access token is $accesstoken"
log debug "refresh token is $refreshtoken"
log debug "expires in $expiresin"
if {[expr $returncode]!=200} {
log error "Authentication failed with code $returncode and response $input"
exit 1
}
return $expiresin
}
proc saveAccessToken {expin} {
global accesstoken
global refreshtoken
global tokenexpires
global cfgfile
log debug "saving new access token to $cfgfile"
set fileId [open $cfgfile "w"]
set now [clock seconds]
set tokenexpires [expr $now + $expin]
puts $fileId $accesstoken
puts $fileId $refreshtoken
puts $fileId $tokenexpires
close $fileId
}
proc loadAccessToken {} {
global accesstoken
global refreshtoken
global tokenexpires
global cfgfile
log debug "loading stored credentials from $cfgfile"
set fp [open $cfgfile r]
set file_data [read $fp]
close $fp
log debug "file data is: $file_data"
set data [split $file_data "\n"]
set accesstoken [lindex $data 0]
set refreshtoken [lindex $data 1]
set tokenexpires [lindex $data 2]
}
log debug "script has started"
if { [file exists $cfgfile] == 1} {
log info "found stored credentials"
loadAccessToken
set now [clock seconds]
log debug "current time is [clock format $now -format "%Y-%m-%dT%H:%M:%S"], token is valid until [clock format $tokenexpires -format "%Y-%m-%dT%H:%M:%S"]"
if {[expr $now >= $tokenexpires] == 1} {
log notice "token has already expired"
saveAccessToken [parseOAuthResponse [refreshToken $refreshtoken $clientId $clientSecret]]
log notice "oauth token successfully refreshed"
} else {
log info "token is still valid"
}
} else {
log warn "no stored credentials found"
saveAccessToken [parseOAuthResponse [requestToken $clientId $clientSecret $username $password]]
log notice "oauth token successfully initialized"
}
log debug "polling outdoor module..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$moduleid&scale=max&type=Temperature,Humidity&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?),(.*?)\]} $response dummy otemp ohum
log info "Outside temperature is $otemp"
log info "Outside humidity is $ohum"
log debug "polling zusatzmodule..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$szid&scale=max&type=Temperature,Humidity,CO2&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?),(.*?),(.*?)\]} $response dummy ztemp zhum zco2
log info "LogI is $response"
log info "Inside temperature is $ztemp"
log info "Inside humidity is $zhum"
log info "Inside CO2 level $zco2"
log debug "polling zusatzmodule2.."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$cogrid&scale=max&type=Temperature,Humidity,CO2&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?),(.*?),(.*?)\]} $response dummy grtemp grhum grco2
log info "LogI is $response"
log info "Inside temperature is $grtemp"
log info "Inside humidity is $grhum"
log info "Inside CO2 level $grco2"
log debug "polling zusatzmodule3.."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$cokeid&scale=max&type=Temperature,Humidity,CO2&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?),(.*?),(.*?)\]} $response dummy ketemp kehum keco2
log info "LogI is $response"
log info "Inside temperature is $ketemp"
log info "Inside humidity is $kehum"
log info "Inside CO2 level $keco2"
log debug "polling main module..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&scale=max&type=Temperature,Humidity,CO2,Pressure,Noise&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?),(.*?),(.*?),(.*?),(.*?)\]} $response dummy itemp ihum ico2 ipressure inoise
log info "LogI is $response"
log info "Inside temperature is $itemp"
log info "Inside humidity is $ihum"
log info "Inside CO2 level $ico2"
log info "Inside pressure is $ipressure"
log info "Inside noise level is $inoise"
log debug "polling regensensor module...1d"
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$rainid&scale=1day&type=sum_rain&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?)\]} $response dummy rain1d
log info "LogR is $response"
log info "Outside Regen1d is $rain1d"
log debug "polling regensensor module...30min"
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$rainid&scale=30min&type=Rain,sum_rain&date_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"
regexp {\"value\":\[\[(.*?),(.*?)\]} $response dummy rain2 rain30min
log info "LogR is $response"
log info "Outside rain2 is $rain2"
log info "Outside Regen30min is $rain30min"
log debug "polling wind module..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$windid&scale=max&type=WindAngle,WindStrength,GustAngle,GustStrength&date_end=last"
log debug "quering $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "respnose is $response"
regexp {\"value\":\[\[(.*?),(.*?),(.*?),(.*?)\]} $response dummy windangle windstrength gustangle guststrength
log info "WindAngle is $windangle"
log info "Windstrength is $windstrength"
log info "GustAngle is $gustangle"
log info "Guststrength is $guststrength"
#
# set ReGaHss variables
#
set rega_cmd ""
append rega_cmd "var ITemp = dom.GetObject('CUxD.CUX9002001:1.SET_TEMPERATURE');"
append rega_cmd "var IHumi = dom.GetObject('CUxD.CUX9002001:1.SET_HUMIDITY');"
append rega_cmd "var OTemp = dom.GetObject('CUxD.CUX9002002:1.SET_TEMPERATURE');"
append rega_cmd "var OHumi = dom.GetObject('CUxD.CUX9002002:1.SET_HUMIDITY');"
append rega_cmd "var Rain1 = dom.GetObject('Regenmenge_30min');"
append rega_cmd "var Rain2 = dom.GetObject('Regenmenge_1d');"
append rega_cmd "var Rain3 = dom.GetObject('Regen_aktuell');"
append rega_cmd "var IPress = dom.GetObject('Luftdruck');"
append rega_cmd "var ICO2 = dom.GetObject('CO2');"
append rega_cmd "var INoise = dom.GetObject('Sonometer');"
append rega_cmd "var windA = dom.GetObject('Windrichtung');"
append rega_cmd "var windS = dom.GetObject('Windstaerke');"
append rega_cmd "var gustA = dom.GetObject('Gustangle');"
append rega_cmd "var gustS = dom.GetObject('Guststaerke');"
append rega_cmd "OTemp.State('$otemp');"
append rega_cmd "var ZTemp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');"
append rega_cmd "var ZCO2 = dom.GetObject('CO2_SZ');"
append rega_cmd "ZTemp.State('$ztemp');"
append rega_cmd "ZHumi.State('$zhum');"
append rega_cmd "ZCO2.State('$zco2');"
append rega_cmd "var GRTemp = dom.GetObject('CUxD.CUX9002004:1.SET_TEMPERATURE');"
append rega_cmd "var GRHumi = dom.GetObject('CUxD.CUX9002004:1.SET_HUMIDITY');"
append rega_cmd "var GRCO2 = dom.GetObject('COGR');"
append rega_cmd "GRTemp.State('$grtemp');"
append rega_cmd "GRHumi.State('$grhum');"
append rega_cmd "GRCO2.State('$grco2');"
append rega_cmd "var KETemp = dom.GetObject('CUxD.CUX9002005:1.SET_TEMPERATURE');"
append rega_cmd "var KEHumi = dom.GetObject('CUxD.CUX9002005:1.SET_HUMIDITY');"
append rega_cmd "var KECO2 = dom.GetObject('COKE');"
append rega_cmd "KETemp.State('$ketemp');"
append rega_cmd "KEHumi.State('$kehum');"
append rega_cmd "KECO2.State('$keco2');"
append rega_cmd "OHumi.State('$ohum');"
append rega_cmd "ITemp.State('$itemp');"
append rega_cmd "IHumi.State('$ihum');"
append rega_cmd "IPress.State('$ipressure');"
append rega_cmd "ICO2.State('$ico2');"
append rega_cmd "INoise.State('$inoise');"
append rega_cmd "Rain1.State('$rain30min');"
append rega_cmd "Rain2.State('$rain1d');"
append rega_cmd "Rain3.State('$rain2');"
append rega_cmd "windA.State('$windangle');"
append rega_cmd "windS.State('$windstrength');"
append rega_cmd "gustA.State('$gustangle');"
append rega_cmd "gustS.State('$guststrength');"
append rega_cmd "var sdatetime = system.Date('%d.%m.%Y %H:%M:%S');"
append rega_cmd "var netatmosynctime = dom.GetObject('SyncTime');"
append rega_cmd "netatmosynctime.Variable(sdatetime.ToString());"
rega_script $rega_cmd
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Ich würde spontan auf einen Tippfehler tippen...
Überprüf mal die Systemvariablen, die Du angelegt hast, ob Du da nicht ggf. einen Tippfehler gemacht hast.
Überprüf mal die Systemvariablen, die Du angelegt hast, ob Du da nicht ggf. einen Tippfehler gemacht hast.
Gruß
Guido
Guido