Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Xel66 » 20.03.2023, 12:07

Bernd112 hat geschrieben:
20.03.2023, 09:11
... sieht jemand eine Chance, das Skript dieses Threads entsprechend zu ändern,...
Nein, sehe ich nicht. An welcher Stelle in meinem Satz von oben...
Xel66 hat geschrieben:
19.03.2023, 00:09
das sich nicht so einfach in einem Homematic-Script abbilden lässt
... habe ich mich missverständlich ausgedrückt?

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Fonzo » 20.03.2023, 12:16

Bernd112 hat geschrieben:
20.03.2023, 09:11
Auch wenn die Komplexität der Authentifikation durch OAuth2 höher ist, sieht jemand eine Chance, das Skript dieses Threads entsprechend zu ändern, um das wieder zum Laufen zu bringen?
Das hat weniger etwas mit einem Skript auf der CCU direkt zu tun, sondern mit der Art und Weise wie OAuth2 funktioniert. Dazu muss eine feste Redirect URL für OAuth2 vorhanden sein, an die der Token vom Hersteller übergeben wird. Eine CCU ist per se ohne das nutzten über einen Dienst eines Drittanbieters aber nicht aus dem Internet für einen anderen Anbieter (Hersteller) per fester URL erreichbar. Eine CCU3 funktioniert zunächst mal nur ausschließlich lokal, ohne das diese aus dem Internet direkt für andere Hersteller erreichbar wäre. Wenn Du eine CCU3 über einen vom Hersteller eQ-3 vorinstallierten Dienst auf der CCU3 auch sicher aus dem Internet erreichbar machst bzw. für andere Hersteller erreichbar machst, dann ist es aber auch unnötig etwas mit einem Skript zu versuchen zu lösen, wenn durch die Anbindung durch den Drittanbieter einer CCU3 in das Internet bzw. an Cloud APIs von anderen Herstellern so oder so auch gleichzeitig eine Anbindung und Authentifizierung über OAuth2 beim Hersteller wie Legrand für Netatmo erfolgt, wie z.B. mediola Cloud Services und einem aktivierten NEO Server auf der CCU3.

Ohne eine feste Anbindung an das Internet bzw. die Hersteller Cloud API funktioniert OAuth2 mit dem Hersteller Legrand einfach nicht mehr, da eine Authentifizierung direkt mit Nutzernamen und Passwort ohne OAuth2 aus Sicherheitsgründen nicht mehr zulässig ist, entweder nutzt Du also einen Dienst auf der CCU3 selber von einem Drittanbieter, der eine Anbindung an Netatmo zur Verfügung stellt, oder aber Du brauchst zumindest externe Hausautomationssysteme und damit verbunden auch externe Hardware, die eine Authentifizierung über OAuth2 beim Hersteller Legrand vornehmen und steuerst dann von dem externen Hausautomationssystem die CCU3 an.

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Black » 20.03.2023, 12:31

Auf der ccu alleine nicht mehr. Es braucht aber auch nicht die wie immer hier beworbene kostenpflichtige zusatzsoftware.

Einer der forenkollegen hier hatte mit einer selbstgehosteten Seite und etwas php den Prozess konform nachgebildet. Musst du mal suchen.

Dann gibt's noch die funktionierenden Nachbildungen von einigen middlewares.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

HEINEN_Eric
Beiträge: 74
Registriert: 06.09.2020, 11:47
System: CCU
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von HEINEN_Eric » 20.03.2023, 13:43

Hier die dazu passende Quelle: viewtopic.php?f=31&t=28188&p=746203#p742908
Funzt eigentlich fehlerfrei.
Einziger Nachteil entsteht bei den (doch erstaunlich häufigen) Ausfällen der NetAtmo-Server. Werte die während eines Server-Ausfalls produziert werden, und somit nicht "live" abgefragt werden können, fehlen später einfach. Aber die Methode an sich funzt einwandfrei.

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Fonzo » 20.03.2023, 13:48

HEINEN_Eric hat geschrieben:
20.03.2023, 13:43
Hier die dazu passende Quelle: viewtopic.php?f=31&t=28188&p=746203#p742908
Das hatte Bernd112 ja bereits gelesen und zur Kenntnis genommen und mit
Bernd112 hat geschrieben:
20.03.2023, 09:11
Danke für den Hinweis, das scheint mir aber keine (für mich) praktikable Lösung zu sein.
kommentiert.

blueb6
Beiträge: 118
Registriert: 08.01.2015, 20:22
Wohnort: Neufeld/Leitha
Danksagung erhalten: 3 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blueb6 » 22.07.2023, 09:41

Guten Morgen

