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 » 07.03.2017, 15:20

Schon einer meiner Lösungsvorschläge ausprobiert?

Das hängt alles zusammen.

Schauen wir uns den letzten Teil deines Scripts mal an:

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');"

In diesen Zeilen werden die Daten des Zusatzmoduls in die CCU gebracht.
In den ersten beiden Zeilen wird bestimmt in welches CUxD Gerät die Temperatur und Feuchte gehören.
In der dritten Zeile wird die Systemvariable für den zusätzlichen CO2 Wert bestimmt. Diese gibt es bei dir leider nicht. Daher bricht das Script hier ab.
Damit kommen die Zeilen 4, 5 und 6 in denen das CUxD Gerät und die Systemvariable mit Werten gefüllt werden sollen nicht mehr zum Zug.

Grüsse

michel1109
Beiträge: 9
Registriert: 06.02.2017, 17:07

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von michel1109 » 07.03.2017, 15:30

Hallo,

ja habe die Zeilen gelöscht. Dennoch ist das Ergebnis das selbe. Er zeigt keine Werte an

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 07.03.2017, 15:49

OK

suchen wir weiter.

In deinem Log kommen alle Werte an.
Also muss der Fehler im letzten Script Teil oder in der CCU sein.

Kommen wirklich alle anderen Daten in der CCU an?
SyncTime? Sonometerwerte? CO2 Werte der Hauptstation? Luftdruck?

Wie gesagt die Systemvariablen auch für diese Werte sind nicht egal. Entweder anlegen oder die Zeilen aus dem Script löschen.


Grüsse

michel1109
Beiträge: 9
Registriert: 06.02.2017, 17:07

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von michel1109 » 08.03.2017, 16:00

Hallo,

Problem ist behoben. Es lang an den Variablen. Hatte einen Schreibfehler drin :shock: :cry:

DANKE !!!!

djangp
Beiträge: 166
Registriert: 11.09.2014, 10:43
Wohnort: Bayern
Hat sich bedankt: 3 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von djangp » 11.03.2017, 23:13

Hallo gibt es eine zusammenfassende Anleitung, wie ich die netatmo Wetterstation in die CCU2 bringe?
RaspberryMatic auf RPi 3 - AIO Creator NEO

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

Beitrag von Bulli » 12.03.2017, 06:21

Indigo hat geschrieben:Hallo.

Kennst du dieses HowTo hier?

http://homematic-forum.de/forum/viewtop ... 31&t=28188

Wenn nicht schau dir das mal an und wenn du dann immernoch nicht weiterkommst helfe ich gerne weiter.

Grüße
Gruß
Bulli

djangp
Beiträge: 166
Registriert: 11.09.2014, 10:43
Wohnort: Bayern
Hat sich bedankt: 3 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von djangp » 12.03.2017, 09:37

Danke Dir ... Probier das erstmal nach Anleitung... wenn es dann nicht klappt, melde ich mich wieder
RaspberryMatic auf RPi 3 - AIO Creator NEO

SvenA1980
Beiträge: 2
Registriert: 17.03.2017, 19:10

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von SvenA1980 » 17.03.2017, 19:20

Hallo zusammen,

erst einmal vielen, vielen Dank für die Anleitung zur Einbindung der Netatmo!!

Ich bin auch schon relativ weit, da die Abfrage grundsätzliche funktioniert und Luftfeuchte, Lautstärke, ... angezeigt werden in der Homematic.

Jedoch wird bei mir bei allen drei Modulen (Hauptmodul innen, Außen und Schlafzimmer) die Temperatur nicht angezeigt.

Hat jemand eine Idee, warum der die Werte nicht übernommen werden. Über den Terminalabruf werden die Werte angezeigt aber halt nicht in die CCU2 übernommen.

Hier 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
    set deviceid "XXXX"
    set moduleid "02:00:00:XX"
    set szid "03:00:00: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"
        }

    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 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 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 ZTemp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
    append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');"
    append rega_cmd "var IPress = dom.GetObject('Luftdruck');"
    append rega_cmd "var ICO2 = dom.GetObject('CO2');"
    append rega_cmd "var ZCO2 = dom.GetObject('CO2_SZ');"
    append rega_cmd "var INoise = dom.GetObject('Sonometer');"    
    append rega_cmd "var netatmosynctime = dom.GetObject('SyncTime');"    
    append rega_cmd "ITemp.State('$itemp');"
    append rega_cmd "IHumi.State('$ihum');"
    append rega_cmd "OTemp.State('$otemp');"
    append rega_cmd "OHumi.State('$ohum');"
    append rega_cmd "ZTemp.State('$ztemp');"
    append rega_cmd "ZHumi.State('$zhum');"
    append rega_cmd "IPress.State('$ipressure');"
    append rega_cmd "ICO2.State('$ico2');"
    append rega_cmd "ZCO2.State('$zco2');"
    append rega_cmd "INoise.State('$inoise');"
    append rega_cmd "var sdatetime = system.Date('%d.%m.%Y %H:%M:%S');"
    append rega_cmd "netatmosynctime.Variable(sdatetime.ToString());"
    rega_script $rega_cmd
Hier noch die Screenshots vom HM:
Netatmo_HM_Innen_fehlende Temp.PNG
Netatmo_HM_Innen_fehlende Temp.PNG (15.49 KiB) 1768 mal betrachtet
Netatmo_HM_Innen 2_fehlende Temp.PNG
Netatmo_HM_Innen 2_fehlende Temp.PNG (10.23 KiB) 1768 mal betrachtet
Es werden auch keine "Max/MIN" Werte angezeigt wie tw. hier gepostet, was mir aber auch nicht so wichtig ist.

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 17.03.2017, 20:01

Hi,

Dein Skript läuft bis zum Ende durch. Das ist schon mal gut und heißt, dass der Fehler woanders liegt.

Es werden auch keine Feuchtewerte angezeigt. Geh doch mal in der Homematic zu den Einstellungen der CUxD Geräte. Dann stellst du einmal von Temp+Hum auf Temp. Bestätigst mit OK. Dann nochmal rein und wieder auf Temp+Hum und wieder mit OK bestätigen.
Um Max und Min Werte angezeigt zu bekommen noch zusätzlich ein Häckchen bei weather/statistic machen.

SvenA1980
Beiträge: 2
Registriert: 17.03.2017, 19:10

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von SvenA1980 » 17.03.2017, 20:41

Hallo Indigo,

vielen Dank! Habe jetzt alle Werte. Musste erst auf die 2.27.7 hoch (vorher 2.25.5), da ich vorher den Wert nicht mehr ändern konnte bzw. auch nicht angezeigt wurde. Nach dem Update hatte ich das Dropdown und konnte es entsprechend speichern inkl. der zwei Häkchen zu Statistics & zyklischen Statusmeldungen!

Danke und noch schönen Abend!

Sven

Antworten

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