Netatmo Wetterstation (incl. CO2 Messung) einbinden

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Indigo
Beiträge: 356
Registriert: 10.02.2015, 20:32
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 16.02.2018, 11:32

Hmm...
Deine tcl muss eigentlich stimmen. Alle anderen Werte kommen ja auch an.

Ist dein CuXD auf dem aktuellen Stand? Ich würde das CuXD Gerät nochmal neu anlegen.


Gesendet von iPhone mit Tapatalk

mick_we
Beiträge: 22
Registriert: 14.02.2018, 15:29

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von mick_we » 16.02.2018, 12:43

Meine CuXD ist Version 1.12
Das Gerät habe ich mit
(90) Universam Wrapper Device
Funktion: Thermostat

angelegt. Nix. Genau wie vorher. Ist doch Thermostat oder?

mick_we
Beiträge: 22
Registriert: 14.02.2018, 15:29

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von mick_we » 16.02.2018, 14:44

Juhuuu, es geht. Habe die in CuXD noch mal neu angelegt und jetzt geht es. Vielen lieben Dank

waldi_666
Beiträge: 4
Registriert: 02.03.2018, 09:49

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von waldi_666 » 02.03.2018, 10:49

Hallo,

erstmal Danke für die tolle Anleitung! Damit konnte ich (fast) alle Netatmo Funktionen super einbinden. Zwei Punkte sind für mich allerdings offen. Hier wäre es super, wenn mir jemand helfen könnte!

Punkt 1: Luftfeuchtigkeit anzeigen bei Aussen- und Innenmodul
Punkt 2: 90% der Werte werden korrekt angezeigt. CO2 des Zusatzmoduls und Sonowert des Innenmoduls fehlen aber.

Detaillierte Erklärungen weiter unten!

Ich verwenden die CCU2 mit Firmware 2.31.25 und CuxD 1.12.

Von Netatmo eingebunden habe ich:
Hauptmodul
Aussenmodul
Zusatz Innenmodul
Regensensor

Punkt 1: Ich sehe bei keinem der Geräte die Luftfeuchtigkeit in der CCU2. Über das Skript werden die Werte korrekt ausgelesen. Die Geräte sind auf TEMP+HUM eingestellt. Warum sehe ich die Luftfeuchtigkeit nicht?

Hier z.B. ein Bild des Aussenmoduls:
Bild

Punkt 2: Es werden drei der Werte, die ich im Skript schreibe nicht in der CCU angezeigt. Es geht um den Sonometer des Innenmoduls und den Co2 Wert des Zusatzmoduls, sowie die Synzeit Alle Werte werden im Skript korrekt ausgegeben.

Hier die Ausgabe des Terminals:

Code: Alles auswählen

# tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
info: Outside temperature is -4.3
info: Outside humidity is 58
info: LogI is {"body":[{"beg_time":1519979610,"value":[[17.3,36,466,988.1,46]]}],"status":"ok","time_exec":0.051389932632446,"time_server":1519980201}
######################################################################## 100.0%
info: Inside temperature is 17.3
info: Inside humidity is 36
info: Inside CO2 level 466
info: Inside pressure is 988.1
info: Inside noise level is 46
info: LogI is {"body":[{"beg_time":1519979579,"value":[[15.8,37,360]]}],"status":"ok","time_exec":0.034733057022095,"time_server":1519980201}
######################################################################## 100.0%
info: Inside temperature 2 is 15.8
info: Inside humidity 2 is 37
info: Inside CO2 level 2 360
info: LogR is {"body":[{"beg_time":1519988400,"value":[[0]]}],"status":"ok","time_exec":0.048406839370728,"time_server":1519980202}
######################################################################## 100.0%
info: Outside Regen1d is 0
info: LogR is {"body":[{"beg_time":1519980300,"value":[[0,0]]}],"status":"ok","time_exec":0.036735057830811,"time_server":1519980203}
######################################################################## 100.0%
info: Outside rain2 is 0
info: Outside Regen30min is 0
Und die Anzeige des Innenmoduls 1 in der CCU2:
Bild

Und hier noch mein 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
#XXX Innenraum 1 CUX9002001
#XXXAussen CUX9002003
#XXX Innenraum 2 CUX9002002
#XXX Regensensor 1 CUX9002004
set deviceid "XXX"
set moduleid "XXX"
set rainid "XXX"
set szid "XXX"
#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"
}
#
#
#Aussenmodul
#
#
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"
#
#
#Innenmodul 1
#
#
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 press noise

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 $press"
log info "Inside noise level is $noise"
#
#
#Innenmodul 2
#
#
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 2 is $ztemp"
log info "Inside humidity 2 is $zhum"
log info "Inside CO2 level 2 $zco2"
#
#
#Regenmodul
#
#
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 rain1

log info "LogR is $response"
log info "Outside Regen1d is $rain1"

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 rain3