Ich bin verzweifelt, ich habe die Einbindung jetzt schon seit jahren laufen, vor ein paar jahren hat dann die Einbindung mit dem Wind nicht mehr funktioniert,... OK ich war auch nicht sonderlich dahinter das zu beheben.

Aber seit 2 Tage geht garnichts mehr. ich habe das letzte update von der Homematic gemacht und auf einmal geht garnichts mehr, es werden keine daten mehr in die Variablen oder Geräte geschrieben.

Auch die CuxD Geräte sagen dass sie nicht verbunden sind, diese hab ich dann neu angelegt, hat aber auch nichts gebracht

nächster versuch, Zentrale auf die Vorhergehende FW Version zurückzusetzen und ein altes Backup einspielen, Fehlanzeige, geht trotzdem nicht.

hat da jemand eine Idee?

Danke lg Tom

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:22:**:**"
        set moduleid "02:00:00:22:**:**"
        set szid "03:00:00:04:**:**"
        set buid "03:00:00:04:**:**"
	set gaid "03:00:00:07:**:**"
        set rainid "05:00:00:03:**:**"
        set windid "06:00:00:01:**:**"

        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 zusatzmodule..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$szid&scale=max&type=Temperature,Humidity,CO2&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 ztemp zhum zco2

    log info "LogI is $response"             
    log info "Inside temperature is $ztemp"
    log info "Inside humidity is $zhum"
    log info "Inside CO2 level $zco2"

 log debug "polling zusatzmodule1..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$buid&scale=max&type=Temperature,Humidity,CO2&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 btemp bhum bco2

    log info "LogI is $response"             
    log info "Inside temperature is $btemp"
    log info "Inside humidity is $bhum"
    log info "Inside CO2 level $bco2"

log debug "polling zusatzmodule2..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$gaid&scale=max&type=Temperature,Humidity,CO2&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 gtemp ghum gco2

    log info "LogI is $response"             
    log info "Inside temperature is $gtemp"
    log info "Inside humidity is $ghum"
    log info "Inside CO2 level $gco2"



     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"


        #log debug "polling wind module..."
        #set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$windid&scale=max&type=WindStrength,GustAngle,GustStrength&date_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 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 OTemp = dom.GetObject('Temp_aussen');"
        append rega_cmd "var OHumi = dom.GetObject('Luftfeuchtigkeit _aussen');"

        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 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 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());"

    append rega_cmd "var ZTemp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
    append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');"
    append rega_cmd "var ZCO2 = dom.GetObject('CO2_SZ');"
    append rega_cmd "ZTemp.State('$ztemp');"
    append rega_cmd "ZHumi.State('$zhum');"
    append rega_cmd "ZCO2.State('$zco2');"
    append rega_cmd "var BTemp = dom.GetObject('CUxD.CUX9002004:1.SET_TEMPERATURE');"
    append rega_cmd "var BHumi = dom.GetObject('CUxD.CUX9002004:1.SET_HUMIDITY');"
    append rega_cmd "var BCO2 = dom.GetObject('CO2_BU');"
    append rega_cmd "BTemp.State('$btemp');"
    append rega_cmd "BHumi.State('$bhum');"
    append rega_cmd "BCO2.State('$bco2');"
    append rega_cmd "var GTemp = dom.GetObject('CUxD.CUX9002005:1.SET_TEMPERATURE');"
    append rega_cmd "var GHumi = dom.GetObject('CUxD.CUX9002005:1.SET_HUMIDITY');"
    append rega_cmd "var GCO2 = dom.GetObject('CO2_GA');"
    append rega_cmd "GTemp.State('$gtemp');"
    append rega_cmd "GHumi.State('$ghum');"
    append rega_cmd "GCO2.State('$gco2');"




        rega_script $rega_cmd

LG Tom
________________________________________________________
2 mal CCU3 (Raspberrymatic) 1 mal CCU2, 10 Lan Gateway, und ca. 180 Komponenten

HAJHomematic
Beiträge: 8
Registriert: 27.03.2019, 08:30

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von HAJHomematic » 24.07.2023, 16:29

hi, hast du das problem schon behoben.
Es scheint als hätte Netatmo die URLs oder auch die auth geändert... hatte da wohl mal eine mail aber finde es nicht mehr

Lösung ?



blueb6 hat geschrieben:
22.07.2023, 09:41
Guten Morgen

Ich bin verzweifelt, ich habe die Einbindung jetzt schon seit jahren laufen, vor ein paar jahren hat dann die Einbindung mit dem Wind nicht mehr funktioniert,... OK ich war auch nicht sonderlich dahinter das zu beheben.

