Netatmo Wetterstation (incl. CO2 Messung) einbinden

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

Moderator: Co-Administratoren

EckartS
Beiträge: 243
Registriert: 13.11.2012, 23:11
Wohnort: Nürnberg
Danksagung erhalten: 2 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von EckartS » 23.08.2020, 10:48

Hallo,

weil es hier doch viele Probleme und Fehler beim Editieren des tcl-Script gab, habe ich eine modifizierte Fassung erstellt, bei der alle Nutzer-spezifischen Eingaben im Kopfteil des Scripts gemacht werden und auch nicht mehr mit Löschungen oder Auskommentierungen gearbeitet werden muss.

Bei mir geht alles (Innen-, Außenstation, Zusatzmodul). Aber: Weder Regen- noch Windmodul habe ich. Das müsste noch jemand testen, der darüber verfügt.

Code: Alles auswählen

    #!/bin/tclsh

    load tclrega.so

    #---------------------------------------------------------------------------------------------------------------#
    #                                                   CONFIG                                                      #
    # Vgl. https://homematic-forum.de/forum/viewtopic.php?f=31&t=28188&hilit=netatmo+howto&sid=bb96e69f67b87a9f68acd885800ffcb6
    # Aufruf tclsh /usr/local/addons/netatmo/netatmo.tcl
    #---------------------------------------------------------------------------------------------------------------#
    #  to obtain your own client ID and API key please register a new app here: http://dev.netatmo.com/dev/listapps
    set clientId "xxxxxxxxxxxxxxxxxxxxxxxx"                     
    set clientSecret "xxxxxxxxxxxxxxxxxxxxxxxx"
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username "xxxxxxxxxxxxxxx@xxxxxxxxx"
    set password "xxxxxxxxxxxxxxxxxxxxxxxx"
    
    #  the following are MAC addresses of your indoor station and the outside module and rain module
    set deviceid "70:EE:50:XX:XX:XX"
    set moduleid "02:00:00:XX:XX:XX"
    # insert here your HM-system vars for the indoor station 
    set luftdruck "Luftdruck"
    set CO2 "CO2"
    set sonometer "Sonometer"
    set SyncTime "SyncTime"
     # insert here the s/n of the CUxD devices indoor / outside module
    set CUxD_indoor "CUxD.CUX9002001"
    set CUxD_outdoor "CUxD.CUX9002002" 
	
    # Zusatzmodul innen vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen (in " ") und Seriennummer des CUxD-Geräts gegebenenfalls anpassen	
    set zusatzid "03:00:00:XX:XX:XX"
    set CO2_SZ "CO2_SZ"
    set CUxD_zusatzmodul "CUxD.CUX9002003"

    # Regensensor vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen gegebenenfalls anpassen	
    set rainid "05:00:00:XX:XX:XX"   
    set Regenmenge_30min "Regenmenge_30min"
    set Regenmenge_1d "Regenmenge_1d"
    set Regen_aktuell "Regen_aktuell"

    # Windsensor vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen gegebenenfalls anpassen	
    set windid "06:00:00:XX:XX:XX"	
    set Windrichtung "Windrichtung"
    set Windstaerke "Windstaerke"
    set Gustangle "Gustangle"
    set Guststaerke "Guststaerke"

    # 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug
    set loglevel 6


    #---------------------------------------------------------------------------------------------------------------#
    # AB HIER NICHTS MEHR AENDERN!
	
    set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
    set cfgfile "/tmp/netatmo.dat"
    set logtag "netatmo.tcl"
    set logfacility "local1"
 
    #---------------------------------------------------------------------------------------------------------------#
    #                                              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"

    if {[string match "*XX*" $zusatzid] == 0} { 
        log debug "polling zusatzmodule..."
        set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$zusatzid&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"
	}
 
    if {[string match "*XX*" $rainid] == 0} {
        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"
        }
	
  if {[string match "*XX*" $windid] == 0} {
        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=WindAngle,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 windangle windstrength gustangle guststrength
        log info "WindAngle is $windangle"
        log info "Windstrength is $windstrength"
        log info "GustAngle is $gustangle"
        log info "Guststrength is $guststrength"
        } 
    #
    # set ReGaHss variables
    #
    set rega_cmd ""
    append rega_cmd "var ITemp = dom.GetObject('$CUxD_indoor:1.SET_TEMPERATURE');"
    append rega_cmd "var IHumi = dom.GetObject('$CUxD_indoor:1.SET_HUMIDITY');"
    append rega_cmd "var OTemp = dom.GetObject('$CUxD_outdoor:1.SET_TEMPERATURE');"
    append rega_cmd "var OHumi = dom.GetObject('$CUxD_outdoor: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');"
    if {[string match "*XX*" $zusatzid] == 0} {
	append rega_cmd "var ZTemp = dom.GetObject('$CUxD_zusatzmodul:1.SET_TEMPERATURE');"
        append rega_cmd "var ZHumi = dom.GetObject('$CUxD_zusatzmodul: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');"
        }
    if {[string match "*XX*" $rainid] == 0} {
        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 "Rain1.State('$rain30min');"
        append rega_cmd "Rain2.State('$rain1d');"
        append rega_cmd "Rain3.State('$rain2');"
	}
    if {[string match "*XX*" $windid] == 0} {
        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 "windA.State('$windangle');"
        append rega_cmd "windS.State('$windstrength');"
        append rega_cmd "gustA.State('$gustangle');"
        append rega_cmd "gustS.State('$guststrength');"
	}
	
    append rega_cmd "var sdatetime = system.Date('%d.%m.%Y %H:%M:%S');"
    append rega_cmd "var netatmosynctime = dom.GetObject('$SyncTime');"
    append rega_cmd "netatmosynctime.Variable(sdatetime.ToString());"
    rega_script $rega_cmd
    log info "script finished"
