Hallo Samsing
schön zu lesen und danke für die Rückmeldung.
Gruß
Bulli
Moderator: Co-Administratoren
Hallo Samsing
Hallo Sebastian
Hab die Ursache des Problems selber gefunden aber noch keine Lösung.Megaron hat geschrieben: ↑11.02.2020, 21:32Hallo Zusammen,
nachdem ich schon von vielen Tips aus dem Thread partizipieren konnte, stehe ich vor folgendem Problem wo ich nicht weiterkomme. Ich habe eine CCU3 auf der CuxD Historian wie auch Highcharts läuft. Ich habe weiterhin 4 Netatmo Stationen die die Temperatur aufzeichnen (über die CuxD eingebunden). Seltsamerweise kriege ich für den Innensensor (Netatmo Basis) folgende Darstellung im Diagramm (grün/Highcharts und violett/Historian). Kann mir nicht erklären wo das herkommt.
Hat das schon mal jemand gehabt?
Code: Alles auswählen
debug: script has started
warn: no stored credentials found
debug: requesting new token
debug: response was /usr/bin/curl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
debug: parsing authentication result
Code: Alles auswählen
#set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
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 "XXXXXXXXXX"
set clientSecret "XXXXXXXXXXXXXXXX"
# the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station)
set username "X"
set password "
# the following are MAC addresses of your indoor station and the outside module and rain module
set deviceid "7XXXXXXXXXX:"
set moduleid "0XXXXXXXX:"
set moduleid "0XXXXXXXXXX:"
set rainid "XXXXXXXXXXX"
# set windid "XX:XX:XX:XX:XX:XX"
set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd"
set cfgfile "/tmp/netatmo.dat"
set logtag "netatmo.tcl"
set logfacility "local1"
# 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug
set loglevel 7
#---------------------------------------------------------------------------------------------------------------#
#---------------------------------------------------------------------------------------------------------------#
#GLOBAL VARIABLES#
#---------------------------------------------------------------------------------------------------------------#
set accesstoken ""
set refreshtoken ""
set tokenexpires 0
#---------------------------------------------------------------------------------------------------------------#
set loglevels {panic alert crit err warn notice info debug}
proc log {lvl msg} {
global logtag
global logfacility
global loglevel
global loglevels
set lvlnum [lsearch $loglevels $lvl]
if {$lvlnum <= $loglevel} {
if {$lvlnum <= 3} {
catch {exec logger -s -t $logtag -p $logfacility.$lvl $msg}
} else {
puts "$lvl: $msg"
catch {exec logger -t $logtag -p $logfacility.$lvl $msg}
}
}
}
proc refreshToken {rt ci cs} {
log debug "refreshing token"
set url "https://api.netatmo.net/oauth2/token"
set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
set parameter "grant_type=refresh_token&refresh_token=$rt&client_id=$ci&client_secret=$cs"
catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response
log debug "response was $response"
return $response
}
proc requestToken {ci cs un pw} {
log "debug" "requesting new token"
set url "https://api.netatmo.net/oauth2/token"
set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
set parameter "grant_type=password&client_id=$ci&client_secret=$cs&username=$un&password=$pw"
catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response
log debug "response was $response"
return $response
}
proc parseOAuthResponse {input} {
log debug "parsing authentication result"
global accesstoken
global refreshtoken
regexp {HTTP/1.1\s(\d*)} $input dummy returncode
regexp {\"access_token\":\"(.*?)\"} $input dummy accesstoken
regexp {\"refresh_token\":\"(.*?)\"} $input dummy refreshtoken
regexp {\"expires_in\":(.*?)\,} $input dummy expiresin
log debug "returncode is $returncode"
log debug "access token is $accesstoken"
log debug "refresh token is $refreshtoken"
log debug "expires in $expiresin"
if {[expr $returncode]!=200} {
log error "Authentication failed with code $returncode and response $input"
exit 1
}
return $expiresin
}
proc saveAccessToken {expin} {
global accesstoken
global refreshtoken
global tokenexpires
global cfgfile
log debug "saving new access token to $cfgfile"
set fileId [open $cfgfile "w"]
set now [clock seconds]
set tokenexpires [expr $now + $expin]
puts $fileId $accesstoken
puts $fileId $refreshtoken
puts $fileId $tokenexpires
close $fileId
}
proc loadAccessToken {} {
global accesstoken
global refreshtoken
global tokenexpires
global cfgfile
log debug "loading stored credentials from $cfgfile"
set fp [open $cfgfile r]
set file_data [read $fp]
close $fp
log debug "file data is: $file_data"
set data [split $file_data "\n"]
set accesstoken [lindex $data 0]
set refreshtoken [lindex $data 1]
set tokenexpires [lindex $data 2]
}
log debug "script has started"
if { [file exists $cfgfile] == 1} {
log info "found stored credentials"
loadAccessToken
set now [clock seconds]
log debug "current time is [clock format $now -format "%Y-%m-%dT%H:%M:%S"], token is valid until [clock format $tokenexpires -format "%Y-%m-%dT%H:%M:%S"]"
if {[expr $now >= $tokenexpires] == 1} {
log notice "token has already expired"
saveAccessToken [parseOAuthResponse [refreshToken $refreshtoken $clientId $clientSecret]]
log notice "oauth token successfully refreshed"
} else {
log info "token is still valid"
}
} else {
log warn "no stored credentials found"
saveAccessToken [parseOAuthResponse [requestToken $clientId $clientSecret $username $password]]
log notice "oauth token successfully initialized"
}
log debug "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"
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"
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"
log debug "polling zusatzmodule..."
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$gartenhausid&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 zusatzmodule...2"
set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$geraeteraumid&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 z2temp z2hum z2co2
log info "LogI is $response"
log info "Inside temperature is $z2temp"
log info "Inside humidity is $z2hum"
log info "Inside CO2 level $z2co2"
#
# 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());"
append rega_cmd "var Z2Temp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');"
append rega_cmd "var Z2Humi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');"
append rega_cmd "var Z2CO2 = dom.GetObject('CO2_Geraeteraum');"
append rega_cmd "Z2Temp.State('$z2temp');"
append rega_cmd "Z2Humi.State('$z2hum');"
append rega_cmd "Z2CO2.State('$z2co2');"
rega_script $rega_cmd
Mibra hat geschrieben: ↑22.03.2020, 20:06Hi,
ich habe nun auch den halben Sonntag versucht alles zum laufen zu bekommen aber leider will es nicht.
Evtl sehe ich langsam den Wald vor lauter Bäumen nicht mehr aber vielleicht hat mir hier ja noch jemand einen Tip.
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 "XXXXXXXXXX" set clientSecret "XXXXXXXXXXXXXXXX" # the following are your normal netatmo credentials (the ones you used to setup your netatmo weather station) set username "X" set password " # the following are MAC addresses of your indoor station and the outside module and rain module set deviceid "7XXXXXXXXXX:" set moduleid "0XXXXXXXX:" set moduleid "0XXXXXXXXXX:" set rainid "XXXXXXXXXXX" # set windid "XX:XX:XX:XX:XX:XX" set ::env(LD_LIBRARY_PATH) "/usr/local/addons/cuxd" set cfgfile "/tmp/netatmo.dat" set logtag "netatmo.tcl" set logfacility "local1" # 0=panic, 1=alert 2=crit 3=err 4=warn 5=notice 6=info 7=debug set loglevel 7 #---------------------------------------------------------------------------------------------------------------# #---------------------------------------------------------------------------------------------------------------# #GLOBAL VARIABLES# #---------------------------------------------------------------------------------------------------------------# set accesstoken "" set refreshtoken "" set tokenexpires 0 #---------------------------------------------------------------------------------------------------------------# set loglevels {panic alert crit err warn notice info debug} proc log {lvl msg} { global logtag global logfacility global loglevel global loglevels set lvlnum [lsearch $loglevels $lvl] if {$lvlnum <= $loglevel} { if {$lvlnum <= 3} { catch {exec logger -s -t $logtag -p $logfacility.$lvl $msg} } else { puts "$lvl: $msg" catch {exec logger -t $logtag -p $logfacility.$lvl $msg} } } } proc refreshToken {rt ci cs} { log debug "refreshing token" set url "https://api.netatmo.net/oauth2/token" set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" set parameter "grant_type=refresh_token&refresh_token=$rt&client_id=$ci&client_secret=$cs" catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response log debug "response was $response" return $response } proc requestToken {ci cs un pw} { log "debug" "requesting new token" set url "https://api.netatmo.net/oauth2/token" set header "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" set parameter "grant_type=password&client_id=$ci&client_secret=$cs&username=$un&password=$pw" catch {exec /usr/local/addons/cuxd/curl -k -i -H $header -X POST -d $parameter $url} response log debug "response was $response" return $response } proc parseOAuthResponse {input} { log debug "parsing authentication result" global accesstoken global refreshtoken regexp {HTTP/1.1\s(\d*)} $input dummy returncode regexp {\"access_token\":\"(.*?)\"} $input dummy accesstoken regexp {\"refresh_token\":\"(.*?)\"} $input dummy refreshtoken regexp {\"expires_in\":(.*?)\,} $input dummy expiresin log debug "returncode is $returncode" log debug "access token is $accesstoken" log debug "refresh token is $refreshtoken" log debug "expires in $expiresin" if {[expr $returncode]!=200} { log error "Authentication failed with code $returncode and response $input" exit 1 } return $expiresin } proc saveAccessToken {expin} { global accesstoken global refreshtoken global tokenexpires global cfgfile log debug "saving new access token to $cfgfile" set fileId [open $cfgfile "w"] set now [clock seconds] set tokenexpires [expr $now + $expin] puts $fileId $accesstoken puts $fileId $refreshtoken puts $fileId $tokenexpires close $fileId } proc loadAccessToken {} { global accesstoken global refreshtoken global tokenexpires global cfgfile log debug "loading stored credentials from $cfgfile" set fp [open $cfgfile r] set file_data [read $fp] close $fp log debug "file data is: $file_data" set data [split $file_data "\n"] set accesstoken [lindex $data 0] set refreshtoken [lindex $data 1] set tokenexpires [lindex $data 2] } log debug "script has started" if { [file exists $cfgfile] == 1} { log info "found stored credentials" loadAccessToken set now [clock seconds] log debug "current time is [clock format $now -format "%Y-%m-%dT%H:%M:%S"], token is valid until [clock format $tokenexpires -format "%Y-%m-%dT%H:%M:%S"]" if {[expr $now >= $tokenexpires] == 1} { log notice "token has already expired" saveAccessToken [parseOAuthResponse [refreshToken $refreshtoken $clientId $clientSecret]] log notice "oauth token successfully refreshed" } else { log info "token is still valid" } } else { log warn "no stored credentials found" saveAccessToken [parseOAuthResponse [requestToken $clientId $clientSecret $username $password]] log notice "oauth token successfully initialized" } log debug "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" 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" 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" log debug "polling zusatzmodule..." set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$gartenhausid&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 zusatzmodule...2" set url "https://api.netatmo.net/api/getmeasure?access_token=$accesstoken&device_id=$deviceid&module_id=$geraeteraumid&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 z2temp z2hum z2co2 log info "LogI is $response" log info "Inside temperature is $z2temp" log info "Inside humidity is $z2hum" log info "Inside CO2 level $z2co2" # # 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());" append rega_cmd "var Z2Temp = dom.GetObject('CUxD.CUX9002003:1.SET_TEMPERATURE');" append rega_cmd "var Z2Humi = dom.GetObject('CUxD.CUX9002003:1.SET_HUMIDITY');" append rega_cmd "var Z2CO2 = dom.GetObject('CO2_Geraeteraum');" append rega_cmd "Z2Temp.State('$z2temp');" append rega_cmd "Z2Humi.State('$z2hum');" append rega_cmd "Z2CO2.State('$z2co2');" rega_script $rega_cmd