Netatmo Wetterstation (incl. CO2 Messung) einbinden
Moderator: Co-Administratoren
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Dann sind wir schon mal einen Schritt weiter.
Schau dir mal deine NetAtmo Geräte im WebUI - Einstellungen an.
Schalte sie einmal von Temp+Hum auf Temp. Ok klicken. Wieder reingehen zurück auf Temp+Hum und wieder OK drücken. Dann sollten in den Geräten die Feuchtigkeitswerte auch auftauchen. Wenn das noch nicht hilft um die anderen Variablen auch mit Werten zu befüllen bitte nochmal dein aktuelles Skript.
Schau dir mal deine NetAtmo Geräte im WebUI - Einstellungen an.
Schalte sie einmal von Temp+Hum auf Temp. Ok klicken. Wieder reingehen zurück auf Temp+Hum und wieder OK drücken. Dann sollten in den Geräten die Feuchtigkeitswerte auch auftauchen. Wenn das noch nicht hilft um die anderen Variablen auch mit Werten zu befüllen bitte nochmal dein aktuelles Skript.
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Unglaublich, das hat tatsächlich geholfen!
Jetzt fehlen nur noch zwei Wert, CO2 (der eigentlich wichtigeste Wert) und die dB (nicht so wichtig).
SyncZeit fehlt auch, aber das könnte vielleicht noch daran liegen, dass ich noch nicht ganz fertig bin und das Scipt manuel über den Taster Kanal 1 starte.
Im Forum steht viel über das Timer-Problem, und blockieren der CCU2 über einige Sekunden. Wie ist denn nun der aktuellste Stand dazu bzw. deine Empfehlung?
Sie sieht es im Moment aus:
Jetzt fehlen nur noch zwei Wert, CO2 (der eigentlich wichtigeste Wert) und die dB (nicht so wichtig).
SyncZeit fehlt auch, aber das könnte vielleicht noch daran liegen, dass ich noch nicht ganz fertig bin und das Scipt manuel über den Taster Kanal 1 starte.
Im Forum steht viel über das Timer-Problem, und blockieren der CCU2 über einige Sekunden. Wie ist denn nun der aktuellste Stand dazu bzw. deine Empfehlung?
Sie sieht es im Moment aus:
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Das bekommen wir auch noch hin. Du musst entweder die drei SVs umbenennen und das NetAtmo weglassen. Oder entsprechend im letzten Teil des Skripts die zu beschreibenden SVs angleichen.
Gesendet von iPhone mit Tapatalk
Gesendet von iPhone mit Tapatalk
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo Indigo,
genau das war das Problem! Das passiert wenn man sich nicht ganz genau 100%ig an deine Anlatung hält
Im nachhinein logisch, die Variablen müssen natürlich ganz genau so heisen, wie im Skript auch.
Auch habe ich das mit dem automatischen Starten des Skripts mit einem Typ 28 CUxD-Gerät hinbekommen.
Aller Werte sind nun da, alle 10 min wird aktuallisiert - super, nun kann ich die Werte für die Lüftungssteuerung einsetzen. Einen zweiten Innensensor muss ich noch anbinden, aber ich glaube das war auch irgendwo beschrieben, werde das hoffentlich hin bekommen.
Vielen Dank nochmal für Deine Hilfe und Geduld!
genau das war das Problem! Das passiert wenn man sich nicht ganz genau 100%ig an deine Anlatung hält
Im nachhinein logisch, die Variablen müssen natürlich ganz genau so heisen, wie im Skript auch.
Auch habe ich das mit dem automatischen Starten des Skripts mit einem Typ 28 CUxD-Gerät hinbekommen.
Aller Werte sind nun da, alle 10 min wird aktuallisiert - super, nun kann ich die Werte für die Lüftungssteuerung einsetzen. Einen zweiten Innensensor muss ich noch anbinden, aber ich glaube das war auch irgendwo beschrieben, werde das hoffentlich hin bekommen.
Vielen Dank nochmal für Deine Hilfe und Geduld!
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Schön, dass es läuft. Mit dem CUxD Timer hab ich es auch am Laufen und seitdem keinen Ausfall mehr.
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo Semmy,
Ich hab mir deinen Wusch den regen der letzten Stunde angezeigt zu bekommen nochmal angesehen.
In meinem Testaufbau funktioniert es.
Probier es doch mal mit folgender Test-.tcl Datei aus. Neue Datei erstellen,ab damit auf die CCU, und einmal (oder wahrscheinlich öfter) durchlaufen lassen. Es werden dabei keine Daten in die HomeMatic geschrieben sondern nur die Werte des Regensensors für 1d, 1h und 30min in der Konsole ausgegeben. Wenn es auch bei dir läuft machen wir uns daran dass in die richtige .tcl Datei einzubauen.
Grüsse
Ich hab mir deinen Wusch den regen der letzten Stunde angezeigt zu bekommen nochmal angesehen.
In meinem Testaufbau funktioniert es.
Probier es doch mal mit folgender Test-.tcl Datei aus. Neue Datei erstellen,ab damit auf die CCU, und einmal (oder wahrscheinlich öfter) durchlaufen lassen. Es werden dabei keine Daten in die HomeMatic geschrieben sondern nur die Werte des Regensensors für 1d, 1h und 30min in der Konsole ausgegeben. Wenn es auch bei dir läuft machen wir uns daran dass in die richtige .tcl Datei einzubauen.
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 "BITTENOCHAUSFÜLLEN"
set clientSecret "BITTENOCHAUSFÜLLEN"
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username "BITTENOCHAUSFÜLLEN"
set password "BITTENOCHAUSFÜLLEN"
# the following are MAC addresses of your indoor station and the outside module
set deviceid "BITTENOCHAUSFÜLLEN"
set moduleid "BITTENOCHAUSFÜLLEN"
set rainid "BITTENOCHAUSFÜLLEN"
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 7
#---------------------------------------------------------------------------------------------------------------#
#---------------------------------------------------------------------------------------------------------------#
# 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 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...1h"
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$rainid&scale=1hour&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 rain rain1h
log info "LogR is $response"
log info "Outside Regen1h is $rain1h"
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 rain rain30min
log info "LogR is $response"
log info "Outside Regen30min is $rain30min"
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
http://dev.netatmo.com/dev/listapps
Muss ich einen anderen link benutzen um an
clientId
clientSecret
zu kommen?
www.nuiler.de
Raspberrymatic 3.57.4.20210320 rpi3
Raspberrymatic 3.57.4.20210320 rpi3
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Ok bin nun weiter wenn ich aber einen Test ausführe bekomme ich folgende Fehlermeldung.
/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
can't read "otemp": no such variable
while executing
"log info "Outside temperature is $otemp""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 176)
Muss ich die ID im Mac-Adressenformat eingeben oder ohne :
/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
can't read "otemp": no such variable
while executing
"log info "Outside temperature is $otemp""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 176)
Muss ich die ID im Mac-Adressenformat eingeben oder ohne :
www.nuiler.de
Raspberrymatic 3.57.4.20210320 rpi3
Raspberrymatic 3.57.4.20210320 rpi3
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
MAC Adressen mit :
Poste doch mal dein anonymisierten Script
Poste doch mal dein anonymisierten Script