NetAtmo Wetterdaten HOWTO
Moderator: Co-Administratoren
Re: NetAtmo Wetterdaten HOWTO
@ cyron: Doch, die Entwickler Seite gibt es noch. Der Link hat sich nur ein wenig geändert. https://dev.netatmo.com/myaccount/createanapp
Re: NetAtmo Wetterdaten HOWTO
Hallo,
ich weiss dass es nicht so gerne gesehen wird wenn Neulinge gleich Fragen stellen. Es tut mir leid, aber ich probiere jetzt schon tatsächlich seit 4 Stunden meine Netatmo einzubinden. Ich habe jetzt tausendmal probiert, verglichen, quergelesen... aber leider klappt es bei mir nicht. Wenn ich ins Terminal gehe und die Datei laufen lasse, kommt bei mir Folgendes:
/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
warn: no stored credentials found
can't read "expiresin": no such variable
while executing
"log debug "expires in $expiresin""
(procedure "parseOAuthResponse" line 14)
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 "/usr/local/addons/netatmo/netatmo.tcl" line 149)
Vielleicht kann ja von euch jemand was damit anfangen. Mir brummt jetzt nämlich der Schädel.
Wäre über eure Hilfe sehr dankbar.
LG
BFM
ich weiss dass es nicht so gerne gesehen wird wenn Neulinge gleich Fragen stellen. Es tut mir leid, aber ich probiere jetzt schon tatsächlich seit 4 Stunden meine Netatmo einzubinden. Ich habe jetzt tausendmal probiert, verglichen, quergelesen... aber leider klappt es bei mir nicht. Wenn ich ins Terminal gehe und die Datei laufen lasse, kommt bei mir Folgendes:
/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
warn: no stored credentials found
can't read "expiresin": no such variable
while executing
"log debug "expires in $expiresin""
(procedure "parseOAuthResponse" line 14)
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 "/usr/local/addons/netatmo/netatmo.tcl" line 149)
Vielleicht kann ja von euch jemand was damit anfangen. Mir brummt jetzt nämlich der Schädel.
Wäre über eure Hilfe sehr dankbar.
LG
BFM
Re: NetAtmo Wetterdaten HOWTO
Hallo,
jeder kann Fragen stellen. Egal wie lange er dabei ist.
Aber bitte nicht hier sondern da: viewtopic.php?p=455701&sid=9a6276efeda2 ... c4#p455701
Dort antworte ich dir auch gleich.
Grüsse
jeder kann Fragen stellen. Egal wie lange er dabei ist.
Aber bitte nicht hier sondern da: viewtopic.php?p=455701&sid=9a6276efeda2 ... c4#p455701
Dort antworte ich dir auch gleich.
Grüsse
Lob
Hallo liebe Forumsgemeinschaft / Threadersteller,
ich muss mich für das Skript / Beschreibung bedanken und kann nur ein ganz großes Lob aussprechen, an alle die mitgewirkt haben.
Auf Anhieb geklappt, ohne Probleme und Unklarheiten.
Daumen hoch und weiter so.
Dank euch, können auch "nicht-Spezialisten" solch tollen Features nutzen.
Viele Grüße
Roland
ich muss mich für das Skript / Beschreibung bedanken und kann nur ein ganz großes Lob aussprechen, an alle die mitgewirkt haben.
Auf Anhieb geklappt, ohne Probleme und Unklarheiten.
Daumen hoch und weiter so.
Dank euch, können auch "nicht-Spezialisten" solch tollen Features nutzen.
Viele Grüße
Roland
Re: NetAtmo Wetterdaten HOWTO
Hallo,
danke für das Tutorial, ich musste etwas basteln und stricken, aber mittlerweile läuft alles (mann ist tcl nörgelig bei leerzeichen... kommt man von python ist das wirklich ungewohnt).
Folgende Anmerkung für meine Situation:
Als ich die Zusatzmodule eingebaut habe, habe ich das Standart Wandthermostat (alt) genommen und dort bekomme ich die Luftfeuchtigkeit angezeigt.
Ich habe dann die CUxD-Geräte für innen und außen ebenfalls auf dieses Thermostat umgestellt und jetzt klappt alles.
Es scheint also, dass das ICON durchaus Relevanz hat.
Als Info CCU2: mit 2.35.16 und CUxD 2.1.0
Oder fällt jemandem ein/auf, was ich falsch gemacht habe?
danke für das Tutorial, ich musste etwas basteln und stricken, aber mittlerweile läuft alles (mann ist tcl nörgelig bei leerzeichen... kommt man von python ist das wirklich ungewohnt).
Folgende Anmerkung für meine Situation:
nutze ich den Temp Sensor außen (oder auch den Innen), dann wird mir keine Luftfeuchtigkeit angezeigt. Das Script übergibt diese Werte (bzw. gibt sie auf CLI aus), es wird allerdings nur Temp plus die SysVars angezeigt. Ich habe den Mode korrekt eingestellt gehabt (mehrmals kontrolliert).CUxD Gerätetyp: (90) Universal Wrapper Device
Funktion: Thermostat
Seriennummer: 2 (wenn schon andere Geräte vorhanden sind, bitte im Skript ändern)
Name: NetAtmo Aussen
Icon: z.B Temperatursensor Aussen
Auch hier wieder folgende Einstellungen ändern:
Mode: TEMP + HUM
WEATHER USE_HMDATAPT: inaktiv (wichtig, sonst werden keine Werte geschrieben)
Zyklische Statusmeldung: aktiv
WEATHER STATISTIC: aktiv, wenn ihr MIN MAX Werte haben wollt
Als ich die Zusatzmodule eingebaut habe, habe ich das Standart Wandthermostat (alt) genommen und dort bekomme ich die Luftfeuchtigkeit angezeigt.
Ich habe dann die CUxD-Geräte für innen und außen ebenfalls auf dieses Thermostat umgestellt und jetzt klappt alles.
Es scheint also, dass das ICON durchaus Relevanz hat.
Als Info CCU2: mit 2.35.16 und CUxD 2.1.0
Oder fällt jemandem ein/auf, was ich falsch gemacht habe?
-
- Beiträge: 133
- Registriert: 13.07.2018, 13:19
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 4 Mal
Re: NetAtmo Wetterdaten HOWTO
Danke für den Hinweis, raetsch. Das hätte ich jetzt vermutlich noch lange gesucht
Re: NetAtmo Wetterdaten HOWTO
Hallo.
Vielen Dank für die tolle Anleitung/Beschreibung.
Anstatt des Tools WinSCP habe ich (als neuer Nutzer von Linux mint und nach langer Suche) FileZilla zum Kopieren genutzt. Vielleicht hilft dieser Hinweis dem ein oder anderen.
Vielen Dank für die tolle Anleitung/Beschreibung.
Anstatt des Tools WinSCP habe ich (als neuer Nutzer von Linux mint und nach langer Suche) FileZilla zum Kopieren genutzt. Vielleicht hilft dieser Hinweis dem ein oder anderen.
-
- Beiträge: 11
- Registriert: 01.02.2021, 00:39
- System: CCU
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 1 Mal
Re: NetAtmo Wetterdaten HOWTO
Hallo, ich habe mir mal das Skript angesehen und zusammen mit einem befreundeten Informatiker ein paar Sachen angepasst. Ist noch nicht ganz perfekt, aber so muss man von nicht benötigten/vorhandenen Modulen keine Zeilen löschen oder auskommentieren.
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 "xxxxxxxxxxxx"
set clientSecret "xxxxxxxxxxxx"
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username "xxxxxxxxxxxx"
set password "xxxxxxxxxxxx"
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid "XX:XX:XX:XX:XX:XX"
set moduleid "XX:XX:XX:XX:XX:XX"
set rainid "XX:XX:XX:XX:XX:XX"
set windid "XX:XX:XX:XX:XX:XX"
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"
}
if {$moduleid != "XX:XX:XX:XX:XX:XX"} {
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"
if {$rainid != "XX:XX:XX:XX:XX:XX"} {
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"
}
if { $windid != "XX:XX:XX:XX:XX:XX"} {
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');"
if {$moduleid != "XX:XX:XX:XX:XX:XX"} {
append rega_cmd "var OTemp = dom.GetObject('CUxD.CUX9002002:1.SET_TEMPERATURE');"
append rega_cmd "var OHumi = dom.GetObject('CUxD.CUX9002002:1.SET_HUMIDITY');"
}
if {$rainid != "XX:XX:XX:XX:XX:XX"} {
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');"
if {$windid != "XX:XX:XX:XX:XX:XX"} {
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');"
}
if {$moduleid != "XX:XX:XX:XX:XX:XX"} {
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');"
if {$rainid != "XX:XX:XX:XX:XX:XX"} {
append rega_cmd "Rain1.State('$rain30min');"
append rega_cmd "Rain2.State('$rain1d');"
append rega_cmd "Rain3.State('$rain2');"
}
if {$windid != "XX:XX:XX:XX:XX:XX"} {
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
-
- Beiträge: 11
- Registriert: 01.02.2021, 00:39
- System: CCU
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 1 Mal
Re: NetAtmo Wetterdaten HOWTO
Habe mit meinem Partner eine genaue Anleitung samt neuem Script erstellt. Im Addon Script sind bereits alle mögliche Module und Zusatzmodule angelegt und müssen NICHT auskommentiert werden. Wir haben die Anleitung auf GutHub hochgeladen. Über den nachfolgenden Link kommt ihr auf die richtige Seite, dort könnt ihr dann auch das Script runterladen.
https://github.com/S2cchst/hmip-ccu-netatmo-addon
Sollten euch Fehler auffallen oder ihr noch Hilfe benötigen könnt ihr euch gerne bei mir melden.
LG
Markus
https://github.com/S2cchst/hmip-ccu-netatmo-addon
Sollten euch Fehler auffallen oder ihr noch Hilfe benötigen könnt ihr euch gerne bei mir melden.
LG
Markus