Grüße, Eckart
711 Kanäle in 113 Geräten und 134 CUxD-Kanäle in 24 CUxD-Geräten

ibot
Beiträge: 46
Registriert: 17.01.2020, 09:04
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 3 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von ibot » 03.10.2020, 22:50

Hallo,

ich muss mich leider nach stundenlangen versuchen in die Reihe derjenigen einreihen, die um Hilfe bitten :roll:


Bei meine Logs und config hab ich die persönlichen Daten mit "????????????????????????" ausgegraut.

Meine netatmo.tcl sieht wie folgt aus:

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 "5f78????????????????????????"                     
    set clientSecret "sn2l????????????????????????"
    #  the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
    set username "????????????????????????.com"
    set password "????????????????????????"
    #  the following are MAC addresses of your indoor station and the outside module and rain module
    set deviceid "70:ee:????????????????????????"
    set moduleid "02:00:????????????????????????"
    set rainid "05:00:????????????????????????"
    set windid "06:00:????????????????????????"

    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"

    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=WindAngle,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 windangle windstrength gustangle guststrength
   log info "WindAngle is $windangle"
   log info "Windstrength is $windstrength"
   log info "GustAngle is $gustangle"
   log info "Guststrength is $guststrength"


    #
    # set ReGaHss variables
    #
    set rega_cmd ""
    append rega_cmd "var ITemp = dom.GetObject('CUxD.CUX9002001:1.SET_TEMPERATURE');"
    append rega_cmd "var IHumi = dom.GetObject('CUxD.CUX9002001:1.SET_HUMIDITY');"
    append rega_cmd "var OTemp = dom.GetObject('CUxD.CUX9002002:1.SET_TEMPERATURE');"
    append rega_cmd "var OHumi = dom.GetObject('CUxD.CUX9002002:1.SET_HUMIDITY');"
    append rega_cmd "var Rain1 = dom.GetObject('Regenmenge_30min');"
    append rega_cmd "var Rain2 = dom.GetObject('Regenmenge_1d');"
    append rega_cmd "var Rain3 = dom.GetObject('Regen_aktuell');"
    append rega_cmd "var IPress = dom.GetObject('Luftdruck');"
    append rega_cmd "var ICO2 = dom.GetObject('CO2');"
    append rega_cmd "var INoise = dom.GetObject('Sonometer');"
    append rega_cmd "var windA = dom.GetObject('Windrichtung');"
    append rega_cmd "var windS = dom.GetObject('Windstaerke');"
    append rega_cmd "var gustA = dom.GetObject('Gustangle');"
    append rega_cmd "var gustS = dom.GetObject('Guststaerke');"
    append rega_cmd "OTemp.State('$otemp');"
    append rega_cmd "OHumi.State('$ohum');"
    append rega_cmd "ITemp.State('$itemp');"
    append rega_cmd "IHumi.State('$ihum');"
    append rega_cmd "IPress.State('$ipressure');"
    append rega_cmd "ICO2.State('$ico2');"
    append rega_cmd "INoise.State('$inoise');"
    append rega_cmd "Rain1.State('$rain30min');"
    append rega_cmd "Rain2.State('$rain1d');"
    append rega_cmd "Rain3.State('$rain2');"
    append rega_cmd "windA.State('$windangle');"
    append rega_cmd "windS.State('$windstrength');"
    append rega_cmd "gustA.State('$gustangle');"
    append rega_cmd "gustS.State('$guststrength');"
    append rega_cmd "var sdatetime = system.Date('%d.%m.%Y %H:%M:%S');"
    append rega_cmd "var netatmosynctime = dom.GetObject('SyncTime');"
    append rega_cmd "netatmosynctime.Variable(sdatetime.ToString());"
    rega_script $rega_cmd
