Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

herk
Beiträge: 2
Registriert: 17.09.2018, 17:50

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden - zu dumm dazu

Beitrag von herk » 17.09.2018, 17:57

Hallo zusammen,

komme einfach nicht mehr weiter :( :(
Ich dachte eigentlich, copy&paste wäre kein Problem und die Anleitung ist ja auch super geschrieben. Habe problemlos alle Variablen herausbekommen....aber: Nix passiert in der CCU3 und im Terminal bekomme ich folgendes Ergebnis vom script:

17:16:10 [ttyACM0] --> ? (api.netatmo.net is unknown) Use one of B b C F i A Z E G M K U Y R T V W X e f m l t u x

Was bedeutet das und wie behebe ich das???? Fragen über Fragen.
Kann jemand helfen?
Danke :-)

Indigo
Beiträge: 342
Registriert: 10.02.2015, 21:32

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 17.09.2018, 23:12

Hallo,

Jetzt nicht aufgeben. Der erste Teil deines Skripts sieht schon gut aus. Es werden ja Werte ausgegeben wenn du es testest.
Im letzten Teil müssen z.B. Noch alle Zeilen die mit dem Windsensor zusammenhängen rausgelöscht werden. Diesen scheinst du ja nicht zu haben. Ansonsten ist ein häufiges Problem wenn die Gerätenamen und/oder Systemvariablen in der CCU nicht exakt gleich sind wie im letzten Teil deines Skripts.
Du kannst gerne noch ein paar Screenshots deiner angelegten Geräte und Variablen einstellen. Dann schau ich mir das an.

vlcweb
Beiträge: 11
Registriert: 16.09.2018, 23:58

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 18.09.2018, 19:55

Hi, Vielen Dank schon einmal !!
Das mit dem Wind habe ich rausgelöscht :-)
Im Anhang habe ich ein paar Bilder angefügt, ich hoffe du findest mein Problem :P

Danke!!
Dateianhänge
Außen.jpeg
Geräte.jpeg
Innen.jpeg
Programm.jpeg
Systemvariable.jpeg
Taster.jpeg

Indigo
Beiträge: 342
Registriert: 10.02.2015, 21:32

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 19.09.2018, 11:41

Hallo,

das ist echt merkwürdig. Das sieht alles gut aus.
Der fehler scheint tatsächlich hier zu liegen:
17:16:10 [ttyACM0] --> ? (api.netatmo.net is unknown) Use one of B b C F i A Z E G M K U Y R T V W X e f m l t u x
Nur verstehen tue ich es nicht. Arbeitet eine CCU3 anders?

Zum Verständnis für mich:
Du hast ja schon einen erfolgreichen Test gehabt. In deinem Post ist ja ein erfolgreiches Ergebnis mit Werten. Geht das auch nicht mehr? Oder wie bekommst du die Werte und wann kommt der Fehler?

Frage an alle:
Hat es jemand auf einer CCU3 am Laufen?

vlcweb
Beiträge: 11
Registriert: 16.09.2018, 23:58

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 19.09.2018, 12:34

HIHI,

meinst du mich :P oder "herk" ?

Bulli
Beiträge: 435
Registriert: 29.04.2014, 18:38

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Bulli » 19.09.2018, 19:21

vlcweb hat geschrieben:
19.09.2018, 12:34
HIHI,
meinst du mich :P oder "herk" ?
Hallo vlcweb
sehe jetzt bei dir erst mal kein Problem, wenn du denn Windmesser raus hast. Variablen und Script hab ich keinen Schreibfehler gesehen.

Was genau geht nicht? Stell vielleicht noch mal dein aktuelles Script rein. Zugangsdaten aus XXX nicht vergessen.

Gruß
Bulli

Bulli
Beiträge: 435
Registriert: 29.04.2014, 18:38

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden - zu dumm dazu

Beitrag von Bulli » 19.09.2018, 19:26

herk hat geschrieben:
17.09.2018, 17:57
Hallo zusammen,

komme einfach nicht mehr weiter :( :(
Ich dachte eigentlich, copy&paste wäre kein Problem und die Anleitung ist ja auch super geschrieben. Habe problemlos alle Variablen herausbekommen....aber: Nix passiert in der CCU3 und im Terminal bekomme ich folgendes Ergebnis vom script:

17:16:10 [ttyACM0] --> ? (api.netatmo.net is unknown) Use one of B b C F i A Z E G M K U Y R T V W X e f m l t u x

Was bedeutet das und wie behebe ich das???? Fragen über Fragen.
Kann jemand helfen?
Danke :-)
Hallo herk
die Fehlermeldung sagt mir erst mal gar nichts. Was komisch ist >>>17:16:10 [ttyACM0] <<< wo kommt das denn her?
Am besten auch mal das Script posten und was bis jetzt geht oder eben nicht. Zugangsdaten aus XXX nicht vergessen.

Gruß
Bulli

vlcweb
Beiträge: 11
Registriert: 16.09.2018, 23:58

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 19.09.2018, 19:30

HIHI es werden keine Werte angezeigt in der homematic

mfg

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

info: found stored credentials
info: token is still valid
info: Outside temperature is 26.2
info: Outside humidity is 44
info: LogI is {"body":[{"beg_time":1537377943,"value":[[26.5,46,644,1023.4,43]]}],"status":"ok","time_exec":0.017301797866821,"time_server":1537378256}#=#=#
##O#- #
##O=# #
info: Inside temperature is 26.5
info: Inside humidity is 46
info: Inside CO2 level 644
info: Inside pressure is 1023.4
info: Inside noise level is 43
info: LogR is {"body":[{"beg_time":1537351200,"value":[[0]]}],"status":"ok","time_exec":0.10800004005432,"time_server":1537378256}#=#=#
##O#- #
info: Outside Regen1d is 0
info: LogR is {"body":[{"beg_time":1537377300,"value":[[0,0]]}],"status":"ok","time_exec":0.15305089950562,"time_server":1537378257}#=#=#
##O#- #
info: Outside rain2 is 0
info: Outside Regen30min is 0

Bulli
Beiträge: 435
Registriert: 29.04.2014, 18:38

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Bulli » 19.09.2018, 20:43

Hi vlcweb

mach mal bitte noch die 4 Zeilen raus.

Code: Alles auswählen

append rega_cmd "var gustA = dom.GetObject('Gustangle');"
append rega_cmd "var gustS = dom.GetObject('Guststaerke');"
append rega_cmd "gustA.State('$gustangle');"
append rega_cmd "gustS.State('$guststrength');"
Ich denke dann sollte es laufen.Wenn nicht schauen wir weiter. Das wird auf jeden Fall.

Gruß
Bulli

vlcweb
Beiträge: 11
Registriert: 16.09.2018, 23:58

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von vlcweb » 19.09.2018, 21:15

Yes, Wahnsinn es geht !! Danke

was nur vier zeilen so ausmachen !! Danke nochmal !

Antworten

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