Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

MacMatic
Beiträge: 5
Registriert: 13.11.2017, 12:32

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von MacMatic » 12.02.2019, 10:00

blackbasket hat geschrieben:
11.02.2019, 10:00
Klingt blöd, aber dafür musst du als CUxD-Gerät das "Funk-Wandthermostat" auswählen. Am besten alle Geräte einmal neu anlegen (mit der gleichen SN, um am Script nichts ändern zu müssen). Die Auswahl hat offenkundig mehr Funktion als nur das Bildchen ;)
*thumbs up* SUPER, jetzt klappt alles! Vielen Dank für die Hilfe! :D

Gibt es bei der Auswahl der CUxD-Geräte ein Unterschied zwischen "Wandthermostat" und "Wandthermostat (neu)" bei den daraus resultierenden Funktionen? Ich habe jetzt bei der Neuanlage der Geräte die alte Version genommen.

Grüße... MacMatic

blackbasket
Beiträge: 73
Registriert: 13.07.2018, 13:19

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 12.02.2019, 10:20

MacMatic hat geschrieben:
12.02.2019, 10:00
Gibt es bei der Auswahl der CUxD-Geräte ein Unterschied zwischen "Wandthermostat" und "Wandthermostat (neu)" bei den daraus resultierenden Funktionen?
Hallo MacMatic,

ja, offensichtlich. Das steht auch schon mehrfach hier im Thread. Ich hatte das gleiche Problem.

Warum, wieso, weshalb? Ich nix Ahnung ;)

LG,
Marcel

bandimuc
Beiträge: 5
Registriert: 21.02.2019, 10:26

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von bandimuc » 03.03.2019, 10:50

Hallo,
die Frage ist schon mal gestellt worden, habe aber keine Antwort dazu gesehen. Kann man die Variablen [DEW_POINT]:, [ABS_HUMIDITY]:, [TEMP_MIN_24H]: usw. auch umbenennen ?

Danke im Voraus

blackbasket
Beiträge: 73
Registriert: 13.07.2018, 13:19

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 03.03.2019, 11:11

Hallo bandimuc,

mir ist keine Möglichkeit bekannt.

LG,
Marcel

Da Crocker
Beiträge: 3
Registriert: 03.07.2016, 19:22

Irgendwie klappts nicht so ganz.

Beitrag von Da Crocker » 04.03.2019, 14:59

Zunächst möchte ich mich vielmals für deine Mühe bedanken.
Trotz meiner Bemühung alles genau nach Anleitung zu erstellen funktioniert bei mir das ein oder andere nicht sauber. Alle Werte bleiben ungefüllt. Die Terminal Ausgabe über WinSCP ist jedoch gefüllt. Weiß nicht wo der Fehler liegt. :?:

Vorab bereits vielen Dank für eure Hilfe.

Hier einige Informationen:
NA1.JPG
NA2.JPG
NA3.JPG
NA8.JPG
NA4.JPG
NA5.JPG
NA6.JPG
NA7.JPG

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 "HIER STEHT MEINE CLIENTID"                     
    set clientSecret "HIER STEHT MEIN CLIENTSECRET"
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username "MEIN NETATMO USERNAME"
    set password "MEIN NETATMO PASSWORT"
    #  the following are MAC addresses of your indoor station and the outside module and rain module
    set deviceid "MEINE DEVICEID"
    set moduleid "MEINE MODULID"
    set rainid "MEINE RAINID"
    #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"
        }

    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 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"

    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 OTemp = dom.GetObject('CUxD.CUX9002002:1.SET_TEMPERATURE');"
    append rega_cmd "var OHumi = dom.GetObject('CUxD.CUX9002002: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 IPress = dom.GetObject('Luftdruck');"
    append rega_cmd "var ICO2 = dom.GetObject('CO2');"
    append rega_cmd "var INoise = 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 "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 "Rain1.State('$rain30min');"
    append rega_cmd "Rain2.State('$rain1d');"
    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 "netatmosynctime.Variable(sdatetime.ToString());"
    rega_script $rega_cmd
Zuletzt geändert von Da Crocker am 04.03.2019, 15:34, insgesamt 2-mal geändert.

blackbasket
Beiträge: 73
Registriert: 13.07.2018, 13:19

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 04.03.2019, 15:16

Hallo Da Crocker,

hast du noch den Screenshot der Einstellungen vom CUXD-sync device?

LG,
Marcel

Da Crocker
Beiträge: 3
Registriert: 03.07.2016, 19:22

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Da Crocker » 04.03.2019, 15:34

Hallo Marcel,
habe einen weiteren Screenshot der "Funk-Fernbedienung 19 Tasten" hinzugefügt.
Ist es das was du mit CUXD-sync device meinst?
Gruß

blackbasket
Beiträge: 73
Registriert: 13.07.2018, 13:19

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 04.03.2019, 22:45

Hallo Da Crocker,

ich habe erst gesehen, dass in der CLI ja schon ein Fehler auftritt. Da er windid nicht finden kann, wird vielleicht gar nichts zurückgeschrieben. Da du es nicht verwendest, solltest du es einmal alles auskommentieren - nicht nur am Anfang, sondern auch später.

LG,
Marcel

Da Crocker
Beiträge: 3
Registriert: 03.07.2016, 19:22

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Da Crocker » 05.03.2019, 13:02

blackbasket hat geschrieben:
04.03.2019, 22:45
Hallo Da Crocker,

ich habe erst gesehen, dass in der CLI ja schon ein Fehler auftritt. Da er windid nicht finden kann, wird vielleicht gar nichts zurückgeschrieben. Da du es nicht verwendest, solltest du es einmal alles auskommentieren - nicht nur am Anfang, sondern auch später.

LG,
Marcel
Ja in der CLI war noch ein Fehler. Der Screenshot war alt. Habe diesen dann gegen den neuen Ausgetauscht. Lag tatsächlich an der nicht auskommentierten Wind Routine. Danach lief es einwandfrei. Hatte die Anleitung nicht so verstanden des es zwingend auskommentiert sein muss wenns nicht verwendet wird.

Danke für deine Hilfe.

Werde mich nun mal dran geben und die weiteren Module hinzufügen.

joe13
Beiträge: 56
Registriert: 10.11.2013, 22:16

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von joe13 » 10.03.2019, 18:11

Hallo,
gib es eine Möglichkeit die "7-Tage-Prognose" auszulesen, um sie zu verarbeiten ?
(Wunderground geht ja leider nicht mehr)

Antworten

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