Netatmo Wetterstation (incl. CO2 Messung) einbinden
Moderator: Co-Administratoren
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Ich bekomme halt alte Werte angezeigt.???
Gruß Dinosky
-
- Beiträge: 494
- Registriert: 29.04.2014, 18:38
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 9 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallosatpower hat geschrieben: ↑08.12.2018, 17:24Hallo,
Howto ist mir bekannt, aber ich will mehr als ein Zusatz-Innenmodul in die Raspberrymatic einbinden, deshalb auch die Frage.
Beschrieben wird dort nur 1x Hauptmodulinnen, Außenmodul und ein weiteres Zusatz-Innenmessmodul, das funktioniert auch, aber will noch weiter 3stk. einbinden.
du mußt für jedes Innenmodul die drei Sachen machen. Natürlich immer mit neuen Namen.Sprich
oben im Script
set szid "IDdesZusatzinnenmodules"
set szid2 "IDdesZusatzinnenmodules"
set szid3 "IDdesZusatzinnenmodules"
in der mitte
Code: Alles auswählen
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 zusatzmodule..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$szid2&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 ztemp2 zhum2 zco22
log info "LogI is $response"
log info "Inside temperature is $ztemp2"
log info "Inside humidity is $zhum2"
log info "Inside CO2 level $zco22"
log debug "polling zusatzmodule..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$szid3&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 ztemp3 zhum3 zco23
log info "LogI is $response"
log info "Inside temperature is $ztemp3"
log info "Inside humidity is $zhum3"
log info "Inside CO2 level $zco23"
unten
Code: Alles auswählen
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 ZTemp2 = dom.GetObject('CUxD.CUX9002004:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi2 = dom.GetObject('CUxD.CUX9002004:1.SET_HUMIDITY');"
append rega_cmd "var ZCO22 = dom.GetObject('CO2_SZ');"
append rega_cmd "ZTemp2.State('$ztemp2');"
append rega_cmd "ZHumi2.State('$zhum2');"
append rega_cmd "ZCO22.State('$zco22');"
append rega_cmd "var ZTemp3 = dom.GetObject('CUxD.CUX9002005:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi3 = dom.GetObject('CUxD.CUX9002005:1.SET_HUMIDITY');"
append rega_cmd "var ZCO23 = dom.GetObject('CO2_SZ');"
append rega_cmd "ZTemp3.State('$ztemp3');"
append rega_cmd "ZHumi3.State('$zhum3');"
append rega_cmd "ZCO23.State('$zco23');"
Gruß
Bulli
-
- Beiträge: 494
- Registriert: 29.04.2014, 18:38
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 9 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Halloredy09 hat geschrieben: ↑08.12.2018, 23:20Erst mal vielen Dank für das tolle Skript! Es ließ sich alles auf der CCU3 gut einrichten - aber es funktioniert nicht...
Zwei Fragen daher:
weiter vorne steht, dass die Anführungszeichen bei den ID's
Zeile 9 set clientid "123456789"
....
Zeile 18 set deviceid "ID vom Windmodul"
wegfallen müssen. Stimmt das?
Und ich bekomme im Terminal folgende Fehlermeldung:
# tclsh /usr/local/addons/netatmo/netatmo.tcl
invalid command name ""
while executing
Was mache ich falsch?
Die Anführungszeichen kannst du lassen die müssen nicht weg. In der ersten Zeile darf vorne dran kein Leerzeichen sein. Das ist wahrscheinlich dein erstes Problem. Wenn du keinen Windmesser und Regenmesser hast muß das alles raus.
Als Beispiel
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');"
raus damit und die ganzen Windsachen auch. Das bekommen wir hin
Gruß
Bulli
-
- Beiträge: 494
- Registriert: 29.04.2014, 18:38
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 9 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo
Scripte bitte beim nächsten mal in
Code: Alles auswählen
hier rein
Stell bitte mal auf debug um und poste die Ausgabe. Zeile set loglevel 6 auf set loglevel 7 ändern.
Gruß
Bulli
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo Bulli,
alles so geändert, leider ohne Erfolg...
Hier die Antwort im Terminal:
# tclsh /usr/local/addons/netatmo/netatmo.tcl
invalid command name "#!/bin/tclsh"
while executing
"#!/bin/tclsh"
(file "/usr/local/addons/netatmo/netatmo.tcl" line 1)
#
Und hier mein geändertes Skript:
Und hier noch die Screenshots meiner Geräte:
alles so geändert, leider ohne Erfolg...
Hier die Antwort im Terminal:
# tclsh /usr/local/addons/netatmo/netatmo.tcl
invalid command name "#!/bin/tclsh"
while executing
"#!/bin/tclsh"
(file "/usr/local/addons/netatmo/netatmo.tcl" line 1)
#
Und hier mein geändertes Skript:
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 "xxx"
set password "xxx"
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid "xxx"
set moduleid "xxx"
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"
#
# 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 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 "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
-
- Beiträge: 494
- Registriert: 29.04.2014, 18:38
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 9 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo
deine erste Zeile passt immer noch nicht. Sie schaut zwar richtig aus aber vielleicht hast du noch ein Schmutzzeichen oder ? drin.
Mach mal bitte ein
Code: Alles auswählen
# file netatmo.tcl
netatmo.tcl: a /bin/tclsh script, ASCII text executable
Ein dos2unix kann auch nicht schaden.
Code: Alles auswählen
dos2unix netatmo.tcl
Gruß
Bulli
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
auf das erste:
# # file netatmo.tcl
# netatmo.tcl: a /bin/tclsh script, ASCII text executable
-sh: netatmo.tcl:: not found
und das zweite:
# dos2unix netatmo.tcl
dos2unix: can't open 'netatmo.tcl': No such file or directory
# # file netatmo.tcl
# netatmo.tcl: a /bin/tclsh script, ASCII text executable
-sh: netatmo.tcl:: not found
und das zweite:
# dos2unix netatmo.tcl
dos2unix: can't open 'netatmo.tcl': No such file or directory
-
- Beiträge: 494
- Registriert: 29.04.2014, 18:38
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 9 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
sorry mußt natürlich im Pfad stehen bei meinen Angaben.
ok noch mal so bitte
Code: Alles auswählen
file /usr/local/addons/netatmo/netatmo.tcl
Code: Alles auswählen
dos2unix /usr/local/addons/netatmo/netatmo.tcl
Bulli
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Und bei PN lässt sie sich nicht anhängen?!
Die Meldung erscheint dann:
Fehler
Ungültige Dateierweiterung: netatmo.tcl
ok:
file /usr/local/addons/netatmo/netatmo.tcl
/usr/local/addons/netatmo/netatmo.tcl: a /bin/tclsh script, UTF-8 Unicode (with BOM) text executable
bei dosunix passiert gar nix...
Die Meldung erscheint dann:
Fehler
Ungültige Dateierweiterung: netatmo.tcl
ok:
file /usr/local/addons/netatmo/netatmo.tcl
/usr/local/addons/netatmo/netatmo.tcl: a /bin/tclsh script, UTF-8 Unicode (with BOM) text executable
bei dosunix passiert gar nix...