Ich bekomme in der Console übers Terminal (MAC) alle Daten wie mir scheint. Wenn ich debugge sieht das Log wie folgt aus:

Code: Alles auswählen

debug: script has started
info: found stored credentials
debug: loading stored credentials from /tmp/netatmo.dat
debug: file data is: 56869e????????????????????????
5686????????????????????????|50a0bb????????????????????????
16????????????????????????

debug: current time is 2020-10-03T22:33:30, token is valid until 2020-10-04T00:46:55
info: token is still valid
debug: polling outdoor module...
debug: querying https://api.netatmo.net/api/getmeasure?access_token=5686????????????????????????|19106f426906e????????????????????????&device_id=70:ee:50????????????????????????&module_id=02:00:00????????????????????????&scale=max&type=Temperature,Humidity&date_end=last
debug: response is: {"body":[{"beg_time":1601757019,"value":[[11.4,86]]}],"status":"ok","time_exec":0.11363410949707031,"time_server":1601757210}#=#=#                                                                         
##O#- #                                                                       
info: Outside temperature is 11.4
info: Outside humidity is 86
debug: polling main module...
debug: querying https://api.netatmo.net/api/getmeasure?access_token=56869????????????????????????|19106f42690????????????????????????&device_id=70:ee:50????????????????????????&scale=max&type=Temperature,Humidity,CO2,Pressure,Noise&date_end=last
debug: response is: {"body":[{"beg_time":1601757033,"value":[[23.4,55,940,995.7,34]]}],"status":"ok","time_exec":0.05615687370300293,"time_server":1601757210}#=#=#                                                                         
##O#- #                                                                       
info: LogI is {"body":[{"beg_time":1601757033,"value":[[23.4,55,940,995.7,34]]}],"status":"ok","time_exec":0.05615687370300293,"time_server":1601757210}#=#=#                                                                         
##O#- #                                                                       
info: Inside temperature is 23.4
info: Inside humidity is 55
info: Inside CO2 level 940
info: Inside pressure is 995.7
info: Inside noise level is 34
debug: polling regensensor module...1d
debug: querying https://api.netatmo.net/api/getmeasure?access_token=56869e????????????????????????|19106f????????????????????????&device_id=70:ee:50????????????????????????&module_id=05:00:????????????????????????&scale=1day&type=sum_rain&date_end=last
debug: response is: {"body":[{"beg_time":1601719200,"value":[[1.8]]}],"status":"ok","time_exec":0.06636881828308105,"time_server":1601757210}#=#=#                                                                         
##O#- #                                                                       
info: LogR is {"body":[{"beg_time":1601719200,"value":[[1.8]]}],"status":"ok","time_exec":0.06636881828308105,"time_server":1601757210}#=#=#                                                                         
##O#- #                                                                       
info: Outside Regen1d is 1.8
debug: polling regensensor module...30min
debug: querying https://api.netatmo.net/api/getmeasure?access_token=56869e????????????????????????|19106f????????????????????????&device_id=70:ee:50????????????????????????&module_id=05:00:????????????????????????&scale=30min&type=Rain,sum_rain&date_end=last
debug: response is: {"body":[{"beg_time":1601757900,"value":[[0,0]]}],"status":"ok","time_exec":0.12359404563903809,"time_server":1601757211}#=#=#                                                                         
##O#- #                                                                       
info: LogR is {"body":[{"beg_time":1601757900,"value":[[0,0]]}],"status":"ok","time_exec":0.12359404563903809,"time_server":1601757211}#=#=#                                                                         
##O#- #                                                                       
info: Outside rain2 is 0
info: Outside Regen30min is 0
debug: polling wind module...
debug: quering https://api.netatmo.net/api/getmeasure?access_token=56869e????????????????????????|19106f????????????????????????&device_id=70:ee:50????????????????????????&module_id=06:00:????????????????????????&scale=max&type=WindAngle,WindStrength,GustAngle,GustStrength&date_end=last
debug: respnose is {"body":[{"beg_time":1601757032,"value":[[205,4,221,6]]}],"status":"ok","time_exec":0.10602807998657227,"time_server":1601757211}#=#=#                                                                         
##O#- #                                                                       
info: WindAngle is 205
info: Windstrength is 4
info: GustAngle is 221
info: Guststrength is 6
Es kommen also Werte an und werden per Regex zugeordnet. Passt also meiner Meinung nach soweit.
Diese Informationen seh ich auch im message.log mit folgender Info vor jeder Zeile

