Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

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 » 09.12.2018, 18:20

Dinosky hat geschrieben:
09.12.2018, 16:19
Es läuft durch , die Innenmodul Werte stimmen auch die Aussen Werte sind alle bei 99 grad oder %
IMG_3110.png
Dinosky
Hallo
genau ist nur eine Krüke das du die Innenwerte erst mal wieder hast. Durch die 2 Zeilen werden die Aussenwerte hart auf 99 Grad gesetzt.
Jetzt müssen wir bzw. du herausfinden warum die moduleid des Aussenmoduls nicht passt. Schau mal bitte auf der netatmo Seite noch mal nach.
Der Fehler
>>>> debug: response is: {"error":{"code":9,"message":"Device not found"}}#=#=- #
sagt ja das er das Aussenmodul 02:00:00:2c:b6:e6 bei dir nicht findet. Hier kann ich nicht mehr viel helfen ohne deine Zugangs Daten. Die möchte ich aber nicht wirklich haben. Schau bitte einfach mal das du die richtig ID für das Aussenmodul zu findest. Wenn du sie gefunden hast mußt du die 2 Zeilen im Script wieder entfernen. Das wird schon irgend wie :-)

Gruß
Bulli

Dinosky
Beiträge: 13
Registriert: 12.01.2016, 00:14

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Dinosky » 11.12.2018, 02:49

Info

Da ich diesen Sommer das Aussenmodul getauscht habe und eines mit Firmware 46 habe ist meine MAC Adresse von dem neuen Modul 02:ff:ff:2c:b6:e6.
Dieses habe ich durch Auslesen herausbekommen.
Die 1. Methode (02:00:00:2c:b6:e6 mit Serial zusammen setzten) hat bei mir nicht geklappt, da bei dem neuen Modul die 4 Nullen als ff:ff da stehen müssen.

Danke an Bulli


Gruß Dino

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 » 23.12.2018, 16:06

Hallo zusammen,

da ich HowTo steht, dass Fragen hier gestellt werden sollen, mache ich das mal.

Vorab: Das Script funktioniert und ich sehe alle verfügbaren Daten in der CCU3.

Mein Problem: Ich sehe im CCU-Historian nur die Werte der SVs, also CO2 und Luftdruck. Die eigentlichen Temperatur- und Feuchtigkeitswerte kommen dort aber nicht an. Die Protokollierung ist aktiv.

Hat jemand eine Idee?

LG,
Marcel

Tischi
Beiträge: 5
Registriert: 26.12.2018, 13:22

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Tischi » 26.12.2018, 14:01

Jetzt habe ich alle 67 Seiten durch und es funktioniert immer noch nicht. Habe viele Tipps befolgt und zig versuche gestartet, klappt einfach nicht. Habe eine Raspberrymatic, Netatmo innen und aussensensor, Mac mit Sublime Text 2 und Cyberduck als software. Die TCL Datei ist nach Anleitung erstellt und auf den Raspberry kopiert. mit dem Test Skript wird mir gemeldet: <QUOTE><s>
</s>warn: no stored credentials found<br/>
can't read "expiresin": no such variable<br/>
while executing<br/>
"log debug "expires in $expiresin""<br/>
(procedure "parseOAuthResponse" line 14)<br/>
invoked from within<br/>
"parseOAuthResponse [requestToken $clientId $clientSecret $username $password"<br/>
invoked from within<br/>
"if { [file exists $cfgfile] == 1} {<br/>
log info "found stored credentials"<br/>
loadAccessToken<br/>
set now [clock seconds]<br/>
..."<br/>
(file "/usr/local/addons/netatmo/netatmo.tcl" line 148)<br/>
#
<e>
</e></QUOTE>

Bin mittlerweile echt ratlos, habe bereits zig Korrekturen an der TCL gemacht, es wird immer wieder ein Fehler gemeldet<br/>
<br/>
Meine aktuelle TCL <CODE><s>

Code: Alles auswählen

</s>    #!/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 "5bdf5b659xxx"                     
    set clientSecret "EUDIlyr4e08Nxxx"
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username "l.txxx"
    set password "Hxxx"
    #  the following are MAC addresses of your indoor station and the outside module and rain module
    set deviceid "70:xxx"
    set moduleid "02:xxx"

    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"

    #
    # 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 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 "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
<e>
</e></CODE></r>

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 » 26.12.2018, 17:39

blackbasket hat geschrieben:
23.12.2018, 16:06
Hat jemand eine Idee?
LG,
Marcel
Frohe Weihnachten
das benutze ich nicht daher keine Ahnung. Stell doch deine Frage hier
viewforum.php?f=38
da ist sie wahrscheinlich besser aufgehoben.

Gruß
Bulli

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 » 26.12.2018, 17:43

Tischi post_id=479232 time=1545829262 user_id=26137]
Jetzt habe ich alle 67 Seiten durch und es funktioniert immer noch nicht. Habe viele Tipps befolgt und zig versuche gestartet, klappt einfach nicht. Habe eine Raspberrymatic, Netatmo innen und aussensensor, Mac mit Sublime Text 2 und Cyberduck als software. Die TCL Datei ist nach Anleitung erstellt und auf den Raspberry kopiert. mit dem Test Skript wird mir gemeldet: </s>warn: no stored credentials found<br/>

<e>[/code]</e></CODE></r>
Frohe Weihnachten
die erste Zeile ist falsch.
>> </s> #!/bin/tclsh
Hier darf nur #!/bin/tclsh stehen und ganz wichtig bitte ohne Leerzeichen am Anfang. Rest schaut auf die schnelle gut aus.

