Netatmo Wetterstation (incl. CO2 Messung) einbinden
Moderator: Co-Administratoren
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Die Batterie vom Regensensor war leer, daher funktionierte das Auslesen nicht mehr.
Wusste nicht, dass dann alles blockiert wird und nicht nur die Werte vom Regensensor.
Wusste nicht, dass dann alles blockiert wird und nicht nur die Werte vom Regensensor.
www.nuiler.de
Raspberrymatic 3.57.4.20210320 rpi3
Raspberrymatic 3.57.4.20210320 rpi3
-
- Beiträge: 1
- Registriert: 11.01.2020, 22:47
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo zusammen,
ich würde meine Netatmo Daten gerne ebenfalls in Homematic einbinden, bekomme es aber einfach nicht zum laufen. Ich habe die beiden CUxD Geräte entsprechend der Anleitung im How-To angelegt.
Ich frage mich, ob man das dritte CUxD Gerät anlegen muss. In der Anleitung auf appproject wird davon nichts erwähnt. Ich habe das Gerät aber entsprechend angelegt.
Ich habe das Skript entsprechend der Erläuterung hier im Forum gekürzt weil ich keinen Wind/Regensensor habe. Ich möchte zwar später mein weiteres Innenmodul ebenfalls integrieren, aber erstmal eins nach dem anderen.
Im Code habe ich natürlich meine Zugangsdaten eingetragen und nur hier durch XYZ ersetzt.
Über Unterstützung würde ich mich sehr freuen!
Vielen Dank,
Kai
ich würde meine Netatmo Daten gerne ebenfalls in Homematic einbinden, bekomme es aber einfach nicht zum laufen. Ich habe die beiden CUxD Geräte entsprechend der Anleitung im How-To angelegt.
Ich frage mich, ob man das dritte CUxD Gerät anlegen muss. In der Anleitung auf appproject wird davon nichts erwähnt. Ich habe das Gerät aber entsprechend angelegt.
Ich habe das Skript entsprechend der Erläuterung hier im Forum gekürzt weil ich keinen Wind/Regensensor habe. Ich möchte zwar später mein weiteres Innenmodul ebenfalls integrieren, aber erstmal eins nach dem anderen.
Im Code habe ich natürlich meine Zugangsdaten eingetragen und nur hier durch XYZ ersetzt.
Über Unterstützung würde ich mich sehr freuen!
Vielen Dank,
Kai
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 "XYZ"
set clientSecret "XYZ"
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username "XYZ"
set password "XYZ"
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid "70:ee:50:2c:9d:9c"
set moduleid "02:00:00:2f:07:f2"
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/bin/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/bin/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/bin/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/bin/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
- Westfale
- Beiträge: 46
- Registriert: 19.02.2016, 21:42
- Wohnort: Münsterland
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 2 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo liebes Forum,
seit gestrigem Update meiner CCU2 auf aktuelle Firmware habe ich nun auch das Problem, daß die Einbindung der Netatmo nicht mehr funktioniert.
Ich hoffe, ihr könnt mir helfen.
Die Pfade habe ich an 6 Stellen im Skript bereits angepasst auf /usr/bin/curl, allerdings erhalte ich immer noch die folgende Fehlermeldung (wie vorher auch).
----
# tclsh netatmo.tcl
warn: no stored credentials found
can't read "returncode": no such variable
while executing
"log debug "returncode is $returncode""
(procedure "parseOAuthResponse" line 11)
invoked from within
"parseOAuthResponse [requestToken $clientId $clientSecret $username $password"
invoked from within
"if { [file exists $cfgfile] == 1} {
log info "found stored credentials"
loadAccessToken
set now [clock seconds]
..."
(file "netatmo.tcl" line 151)
----
Info: # /usr/bin/curl -V liefert das hier ->
curl 7.65.0 (arm-buildroot-linux-gnueabi) libcurl/7.65.0 OpenSSL/1.1.1c zlib/1.2.11
Release-Date: 2019-05-22
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM SSL TLS-SRP UnixSockets
Die bestehende Datei habe ich umbenannt in netatmo_old.tcl, die neue Datei netatmo.tcl habe ich mit Forklift statt Winscp hochgeladen. Weiß nicht, ob das noch eine Rolle bzgl. des Formats oder des Übertragungsprotokolls spielen könnte.
Habt ihr eine Idee? Vielen Dank im voraus!
seit gestrigem Update meiner CCU2 auf aktuelle Firmware habe ich nun auch das Problem, daß die Einbindung der Netatmo nicht mehr funktioniert.
Ich hoffe, ihr könnt mir helfen.
Die Pfade habe ich an 6 Stellen im Skript bereits angepasst auf /usr/bin/curl, allerdings erhalte ich immer noch die folgende Fehlermeldung (wie vorher auch).
----
# tclsh netatmo.tcl
warn: no stored credentials found
can't read "returncode": no such variable
while executing
"log debug "returncode is $returncode""
(procedure "parseOAuthResponse" line 11)
invoked from within
"parseOAuthResponse [requestToken $clientId $clientSecret $username $password"
invoked from within
"if { [file exists $cfgfile] == 1} {
log info "found stored credentials"
loadAccessToken
set now [clock seconds]
..."
(file "netatmo.tcl" line 151)
----
Info: # /usr/bin/curl -V liefert das hier ->
curl 7.65.0 (arm-buildroot-linux-gnueabi) libcurl/7.65.0 OpenSSL/1.1.1c zlib/1.2.11
Release-Date: 2019-05-22
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM SSL TLS-SRP UnixSockets
Die bestehende Datei habe ich umbenannt in netatmo_old.tcl, die neue Datei netatmo.tcl habe ich mit Forklift statt Winscp hochgeladen. Weiß nicht, ob das noch eine Rolle bzgl. des Formats oder des Übertragungsprotokolls spielen könnte.
Habt ihr eine Idee? Vielen Dank im voraus!
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo,
vielen Dank für das Skript, läuft wunderbar. Gibt es eine Möglichkeit den Batteriestaus abzurufen und in einer Variable bereit zu stellen? Würde den Batteriestatus gern in RedMatic einbinden.
Gruß Ronny
vielen Dank für das Skript, läuft wunderbar. Gibt es eine Möglichkeit den Batteriestaus abzurufen und in einer Variable bereit zu stellen? Würde den Batteriestatus gern in RedMatic einbinden.
Gruß Ronny
-
- 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
HalloEageleeyeKai hat geschrieben: ↑11.01.2020, 23:03Hallo zusammen,
ich würde meine Netatmo Daten gerne ebenfalls in Homematic einbinden, bekomme es aber einfach nicht zum laufen. Ich habe die beiden CUxD Geräte entsprechend der Anleitung im How-To angelegt.
Ich frage mich, ob man das dritte CUxD Gerät anlegen muss. In der Anleitung auf appproject wird davon nichts erwähnt. Ich habe das Gerät aber entsprechend angelegt.
Ich habe das Skript entsprechend der Erläuterung hier im Forum gekürzt weil ich keinen Wind/Regensensor habe. Ich möchte zwar später mein weiteres Innenmodul ebenfalls integrieren, aber erstmal eins nach dem anderen.
Im Code habe ich natürlich meine Zugangsdaten eingetragen und nur hier durch XYZ ersetzt.
Über Unterstützung würde ich mich sehr freuen!
Vielen Dank,
Kai
schaut auf den ersten Blick erst mal alles gut aus. Was geht bis jetzt? Oder kommen überhaupt keine Daten an? Hast du eine CCU2 mit neuer Firmware?
Kannst das Script auch mal auf debug umstellen und direkt ausführen. 2 Zeile auf 7 ändern.
>>> # 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug
set loglevel 6
bekommen wir bestimmt hin.
Gruß
Bulli
Edit fast vergessen die Rechte der Datei sind 755, sprich rwx auch ausführbar?
Zuletzt geändert von Bulli am 12.01.2020, 19:56, insgesamt 1-mal geändert.
-
- 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
HalloWestfale hat geschrieben: ↑12.01.2020, 12:31Hallo liebes Forum,
seit gestrigem Update meiner CCU2 auf aktuelle Firmware habe ich nun auch das Problem, daß die Einbindung der Netatmo nicht mehr funktioniert.
Ich hoffe, ihr könnt mir helfen.
Die Pfade habe ich an 6 Stellen im Skript bereits angepasst auf /usr/bin/curl, allerdings erhalte ich immer noch die folgende Fehlermeldung (wie vorher auch).
----
bitte Script mal auf debug umstellen und dann die Ausgabe hier posten. Debug umstellen siehe Beitrag vorher, gerade für anderen User geschrieben.
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
gute Frage nächste Frage (sorry Spass). Wenn der Abfrag bar ist könnte man den im Script mit rein bringen. Müßte man in der API Doku mal lesen, ich habe aktuell keine Ahnung. Schau doch bitte einfach mal und wenn du was gefunden hast kann ich wahrscheinlich auch helfen.
Gruß
Bulli
- Westfale
- Beiträge: 46
- Registriert: 19.02.2016, 21:42
- Wohnort: Münsterland
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 2 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo Bulli,Bulli hat geschrieben: ↑12.01.2020, 19:43HalloWestfale hat geschrieben: ↑12.01.2020, 12:31Hallo liebes Forum,
seit gestrigem Update meiner CCU2 auf aktuelle Firmware habe ich nun auch das Problem, daß die Einbindung der Netatmo nicht mehr funktioniert.
Ich hoffe, ihr könnt mir helfen.
Die Pfade habe ich an 6 Stellen im Skript bereits angepasst auf /usr/bin/curl, allerdings erhalte ich immer noch die folgende Fehlermeldung (wie vorher auch).
----
bitte Script mal auf debug umstellen und dann die Ausgabe hier posten. Debug umstellen siehe Beitrag vorher, gerade für anderen User geschrieben.
Gruß
Bulli
vielen Dank schon mal für Deine Hilfe!
Hier die Ausgabe:
# tclsh netatmo.tcl
debug: script has started
warn: no stored credentials found
debug: requesting new token
debug: response was /usr/bin/curl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
debug: parsing authentication result
can't read "returncode": no such variable
while executing
"log debug "returncode is $returncode""
(procedure "parseOAuthResponse" line 11)
invoked from within
"parseOAuthResponse [requestToken $clientId $clientSecret $username $password"
invoked from within
"if { [file exists $cfgfile] == 1} {
log info "found stored credentials"
loadAccessToken
set now [clock seconds]
..."
(file "netatmo.tcl" line 151)
Habe nachgesehen, /usr/bin/curl ist vorhanden...
Die Rechte der Datei netatmo.tcl habe ich angepasst von -rw------- auf -rwxr-xr-x (755), hat aber nichts gebracht.
Hoffe Du oder sonst jemand hat noch eine Idee?
Gruß,
Westfale
-
- 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 Westfale
liegt auf jeden Fall daran das der curl Aufruf bei deiner CCU so nicht funktioniert.
Im Script(oben) gibt es folgende Zeile
>> set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
mach die mal raus sprich ein # davor.
Wenn das auch nicht geht ändern in
set ::env(LD_LIBRARY_PATH) "/usr/lib"
Gruß
Bulli
liegt auf jeden Fall daran das der curl Aufruf bei deiner CCU so nicht funktioniert.
Im Script(oben) gibt es folgende Zeile
>> set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
mach die mal raus sprich ein # davor.
Wenn das auch nicht geht ändern in
set ::env(LD_LIBRARY_PATH) "/usr/lib"
Gruß
Bulli
- Westfale
- Beiträge: 46
- Registriert: 19.02.2016, 21:42
- Wohnort: Münsterland
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 2 Mal
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hallo Bulli,Bulli hat geschrieben: ↑14.01.2020, 09:41Hallo Westfale
liegt auf jeden Fall daran das der curl Aufruf bei deiner CCU so nicht funktioniert.
Im Script(oben) gibt es folgende Zeile
>> set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
mach die mal raus sprich ein # davor.
Wenn das auch nicht geht ändern in
set ::env(LD_LIBRARY_PATH) "/usr/lib"
Gruß
Bulli
der erste Ansatz hat funktioniert, d.h. nach dem Auskommentieren des Pfades läuft das Skript wieder durch. Wahnsinn.
Interessieren würde mich noch der Hintergrund, wurde curl mit dem letzten FW-Update in einen anderen Pfad geschoben oder was war da los?
Wichtig wäre noch, daß das nach Möglichkeit jemand für die Nachwelt erhält und in der originalen Anleitung unterbringt, damit nicht 100 weitere Kollegen in die gleiche Falle laufen.
1000 Dank jedenfalls für Deine Hilfe!
Entspannten Gruß vom Westfalen