Code: Alles auswählen

Oct  3 22:20:03 ccu3-webui local1.debug netatmo.tcl: 

Nach der bekannten Anleitung habe ich im CuX die drei Geräte angelegt (netatmo innen, außen und den Taster):
Bildschirmfoto 2020-10-03 um 22.39.25.png

Auch das Programm ist dementsprechend eingestellt und holt alle 10 minuten die Daten:
Bildschirmfoto 2020-10-03 um 22.41.54.png

Das Programm wird auch gestartet (Zeitstempel letzte Ausführung wird dargestellt), aber es wandern keine werte in die Variablen, obwohl diese eingerichtet sind:
Bildschirmfoto 2020-10-03 um 22.43.50.png

Sprich es ist komplett leer:
Bildschirmfoto 2020-10-03 um 22.44.58.png

Leider weiß ich nun nicht mehr weiter und bitte euch um Hilfe und Tipps, wie ich dem Fehler lösen kann.
Ich möchte gerne noch meine zwei weiteren Zusatzmodule einbinden, aber das möchte ich erst tun, wenn die Basis funktioniert :lol:

Perspektivisch hätte ich vor die Windgeschwindigkeit für die Steuerung der Raffstores zu verwenden und den CO2 Gehalt für die Steuerung der Lüfungsanlage, aber dazu brauch ich erst mal die Werte.

Danke im Voraus

Guruistwasanderes
Beiträge: 6
Registriert: 11.06.2020, 20:15
System: CCU und Access Point
Hat sich bedankt: 1 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Guruistwasanderes » 04.10.2020, 12:57

*gelöscht* sinnlose Frage, manchmal hilft einfach Schlafen....
Zuletzt geändert von Guruistwasanderes am 08.10.2020, 21:16, insgesamt 1-mal geändert.

ibot
Beiträge: 46
Registriert: 17.01.2020, 09:04
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 3 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von ibot » 05.10.2020, 13:09

ibot hat geschrieben:
03.10.2020, 22:50
Leider weiß ich nun nicht mehr weiter und bitte euch um Hilfe und Tipps, wie ich dem Fehler lösen kann.
Ich möchte gerne noch meine zwei weiteren Zusatzmodule einbinden, aber das möchte ich erst tun, wenn die Basis funktioniert :lol:

Perspektivisch hätte ich vor die Windgeschwindigkeit für die Steuerung der Raffstores zu verwenden und den CO2 Gehalt für die Steuerung der Lüfungsanlage, aber dazu brauch ich erst mal die Werte.

Meine Anfrage hat sich erledigt. Ich habe das neue Script von @EckardS verwendet und angepasst. Das hat dann auch mit meinen drei Zusatzmodulen geklappt und läuft nun rund.

