Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

vlcweb
Beiträge: 20
Registriert: 16.09.2018, 23:58
Hat sich bedankt: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 21.09.2018, 21:45

Wie kann ich das kontrollieren? Dort sind nur drei ??? Drinnen. Mfg
Dateianhänge
7DCBE42F-163C-41F9-AEDE-BB8BB2DE6151.jpeg
Zuletzt geändert von vlcweb am 21.09.2018, 21:51, insgesamt 2-mal geändert.

BFM
Beiträge: 26
Registriert: 21.09.2018, 17:40

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von BFM » 21.09.2018, 21:46

Indigo hat geschrieben:
21.09.2018, 21:15
Hi.

Probier dein Skript mal mit einem anderen Programm abzuspeichern. NotePad hat da schon öfter Probleme verursacht.
Probier es mal mit WinSCP.
Und achte darauf dass in der ersten Zeile kein Freizeichen am Anfang ist.

Wenn es immernoch nicht funzt geht es morgen weiter.
Habe es direkt mit WINScp probiert und ohne Leerzeichen. Leider keine Änderung. Habe übrigens auch Notepad++ benutzt. Notepad hat einiges durcheinandergewürfelt.
Ich reiss mir jetzt noch ein Bierchen auf.

Schönen Abend noch,

BFM

BFM
Beiträge: 26
Registriert: 21.09.2018, 17:40

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von BFM » 22.09.2018, 19:32

Ha! Ich bin einen Schritt weiter! Hatte einen Dreher in der Client Secret. Asche auf mein Haupt! Ich habe diese bestimmt 20 mal gelesen. Na ja, egal. Aber ich habe trotzdem noch nen Fehler im Regenmesser. Habe im Script gesucht, aber nix gefunden. Ich bekomme diese Meldung:

/usr/local/addons/netatmo$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
info: Outside temperature is 16.8
info: Outside humidity is 40
info: LogI is {"body":[{"beg_time":1537633140,"value":[[21.4,34,452,1026.9,35]]}],"status":"ok","time_exec":0.012618064880371,"time_server":1537633754}#=#=#
##O#- #
info: Inside temperature is 21.4
info: Inside humidity is 34
info: Inside CO2 level 452
info: Inside pressure is 1026.9
info: Inside noise level is 35
can't read "rain": no such variable
while executing
"log info "Outside rain1 is $rain""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 202)
info: LogR is {"body":[{"beg_time":1537610400,"value":[[0,0]]}],"status":"ok","time_exec":0.026298999786377,"time_server":1537633754}#=#=#
##O#- #

Vielleicht noch jemand ne Idee?

LG

BFM

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 22.09.2018, 20:34

Hast du wahrscheinlich auch schon öfter kontrolliert, aber die MAC Adresse vom Regensensor stimmt wirklich?

BFM
Beiträge: 26
Registriert: 21.09.2018, 17:40

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von BFM » 23.09.2018, 11:05

Yep, hab ich gefühlte 100 mal kontrolliert und jetzt auch über das Script ausgelesen. Wobei das etwas verwirrend ist. In der Anleitung steht "05:00:00: Rest wie Außenmodul". Aber über das Auslesen vom Script kommt auch meine ganz normale Mac Adresse.
Aber ich bleibe am Ball ;-)

LG

BFM

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 24.09.2018, 12:26

Dann Versuch doch mal einen anderen Ansatz.

Lösche alles was mit dem Regensensor zu tun hat aus dem Skript heraus, oder besser noch erstelle es neu ohne den Regensensor zu integrieren und schau ob dann von den anderen NetAtmo Geräten Daten in der HomeMatic ankopmmen.
Wenn das funktioniert kann man es dann langsam von unten herauf aufbauen und sieht wo der Fehler ist.

BFM
Beiträge: 26
Registriert: 21.09.2018, 17:40

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von BFM » 26.09.2018, 17:36

Sorry für die späte Antwort! Ok, werde ich probieren wenn ich wieder Zuhause bin. Bin nämlich aktuell auf Arbeit im Oman.

LG

BFM

vlcweb
Beiträge: 20
Registriert: 16.09.2018, 23:58
Hat sich bedankt: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 27.09.2018, 10:24

vlcweb hat geschrieben:
21.09.2018, 21:45
Wie kann ich das kontrollieren? Dort sind nur drei ??? Drinnen. Mfg
Bei mir werden immer noch keine Regenwerte angezeigt

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 27.09.2018, 10:48

Sorry. Den Beitrag habe ich übersehen.
Wenn da nur ??? zu sehen ist bricht dein Script irgendwo ab und läuft nicht bis zum Ende durch.
Das passiert meistens wenn irgendwo ein Tipfehler drin ist und eine Variable im Script nicht genau gleich geschrieben ist wie sie in der HomeMatic angelegt ist.
Poste mal dein Script. Und schreibe dazu welche Werte in der Homematic alle nicht ankommen. Dann kann man sagen wo der Fehler liegt.
Alternativ kannst du überprüfen welcher der fehlenden Werte im untersten Scriptteil als erstes in die Homematic geschrieben werden soll. Da ist der Fehler. Dabei bricht das Script ab und es werden keine weiteren Werte mehr übertragen.

vlcweb
Beiträge: 20
Registriert: 16.09.2018, 23:58
Hat sich bedankt: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 27.09.2018, 14:02

Hi das ist das aktuelle

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 XX
    set password XX
    #  the following are MAC addresses of your indoor station and the outside module and rain module
    set deviceid "70:ee:50:2b:99:99"
    set moduleid "02:00:00:2b:99:99"
    set rainid "05:00:00:04:99:99"

    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"


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


info: found stored credentials
info: token is still valid
info: Outside temperature is 12.3
info: Outside humidity is 88
info: LogI is {"body":[{"beg_time":1537553449,"value":[[24.5,50,719,1019.9,37]]}],"status":"ok","time_exec":0.018347978591919,"time_server":1537553848}#=#=#
##O#- #
##O=# #
info: Inside temperature is 24.5
info: Inside humidity is 50
info: Inside CO2 level 719
info: Inside pressure is 1019.9
info: Inside noise level is 37
info: LogR is {"body":[{"beg_time":1537524000,"value":[[6.3]]}],"status":"ok","time_exec":0.05019211769104,"time_server":1537553848}#=#=#
##O#- #
info: Outside Regen1d is 6.3
info: LogR is {"body":[{"beg_time":1537553700,"value":[[0,0]]}],"status":"ok","time_exec":0.044193029403687,"time_server":1537553848}#=#=#
info: Outside rain2 is 0
info: Outside Regen30min is 0

Antworten

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