ELV Wetterstation WS980Wifi in Homematic
Moderator: Co-Administratoren
- cobbek
- Beiträge: 28
- Registriert: 02.04.2014, 13:47
- System: CCU und Access Point
- Wohnort: Gelsenkirchen
- Hat sich bedankt: 3 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Hallo zusammen!
Die Station steht , Verbindung ok und Daten werden an CCU übergeben.
Fragen habe ich zu den Himmelsrichtungen, wie kann ich diese einbinden (N oder Nord) . Auf dem ersten Screenshot ist es zu sehen, im Script ist es hinterlegt, ich kann es aber nicht zu Vorschein bringen. Kann jemand helfen?
Ebenso die Lux- Anzeige. Ist es Lux oder KLux was angezeigt wird? Kann man das umrechnen, Tipps?
Nachtrag:
Heute hat es geregnet - leider - in der Nacht waren es dann ca 7,9 mm , das erscheint mir doch ein wenig viel. Ist da Einstellungssache oder muss ich eine Änderung im Script vornehmen.
Tolle Arbeit !
Danke
Die Station steht , Verbindung ok und Daten werden an CCU übergeben.
Fragen habe ich zu den Himmelsrichtungen, wie kann ich diese einbinden (N oder Nord) . Auf dem ersten Screenshot ist es zu sehen, im Script ist es hinterlegt, ich kann es aber nicht zu Vorschein bringen. Kann jemand helfen?
Ebenso die Lux- Anzeige. Ist es Lux oder KLux was angezeigt wird? Kann man das umrechnen, Tipps?
Nachtrag:
Heute hat es geregnet - leider - in der Nacht waren es dann ca 7,9 mm , das erscheint mir doch ein wenig viel. Ist da Einstellungssache oder muss ich eine Änderung im Script vornehmen.
Tolle Arbeit !
Danke
CCU3 | RaspberryMatic mit aktueller Firmware und vielen Geräten
- cobbek
- Beiträge: 28
- Registriert: 02.04.2014, 13:47
- System: CCU und Access Point
- Wohnort: Gelsenkirchen
- Hat sich bedankt: 3 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Hallo , habe mir mal selbst geholfen - wie es ja auch gewollt ist .Ich habe dabei noch einmal die Windrose aktualisiert. Bei mir läuft es jetzt soweit - einzig die mm bei Regenfall stören mich noch. Da erscheint es mir zu viel zu sein. Weiterhin gilt - wer kann mir einen Tipp geben ...
Code: Alles auswählen
#!/bin/tclsh
load tclrega.so
# - hier nur die IP Addresse anpassen
set debug_mode 0
set wait_between_status_requests 1
set connection_timeout 500
set wait_between_retries 200
set status_retries 5
set command_retries 10
set matchport_host 192.168.xx.xx
set matchport_port 45000
#set ws980command ""
set ws980command "FFFF0B0006040419"; # aktuelle Daten holen
# - liest ein Byte vom Binärstring - liefert Zahl von 0 - 255
proc getb {idx} {
global global_binout
set sb [string index $global_binout $idx]
scan $sb %c ascii
return $ascii
}
# - liest ein Word vom Binärstring liefert Zahl von -32768 bis 32768
proc getw {idx} {
global global_binout
set sb [string index $global_binout $idx]
scan $sb %c asciih
set idx [expr $idx + 1]
set sb [string index $global_binout $idx]
scan $sb %c asciil
set zahl [expr $asciil + { $asciih * 256}]
if {$zahl > 32767} then {set zahl ~[expr 65535 - $zahl]}
return $zahl
}
# - liest ein Longword vom Binärstring und liefert Zahl von 0 - 4294967295
proc getl {idx} {
global global_binout
set sb [string index $global_binout $idx]
scan $sb %c ascii3
set idx [expr $idx + 1]
set sb [string index $global_binout $idx]
scan $sb %c ascii2
set idx [expr $idx + 1]
set sb [string index $global_binout $idx]
scan $sb %c ascii1
set idx [expr $idx + 1]
set sb [string index $global_binout $idx]
scan $sb %c ascii0
set zahl [expr $ascii0 + {$ascii1 * 256} + {$ascii2 * 65536} + {$ascii3 * 16777216}]
return $zahl
}
# - prüft checksumme des Binärstrings (Summe aller Bytes (2-80) AND FF - Byte 81 ist Checksumme)
proc checksum {bin_str} {
set bb 0
set xx 0
for {set i 2} {$i < 81} {incr i} {set xx [expr $xx + [getb $i]]}
set xx [expr $xx & 255]
if {$xx == [getb 81]} { set bb 1 }
return $bb
}
# schreibt Logfile --> Mode = a für append, w für write (neue File) ----------------------------------------------------------------------
proc Write_Logfile {data mode} {
set fileId [open "/etc/config/addons/weather/weather.log" $mode]
fconfigure $fileId -buffering none
puts $fileId $data
close $fileId
}
# öffnet Socket für TCP ------------------------------------------------------------------------------------------------------------------
proc ws980_opensocket {host port timeout} {
global connected
set channel [socket -async $host $port]
set afterid [after $timeout {set connected "timeout"}]
fileevent $channel writable "GetConnectError $channel $afterid"
fileevent $channel readable "GetConnectError $channel $afterid"
vwait connected
if {[string compare $connected ""] == 0} {
return $channel
} else {
close $channel
return -1
}
}
# liest Binärdaten vom Socket -----------------------------------------------------------------------------------------------------------
proc ws980_Read {ws980_socket} {
global global_ws980_timer_read
global global_hexout
global global_binout
set hexout [read $ws980_socket 82]; # Länge der gelesenen Daten
set global_binout $hexout; # Ausgabe in bin behalten wegen Auswertung
binary scan $hexout H* hexout; # Binärwert nach Hexzahl
set hexout [string toupper $hexout]; # in Großschreibung ändern
append global_hexout $hexout
if {[string length $global_hexout] == 164} {set global_ws980_timer_read "read complete"}
}
# Fehlerbehandlung Socket ---------------------------------------------------------------------------------------------------------------
proc GetConnectError {channel afterid} {
global connected
set connected [fconfigure $channel -error]
after cancel $afterid
fileevent $channel readable ""
fileevent $channel writable ""
}
# WS980 Steuerungsprozedur -------------------------------------------------------------------------------------------------------------
proc ws980_Command {debug_mode command maxwait_connect maxtries maxwait_between_tries matchport_host matchport_port} {
if {$debug_mode == 1} {Write_Logfile "###########[clock format [clock sec] -format %H:%M:%S]: START COMMAND" "w"}
if {$debug_mode == 2} {Write_Logfile "###########[clock format [clock sec] -format %H:%M:%S]: START COMMAND" "a"}
#Initialisierung
global global_hexout; # enthält die von WS980 empfangenen Daten
global global_binout; # dito aber binär
global global_ws980_timer_read;
set result_string "OK"
set try_success "FALSE"
set tries 0
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: Before Command" "a"}
set hexin $command ; # Kommando setzen - für WS980
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: $command" "a"}
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After Command" "a"}
#Prüfen, ob bisher alles ok
if {$result_string == "OK"} {
#Übergebene Anzahl Versuche durchführen bis maximal definierte Versuchsanzahl erreicht oder letzter Versuch erfolgreich war
for {set tries 0} {$tries < $maxtries && $try_success == "FALSE" } {incr tries} {
#Result je Connect-Versuch initialisieren
set result_string "OK"
#Werte initialisieren
set hexout ""
set global_hexout ""
set global_binout ""
set global_ws980_timer_read ""
#Binary-Command an ws980 senden und Rückgabewert empfangen und speichern
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: Before OpenSocket" "a"}
set ws980_socket [ws980_opensocket $matchport_host $matchport_port $maxwait_connect]
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After OpenSocket: $ws980_socket" "a"}
if {$ws980_socket != -1} {
catch {
fconfigure $ws980_socket -blocking false -translation binary -buffering none
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After fconfigure" "a"}
#ws980-Befehl von HEX in Binary umwandeln und an ws980 übertragen
puts -nonewline $ws980_socket [binary format H* $hexin]
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After WS980-Puts: $hexin" "a"}
# Rückgabewert vom WS980 übertragen und von Binary nach HEX-String umwandeln
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: Before Read" "a"}
after $maxwait_connect set global_ws980_timer_read "timeout"
fileevent $ws980_socket readable "ws980_Read $ws980_socket"
vwait global_ws980_timer_read
fileevent $ws980_socket readable {}
set hexout $global_hexout
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After ws980-Read: $hexout / $global_ws980_timer_read" "a"}
}
close $ws980_socket
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After CloseSocket" "a"}
}
#Prüfen, ob Socket-Kommunikation grundsätzlich erfolgreich war
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: Before Check (IN=$hexin / OUT=$hexout)" "a"}
# Länge des Rückgabestrings (82 Byte empfangen = 164 chars)
if {[string length $hexout] != 164} {
set result_string "#[clock format [clock sec] -format %H:%M:%S]: Socket-Error /$command"
} else {
#Prüfen, ob Byte 1-4 der Rückgabe vom ws980 mit den Input-Bytes übereinstimmen
if {[string range $hexout 0 7] == [string range $hexin 0 7]} {
set final_result $hexout
} else {
set result_string "#[clock format [clock sec] -format %H:%M:%S]: Read-Error /$command"
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: Read-Error (IN=$hexin / OUT=$hexout)" "a"}
}
}
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After Returnstring" "a"}
#Wenn Kommunikation fehlerfrei war, dann Loop beenden, sonst laut festgelegtem Wert bis zum nächsten Versuch warten
if {$result_string == "OK"} {
set try_success "TRUE"
} else {
#x ms Warten
after $maxwait_between_tries
}
if {$debug_mode != 0} {Write_Logfile "[clock format [clock sec] -format %H:%M:%S]: After Wait-Between-Tries: $result_string" "a"}
}
}
if {$result_string == "OK"} {
# Test ob das die aktuellen Wetterdaten sind (gibt noch Min. und Max. Werte etc.)
if {[string range $final_result 0 9] == "FFFF0B0050"} {
# hier das Parsen des Binärstrings
set itemp [expr double([getw 7]) / 10]
set atemp [expr double([getw 10]) / 10]
set dewpt [expr double([getw 13]) / 10]
set windc [expr double([getw 16]) / 10]
set heati [expr double([getw 19]) / 10]
set hum_i [getb 22]
set hum_a [getb 24]
set apres [expr double([getw 26]) / 10]
set rpres [expr double([getw 29]) / 10]
set w_dir [getw 32]
set w_spe [expr double([getw 35]) / 10*3.6]; # km/h Test
# set w_spe [expr double([getw 35]) / 10]
# https://homematic-forum.de/forum/viewtopic.php?f=18&t=49131&start=40
set w_gus [expr double([getw 38]) / 10*3.6]; #km/h Test
# set w_gus [expr double([getw 38]) / 10]
set rainh [expr double([getl 41]) / 10]
set raind [expr double([getl 46]) / 10]
set rainw [expr double([getl 51]) / 10]
set rainm [expr double([getl 56]) / 10]
set rainy [expr double([getl 61]) / 10]
set raint [expr double([getl 66]) / 10]
set l_lux [expr double([getl 71]) / 10000] ; # kLux
set l_wm [format "%.2f" [expr $l_lux * 1.485]] ; # Helligkeit in W/m² (TEST) 1w/m2 = 126.7lux
# https://homematic-forum.de/forum/viewtopic.php?f=18&t=49131&start=30
set uvrad [expr double([getw 76]) / 10] ; # uW/m² zu mW/m²
set uvidx [getb 79] ; # 0 - 15
set check [checksum $global_binout]
set uvrad [expr double([getw 76]) / 10]
set uvidx [getb 79]
set check [checksum $global_binout]
# Das habe ich mit switch nicht hinbekommen !!! geht kein kleiner mit Zahl ?!
if [expr $w_dir <= 360] {set windrichtung N}
if [expr $w_dir <= 348] {set windrichtung NNW}
if [expr $w_dir <= 326] {set windrichtung NW}
if [expr $w_dir <= 303] {set windrichtung WNW}
if [expr $w_dir <= 281] {set windrichtung W}
if [expr $w_dir <= 258] {set windrichtung WSW}
if [expr $w_dir <= 236] {set windrichtung SW}
if [expr $w_dir <= 213] {set windrichtung SSW}
if [expr $w_dir <= 191] {set windrichtung S}
if [expr $w_dir <= 168] {set windrichtung SSO}
if [expr $w_dir <= 146] {set windrichtung SO}
if [expr $w_dir <= 123] {set windrichtung OSO}
if [expr $w_dir <= 101] {set windrichtung O}
if [expr $w_dir <= 78] {set windrichtung ONO}
if [expr $w_dir <= 56] {set windrichtung NO}
if [expr $w_dir <= 33] {set windrichtung NNO}
if [expr $w_dir <= 11] {set windrichtung N}
append windrichtung " - $w_dir"
rega_script "var x = dom.GetObject('WS__check');x.State('$check');"
rega_script "var x = dom.GetObject('WS_Innentemperatur');x.State('$itemp');"
rega_script "var x = dom.GetObject('WS_Aussentemperatur');x.State('$atemp');"
rega_script "var x = dom.GetObject('WS_Taupunkt');x.State('$dewpt');"
rega_script "var x = dom.GetObject('WS_Windchill');x.State('$windc');"
rega_script "var x = dom.GetObject('WS_Hitzeindex');x.State('$heati');"
rega_script "var x = dom.GetObject('WS_Luftfeuchte_Innen');x.State('$hum_i');"
rega_script "var x = dom.GetObject('WS_Luftfeuchte_Aussen');x.State('$hum_a');"
rega_script "var x = dom.GetObject('WS_Luftdruck_absolut');x.State('$apres');"
rega_script "var x = dom.GetObject('WS_Luftdruck_relativ');x.State('$rpres');"
rega_script "var x = dom.GetObject('WS_Windrichtung');x.State('$windrichtung');"
rega_script "var x = dom.GetObject('WS_Windgeschwindigkeit');x.State('$w_spe');"
rega_script "var x = dom.GetObject('WS_Windboe');x.State('$w_gus');"
rega_script "var x = dom.GetObject('WS_Regen_Stunde');x.State('$rainh');"
rega_script "var x = dom.GetObject('WS_Regen_Tag');x.State('$raind');"
rega_script "var x = dom.GetObject('WS_Regen_Woche');x.State('$rainw');"
rega_script "var x = dom.GetObject('WS_Regen_Monat');x.State('$rainm');"
rega_script "var x = dom.GetObject('WS_Regen_Jahr');x.State('$rainy');"
rega_script "var x = dom.GetObject('WS_Regen_Total');x.State('$raint');"
rega_script "var x = dom.GetObject('WS_Sonne_Helligkeit');x.State('$l_lux');"
rega_script "var x = dom.GetObject('WS_Sonne_Hell_Watt');if(x){x.State('$l_wm');}"
rega_script "var x = dom.GetObject('WS_Sonne_UV');x.State('$uvrad');"
rega_script "var x = dom.GetObject('WS_Sonne_UV_Index');x.State('$uvidx');"
}
# Test ob das die Tages-Min-Werte sind
if {[string range $final_result 0 11] == "FFFF0B002C08"} {
# hier das Parsen des Binärstrings
set tmp [expr double([getw 7]) / 10]
set h [getb 9]; set m [getb 10] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Innentemp_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Innentemp_Time_min');if(x){x.State('$min_t');}"
set tmp [expr double([getw 12]) / 10]
set h [getb 14]; set m [getb 15] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Aussentemp_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Aussentemp_Time_min');if(x){x.State('$min_t');}"
set tmp [expr double([getw 17]) / 10]
set h [getb 19]; set m [getb 20] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Taupunkt_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Taupunkt_Time_min');if(x){x.State('$min_t');}"
set tmp [expr double([getw 22]) / 10]
set h [getb 24]; set m [getb 25] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Hitzeidx_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Hitzeidx_Time_min');if(x){x.State('$min_t');}"
set tmp [getb 27]
set h [getb 28]; set m [getb 29] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftf.innen_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftf.innen_Time_min');if(x){x.State('$min_t');}"
set tmp [getb 31]
set h [getb 32]; set m [getb 33] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftf.aussen_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftf.aussen_Time_min');if(x){x.State('$min_t');}"
set tmp [expr double([getw 35]) / 10]
set h [getb 37]; set m [getb 38] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftd.abs_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftd.abs_Time_min');if(x){x.State('$min_t');}"
set tmp [expr double([getw 40]) / 10]
set h [getb 42]; set m [getb 43] ; set min_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftd.rel_Day_min');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftd.rel_Time_min');if(x){x.State('$min_t');}"
}
# Test ob das die Tages-Max-Werte sind
if {[string range $final_result 0 11] == "FFFF0B004D07"} {
# hier das Parsen des Binärstrings
set tmp [expr double([getw 7]) / 10]
set h [getb 9]; set m [getb 10] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Innentemp_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Innentemp_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getw 12]) / 10]
set h [getb 14]; set m [getb 15] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Aussentemp_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Aussentemp_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getw 17]) / 10]
set h [getb 19]; set m [getb 20] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Taupunkt_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Taupunkt_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getw 22]) / 10]
set h [getb 24]; set m [getb 25] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Hitzeidx_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Hitzeidx_Time_max');if(x){x.State('$max_t');}"
set tmp [getb 27]
set h [getb 28]; set m [getb 29] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftf.innen_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftf.innen_Time_max');if(x){x.State('$max_t');}"
set tmp [getb 31]
set h [getb 32]; set m [getb 33] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftf.aussen_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftf.aussen_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getw 35]) / 10]
set h [getb 37]; set m [getb 38] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftd.abs_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftd.abs_Time_max');if(x){x.State('$max_t');}"; #
# set tmp [expr double([getw 40]) / 10]
set tmp [expr double([getw 40]) / 10*3.6]
set h [getb 42]; set m [getb 43] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Luftd.rel_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Luftd.rel_Time_max');if(x){x.State('$max_t');}"; #
# set tmp [expr double([getw 45]) / 10]
set tmp [expr double([getw 45]) / 10*3.6]
set h [getb 47]; set m [getb 48] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Windgeschwindigkeit_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Windgeschwindigkeit_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getw 50]) / 10]
set h [getb 52]; set m [getb 53] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Windboe_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Windboe_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getl 55]) / 10]
set h [getb 59]; set m [getb 60] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Regen_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Regen_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getl 62]) / 10000] ; # kLux
set h [getb 66]; set m [getb 67] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Licht_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Licht_Time_max');if(x){x.State('$max_t');}"
set tmp [expr double([getw 69]) / 10] ; # uW/m² nach mW/m²
set h [getb 71]; set m [getb 72] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Sonne_UV_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Sonne_UV_Time_max');if(x){x.State('$max_t');}"
set tmp [getb 74]
set h [getb 75]; set m [getb 76] ; set max_t "$h : [format "%02d" $m]"
rega_script "var x = dom.GetObject('WS_Sonne_UV_Index_Day_max');if(x){x.State('$tmp');}"
rega_script "var x = dom.GetObject('WS_Sonne_UV_Index_Time_max');if(x){x.State('$max_t');}"
}
}
if {$debug_mode != 0} {Write_Logfile "###########[clock format [clock sec] -format %H:%M:%S]: END COMMAND" "a"}
if {$debug_mode != 0} {Write_Logfile " " "a"}
}
# ---------------------------------------------------------------------------------------------------------------------------------------------------
# Main
# ---------------------------------------------------------------------------------------------------------------------------------------------------
if {$debug_mode == 2} {Write_Logfile "###########[clock format [clock sec] -format %H:%M:%S]: START / ARG1=$wait_between_status_requests / ARG2=$connection_timeout / ARG3=$wait_between_retries / ARG4=$status_retries / ARG5=$command_retries / ARG6=$matchport" "w"}
ws980_Command $debug_mode $ws980command $connection_timeout $command_retries $wait_between_retries $matchport_host $matchport_port
if {$debug_mode == 2} {Write_Logfile "###########[clock format [clock sec] -format %H:%M:%S]: END" "a"}
# FFFF0B0050040100D702008303FFF0040083050083063307240827A20928280A005E0B00010C00050E00000000100000000011000000121200000012130000001714000000171500065914160438170323A1
# erster empfangsversuch OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CCU3 | RaspberryMatic mit aktueller Firmware und vielen Geräten
-
- Beiträge: 1
- Registriert: 27.03.2023, 17:36
- System: Alternative CCU (auf Basis OCCU)
Re: ELV Wetterstation WS980Wifi in Homematic
Hallo in diesen Kreis,
ich möchte mich bei allen Beteiligten bedanken, dass die WS980WIFI in Homematic eingebunden werden kann.
Ich habe die Anleitung gesehen, gelesen und komme an einer Stelle nicht weiter und breche mir die Ohren.
In der Anleitung steht dies:
Ich stehe wirklich auf dem Schlauch, kann mir jemand helfen ?
Herzliche Grüße aus der Eifel
Holger
ich möchte mich bei allen Beteiligten bedanken, dass die WS980WIFI in Homematic eingebunden werden kann.
Ich habe die Anleitung gesehen, gelesen und komme an einer Stelle nicht weiter und breche mir die Ohren.
In der Anleitung steht dies:
Aber wie geht das nun wirklich, im SSH Fenster erhalte ich immer diesen Fehlerdas Script script_create_var.sh einmalig ausführen (z.B. neues Programm erzeugen, das das Script ausführt -
kann dann wieder gelöscht werden)
Code: Alles auswählen
root@my-raspberrymatic:/usr/local/addons/weather# sh Script_Create_Var.sh
Script_Create_Var.sh: line 1: Script: not found
: not foundte_Var.sh: line 2:
Script_Create_Var.sh: line 3: string: not found
: not foundte_Var.sh: line 3:
Script_Create_Var.sh: line 4: syntax error: unexpected "("
Herzliche Grüße aus der Eifel
Holger
-
- Beiträge: 14246
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 597 Mal
- Danksagung erhalten: 1521 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Das System basiert nicht auf Windows. Wenn dort steht, dass das Script script_create_var.sh einmalig ausführen ist. Dann ist eben Script_Create_Var.sh nicht identisch. Du siehst den Unterschied?
Gruß Xel66
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
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
- Henke
- Beiträge: 1536
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 309 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Windows? Unterschied? Sry, verstehe ich nicht.
Es ist etwas verwirrend das Script mit der Endung .sh zu versehen, die eigentlich für Linux Scripte verwendet wird. Wenn ich mir das Script ansehe, so ist es ein reines Homematic CCU Script. Das läuft nicht mit "sh ...", egal ob groß oder klein geschrieben.
Auf der CCU den Menüpunkt "Script testen", den Inhalt von "Script_Create_Var.sh" dort hinein kopieren und einmal auf "Ausführen" gehen. Damit dürften die Systemvariablen angelegt werden.
Oder...
Du wandelst das .sh Script in ein echtes tcl Script um.
Speichern mit der Endung .tcl und aufrufen mit "tclsh Script_Create_Var.tcl"
Edit: Hinweis "Script testen" aufgenommen
Es ist etwas verwirrend das Script mit der Endung .sh zu versehen, die eigentlich für Linux Scripte verwendet wird. Wenn ich mir das Script ansehe, so ist es ein reines Homematic CCU Script. Das läuft nicht mit "sh ...", egal ob groß oder klein geschrieben.
Auf der CCU den Menüpunkt "Script testen", den Inhalt von "Script_Create_Var.sh" dort hinein kopieren und einmal auf "Ausführen" gehen. Damit dürften die Systemvariablen angelegt werden.
Oder...
Du wandelst das .sh Script in ein echtes tcl Script um.
Speichern mit der Endung .tcl und aufrufen mit "tclsh Script_Create_Var.tcl"
Code: Alles auswählen
#!/bin/tclsh
# load tclrpc.so
load tclrega.so
puts "Start"
set script {
! Script zum Anlegen der Variablen für Wetterstation
string svName = "WS_Innentemperatur";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Innentemperatur");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Aussentemperatur";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Außentemperatur");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Taupunkt";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Taupunkt");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Windchill";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("gefühlte Außentemperatur bei Wind und Kälte");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Hitzeindex";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("gefühlte Temperatur bei hoher Luftfeuchtigkeit und Wärme - ab 27°C");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Luftfeuchte_Innen";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Luftfeuchtigkeit Innen");
svObj.ValueUnit("%");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Luftfeuchte_Aussen";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Luftfeuchtigkeit Außen");
svObj.ValueUnit("%");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Luftdruck_absolut";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("tatsächlich gemessener Luftdruck");
svObj.ValueUnit("hPa");
svObj.ValueMin(800);
svObj.ValueMax(1300);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Luftdruck_relativ";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Luftdruck auf Meereshöhe relativiert");
svObj.ValueUnit("hPa");
svObj.ValueMin(800);
svObj.ValueMax(1300);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Windrichtung";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Windrichtung in Grad");
svObj.ValueUnit("°");
svObj.ValueMin(0);
svObj.ValueMax(360);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Windgeschwindigkeit";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Windgeschwindigkeit aktuell gemittelt");
svObj.ValueUnit("m/s");
svObj.ValueMin(0);
svObj.ValueMax(60);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Windboe";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("stärkste Windböe");
svObj.ValueUnit("m/s");
svObj.ValueMin(0);
svObj.ValueMax(60);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Regen_Stunde";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Regenmenge in der letzten Stunde");
svObj.ValueUnit("mm");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Regen_Tag";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Regenmenge an diesem Tag");
svObj.ValueUnit("mm");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
string svName = "WS_Regen_Woche";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Regenmenge in dieser Woche");
svObj.ValueUnit("mm");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Regen_Monat";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Regenmenge in diesem Monat");
svObj.ValueUnit("mm");
svObj.ValueMin(0);
svObj.ValueMax(100);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Regen_Jahr";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Regenmenge in diesem Jahr ab Beginn Regenzeit");
svObj.ValueUnit("mm");
svObj.ValueMin(0);
svObj.ValueMax(500);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Regen_Total";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Regenmenge seit Reset");
svObj.ValueUnit("mm");
svObj.ValueMin(0);
svObj.ValueMax(1000);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Sonne_Helligkeit";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("Sonnenscheintensität");
svObj.ValueUnit("kLux");
svObj.ValueMin(0);
svObj.ValueMax(30000);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Sonne_UV";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("UV Strahlungsintensität");
svObj.ValueUnit("mW/m²");
svObj.ValueMin(0);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Sonne_UV_Index";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("UV-Index");
svObj.ValueUnit("0-15");
svObj.ValueMin(0);
svObj.ValueMax(15);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Aussentemp_Day_max";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("max. Außentemperatur an diesem Tag - ab 0 Uhr");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Aussentemp_Day_min";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.DPInfo("min. Außentemperatur an diesem Tag - ab 0 Uhr");
svObj.ValueUnit("°C");
svObj.ValueMin(-30);
svObj.ValueMax(50);
svObj.State(0);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Aussentemp_Time_max";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtString);
svObj.ValueSubType(istChar8859);
svObj.DPInfo("Zeit der max. Außentemperatur an diesem Tag");
svObj.DPArchiv(false)
svObj.ValueUnit("Uhr");
svObj.State("???");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Aussentemp_Time_min";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtString);
svObj.ValueSubType(istChar8859);
svObj.DPInfo("Zeit der min. Außentemperatur an diesem Tag");
svObj.DPArchiv(false)
svObj.ValueUnit("Uhr");
svObj.State("???");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
WriteLine(svObj.Value().ToString());
string svName = "WS__Check";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtBinary);
svObj.ValueSubType(istBool);
svObj.DPInfo("Checksumme der Übertragung");
svObj.ValueName0("Checksumme falsch");
svObj.ValueName1("Checksumme richtig");
svObj.ValueUnit("");
svObj.State(false);
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
string svName = "WS_Himmelsrichtung";
object svObj = dom.GetObject(svName);
if (!svObj){
object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
svObj = dom.CreateObject(OT_VARDP);
svObjects.Add(svObj.ID());
svObj.Name(svName);
svObj.ValueType(ivtString);
svObj.ValueSubType(istChar8859);
svObj.DPInfo("Windrichtung N - O - S - W");
svObj.DPArchiv(false)
svObj.ValueUnit("");
svObj.State("???");
svObj.Internal(false);
svObj.Visible(true);
dom.RTUpdate(false);
}
WriteLine(svObj.Value().ToString());
}
set result [rega_script $script]
puts $result
puts "End"
Zuletzt geändert von Henke am 28.03.2023, 07:06, insgesamt 1-mal geändert.
-
- Beiträge: 9764
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 707 Mal
- Danksagung erhalten: 1646 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Warum so umständlich und nicht einfach über "Skript testen"?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
- Henke
- Beiträge: 1536
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 309 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Stimmt
Den Punkt habe ich wohl immer übersehen. Gibt es den auch bei original CCU?
-
- Beiträge: 9764
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 707 Mal
- Danksagung erhalten: 1646 Mal
Re: ELV Wetterstation WS980Wifi in Homematic
Ja, gibt es.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++