Aber seit 2 Tage geht garnichts mehr. ich habe das letzte update von der Homematic gemacht und auf einmal geht garnichts mehr, es werden keine daten mehr in die Variablen oder Geräte geschrieben.

Auch die CuxD Geräte sagen dass sie nicht verbunden sind, diese hab ich dann neu angelegt, hat aber auch nichts gebracht

nächster versuch, Zentrale auf die Vorhergehende FW Version zurückzusetzen und ein altes Backup einspielen, Fehlanzeige, geht trotzdem nicht.

hat da jemand eine Idee?

Danke lg Tom

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:22:**:**"
        set moduleid "02:00:00:22:**:**"
        set szid "03:00:00:04:**:**"
        set buid "03:00:00:04:**:**"
	set gaid "03:00:00:07:**:**"
        set rainid "05:00:00:03:**:**"
        set windid "06:00:00:01:**:**"

        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 zusatzmodule..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$szid&scale=max&type=Temperature,Humidity,CO2&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 ztemp zhum zco2

    log info "LogI is $response"             
    log info "Inside temperature is $ztemp"
    log info "Inside humidity is $zhum"
    log info "Inside CO2 level $zco2"

 log debug "polling zusatzmodule1..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$buid&scale=max&type=Temperature,Humidity,CO2&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 btemp bhum bco2

    log info "LogI is $response"             
    log info "Inside temperature is $btemp"
    log info "Inside humidity is $bhum"
    log info "Inside CO2 level $bco2"

log debug "polling zusatzmodule2..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$gaid&scale=max&type=Temperature,Humidity,CO2&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 gtemp ghum gco2

    log info "LogI is $response"             
    log info "Inside temperature is $gtemp"
    log info "Inside humidity is $ghum"
    log info "Inside CO2 level $gco2"



     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"


        #log debug "polling wind module..."
        #set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$windid&scale=max&type=WindStrength,GustAngle,GustStrength&date_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 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 OTemp = dom.GetObject('Temp_aussen');"
        append rega_cmd "var OHumi = dom.GetObject('Luftfeuchtigkeit _aussen');"

        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 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 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());"

    append rega_cmd "var ZTemp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
    append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');"
    append rega_cmd "var ZCO2 = dom.GetObject('CO2_SZ');"
    append rega_cmd "ZTemp.State('$ztemp');"
    append rega_cmd "ZHumi.State('$zhum');"
    append rega_cmd "ZCO2.State('$zco2');"
    append rega_cmd "var BTemp = dom.GetObject('CUxD.CUX9002004:1.SET_TEMPERATURE');"
    append rega_cmd "var BHumi = dom.GetObject('CUxD.CUX9002004:1.SET_HUMIDITY');"
    append rega_cmd "var BCO2 = dom.GetObject('CO2_BU');"
    append rega_cmd "BTemp.State('$btemp');"
    append rega_cmd "BHumi.State('$bhum');"
    append rega_cmd "BCO2.State('$bco2');"
    append rega_cmd "var GTemp = dom.GetObject('CUxD.CUX9002005:1.SET_TEMPERATURE');"
    append rega_cmd "var GHumi = dom.GetObject('CUxD.CUX9002005:1.SET_HUMIDITY');"
    append rega_cmd "var GCO2 = dom.GetObject('CO2_GA');"
    append rega_cmd "GTemp.State('$gtemp');"
    append rega_cmd "GHumi.State('$ghum');"
    append rega_cmd "GCO2.State('$gco2');"




        rega_script $rega_cmd


blueb6
Beiträge: 118
Registriert: 08.01.2015, 20:22
Wohnort: Neufeld/Leitha
Danksagung erhalten: 3 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von blueb6 » 24.07.2023, 17:16

Hm lösung hab ich noch keine, ich kann mich dunkel an eine Email erinnern, finde sie aber auch nicht

Googl hat mir etwas gehoplfen, da gibt es etwas neues mit accesstoken und refreshtoken
die kann man auch in script eintragen, aber das bringt auch nix

somit hab ich leider noch immer keine Lösung

vielleicht kann mir ja doch noch jemand helfen,

lg Tom
HAJHomematic hat geschrieben:
24.07.2023, 16:29
hi, hast du das problem schon behoben.
Es scheint als hätte Netatmo die URLs oder auch die auth geändert... hatte da wohl mal eine mail aber finde es nicht mehr

Lösung ?



blueb6 hat geschrieben:
22.07.2023, 09:41
Guten Morgen

Ich bin verzweifelt, ich habe die Einbindung jetzt schon seit jahren laufen, vor ein paar jahren hat dann die Einbindung mit dem Wind nicht mehr funktioniert,... OK ich war auch nicht sonderlich dahinter das zu beheben.