Eckstone
Beiträge: 20
Registriert: 17.08.2014, 09:35
Wohnort: Bernau
Danksagung erhalten: 2 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von Eckstone » 13.10.2020, 14:28

Hi,
habe ein Script von @EckardS für drei Zusatzmodule bekommen. Habe es noch etwas überarbeitet.

Code: Alles auswählen

!/bin/tclsh

load tclrega.so

#---------------------------------------------------------------------------------------------------------------#
# CONFIG #
# Vgl. viewtopic.php?f=31&t=28188&hilit=netatm ... 85800ffcb6
# Aufruf tclsh /usr/local/addons/netatmo/netatmo.tcl
#---------------------------------------------------------------------------------------------------------------#
# 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:53:##:##"
set moduleid "02:00:00:52:##:##"
# insert here your HM-system vars for the indoor station
set luftdruck "Luftdruck"
set CO2 "CO2"
set sonometer "Sonometer"
set SyncTime "SyncTime"
# insert here the s/n of the CUxD devices indoor / outside module
set CUxD_indoor "CUxD.CUX9002001"
set CUxD_outdoor "CUxD.CUX9002002"

# Zusatzmodul innen vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen (in " ") und Seriennummer des CUxD-Geräts gegebenenfalls anpassen
set zusatzid "03:00:00:08:##:##"
set CO2_SZ "CO2_SZ"
set CUxD_zusatzmodul "CUxD.CUX9002003"

# Zweites Zusatzmodul innen vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen (in " ") und Seriennummer des CUxD-Geräts gegebenenfalls anpassen
set zusatzid2 "03:00:00:08:##:##e"
set CO2_SZ2 "CO2_SZ2"
set CUxD_zusatzmodul2 "CUxD.CUX9002004"

# Drittes Zusatzmodul innen vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen (in " ") und Seriennummer des CUxD-Geräts gegebenenfalls anpassen
set zusatzid3 "03:00:00:08:##:##"
set CO2_SZ3 "CO2_SZ3"
set CUxD_zusatzmodul3 "CUxD.CUX9002005"

# Regensensor vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen gegebenenfalls anpassen
set rainid "05:00:00:06:##:##"
set Regenmenge_30min "Regenmenge_30min"
set Regenmenge_1d "Regenmenge_1d"
set Regen_aktuell "Regen_aktuell"

# Windsensor vorhanden? Dann ID eintragen, Namen der HM-Systemvariablen gegebenenfalls anpassen
set windid "06:00:00:04:##:##"
set Windrichtung "Windrichtung"
set Windstaerke "Windstaerke"
set Gustangle "Gustangle"
set Guststaerke "Guststaerke"

# 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug
set loglevel 6


#---------------------------------------------------------------------------------------------------------------#
# AB HIER NICHTS MEHR AENDERN!

set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
set cfgfile "/tmp/netatmo.dat"
set logtag "netatmo.tcl"
set logfacility "local1"

#---------------------------------------------------------------------------------------------------------------#
# GLOBAL VARIABLES #
#---------------------------------------------------------------------------------------------------------------#
set accesstoken ""
set refreshtoken ""
set tokenexpires 0
#---------------------------------------------------------------------------------------------------------------#


set loglevels {panic alert crit err warn notice info debug}

proc log {lvl msg} {
global logtag
global logfacility
global loglevel
global loglevels

set lvlnum [lsearch $loglevels $lvl]

if {$lvlnum <= $loglevel} {
if {$lvlnum <= 3} {
catch {exec logger -s -t $logtag -p $logfacility.$lvl $msg}
} else {
puts "$lvl: $msg"
catch {exec logger -t $logtag -p $logfacility.$lvl $msg}
}

}

}

proc refreshToken {rt ci cs} {
log debug "refreshing token"
set url "https://api.netatmo.net/oauth2/token"
set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
set parameter "grant_type=refresh_token&refresh_token=$rt&client_id=$ci&client_secret=$cs"

catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response
log debug "response was $response"

return $response

}

proc requestToken {ci cs un pw} {
log "debug" "requesting new token"
set url "https://api.netatmo.net/oauth2/token"
set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
set parameter "grant_type=password&client_id=$ci&client_secret=$cs&username=$un&password=$pw"

catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response
log debug "response was $response"

return $response

}