log info "LogR is $response"
log info "Outside rain2 is $rain2"
log info "Outside Regen30min is $rain3"
#
#
#Windmodul
#
#
#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');"
append rega_cmd "var ZTemp = dom.GetObject('CUxD.CUX9002002:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002002:1.SET_HUMIDITY');"
append rega_cmd "var OTemp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
append rega_cmd "var OHumi = dom.GetObject('CUxD.CUX9002003: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 Press = dom.GetObject('Luftdruck');"
append rega_cmd "var ICO2 = dom.GetObject('CO2_Innen_1');"
append rega_cmd "var ZCO2 = dom.GetObject('CO2_Innen_2');"
append rega_cmd "var Noise = dom.GetObject('Sonometer');"
#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');"
append rega_cmd "ITemp.State('$itemp');"
append rega_cmd "IHumi.State('$ihum');"
append rega_cmd "ZTemp.State('$ztemp');"
append rega_cmd "ZHumi.State('$zhum');"
append rega_cmd "OTemp.State('$otemp');"
append rega_cmd "OHumi.State('$ohum');"
append rega_cmd "Press.State('$press');"
append rega_cmd "ICO2.State('$ico2');"
append rega_cmd "ZCO2.State('$zco2');"
append rega_cmd "Noise.State('$noise');"
append rega_cmd "Rain1.State('$rain3');"
append rega_cmd "Rain2.State('$rain1');"
append rega_cmd "Rain3.State('$rain2');"
#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 "netat
Ich sehe einfach den Fehler nicht. Würde mich über Antworten und Hilfe von euch freuen!

Indigo
Beiträge: 356
Registriert: 10.02.2015, 20:32
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 02.03.2018, 11:20

Hallo,

zum Luftfeuchteproblem. Ich zitiere mich mal selbst:
Indigo hat geschrieben:Hi,

die Luftfeuchte wird standartmässig mit ausgelesen und in Homematic dargestellt.
Sogar zusätzlich zu zur prozentualen auch die absolute Feuchte.

Bei dir nicht? Ganz selten hängt das CuXd Gerät.
In dem Fall bitte einmal in den Einstellungen des CuXD Gefätes von Temp+Hum auf Temp umstellen. Mit OK bestätigen. Wieder in die Einstellungen gehen und wieder auf Temp+Hum stellen. Und wieder OK. Dann sollte es dargestellt werden.
Wenn es immernoch nicht geht die Geräte in CUXD neu anlegen hat auch schon mal geholfen.

Zum Anzeigeproblem der übrigen Werte:
Habe dein Skribt nur kurz überflogen. Aber es scheint zu stimmen. Die Werte kommen ja auch an. Dann liegt de Fehler normalerweise bei dem fehlenden Wert der zuerst im letzten Teil des Skribts auftaucht. Also dein CO2 Wert. Überprüfe mal ob die Variable in der CCU auch CO2_ Innen_2 heißt.
Kommen deine Regenwerte tatsächlich an?

waldi_666
Beiträge: 4
Registriert: 02.03.2018, 09:49

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von waldi_666 » 02.03.2018, 14:44

Danke für die Rückmeldung!

Den Post hatte ich schon gelesen. Die Geräte neu anlegen und die Einstellung wechseln hat nicht geholfen. Mir ist aufgefallen, dass der Wert für die Luftfeuchtigkeit in der @Home App angezeigt wird. Es scheint also an sich alles korrekt zu sein. Noch eine andere Idee, war um ich im WebUi beim Aussensensor nur die Temperatur sehe?

Der Hinweis mit der ersten Variable war super! Ich habe einmal CO2 und einmal C02 geschrieben! Sonowert und CO2 kommen jetzt an!

Bei dem Regensensor: Gute Frage! Hier hat es lange keinen Niederschlag gegeben. Auf einen Becher Wasser hat es zumindest nicht reagiert. Warte ab, bis es länger regnet und werde es dann konkret testen.

Indigo
Beiträge: 356
Registriert: 10.02.2015, 20:32
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 02.03.2018, 21:27

Dann sollte der Regen jetzt zumindest auch ankommen.
Zum Luftfeuchteproblem habe ich sonst auch keine Wirkliche Idee mehr. Keine Ahnung warum das manchmal hängt. Cache leeren oder mal nen anderen Browser versuchen ist immer noch so eine Sache bei HomeMatic.

tuschen
Beiträge: 2
Registriert: 03.03.2018, 12:58

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von tuschen » 04.03.2018, 11:56

Hallo zusammen. Ich habe die netatmo schon länger eingebunden, es liefert auch Werte.
NA1.JPG
Temperatur Netatmo außen
Wenn ich nun aber ein Programm anlege, indem eine Variable zB auf "Normal" gesetzt werden soll, wenn die Temepratur über 7 °C liegt, setzt dieses die Variable immer auf den Wert "normal", obwohl es auch unter 7°C ist?!
NA2.JPG
Was läuft falsch?

tuschen
Beiträge: 2
Registriert: 03.03.2018, 12:58

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von tuschen » 04.03.2018, 12:03

Ich habe übrigens drei Unterpunkte zu meinem Außenfühler?
NA3.JPG
Geräteeigenschaften

waldi_666
Beiträge: 4
Registriert: 02.03.2018, 09:49

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von waldi_666 » 04.03.2018, 13:44

Indigo hat geschrieben:Dann sollte der Regen jetzt zumindest auch ankommen.
Zum Luftfeuchteproblem habe ich sonst auch keine Wirkliche Idee mehr. Keine Ahnung warum das manchmal hängt. Cache leeren oder mal nen anderen Browser versuchen ist immer noch so eine Sache bei HomeMatic.
Es hat in der Zwischenzeit Niederschlag gegeben und der Regensensor hat auch Werte angezeigt. Werde es weiter beobachten, sollte aber OK sei.

Cache geleert, mit Safari und Windows Edge aufgeschaltet und auch mit den beiden den Aussensor im Cux mal neu angelegt. Kein Erfolg, es wird in der WebUi nur die Temperatur angezeigt.

Da ich die Luftfeuchtigkeit in den Apps sehe und ich den Wert wohl für keine Abfrage oder Programmierung brauchen werde, belasse ich es einfach dabei.

Danke für die Hilfe!

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“