Gruß Bulli

Tischi
Beiträge: 5
Registriert: 26.12.2018, 13:22

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Tischi » 28.12.2018, 07:39

Vielen Dank für dein drüberschauen Bulli. Ich habe mir die erste Zeile angeschaut und da steht genau #!/bin/tclsh ohne dem >> </s>
Daran wird es nicht liegen. Die Zeichen >> </s> kommen vermutlich vom reinkopieren in den Beitrag, sind aber in der TCL nicht mit drin.
Ich habe keine Ahnung vom Skripten aber mich wundert diese Fehlermeldung "can't read "expiresin": no such variable
while executing
"log debug "expires in $expiresin""
Hat es mehr sinn das mit Windows hard und software rüber zu schieben?

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.12.2018, 09:40

Tischi hat geschrieben:
28.12.2018, 07:39
Hat es mehr sinn das mit Windows hard und software rüber zu schieben?
Hallo
nein.

Stell doch bitte mal auf Loglevel 7 um und poste was da raus kommt.
>>>> # 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug
>>>> set loglevel 7

Ich glaube deine Zugangsdaten passen nicht. Du bekommst keinen Token. User oder Passwort vielleicht auch ein Sonderzeichen drin was er nicht mag.
Schau mal bitte unter /tmp da wird bei dir wahrscheinlich keine Datei netatmo.dat liegen.
Ausgabe wird wahrscheinlich so sein oder ?

Code: Alles auswählen

# ./netatmo.tcl
debug: script has started
warn: no stored credentials found
debug: requesting new token
debug: response was HTTP/1.1 400
Server: nginx
Date: Fri, 28 Dec 2018 08:28:06 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Expires: 0
Cache-Control: no-cache, must-revalidate
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Powered-By: Netatmo

{"error":"invalid_client"}  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   128    0    26  100   102    146    573 --:--:-- --:--:-- --:--:--   727
debug: parsing authentication result
debug: returncode is 400
debug: access token is
debug: refresh token is
can't read "expiresin": no such variable
    while executing
"log debug "expires in $expiresin""
    (procedure "parseOAuthResponse" line 14)
    invoked from within
"parseOAuthResponse [requestToken $clientId $clientSecret $username $password"
    invoked from within
"if { [file exists $cfgfile] == 1} {
        log info "found stored credentials"
            loadAccessToken
            set now [clock seconds]
      ..."
    (file "./netatmo.tcl" line 148)


Gruß Bulli

mnandarieder
Beiträge: 3
Registriert: 30.06.2018, 16:13

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von mnandarieder » 28.12.2018, 20:14

Hallo Leute,

ich bekomme die Daten mit folgenden script in die Homematic:

dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("tclsh /usr/local/addons/netatmo/netatmo.tcl");
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine(v);

Ergebnis:
info: found stored credentials
info: token is still valid
info: Outside temperature is -1.3
info: Outside humidity is 88
info: LogI is {"body":[{"beg_time":1546023422,"value":[[22.6,44,540,1025.2,35]]}],"status":"ok","time_exec":0.017257213592529,"time_server":1546023967}#=#=#
##O#- #
info: Inside temperature is 22.6
info: Inside humidity is 44
info: Inside CO2 level 540
info: Inside pressure is 1025.2
info: Inside noise level is 35
info: LogR is {"body":[{"beg_time":1545994800,"value":[[2.2]]}],"status":"ok","time_exec":0.048112154006958,"time_server":1546023969}#=#=#
##O#- #
##O=# #
info: Outside Regen1d is 2.2
info: LogR is {"body":[{"beg_time":1546022700,"value":[[0,0]]}],"status":"ok","time_exec":0.17663979530334,"time_server":1546023969}#=#=#
##O#- #
info: Outside rain2 is 0
info: Outside Regen30min is 0

Hallo Welt!

Leider kommen die Daten nicht in den Sensoren NetAtmo Innen und Aussen an, es steht 0 drin.

Könnt Ihr mir mal erklären wie die Daten dort ankommen sollen, ich verstehe es nämlich nicht.

Tischi
Beiträge: 5
Registriert: 26.12.2018, 13:22

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Tischi » 28.12.2018, 21:27

Guten Abend Bulli,
nochmal vielen Dank für dein Engagement!

Du hast recht, ich habe keine Neatatmo.dat unter /tmp
Die ausgabe trifft fast 100% auf deine Voraussage.

Code: Alles auswählen

debug: script has started
warn: no stored credentials found
debug: requesting new token
debug: response was HTTP/1.1 400
Server: nginx
Date: Fri, 28 Dec 2018 20:15:52 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Expires: 0
Cache-Control: no-cache, must-revalidate
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Powered-By: Netatmo

{"error":"invalid_client"}  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   173    0    26  100   147    201   1139 --:--:-- --:--:-- --:--:--  1351
debug: parsing authentication result
debug: returncode is 400
debug: access token is 
debug: refresh token is 
can't read "expiresin": no such variable
    while executing
"log debug "expires in $expiresin""
    (procedure "parseOAuthResponse" line 14)
    invoked from within
"parseOAuthResponse [requestToken $clientId $clientSecret $username $password"
    invoked from within
"if { [file exists $cfgfile] == 1} {
        log info "found stored credentials"
            loadAccessToken
            set now [clock seconds]
      ..."
    (file "/usr/local/addons/netatmo/netatmo.tcl" line 148)
in meinen Zugangsdaten sind tatsächlich Sonderzeichen, in der email ein Punkt (.) und im Passwort ein minus (-).
Ich versuch es mal mit einem neuen PW. Vielen Dank!

Antworten

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