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 » 29.12.2018, 07:25

mnandarieder hat geschrieben:
28.12.2018, 20:14
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.
Hallo
Howto bekannt?
viewtopic.php?f=31&t=28188&hilit=netatmo+howto#p250708

Die 2 Geräte in der CCU angelegt? Alle Variablen angelegt? Zeig doch mal bitte die Geräte und die Variablen vielleicht ist ein Schreibfehler drin.
Durch den letzten Block im Script werden die Daten in der CCU geschrieben.

Code: Alles auswählen

   # 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
In diesen Beispiel fehlt das Regenmodul, was bei dir ja vorhanden ist.


Gruß
Bulli

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von mnandarieder » 30.12.2018, 15:07

Hallo Bulli,

vielen Dank für die schnelle Antwort :-)

Jetzt bin ich wieder schlauer, als ich das Script laufen lies kam am Schluss immer die Meldung :(file "/usr/local/addons/netatmo/netatmo.tcl" line 148)<br/>. Ich dachte mir nix dabei, merkte aber jetzt, dass das Script nicht bis zum Schluss durchlaufen ist. Mein Fehler war noch ein Eintrag für den Windsensor.
Hier nochmal für die USER die auch keine Werte in der CCu bekommen. Das Script darf zum Schluss keinen line Fehler anzeigen.
Bei mir schaut das funktionierende Script so aus:
root$ tclsh /usr/local/addons/netatmo/netatmo.tcl
info: found stored credentials
info: token is still valid
info: Outside temperature is 3.5
info: Outside humidity is 100
info: LogI is {"body":[{"beg_time":1546177809,"value":[[22.8,39,629,1028.1,43]]}],"status":"ok","time_exec":0.016011953353882,"time_server":1546178508}#=#=#
##O#- #
info: Inside temperature is 22.8
info: Inside humidity is 39
info: Inside CO2 level 629
info: Inside pressure is 1028.1
info: Inside noise level is 43
info: LogR is {"body":[{"beg_time":1546167600,"value":[[1.4]]}],"status":"ok","time_exec":0.026763916015625,"time_server":1546178504}#=#=#
##O#- #
info: Outside Regen1d is 1.4
info: LogR is {"body":[{"beg_time":1546177500,"value":[[0,0]]}],"status":"ok","time_exec":0.072461843490601,"time_server":1546178498}#=#=#
##O#- #
info: Outside rain2 is 0
info: Outside Regen30min is 0

ENDE

k4711
Beiträge: 11
Registriert: 28.05.2017, 12:06

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von k4711 » 01.01.2019, 23:24

Hallo.
Ich habe heute meine netatmo mit der super Beschreibung unter
viewtopic.php?f=31&t=28188&p=480921#p480921
eingebunden.

Zum zweiten Innenmodul bekomme ich jedoch nur den CO2-Wert angezeigt. Irgendwie ist mir das auch logisch, da ich gemäß der Anleitung auch nur dafür eine zusätzliche Systemvariable angelegt habe. Habe ich trotzdem etwas falsch gemacht bzw. falsch verstanden oder kann von dem Zusatzmodul keine Temperatur angezeigt werden?

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 » 02.01.2019, 09:02

k4711 hat geschrieben:
01.01.2019, 23:24
Zum zweiten Innenmodul bekomme ich jedoch nur den CO2-Wert angezeigt. Irgendwie ist mir das auch logisch, da ich gemäß der Anleitung auch nur dafür eine zusätzliche Systemvariable angelegt habe. Habe ich trotzdem etwas falsch gemacht bzw. falsch verstanden oder kann von dem Zusatzmodul keine Temperatur angezeigt werden?
Hallo
wieviele CUxD Geräte hast du angelegt? Das zusätzliche Innenmodul braucht natürlich auch 1 Gerät.
So wie hier natürlich nur 1 mal nicht 3.
viewtopic.php?f=31&t=12876&start=640#p474311

Gruß
Bulli

k4711
Beiträge: 11
Registriert: 28.05.2017, 12:06

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von k4711 » 02.01.2019, 12:11