Aber seit 2 Tage geht garnichts mehr. ich habe das letzte update von der Homematic gemacht und auf einmal geht garnichts mehr, es werden keine daten mehr in die Variablen oder Geräte geschrieben.

Auch die CuxD Geräte sagen dass sie nicht verbunden sind, diese hab ich dann neu angelegt, hat aber auch nichts gebracht

nächster versuch, Zentrale auf die Vorhergehende FW Version zurückzusetzen und ein altes Backup einspielen, Fehlanzeige, geht trotzdem nicht.

hat da jemand eine Idee?

Danke lg Tom

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:22:**:**"
        set moduleid "02:00:00:22:**:**"
        set szid "03:00:00:04:**:**"
        set buid "03:00:00:04:**:**"
	set gaid "03:00:00:07:**:**"
        set rainid "05:00:00:03:**:**"
        set windid "06:00:00:01:**:**"

        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 zusatzmodule..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$szid&scale=max&type=Temperature,Humidity,CO2&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 ztemp zhum zco2

    log info "LogI is $response"             
    log info "Inside temperature is $ztemp"
    log info "Inside humidity is $zhum"
    log info "Inside CO2 level $zco2"

 log debug "polling zusatzmodule1..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$buid&scale=max&type=Temperature,Humidity,CO2&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 btemp bhum bco2

    log info "LogI is $response"             
    log info "Inside temperature is $btemp"
    log info "Inside humidity is $bhum"
    log info "Inside CO2 level $bco2"

log debug "polling zusatzmodule2..."
    set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$gaid&scale=max&type=Temperature,Humidity,CO2&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 gtemp ghum gco2

    log info "LogI is $response"             
    log info "Inside temperature is $gtemp"
    log info "Inside humidity is $ghum"
    log info "Inside CO2 level $gco2"



     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"


        #log debug "polling wind module..."
        #set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$windid&scale=max&type=WindStrength,GustAngle,GustStrength&date_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 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 OTemp = dom.GetObject('Temp_aussen');"
        append rega_cmd "var OHumi = dom.GetObject('Luftfeuchtigkeit _aussen');"

        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 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 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());"

    append rega_cmd "var ZTemp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
    append rega_cmd "var ZHumi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');"
    append rega_cmd "var ZCO2 = dom.GetObject('CO2_SZ');"
    append rega_cmd "ZTemp.State('$ztemp');"
    append rega_cmd "ZHumi.State('$zhum');"
    append rega_cmd "ZCO2.State('$zco2');"
    append rega_cmd "var BTemp = dom.GetObject('CUxD.CUX9002004:1.SET_TEMPERATURE');"
    append rega_cmd "var BHumi = dom.GetObject('CUxD.CUX9002004:1.SET_HUMIDITY');"
    append rega_cmd "var BCO2 = dom.GetObject('CO2_BU');"
    append rega_cmd "BTemp.State('$btemp');"
    append rega_cmd "BHumi.State('$bhum');"
    append rega_cmd "BCO2.State('$bco2');"
    append rega_cmd "var GTemp = dom.GetObject('CUxD.CUX9002005:1.SET_TEMPERATURE');"
    append rega_cmd "var GHumi = dom.GetObject('CUxD.CUX9002005:1.SET_HUMIDITY');"
    append rega_cmd "var GCO2 = dom.GetObject('CO2_GA');"
    append rega_cmd "GTemp.State('$gtemp');"
    append rega_cmd "GHumi.State('$ghum');"
    append rega_cmd "GCO2.State('$gco2');"




        rega_script $rega_cmd

LG Tom
________________________________________________________
2 mal CCU3 (Raspberrymatic) 1 mal CCU2, 10 Lan Gateway, und ca. 180 Komponenten

HEINEN_Eric
Beiträge: 74
Registriert: 06.09.2020, 11:47
System: CCU
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von HEINEN_Eric » 24.07.2023, 17:18


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

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von rolfsg » 30.07.2023, 14:36

Hallo zusammen,

Nachdem ich schon seit einiger Zeit Mails von Netatmo bekommen habe, dass die API angepasst wird war es gestern um 14.50 soweit. Der Skript konnte das letzet Mal Daten abholen und seither ist Funkstille. Beim manuellen Ausführen des Skriptes meldet dieses nun "no credentials found". Hier scheint wohl eine Überarbeitung des API Zugriffs im How-to notwendig zu werden. Wäre echt cool wenn einer der Programmierprofis sich hier einbringen könnte.
CCU3
- Neo Server
- CuX
- CCU Historian

Antworten

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