ELV Wetterstation WS980Wifi in Homematic

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Benutzeravatar
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

Beitrag von cobbek » 30.09.2022, 17:30

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
CCU3 | RaspberryMatic mit aktueller Firmware und vielen Geräten

Benutzeravatar
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

Beitrag von cobbek » 03.10.2022, 10:57

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

Eifel-Holger
Beiträge: 1
Registriert: 27.03.2023, 17:36
System: Alternative CCU (auf Basis OCCU)

Re: ELV Wetterstation WS980Wifi in Homematic

Beitrag von Eifel-Holger » 27.03.2023, 17:48

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:
das Script script_create_var.sh einmalig ausführen (z.B. neues Programm erzeugen, das das Script ausführt -
kann dann wieder gelöscht werden)
Aber wie geht das nun wirklich, im SSH Fenster erhalte ich immer diesen Fehler

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 "("
Ich stehe wirklich auf dem Schlauch, kann mir jemand helfen ?

Herzliche Grüße aus der Eifel
Holger

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

Re: ELV Wetterstation WS980Wifi in Homematic

Beitrag von Xel66 » 28.03.2023, 02:40

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
-------------------------------------------------------------------------------------------
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

Benutzeravatar
Henke
Beiträge: 1498
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 302 Mal

Re: ELV Wetterstation WS980Wifi in Homematic

Beitrag von Henke » 28.03.2023, 04:13

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"

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"
Edit: Hinweis "Script testen" aufgenommen
Zuletzt geändert von Henke am 28.03.2023, 07:06, insgesamt 1-mal geändert.

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: ELV Wetterstation WS980Wifi in Homematic

Beitrag von MichaelN » 28.03.2023, 05:55

Henke hat geschrieben:
28.03.2023, 04:13
Leg auf der CCU ein neues Programm an, unter "Dann ..." dann Script auswählen, den Inhalt von...
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 +++

Benutzeravatar
Henke
Beiträge: 1498
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 302 Mal

Re: ELV Wetterstation WS980Wifi in Homematic

Beitrag von Henke » 28.03.2023, 06:04

MichaelN hat geschrieben:
28.03.2023, 05:55
Warum so umständlich und nicht einfach über "Skript testen"?
Stimmt :D
Den Punkt habe ich wohl immer übersehen. Gibt es den auch bei original CCU?

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: ELV Wetterstation WS980Wifi in Homematic

Beitrag von MichaelN » 28.03.2023, 06:32

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 +++

Antworten

Zurück zu „Projektvorstellungen“