Bulli hat geschrieben:
02.01.2019, 09:02
k4711 hat geschrieben:
01.01.2019, 23:24
Zum zweiten Innenmodul bekomme ich jedoch nur den CO2-Wert angezeigt. Irgendwie ist mir das auch logisch, da ich gemäß der Anleitung auch nur dafür eine zusätzliche Systemvariable angelegt habe. Habe ich trotzdem etwas falsch gemacht bzw. falsch verstanden oder kann von dem Zusatzmodul keine Temperatur angezeigt werden?
Hallo
wieviele CUxD Geräte hast du angelegt? Das zusätzliche Innenmodul braucht natürlich auch 1 Gerät.
So wie hier natürlich nur 1 mal nicht 3.
viewtopic.php?f=31&t=12876&start=640#p474311

Gruß
Bulli
Vielen Dank für die Hilfe. Hab den Fehler gefunden. Ich hatte zwar ein Gerät angelegt, den Gerätenamen im unteren Bereich des Scripts jedoch nicht angepasst. Jetzt geht alles :D :D :D :D :D :D

Cookie
Beiträge: 2
Registriert: 04.01.2019, 11:49

Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Cookie » 04.01.2019, 12:16

Servus,
bin neu hier und habe einige Fragen und benötige eure Hilfe. Vorhanden sind Basisstation, Außensensor und Regensensor. Habe den Netatmo nach dem HowDo exakt eingerichtet.

1. Cuxd Geräte zeigen werte an aber nicht alle. Siehe Anhang
Nach einigen Stunden gehen diese 2 Geräte in Störung ( Kommunikation gestört).
Benutzername und PW wurden ohne " " geschrieben.

2. Der Regenmesser soll als Steuerung der Rolladen benutzt werden aber dafür brauche ich ....Wenn es innerhalb 5 min eine gewisse Menge regnet.


Ich bin für jeden Rat dankbar



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                      
    set clientSecret 
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username 
    set password 
    #  the following are MAC addresses of your indoor station and the outside module and rain module
    set deviceid "70:ee:50:32:cc:cc"
    set moduleid "02:00:00:32:bd:8e"
    set rainid "05:00:00:04:98:62"
    

    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
Dateianhänge
Homematic3.gif
Homematic3.gif (15.07 KiB) 1726 mal betrachtet
Homematic2.gif
Homematic1.gif
Homematic.gif
Homematic.gif (17.08 KiB) 1742 mal betrachtet
Zuletzt geändert von Cookie am 04.01.2019, 13:24, insgesamt 1-mal geändert.

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 » 04.01.2019, 12:58

Hallo Cookie,

der CO2-Wert dürfte daran scheitern, dass die SV anders heißt als im Script. Die Variable Rain2 scheint mir doppelt verwendet zu weden. Ich habe allerdings kein Regenmodel, weshalb ich das gerade nur gelesen und keinen Vergleich habe.

LG,
Marcel

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 » 04.01.2019, 12:59

Cookie hat geschrieben:
04.01.2019, 12:16
Benutzername und PW wurden ohne " " geschrieben
PS: Ich habe diese Daten in Anführungszeichen im Script stehen. Da habe ich keine Probleme.

Cookie
Beiträge: 2
Registriert: 04.01.2019, 11:49

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Cookie » 04.01.2019, 13:26

blackbasket hat geschrieben:
04.01.2019, 12:58
Hallo Cookie,

der CO2-Wert dürfte daran scheitern, dass die SV anders heißt als im Script. Die Variable Rain2 scheint mir doppelt verwendet zu weden. Ich habe allerdings kein Regenmodel, weshalb ich das gerade nur gelesen und keinen Vergleich habe.

LG,
Marcel
Danke :-) war mein copy and paste Fehler

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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von rolfsg » 08.01.2019, 23:00

Hallo zusammen

Die Netatmo Einbindung hat bei mir nun über längere Zeit einwandfrei funktioniert. Nachdem Netatmo wohl in den letzten Tagen Probleme mit dem Server hatte habe ich dummerweise in den Netatmo Einstellungen die Freigabe für das CCU API gelöscht.

Der Script liefert nun einen abgelaufenen Token:

info: found stored credentials
notice: token has already expired

Wie kann ich den Token erneuern ? Oder kann der Skript den Token refreshen ?? Kann mir bitte jemand einen Tipp geben wie ich dies wieder hinbekomme ?

Vielen Dank für euere Hilfe
Rolf
CCU3
- Neo Server
- CuX
- CCU Historian

Antworten

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