proc parseOAuthResponse {input} {
log debug "parsing authentication result"
global accesstoken
global refreshtoken

regexp {HTTP/1.1\s(\d*)} $input dummy returncode
regexp {\"access_token\":\"(.*?)\"} $input dummy accesstoken
regexp {\"refresh_token\":\"(.*?)\"} $input dummy refreshtoken
regexp {\"expires_in\":(.*?)\,} $input dummy expiresin

log debug "returncode is $returncode"
log debug "access token is $accesstoken"
log debug "refresh token is $refreshtoken"
log debug "expires in $expiresin"

if {[expr $returncode]!=200} {
log error "Authentication failed with code $returncode and response $input"
exit 1
}

return $expiresin
}

proc saveAccessToken {expin} {
global accesstoken
global refreshtoken
global tokenexpires
global cfgfile

log debug "saving new access token to $cfgfile"

set fileId [open $cfgfile "w"]

set now [clock seconds]
set tokenexpires [expr $now + $expin]

puts $fileId $accesstoken
puts $fileId $refreshtoken
puts $fileId $tokenexpires
close $fileId
}

proc loadAccessToken {} {
global accesstoken
global refreshtoken
global tokenexpires
global cfgfile

log debug "loading stored credentials from $cfgfile"

set fp [open $cfgfile r]
set file_data [read $fp]
close $fp

log debug "file data is: $file_data"

set data [split $file_data "\n"]

set accesstoken [lindex $data 0]
set refreshtoken [lindex $data 1]
set tokenexpires [lindex $data 2]
}

log debug "script has started"

if { [file exists $cfgfile] == 1} {
log info "found stored credentials"
loadAccessToken
set now [clock seconds]
log debug "current time is [clock format $now -format "%Y-%m-%dT%H:%M:%S"], token is valid until [clock format $tokenexpires -format "%Y-%m-%dT%H:%M:%S"]"
if {[expr $now >= $tokenexpires] == 1} {
log notice "token has already expired"
saveAccessToken [parseOAuthResponse [refreshToken $refreshtoken $clientId $clientSecret]]
log notice "oauth token successfully refreshed"
} else {
log info "token is still valid"
}
} else {
log warn "no stored credentials found"
saveAccessToken [parseOAuthResponse [requestToken $clientId $clientSecret $username $password]]
log notice "oauth token successfully initialized"
}

log debug "polling outdoor module..."
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?),(.*?)\]} $response dummy otemp ohum

log info "Outside temperature is $otemp"
log info "Outside humidity is $ohum"

log debug "polling main module..."
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?),(.*?),(.*?),(.*?),(.*?)\]} $response dummy itemp ihum ico2 ipressure inoise

log info "LogI is $response"
log info "Inside temperature is $itemp"
log info "Inside humidity is $ihum"
log info "Inside CO2 level $ico2"
log info "Inside pressure is $ipressure"
log info "Inside noise level is $inoise"

if {[string match "*XX*" $zusatzid] == 0} {
log debug "polling zusatzmodule..."
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?),(.*?),(.*?)\]} $response dummy 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"
}

if {[string match "*XX*" $zusatzid2] == 0} {
log debug "polling zusatzmodul2..."
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?),(.*?),(.*?)\]} $response dummy ztemp2 zhum2 zco22

log info "LogI is $response"
log info "Inside temperature is $ztemp2"
log info "Inside humidity is $zhum2"
log info "Inside CO2 level $zco22"
}

if {[string match "*XX*" $zusatzid3] == 0} {
log debug "polling zusatzmodul3..."
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?),(.*?),(.*?)\]} $response dummy ztemp3 zhum3 zco23

log info "LogI is $response"
log info "Inside temperature is $ztemp3"
log info "Inside humidity is $zhum3"
log info "Inside CO2 level $zco23"
}


if {[string match "*XX*" $rainid] == 0} {
log debug "polling regensensor module...1d"
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?)\]} $response dummy rain1d

log info "LogR is $response"
log info "Outside Regen1d is $rain1d"

log debug "polling regensensor module...30min"
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "querying $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "response is: $response"

