Netatmo Wetterstation (incl. CO2 Messung) einbinden
Moderator: Co-Administratoren
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Habe es direkt mit WINScp probiert und ohne Leerzeichen. Leider keine Änderung. Habe übrigens auch Notepad++ benutzt. Notepad hat einiges durcheinandergewürfelt.Indigo hat geschrieben: ↑21.09.2018, 21:15Hi.
Probier dein Skript mal mit einem anderen Programm abzuspeichern. NotePad hat da schon öfter Probleme verursacht.
Probier es mal mit WinSCP.
Und achte darauf dass in der ersten Zeile kein Freizeichen am Anfang ist.
Wenn es immernoch nicht funzt geht es morgen weiter.
Ich reiss mir jetzt noch ein Bierchen auf.
Schönen Abend noch,
BFM
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Ha! Ich bin einen Schritt weiter! Hatte einen Dreher in der Client Secret. Asche auf mein Haupt! Ich habe diese bestimmt 20 mal gelesen. Na ja, egal. Aber ich habe trotzdem noch nen Fehler im Regenmesser. Habe im Script gesucht, aber nix gefunden. Ich bekomme diese Meldung:
/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
info: Outside temperature is 16.8
info: Outside humidity is 40
info: LogI is {"body":[{"beg_time":1537633140,"value":[[21.4,34,452,1026.9,35]]}],"status":"ok","time_exec":0.012618064880371,"time_server":1537633754}#=#=#
##O#- #
info: Inside temperature is 21.4
info: Inside humidity is 34
info: Inside CO2 level 452
info: Inside pressure is 1026.9
info: Inside noise level is 35
can't read "rain": no such variable
while executing
"log info "Outside rain1 is $rain""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 202)
info: LogR is {"body":[{"beg_time":1537610400,"value":[[0,0]]}],"status":"ok","time_exec":0.026298999786377,"time_server":1537633754}#=#=#
##O#- #
Vielleicht noch jemand ne Idee?
LG
BFM
/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
info: Outside temperature is 16.8
info: Outside humidity is 40
info: LogI is {"body":[{"beg_time":1537633140,"value":[[21.4,34,452,1026.9,35]]}],"status":"ok","time_exec":0.012618064880371,"time_server":1537633754}#=#=#
##O#- #
info: Inside temperature is 21.4
info: Inside humidity is 34
info: Inside CO2 level 452
info: Inside pressure is 1026.9
info: Inside noise level is 35
can't read "rain": no such variable
while executing
"log info "Outside rain1 is $rain""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 202)
info: LogR is {"body":[{"beg_time":1537610400,"value":[[0,0]]}],"status":"ok","time_exec":0.026298999786377,"time_server":1537633754}#=#=#
##O#- #
Vielleicht noch jemand ne Idee?
LG
BFM
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hast du wahrscheinlich auch schon öfter kontrolliert, aber die MAC Adresse vom Regensensor stimmt wirklich?
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Yep, hab ich gefühlte 100 mal kontrolliert und jetzt auch über das Script ausgelesen. Wobei das etwas verwirrend ist. In der Anleitung steht "05:00:00: Rest wie Außenmodul". Aber über das Auslesen vom Script kommt auch meine ganz normale Mac Adresse.
Aber ich bleibe am Ball
LG
BFM
Aber ich bleibe am Ball
LG
BFM
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Dann Versuch doch mal einen anderen Ansatz.
Lösche alles was mit dem Regensensor zu tun hat aus dem Skript heraus, oder besser noch erstelle es neu ohne den Regensensor zu integrieren und schau ob dann von den anderen NetAtmo Geräten Daten in der HomeMatic ankopmmen.
Wenn das funktioniert kann man es dann langsam von unten herauf aufbauen und sieht wo der Fehler ist.
Lösche alles was mit dem Regensensor zu tun hat aus dem Skript heraus, oder besser noch erstelle es neu ohne den Regensensor zu integrieren und schau ob dann von den anderen NetAtmo Geräten Daten in der HomeMatic ankopmmen.
Wenn das funktioniert kann man es dann langsam von unten herauf aufbauen und sieht wo der Fehler ist.
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Sorry für die späte Antwort! Ok, werde ich probieren wenn ich wieder Zuhause bin. Bin nämlich aktuell auf Arbeit im Oman.
LG
BFM
LG
BFM
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Bei mir werden immer noch keine Regenwerte angezeigt
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Sorry. Den Beitrag habe ich übersehen.
Wenn da nur ??? zu sehen ist bricht dein Script irgendwo ab und läuft nicht bis zum Ende durch.
Das passiert meistens wenn irgendwo ein Tipfehler drin ist und eine Variable im Script nicht genau gleich geschrieben ist wie sie in der HomeMatic angelegt ist.
Poste mal dein Script. Und schreibe dazu welche Werte in der Homematic alle nicht ankommen. Dann kann man sagen wo der Fehler liegt.
Alternativ kannst du überprüfen welcher der fehlenden Werte im untersten Scriptteil als erstes in die Homematic geschrieben werden soll. Da ist der Fehler. Dabei bricht das Script ab und es werden keine weiteren Werte mehr übertragen.
Wenn da nur ??? zu sehen ist bricht dein Script irgendwo ab und läuft nicht bis zum Ende durch.
Das passiert meistens wenn irgendwo ein Tipfehler drin ist und eine Variable im Script nicht genau gleich geschrieben ist wie sie in der HomeMatic angelegt ist.
Poste mal dein Script. Und schreibe dazu welche Werte in der Homematic alle nicht ankommen. Dann kann man sagen wo der Fehler liegt.
Alternativ kannst du überprüfen welcher der fehlenden Werte im untersten Scriptteil als erstes in die Homematic geschrieben werden soll. Da ist der Fehler. Dabei bricht das Script ab und es werden keine weiteren Werte mehr übertragen.
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hi das ist das aktuelle
info: found stored credentials
info: token is still valid
info: Outside temperature is 12.3
info: Outside humidity is 88
info: LogI is {"body":[{"beg_time":1537553449,"value":[[24.5,50,719,1019.9,37]]}],"status":"ok","time_exec":0.018347978591919,"time_server":1537553848}#=#=#
##O#- #
##O=# #
info: Inside temperature is 24.5
info: Inside humidity is 50
info: Inside CO2 level 719
info: Inside pressure is 1019.9
info: Inside noise level is 37
info: LogR is {"body":[{"beg_time":1537524000,"value":[[6.3]]}],"status":"ok","time_exec":0.05019211769104,"time_server":1537553848}#=#=#
##O#- #
info: Outside Regen1d is 6.3
info: LogR is {"body":[{"beg_time":1537553700,"value":[[0,0]]}],"status":"ok","time_exec":0.044193029403687,"time_server":1537553848}#=#=#
info: Outside rain2 is 0
info: Outside Regen30min is 0
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 XXX
set clientSecret XXX
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username XX
set password XX
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid "70:ee:50:2b:99:99"
set moduleid "02:00:00:2b:99:99"
set rainid "05:00:00:04:99:99"
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 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"
#
# 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 "OTemp.State('$otemp');"
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 "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
info: found stored credentials
info: token is still valid
info: Outside temperature is 12.3
info: Outside humidity is 88
info: LogI is {"body":[{"beg_time":1537553449,"value":[[24.5,50,719,1019.9,37]]}],"status":"ok","time_exec":0.018347978591919,"time_server":1537553848}#=#=#
##O#- #
##O=# #
info: Inside temperature is 24.5
info: Inside humidity is 50
info: Inside CO2 level 719
info: Inside pressure is 1019.9
info: Inside noise level is 37
info: LogR is {"body":[{"beg_time":1537524000,"value":[[6.3]]}],"status":"ok","time_exec":0.05019211769104,"time_server":1537553848}#=#=#
##O#- #
info: Outside Regen1d is 6.3
info: LogR is {"body":[{"beg_time":1537553700,"value":[[0,0]]}],"status":"ok","time_exec":0.044193029403687,"time_server":1537553848}#=#=#
info: Outside rain2 is 0
info: Outside Regen30min is 0