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 » 02.07.2017, 12:34

Dann sind wir schon mal einen Schritt weiter.
Schau dir mal deine NetAtmo Geräte im WebUI - Einstellungen an.
Schalte sie einmal von Temp+Hum auf Temp. Ok klicken. Wieder reingehen zurück auf Temp+Hum und wieder OK drücken. Dann sollten in den Geräten die Feuchtigkeitswerte auch auftauchen. Wenn das noch nicht hilft um die anderen Variablen auch mit Werten zu befüllen bitte nochmal dein aktuelles Skript.

Muasmolle
Beiträge: 68
Registriert: 30.03.2017, 21:34
Wohnort: Laupheim
Hat sich bedankt: 11 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Muasmolle » 02.07.2017, 19:23

Unglaublich, das hat tatsächlich geholfen! :shock:
Jetzt fehlen nur noch zwei Wert, CO2 (der eigentlich wichtigeste Wert) und die dB (nicht so wichtig).
SyncZeit fehlt auch, aber das könnte vielleicht noch daran liegen, dass ich noch nicht ganz fertig bin und das Scipt manuel über den Taster Kanal 1 starte.
Im Forum steht viel über das Timer-Problem, und blockieren der CCU2 über einige Sekunden. Wie ist denn nun der aktuellste Stand dazu bzw. deine Empfehlung?
Sie sieht es im Moment aus:
Innen.png
Innen.png (19.54 KiB) 2841 mal betrachtet

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.07.2017, 21:04

Das bekommen wir auch noch hin. Du musst entweder die drei SVs umbenennen und das NetAtmo weglassen. Oder entsprechend im letzten Teil des Skripts die zu beschreibenden SVs angleichen.


Gesendet von iPhone mit Tapatalk

Muasmolle
Beiträge: 68
Registriert: 30.03.2017, 21:34
Wohnort: Laupheim
Hat sich bedankt: 11 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Muasmolle » 03.07.2017, 02:21

Hallo Indigo,
genau das war das Problem! Das passiert wenn man sich nicht ganz genau 100%ig an deine Anlatung hält ;-)
Im nachhinein logisch, die Variablen müssen natürlich ganz genau so heisen, wie im Skript auch.
Auch habe ich das mit dem automatischen Starten des Skripts mit einem Typ 28 CUxD-Gerät hinbekommen.
Aller Werte sind nun da, alle 10 min wird aktuallisiert - super, nun kann ich die Werte für die Lüftungssteuerung einsetzen. Einen zweiten Innensensor muss ich noch anbinden, aber ich glaube das war auch irgendwo beschrieben, werde das hoffentlich hin bekommen.
Vielen Dank nochmal für Deine Hilfe und Geduld!

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 03.07.2017, 11:26

Schön, dass es läuft. Mit dem CUxD Timer hab ich es auch am Laufen und seitdem keinen Ausfall mehr.

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 06.07.2017, 11:46

Hallo Semmy,

Ich hab mir deinen Wusch den regen der letzten Stunde angezeigt zu bekommen nochmal angesehen.
In meinem Testaufbau funktioniert es.

Probier es doch mal mit folgender Test-.tcl Datei aus. Neue Datei erstellen,ab damit auf die CCU, und einmal (oder wahrscheinlich öfter) durchlaufen lassen. Es werden dabei keine Daten in die HomeMatic geschrieben sondern nur die Werte des Regensensors für 1d, 1h und 30min in der Konsole ausgegeben. Wenn es auch bei dir läuft machen wir uns daran dass in die richtige .tcl Datei einzubauen.

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 "BITTENOCHAUSFÜLLEN"                     
    set clientSecret "BITTENOCHAUSFÜLLEN"
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username "BITTENOCHAUSFÜLLEN"
    set password "BITTENOCHAUSFÜLLEN"
    #  the following are MAC addresses of your indoor station and the outside module
    set deviceid "BITTENOCHAUSFÜLLEN"
    set moduleid "BITTENOCHAUSFÜLLEN"
    set rainid "BITTENOCHAUSFÜLLEN"

    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 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...1h"
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$rainid&scale=1hour&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 rain rain1h

    log info "LogR is $response"                
    log info "Outside Regen1h is $rain1h"

    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 rain rain30min
    
    log info "LogR is $response"                
    log info "Outside Regen30min is $rain30min"
Grüsse

nuiler
Beiträge: 207
Registriert: 15.04.2012, 11:07
Wohnort: Ostalbkreis / Deutschland

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von nuiler » 17.07.2017, 13:41

Netatmo.JPG
Wenn ich den Link aufrufe kommt bei mir, nach meiner Ansicht nur Schrott.
http://dev.netatmo.com/dev/listapps

Muss ich einen anderen link benutzen um an
clientId
clientSecret

zu kommen?
www.nuiler.de
Raspberrymatic 3.57.4.20210320 rpi3

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.07.2017, 21:37

https://dev.netatmo.com/myaccount/

App auswählen und runterscrollen.

nuiler
Beiträge: 207
Registriert: 15.04.2012, 11:07
Wohnort: Ostalbkreis / Deutschland

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von nuiler » 18.07.2017, 09:38

Ok bin nun weiter wenn ich aber einen Test ausführe bekomme ich folgende Fehlermeldung.

/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
can't read "otemp": no such variable
while executing
"log info "Outside temperature is $otemp""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 176)

Muss ich die ID im Mac-Adressenformat eingeben oder ohne :
www.nuiler.de
Raspberrymatic 3.57.4.20210320 rpi3

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 18.07.2017, 13:40

MAC Adressen mit :
Poste doch mal dein anonymisierten Script

Antworten

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