Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

blackbasket
Beiträge: 133
Registriert: 13.07.2018, 13:19
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 09.01.2019, 11:03

rolfsg hat geschrieben:
08.01.2019, 23:00
Wie kann ich den Token erneuern ?
Hallo Rolf,

kannst du vielleicht einfach eine neue App anlegen, wie im HowTo viewtopic.php?f=31&t=28188 beschrieben?

LG,
Marcel

rolfsg
Beiträge: 14
Registriert: 04.12.2016, 15:17

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von rolfsg » 09.01.2019, 20:30

Hallo Marcel,

Danke für dein Feedback. Ich habe sowohl bei der bestehenden Netatmo App den Key zurückgesetzt und auch eine neue App erstellt. Natürlich die jeweiligen Keys im Skript richtig eingetragen. Es bleibt aber immer bei derselben Rückmeldung.

Wie ich diese sehe kann der Token über den Skript mittels "refrehtoken" erneuert werden, auch sind Platzhalter für den accesstoken & refreshtoken vorhanden, der Debugmodus des Skripts liefert dann auch entsprechende Informationen. Wie das Prozedere aber genau geschehen soll verstehe ich leider nicht, da sind meine Skript Kenntnisse dann doch zu bescheiden.

Ich wünsche einen schönen Winterabend
Rolf
CCU3
- Neo Server
- CuX
- CCU Historian

blackbasket
Beiträge: 133
Registriert: 13.07.2018, 13:19
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 10.01.2019, 08:21

Hallo Rolf,

dann bin ich leider ratlos. Ich habe gerade nochmal in das Script geschaut. Das Token wird ja automatisch im Script erstellt bzw. von der Webseite abgerufen. Da hat man gar keine Variable für, die man definieren kann.

Ich gehe davon aus, dass der Zugriff über die Netatmo-App (auf Handy oder so) einwandfrei funktioniert. Die CCU hast du wohl auch schon mal neu gestartet, oder?

LG,
Marcel

olek1511
Beiträge: 4
Registriert: 27.01.2019, 13:31

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von olek1511 » 27.01.2019, 13:43

Hallo
habe erhebliche Probleme mit meiner Einbindung der Netatmo Wetterstation im Anhang das Skript und die Meldung
weiss nicht wo es dran liegt es kommen keine Daten ?

BIN FÜR JEDE HILFE SEHR SEHR DANKBAR.




#!/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 "5XXXXXXXXXXXX"
set clientSecret "V8XXXXXXXXXXXXXXX"
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username "hXXXXXXXXXX"
set password "XXXXXXXXX"
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid "70:ee:50:01:50:20"
set moduleid "02:00:00:01:48:92"
set rainid "05:00:00:00:5d:fc"


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? ... e_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? ... e_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? ... e_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? ... e_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? ... e_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








DAS kommt wenn ich diese drüberlaufen lasse . ( tclsh /usr/local/addons/netatmo/netatmo.tcl)


invalid command name " "
while executing
"    set cfgfile "/user/local/tmp/netatmo.dat""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 21)

blackbasket
Beiträge: 133
Registriert: 13.07.2018, 13:19
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blackbasket » 28.01.2019, 10:29

Hallo olek1511,

hast du schon mal versucht, die Anführungszeichen neu zu schreiben? Nicht, dass da etwas beim Kopieren kaputt gegangen ist. Die Zeile
olek1511 hat geschrieben:
27.01.2019, 13:43
set cfgfile "/tmp/netatmo.dat"
stellt bei mir kein Problem dar. Ich gehe mal davon aus, dass der Ordner /tmp existiert. Ggf. kannst du auch mal schauen, ob da schon eine netatmo.dat existiert und diese testweise mal löschen.

LG,
Marcel

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 » 28.01.2019, 19:46

olek1511 hat geschrieben:
27.01.2019, 13:43
Hallo
habe erhebliche Probleme mit meiner Einbindung der Netatmo Wetterstation im Anhang das Skript und die Meldung
weiss nicht wo es dran liegt es kommen keine Daten ?

BIN FÜR JEDE HILFE SEHR SEHR DANKBAR.
Hallo
Howto bekannt?
viewtopic.php?f=31&t=28188&hilit=netatmo+howto#p250708

Oben im Script sind es ein Innen Aussen Modul und Regenmesser. Unten im Script ist der Windmesser auch drin.
Hast du auch den CuxD installiert? Welche Geräte Variablen hast du angelegt? Was für Geräte hast du von Netatmo?

Bitte dein Script das nächste mal in Codetags packen.

Code: Alles auswählen

so........
Gruß
Bulli

ps das wird schon :)

olek1511
Beiträge: 4
Registriert: 27.01.2019, 13:31

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von olek1511 » 28.01.2019, 21:27

Hallo
CuxD ist installiert Geräte sind Innen und Aussen Modul und ein Regenmesser Geräte Variablen : CO2,Luftdruck,Sonometer,Synctime.

DANKE

olek1511
Beiträge: 4
Registriert: 27.01.2019, 13:31

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von olek1511 » 29.01.2019, 07:30

Hallo
bin etwas weiter gekommen aber der nächste FEHLER kommt und lautet:

info: found stored credentials
info: token is still valid
can't read "otemp": no such variable
while executing
"log info "Outside temperature is $otemp""

was könnte dieses den sein?

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 » 29.01.2019, 16:56

olek1511 hat geschrieben:
29.01.2019, 07:30
Hallo
bin etwas weiter gekommen aber der nächste FEHLER kommt und lautet:

info: found stored credentials
info: token is still valid
can't read "otemp": no such variable
while executing
"log info "Outside temperature is $otemp""

was könnte dieses den sein?
Hallo
hatten wir wahrscheinlich schon hier.
Stell mal auf debug.
viewtopic.php?f=31&t=12876&start=640#p474318
Poste die ganze Ausgabe.
Wird dann das sein.
viewtopic.php?f=31&t=12876&start=650#p474449

Gruß
Bulli

olek1511
Beiträge: 4
Registriert: 27.01.2019, 13:31

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von olek1511 » 30.01.2019, 08:58

Hallo
erstmal Herzlichen dank für eure Hilfe aber ich komme einfach nicht weiter obwohl ich alles genau eingeben kommt:
# tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
info: Outside temperature is 99
info: Outside humidity is 99
info: LogI is {"error":{"code":10,"message":"Argument(s) is(are) missing"}}##O=- # #
can't read "itemp": no such variable
while executing
"log info "Inside temperature is $itemp""
(file "/usr/local/addons/netatmo/netatmo.tcl" line 192)


aber die werte passen genau ???

Antworten

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