Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

Markus_Pfalz
Beiträge: 6
Registriert: 28.09.2015, 15:01

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Markus_Pfalz » 07.10.2015, 11:29

Aber ihr braucht noch mehr und zwar die IDs eurer Module. Diese könnt ihr der Dokumentation auf der Entwicklerwebseite unter DeviceList entnehmen: https://dev.netatmo.com/doc/methods/devicelist Die dem Antwortbeispiele sind eure Netatmo IDs ausgegeben ;-) Man hab ich lange danaach gesucht. Hier ein Beispiel:

"status": "ok",
"body": {
"modules": [
{
"_id": "01:02:03:04:05:06",
"main_device": "70:60:50:40:30:20",
"module_name": "Aussen",
"type": "NAModule1",
Kann es sein das Netatmo den Dev Bereich überarbeitet hat? Ich bekomme im Example definitiv nicht meine Station angezeigt. Die Mac Adresse stimmt nicht mit der Adresse im Webinterface unter my.netatmo.com überein. Gibt es eine andere Möglichkeit an die Adressen zu kommen?

Gruß
Markus

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 07.10.2015, 13:04

Hallo,

Sieht wirklich so aus als wären die Beispiele nur noch echte Beispiele.
Über einen Getuser request sollte man alle seine IDs bekommen. Dazu ist aber der access_token nötig. Ich bin heute noch unterwegs ich kann mir das morgen mal anschauen.

Markus_Pfalz
Beiträge: 6
Registriert: 28.09.2015, 15:01

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Markus_Pfalz » 07.10.2015, 14:38

Ok, ich hatte schon an meinem Verstand gezweifelt. :D
Die Mac Adresse lässt sich ja noch aus dem Webinterface herauslesen, allerdings habe ich keine Ahnung wie man an die Device ID kommt. Hilfestellung wäre schön :|

Viele Grüße
Markus

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 08.10.2015, 12:55

Hallo,

ich habe heute mal verschiedenes ausprobiert.
Vielleicht hilft dir schon was ich bisher herausgefunden habe.
Zunächst habe ich mir eine neue .tcl Datei gebastelt die einen getuser request abschickt. Laut Doku sollten in der response alle IDs der Module enthalten sein die der betreffende User besitzt. Bei mir wird bislang aber nur die ID des Innenmoduls ausgeschmissen. Und diese ID bekommt man leichter über die my.netatmo.com Seite.
Also bisher eine Sackgasse. Warum auch immer.
Nächster Versuch mit einem devicelist request. Nun bekomme ich alle deviceIDs.

ABER vielleicht geht es viel einfacher:
Wenn ich mir die Seriennummern des Aussenmoduls und meines Regensensors anschaue Stelle ich fest dass die Seriennummer aus den letzten 6 Ziffern der ID besteht plus Buchstabe davor.
Bei mir wird z.B. aus h123456 (Seriennummer) -> 02:00:00:12:34:56 (ID)
Oder aus f123456 -> 05:00:00:12:34:56
(fette Zahlen und Buchstaben unverändert)

Es könnte also sein, dass beim Aussenmodul immer ein "h" vor der Seriennummer steht und die ID mit 02:00:00 beginnt.
Oder der Regensensor mit "f" beginnt und die ID mit 05:00:00 beginnt.

Alles bisher nur Theorie. Bitte einmal bei dir überprüfen.

Ansonsten diesen Code in eine .tcl Datei speichern, Kopf anpassen (clientID, clientSecret, Username, password) auf die CCu kopieren und unter Windoes im winSCP Terminalfenster ausführen wie die netatmo.tcl Datei

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 "XXXXXXXXXXX"                     
    set clientSecret "XXXXXXXXX"
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username "XXXeMailXXX"
    set password "XXXXX"
    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 "getting deviceIDs mit getuser"
    set url "https://api.netatmo.net/api/getuser?access_token=$accesstoken"
    catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
    log debug "response is: $response"

    log debug "getting DeviceIDs mit devicelist"
    set url "https://api.netatmo.net/api/devicelist?access_token=$accesstoken"
    catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
    log debug "response is: $response"

Ich habe nur die original netatmo.tcl Datei umgebaut. Es mag also noch allerlei nicht notwendiges enthalten sein. Aber so tut sie zumindest was sie soll.
In der langen Antwort verstecken sich die DeviceIDs aller Module.

Ich hoffe es klappt.

Tobi

Markus_Pfalz
Beiträge: 6
Registriert: 28.09.2015, 15:01

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Markus_Pfalz » 09.10.2015, 11:50

Hallo Tobi,

hab ein bißchen gebraucht bis das Skript bei mir gelaufen ist. Lag aber daran, dass in meinem TMP Verzeichnis noch eine alte Version der netatmo.dat mit veralteten Credentials lag. Ergebnis: Bad Request. Hab ne Weile gebraucht bis ich den Fehler aus den Debug Infos heraus gelesen hatte. :oops:

Also, dein Skript macht genau das was du beschrieben hast. Ich habe 2 Netatmo Station (eine hier in DE und eine in Spanien). Mit jeweils einem Zusatzmodul (Innen) und einem Regensensor. Alle Device IDs werden korrekt angezeigt (habe die Werte mit denen im Webinterface verglichen). Deine Vermutung ist wohl korrekt. Man kann die Device IDs gemäß deiner Methode "berechnen".

EDIT: Ich habe vorhin den Modulmanager von Netatmo auf meinem Mac gestartet. Dort werden die Device IDs genauso wie im Webinterface angezeigt. Kann man also auch als Quelle nehmen.

Ich dann mit der Version deines Skriptes von Seite 4 weitermachen, ich will in meiner Homematic nur die Wetterdaten aus der Wetterstation in DE. Eventuell noch den Regenmesser.
Werde mich heute nachmittag weiter an deinem How-To entlang hangeln.

Vielen Dank nochmal für die Unterstützung.

Viele Grüße
Markus
Zuletzt geändert von Markus_Pfalz am 09.10.2015, 14:35, insgesamt 2-mal geändert.

Markus_Pfalz
Beiträge: 6
Registriert: 28.09.2015, 15:01

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Markus_Pfalz » 09.10.2015, 12:39

Ich nochmal. :wink:
Mit dem Skript (und den weiteren Anweisungen) aus dem How To auf Seite 4 hat nun alles prima geklappt. Die richtigen Werte werden zeitgesteuert geliefert. Im Endeffekt müsste man im How-To nur den Teil "NetAtmo API Zugriff" austauschen. Dann passt's.

Mache mich mal an die Integration weiterer Module.

Viele Grüße
Markus

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 09.10.2015, 16:11

Hallo.

Freut mich wenn es geklappt hat. Das HowTo auf Seite 4 ist aber nicht von mir. Ich habe nur am Regensensor gearbeitet. Letzte Version auf Seite 10 zu finden.

Grüsse

Tobi

dvb
Beiträge: 45
Registriert: 26.07.2015, 11:09
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von dvb » 13.10.2015, 18:04

Hallo zusammen
Hat es schon wer geschafft die Daten von Netatmo in Diagramme auf der CCU zu kriegen?
Grüsse dvb

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

Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Indigo » 13.10.2015, 18:43

Sollte kein Problem sein. Welche Daten willst du loggen?

Vielleicht nicht auf der CCU. Aber zumindest Highchart.


Gesendet von iPhone mit Tapatalk

dvb
Beiträge: 45
Registriert: 26.07.2015, 11:09
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von dvb » 14.10.2015, 18:23

Hallo Indigo
Besten Dank für die Rückmeldung.
Natürlich möchte ich möglichst alle Daten loggen können. Aber vorerst würde es reichen, wenn ich die Temp.-Daten loggen könnte.
Was meinst du mit "Highchart"? Ich kann alle Daten auch von Netatmo nehmen, möchte aber alles an einem Ort haben und natürlich am liebsten in der CCU.
Beste Grüsse dvb

Antworten

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