regexp {\"value\":\[\[(.*?),(.*?)\]} $response dummy rain2 rain30min

log info "LogR is $response"
log info "Outside rain2 is $rain2"
log info "Outside Regen30min is $rain30min"
}

if {[string match "*XX*" $windid] == 0} {
log debug "polling wind module..."
set url "https://api.netatmo.net/api/getmeasure? ... e_end=last"
log debug "quering $url"
catch {exec /usr/local/addons/cuxd/curl -k -# $url} response
log debug "respnose is $response"

regexp {\"value\":\[\[(.*?),(.*?),(.*?),(.*?)\]} $response dummy windangle windstrength gustangle guststrength
log info "WindAngle is $windangle"
log info "Windstrength is $windstrength"
log info "GustAngle is $gustangle"
log info "Guststrength is $guststrength"
}
#
# set ReGaHss variables
#
set rega_cmd ""
append rega_cmd "var ITemp = dom.GetObject('$CUxD_indoor:1.SET_TEMPERATURE');"
append rega_cmd "var IHumi = dom.GetObject('$CUxD_indoor:1.SET_HUMIDITY');"
append rega_cmd "var OTemp = dom.GetObject('$CUxD_outdoor:1.SET_TEMPERATURE');"
append rega_cmd "var OHumi = dom.GetObject('$CUxD_outdoor: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');"
if {[string match "*XX*" $zusatzid] == 0} {
append rega_cmd "var ZTemp = dom.GetObject('$CUxD_zusatzmodul:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi = dom.GetObject('$CUxD_zusatzmodul: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');"
}
if {[string match "*XX*" $zusatzid2] == 0} {
append rega_cmd "var ZTemp2 = dom.GetObject('$CUxD_zusatzmodul2:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi2 = dom.GetObject('$CUxD_zusatzmodul2:1.SET_HUMIDITY');"
append rega_cmd "var ZCO22 = dom.GetObject('$CO2_SZ2');"
append rega_cmd "ZTemp2.State('$ztemp2');"
append rega_cmd "ZHumi2.State('$zhum2');"
append rega_cmd "ZCO22.State('$zco22');"
}
if {[string match "*XX*" $zusatzid3] == 0} {
append rega_cmd "var ZTemp3 = dom.GetObject('$CUxD_zusatzmodul3:1.SET_TEMPERATURE');"
append rega_cmd "var ZHumi3 = dom.GetObject('$CUxD_zusatzmodul3:1.SET_HUMIDITY');"
append rega_cmd "var ZCO23 = dom.GetObject('$CO2_SZ3');"
append rega_cmd "ZTemp3.State('$ztemp3');"
append rega_cmd "ZHumi3.State('$zhum3');"
append rega_cmd "ZCO23.State('$zco23');"
}
if {[string match "*XX*" $rainid] == 0} {
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 "Rain1.State('$rain30min');"
append rega_cmd "Rain2.State('$rain1d');"
append rega_cmd "Rain3.State('$rain2');"
}
if {[string match "*XX*" $windid] == 0} {
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 "windA.State('$windangle');"
append rega_cmd "windS.State('$windstrength');"
append rega_cmd "gustA.State('$gustangle');"
append rega_cmd "gustS.State('$guststrength');"
}

append rega_cmd "var sdatetime = system.Date('%d.%m.%Y %H:%M:%S');"
append rega_cmd "var netatmosynctime = dom.GetObject('$SyncTime');"
append rega_cmd "netatmosynctime.Variable(sdatetime.ToString());"
rega_script $rega_cmd
log info "script finished"

Es funktioniert mit allen Modulen. Danke nochmals an EckardS.

Gruss Ecki

Benutzeravatar
MacMatic
Beiträge: 9
Registriert: 13.11.2017, 12:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 7 Mal

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von MacMatic » 15.12.2020, 17:31

Hm, ich checke es gerade nicht...

Wegen "Umbauarbeiten" an meinem RaspberryMatic wurde alles neu eingerichtet. Ich habe dabei auch versucht, meine Fehler von Seite 70/71 nicht zu wiederholen :-)
Also, alles wieder eingerichtet, Script einkopiert, etc.

Das TCL-Script geht - wenn ich es direkt via ssh ausführe, bekomme ich korrekte Werte von allen Modulen (Basis, Außen, Innen-1 und Innen-2)
In den Geräten bekomme ich auch alles richtig angezeicht, AUSSER im 2. Innen-Zusatzmodul, hier stehen alle Werte auf 0.
Das 1. Innen-Zusatzmodul zeigt alles korrekt an! Ich habe beide Geräte gleich angelegt...
Außerdem scheint es ein Problem mit dem Programm zu geben - es wir nur die Basis, der Außensendor und Innen-1 aktualisiert.

Hat jemand einen Tip für mich ?!? Besten Dank schon mal...

TobsenHH
Beiträge: 1
Registriert: 24.01.2021, 16:49
System: CCU

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von TobsenHH » 24.01.2021, 16:54

Moin ich sehe den Wald vor lauter Bäumen nicht, Zentrale und außen laufen perfekt! Nur mein Zusatzmodul will nicht.. es zeigt keine Werte an und bei der Zentrale steht ein? Bei synctime. ich denke das Problem liegt nicht in ind tlc sondern in der CCU was muss ich in der variable für den CO2_SZ rein?

quiltrot
Beiträge: 1
Registriert: 01.02.2018, 18:23

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von quiltrot » 26.01.2021, 16:07

Auch ich bin mit meinen Fähigkeiten am Ende...
Ich habe eine CCU3 und NetAtmo mit Innen-, Außen- und Regensensor. Diese möchte ich gerne in mein Homematic-System einbinden. Vorgegangen bin ich nach der Anleitung von Indigo, also die Geräte in CuX-D angelegt, Systemvariablen angelegt, den API Zugriff bei NetAtmo konfiguriert inkl. der Seriennummern für die Sensoren und die .tcl-Datei entsprechend geändert.
Ich vermute, das Problem ist die Übergabe dieser Datei in die CCU3 oder in der Datei hat bereits einen Fehler. Ich habe mit FileZilla auf meinem MAC kopiert und den Namen der Datei netatmo.tcl nicht geändert.
Das Programm für die zeitgesteuerte Abfrage der Daten habe ich erstellt, es erfolgt aber keine Änderung der Daten, sie stehen auf 0.
Kann mir bitte jemand helfen?
Wie kann ich das Script testen und wo ist der Fehler?

Leider kann ich die Datei nicht einbinden. Die Endung .tcl wird abgelehnt...

TBRFSEE
Beiträge: 6
Registriert: 21.08.2019, 19:38

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von TBRFSEE » 27.01.2021, 23:20

Eckstone hat geschrieben:
13.10.2020, 14:28
Hi,
habe ein Script von @EckardS für drei Zusatzmodule bekommen. Habe es noch etwas überarbeitet.



Es funktioniert mit allen Modulen. Danke nochmals an EckardS.

Gruss Ecki
Hallo, ich habe dein Script verwendet, vielen Dank für deine Arbeit.
Leider läuft es nicht bei mir, einen Fehler habe ich gefunden, in deinem Script fehlt ganz am Anfang ein"#".
Danach bekomme ich nur das auf der Konsole:

Code: Alles auswählen

# tclsh /usr/local/addons/netatmo/netatmo1.tcl
info: found stored credentials
info: token is still valid
can't read "otemp": no such variable
    while executing
"log info "Outside temperature is $otemp""
    (file "/usr/local/addons/netatmo/netatmo1.tcl" line 217)
# 
Was kann das Problem sein?

RalphSch
Beiträge: 1
Registriert: 02.02.2021, 21:29
System: CCU

Re: Netatmo Wetterstation (incl. CO2 Messung) einbinden

Beitrag von RalphSch » 02.02.2021, 21:40

Hallo ich bin hier kompletter Neuling.
Wo bekomme ich die Client ID; den Client Secret; die ID vom Innensensor und die ID von dem Aussensensor her?
Habe alles nach Anleitung von der appproject Seite gemacht und der Link darauf funktioniert leider nicht.
Auch hier habe ich leider nichts gefunden bzw. evtl. überblättert.

Vielen Dank für eure Hilfe.

Gruß
Ralph

Antworten

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