Netatmo Wetterstation (incl. CO2 Messung) einbinden
Moderator: Co-Administratoren
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Nach einem schönen Nachmittag lauft die Sache ganz wunderbar! Einen ganz herzlichen Dank an die Entwickler und Betreuer dieses großartigen Scripts!
Ich hatte auch Probleme mit der "verunreinigten" netatmo.tcl, aber auch nur, weil ich es nicht glauben wollte
Irgendwie Zeichensatz, Browserdownload oder dann der Upload, irgendwas auf dem Weg bis dorthin raubt tatsächlich ein paar Stunden zur Fehlersuche
Ein kleiner Verbesserungsvorschlag:
Könnte man dieses Thema hier für Probleme lassen und ein neues Thema nur mit der Anleitung ohne Diskussionen eröffnen?
Ich wäre die Sache schon viel früher angegangen, wenn es hier etwas übersichtlicher gewesen wäre...
Nochmals herzlichen Dank an die Entwickler
Wolfgang
Ich hatte auch Probleme mit der "verunreinigten" netatmo.tcl, aber auch nur, weil ich es nicht glauben wollte
Irgendwie Zeichensatz, Browserdownload oder dann der Upload, irgendwas auf dem Weg bis dorthin raubt tatsächlich ein paar Stunden zur Fehlersuche
Ein kleiner Verbesserungsvorschlag:
Könnte man dieses Thema hier für Probleme lassen und ein neues Thema nur mit der Anleitung ohne Diskussionen eröffnen?
Ich wäre die Sache schon viel früher angegangen, wenn es hier etwas übersichtlicher gewesen wäre...
Nochmals herzlichen Dank an die Entwickler
Wolfgang
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Die Infos findest du im HowTo. Aber hier nochmal. Gib bescheid wenn du nicht weiter kommst.timo-n hat geschrieben: Und wenn ich noch ein Zusatzmodul bekomme und aus einem 2ten Raum die Werte haben will was muss da noch in die tcl?
Indigo hat geschrieben:Da ich derzeit nicht dazu komme das HowTo zu erweitern hänge ich diesen Beitrag zumindest mal dahinter.
SO WERDEN ZUSATZMODULE EINGEBUNDEN
Die IDs weiterer Innenmodule beginnen mit 03:00:00.
Zusatzmodul liefern Temperatur, Feuchtigkeit und CO2 Werte. Es wird nur eine neue Systemvariable für den CO2 Wert benötigt. Ich nenn sie mal CO2_SZ (ggf. Im unteren Teil den Namen anpassen). Und ein weiteres CuXD Gerät.
Folgende Anpassungen im Skript müssen gemacht werden:
Im ersten Teil (rot im HowTo) eine weitere Zeile einfügen mit der ID.
z.B.: set szid "IDdesZusatzinnenmodules"
Unten muss folgender Block eingefügt werden (nach dem grünen Block im HowTo):
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"
Und im letzten Teil folgendes einfügen: (CuXD Gerätenummern anpassen!!)
Irgendwo zwischen diese Zeilen:
set rega_cmd ""
rega_script $rega_cmd
Code: Alles auswählen
append rega_cmd "var ZTemp = dom.GetObject('CUxD.CUX9002001:1.SET_TEMPERATURE');" append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002001: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');"
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hi,timo-n hat geschrieben:Es scheint zu gehen
aber irgendwie aktualisiert sich der Status aber nicht automatisch.
Ich hab wie beschrieben nen Virtuellen Tasterkanal genommen und bei Key Short und Long danneingetragen.Code: Alles auswählen
tclsh /usr/local/addons/netatmo/netatmo.tcl
Dann ein Programm mit 15minuten Zeitmodul mit diesem ScriptCode: Alles auswählen
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(2); dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("tclsh /usr/local/addons/netatmo/netatmo.tcl"); var v = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State(); WriteLine(v);
von was für einem Gerät hat du den virtuellen tasterkanal genommen?
Hast dieses Gerät die Seriennummer CUX2801001? Ansonsten bitte im Code die passende Seriennummer eintragen.
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Also am Tasterkanal kann es nicht liegen. Hatte das Script wie beschrieben ausführen lassen und dann kam nur in den Servicemeldungen das die Gerätekomuunikation gestört ist.
Hab das Programm mit dem Script dann gelöscht und lass momentan dann immer per zeitmodul den virtuellen taster drücken und das funktioniert auch. Keine Ahnung ob das Nachteile hat im vergleich zu dem script.
Wie binde ich denn noch ein Zusatzmodul nun ein?
Hab das Programm mit dem Script dann gelöscht und lass momentan dann immer per zeitmodul den virtuellen taster drücken und das funktioniert auch. Keine Ahnung ob das Nachteile hat im vergleich zu dem script.
Wie binde ich denn noch ein Zusatzmodul nun ein?
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Hast du meinen Beitrag #503 gelesen? Da steht alles zu den Zusatzmodulen.
Gesendet von iPhone mit Tapatalk
Gesendet von iPhone mit Tapatalk
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Ja hab ich und auch den Beitrag von Onkeltommy hatte ich gelesen bei dem es ja funktioniert hatte aber irgendwie kapier ich es nicht.
Ich hab nun noch eine SV angelegt (NetAtmo Innen 2 CO2) und das CUXD Gerät.
Aber ich versteh gerade nicht wo ich noch was alles einfügen muss und an welcher stelle
Hab Das Modul auch noch nicht aber muss ja theoretisch dann nur noch die ID eingeben. Aber bevor ich nachts dran sitz und da keiner mitliest versuch ich es mal jetzt schon :-p
Ich hab nun noch eine SV angelegt (NetAtmo Innen 2 CO2) und das CUXD Gerät.
Aber ich versteh gerade nicht wo ich noch was alles einfügen muss und an welcher stelle
Hab Das Modul auch noch nicht aber muss ja theoretisch dann nur noch die ID eingeben. Aber bevor ich nachts dran sitz und da keiner mitliest versuch ich es mal jetzt schon :-p
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Stimmt das so?
Kann ich denn die ID vom Hauptmodul zum testen anstatt dem Zusatzmodul nehmen und dann sehen ob die Ergebnisse in dem CUXD kommen oder kolidiert da irgendwas?
Kann ich denn die ID vom Hauptmodul zum testen anstatt dem Zusatzmodul nehmen und dann sehen ob die Ergebnisse in dem CUXD kommen oder kolidiert da irgendwas?
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 ID
set clientSecret SECRET
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username EMAIL
set password PASS
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid 70:ee:50:2a:e8:f2
set moduleid 02:00:00:2c:ad:b4
szid "03: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 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 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 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"
#
# 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('NetAtmo Innen 1 Luftdruck');"
append rega_cmd "var ICO2 = dom.GetObject('NetAtmo Innen 1 CO2');"
append rega_cmd "var INoise = dom.GetObject('NetAtmo Innen 1 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('NetAtmo SyncTime');"
append rega_cmd "netatmosynctime.Variable(sdatetime.ToString());"
#Zusatzmodul
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('NetAtmo Innen 2 CO2');"
append rega_cmd "ZTemp.State('$ztemp');"
append rega_cmd "ZHumi.State('$zhum');"
append rega_cmd "ZCO2.State('$zco2');"
rega_script $rega_cmd
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Sollte so passen.
Ob du es mit der ID des Innenmoduls testen kannst will ich nicht beschwören. Kommt auf einen Versuch an.
Wenn du mit Testen fertig bist solltest du aber noch alle Zeilen die zum Zusatzmodul gehören mit # auskommentieren. Natürlich nur bis du das Zusatzmodul hast. Sonst funktioniert dein Skript ggf nicht mehr richtig.
Wenn das Auslesen über Taster funktioniert ist doch gut. Das ist völlig egal wie man es macht. Ich mache es mittlerweile über einen CuXD Timer.
Ob du es mit der ID des Innenmoduls testen kannst will ich nicht beschwören. Kommt auf einen Versuch an.
Wenn du mit Testen fertig bist solltest du aber noch alle Zeilen die zum Zusatzmodul gehören mit # auskommentieren. Natürlich nur bis du das Zusatzmodul hast. Sonst funktioniert dein Skript ggf nicht mehr richtig.
Wenn das Auslesen über Taster funktioniert ist doch gut. Das ist völlig egal wie man es macht. Ich mache es mittlerweile über einen CuXD Timer.
Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden
Also Testen ging irgendwie nicht. Hatte dann so wie du beschrieben hattest die Zusatzmodule vorrübergehend ausgeklammert und es lief ganz normal mit dem Hauptmodul.
Jetzt warte ich mal auf die DHL Lieferung vom Zusatzmodul...
Jetzt warte ich mal auf die DHL Lieferung vom Zusatzmodul...