Windchill berechnen (KS 300 / gefühlte Temperatur)

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von tsa » 04.02.2008, 15:29

Genau, verstehen muß man's nicht - zumindest der oben beschriebene Effekt ist nicht zu erklären.

ABER - jetzt habe ich den wirklichen Grund für die erhöhte CPU-Last gefunden.
Diesen Umstand sollten sich alle mal zu Gemüte führen (und zukünftig beachten), die mit PHP "rummachen".

Alle, die das Makro von shen in der ursprünglichen Form benutzen, und die "Ausführung bei Empfang" angewählt haben und dadurch Probleme bzgl. CPU-Last haben/hatten, sollten das Makro folgendermaßen ändern (Erklärung folgt unten):

Code: Alles auswählen

Windchill.Temp := KS300_Temp
Windchill.Wind := KS300_Wind

<?
$t = str_replace(",", ".", $V_Windchill_Temp);
$w = str_replace(",", ".", $V_Windchill_Wind);
if ($w >= 5) {
  $wc = round(13.12 + 0.6215 * $t - 11.37 * pow($w, 0.16) + 0.3965 * $t * pow($w, 0.16), 1);
} else {
  $wc = $t;
}
$Windchill = str_replace(".", ",", $wc);
?>
Hierbei sind Temp und Wind Variablen vom Typ Zahl (mit Startwert 0.0) die innerhalb des Objektes Windchill angelegt wurden.

Der Grund für die erhöhte CPU-Last mit Original-Makro:
- Am Anfang eines PHP-Scripts werden alle benutzten homeputer-Objekte und homeputer-Variablen in interne PHP-Variablen kopiert.
- Am Ende des PHP-Scripts werden alle benutzten homeputer-Objekte und homeputer-Variablen wieder mit dem Wert der internen PHP-Variablen überschrieben. Soweit - sogut! Das war bekannt.
- Aber: Beim Zurückschreiben der Werte wird sofort das zugehörige Makro des jeweiligen Objektes (in dem Fall KS300_Temp und KS300_Wind) ausgeführt, wenn in diesem die Option "Ausführung bei Empfang" angekreuzt ist! Auch wenn sich weder der reale Wert geändert hat noch wirklich ein Telegramm hereingekommen ist. (Ist dies von Contronics so gewollt?)
- Dadurch ruft sich das Makro immer wieder selbst auf.
(Bei der Option "Ausführen bei Änderung" wäre mir das sofort klar gewesen - aber "Ausführen bei Empfang" klingt bei mir irgendwie anders...)
- Abhilfe: Die Objekte, bei denen "Ausführen bei Empfang" angewählt ist, müssen vorher in andere homeputer-Variablen umkopiert werden!

Was ich dennoch nicht verstehe: wie und wann befreit sich die Studiosoftware von dieser Endlosschleife?! - Irgendwann macht sie's jedenfalls.
Ich denke nicht weiter drüber nach!

Gruss
Thomas
Zuletzt geändert von tsa am 21.03.2009, 06:27, insgesamt 1-mal geändert.

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von tsa » 04.02.2008, 16:21

Antwort von contronics:
contronics-RK hat geschrieben:Danke für den Hinweis, hatte den Beitrag noch nicht gelesen. Durch Änderung eines Wertes im PHP-Script darf natürlich das Makro nicht aufgerufen werden, wenn nur Ausführung bei Empfang aktiviert ist.
Wir werden es entsprechend ändern, Ich habe es auf die To-Do-Liste gesetzt.
Der nächste Update ist aber leider wegen Urlaubs erst Anfang/Mitte März möglich.

Benutzeravatar
Sanys
Beiträge: 270
Registriert: 31.01.2007, 12:29
Wohnort: Wetterau

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von Sanys » 07.02.2008, 15:26

Hallo tsa,

erst mal vielen Dank für Deinen Beitrag. Vor einigen Tagen hatte auch ich plötzlich Probleme mit der Steuerung. Bei mir hat studio immer wieder Neustarts gemacht, ab und an hat auch der Rechner neu gestartet. Das war, nachdem ich 3 HMS 100TF in die Steuerung eingebaut hatte. Leider war es nur sporadisch, so daß der Zusammenhang sich nicht wirklich zeigte. Auch hier stieg die CPU-Last an, teils über 50%. Leider laufen bei mir 2 Programme, die für sich schon recht hungrig sind nach CPU-Leistung und das war dann wohl zu viel.
Wie war/ist das bei mir aufgebaut: die Temp und Feuchtewerte werden bei Empfang an ein Makro zur Anzeige weitergegeben, in diesem Anzeigemakro wird mittels php der Taupunkt gerechnet (und auch angezeigt). Im Anzeigemakro stand der php-Teil direkt am Anfang. Die Rechnung und Anzeige funktionierten einwandfrei, nur immer wieder diese CPU-Last Erhöhung bis zum Neustart.
Nachdem ich das Forum durchstöbert und mittels ProcessExplorer die Studio-Software einige Zeit beobachtet habe fand ich den Zusammenhang mit den HMS. Wenn der Fehler auftrat war es immer kurz nach einem Empfang eines Sensors.
Ich hatte auch die Vermutung, daß es mit dem php zu tun hat, versuchte dann den php-Teil in den Sensor zu schreiben oder irgendwelchen studio-code davor, alles ohne Erfolg. Dann änderte ich folgendermaßen:
Der Temp-Wert wird immer vor dem Feuchte-Wert geschickt, also macht das Objekt Temp-sensor gar nix, das Objekt Feuchtesensor wartet nach dem Empfang eine sekunde und ruft dann die Anzeige mit der Berechnung auf. Das half schon mal viel, allerdings gab es noch immer mal wieder einen Neustart.
Seit heute morgen läuft die Variante die Du vorschlägst, nämlich die Temp und Feuchte-Werte werden in Variablen geschrieben, diese dann im php-script zur Berechnung genommen. Und seither braucht studio wieder nahezu keine CPU-Leistung (0-4%).
Fast zeitgleich mit Deinem Beitrag hatte ich meine Informationen an contronics weitergegeben, sie sind dran an diesem Thema und wollen es korrigieren.
Ich habe dann zum Test mal ein Programm geschrieben, welches nur den HMS100TF empfängt und die Berechnung/Anzeige durchführt. Dort habe ich einen Zähler mitlaufen lassen, also immer, wenn das Objekt Feuchte "bei Empfang" ausgeführt wird, wird eine Variable um 1 erhöht. Und siehe da, es wurde etliche tausendmal das Objekt aufgeruften!

Nochmals Danke für den Tip!


sanys
FHZ 1350PC Prof. mit HomeputerStudio 100224 + Direktsendebefehle à la tsa (v 8.0)
WIN XP Pro SP3 (neuester Stand) + buempi's Minibrowser + etliche fs20+HMS+FHT Komponenten + nie genug Zeit, das alles fertig zu bekommen ;-)

sickboy2711
Beiträge: 250
Registriert: 12.11.2011, 16:58
System: CCU
Wohnort: Schweiz
Hat sich bedankt: 25 Mal
Danksagung erhalten: 6 Mal

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von sickboy2711 » 24.04.2012, 21:19

Hallo zusammen

Darf ich dieses Thema noch einmal aufgreifen?

Der PHP Code von Shen

Code: Alles auswählen

<?
 $t = str_replace(",", ".", $KS300_Temp);
 $w = str_replace(",", ".", $KS300_Wind);
 if ($w >= 5) {
  $wc = round(13.12 + 0.6215 * $t - 11.37 * pow($w, 0.16) + 0.3965 * $t * pow($w, 0.16), 1);
 } else {
  $wc = $t;
 }
 $Windchill = str_replace(".", ",", $wc);
?>
bezieht sich auf das FS20 System wenn ich das richtig verstanden habe.
Hat jemand den Windchill schon mit Homematic umgesetzt (möchte mir das Wetterdisplay nicht unbeding zulegen und das ganze über Wisowin realiesieren)

Danke für eure Antworten

Benutzeravatar
Daniel
Beiträge: 219
Registriert: 16.01.2012, 17:33

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von Daniel » 08.07.2012, 09:29

Hallo sickboy2711,

ich habe die Windchill-Berechnung in einem tcl-Script realisiert - wenn Du daran Interesse hast...?
CCU2 mit 61+ Geräten, CCU-Historian und OpenHab auf einem Raspberry 2

spaceduck
Beiträge: 447
Registriert: 02.06.2010, 08:07
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von spaceduck » 12.07.2012, 22:34

Also ich hätte Interesse... :D

Danke schon mal

Benutzeravatar
Daniel
Beiträge: 219
Registriert: 16.01.2012, 17:33

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von Daniel » 15.07.2012, 09:54

Das ist mein Ansatz:

Code: Alles auswählen

#!/bin/tclsh
load tclrega.so
# START Prozedur von erlanger24 FHZ Forum ################
proc get_VALUE_from_CCU {p1 p2} {
             set cmd ""
             append cmd "var id = \"$p1\";"
             append cmd "var type = \"$p2\";"
             append cmd "var obj = dom.GetObject(\"BidCos-RF.\" # id # \".\" # type );"
             append cmd "var devs = obj.Value();"
## execute rega-script
             array set result [rega_script "$cmd"  ]
## get data from rega-script   
             set data $result(devs)
             return [format "%2.1f" $data]
}
# ENDE Prozedur von erlanger24 FHZ Forum ################

##START: WINDCHILL BERECHNEN##
# Temperatur und Windgeschwindigkeit vom OC3 holen
	set temperatur_ws [get_VALUE_from_CCU IEQxxxxxxx:1 "TEMPERATURE"]
	set windgeschwindigkeit_ws [get_VALUE_from_CCU IEQxxxxxxx:1 "WIND_SPEED"]
               if { $windgeschwindigkeit_ws >= 5 } {
			set w16 [format "%2.1f" [ expr { pow($windgeschwindigkeit_ws, 0.16) } ]]
			set wc [format "%2.1f" [ expr { 13.12 + (0.6215 * $temperatur_ws) - (11.37 * $w16) + (0.3965 * $temperatur_ws * $w16) } ]]
		} else {
			set wc $temperatur_ws;
		}
set cmd ""
append cmd "var obj = dom.GetObject(\"Windchill\").State(\"$wc\");"
set push [rega_script "$cmd" ]
##ENDE: WINDCHILL BERECHNEN##
Systemvariable Windchill vom Typ Zahl muss angelegt sein.

Ich bekomme allerdings ab- und an Werte angezeigt, die über der aktuellen Aussentemperatur liegen - muss noch recherchieren ob das sein kann/darf...
CCU2 mit 61+ Geräten, CCU-Historian und OpenHab auf einem Raspberry 2

spaceduck
Beiträge: 447
Registriert: 02.06.2010, 08:07
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von spaceduck » 20.07.2012, 08:09

Ich bekomme allerdings ab- und an Werte angezeigt, die über der aktuellen Aussentemperatur liegen - muss noch recherchieren ob das sein kann/darf...
So sieht das bei mir aus. Also ich habe auch den Effekt das der Windchill manchmal > Temp ist. Das darf nicht sein, aber ich würde das ganz einfach lösen indem man den Windchill mit der Temp vergleicht. Wenn Windchill > Temp dann Windchill = Temp
Werde das am WE im Skript mal ändern.
Dateianhänge
windchill.PNG

Benutzeravatar
Daniel
Beiträge: 219
Registriert: 16.01.2012, 17:33

Re: Windchill berechnen (KS 300 / gefühlte Temperatur)

Beitrag von Daniel » 22.07.2012, 13:05

Ich habe das im Script mal "augebügelt" (wie immer wenig elegant, aber läuft):

Code: Alles auswählen

#!/bin/tclsh
load tclrega.so
# START Prozedur von erlanger24 FHZ Forum ################
proc get_VALUE_from_CCU {p1 p2} {
             set cmd ""
             append cmd "var id = \"$p1\";"
             append cmd "var type = \"$p2\";"
             append cmd "var obj = dom.GetObject(\"BidCos-RF.\" # id # \".\" # type );"
             append cmd "var devs = obj.Value();"
## execute rega-script
             array set result [rega_script "$cmd"  ]
## get data from rega-script   
             set data $result(devs)
             return [format "%2.1f" $data]
}
# ENDE Prozedur von erlanger24 FHZ Forum ################

##START: WINDCHILL BERECHNEN##
# Temperatur und Windgeschwindigkeit von der Wetterstation Dach holen
	set temperatur_ws [get_VALUE_from_CCU IEQxxxxxxx:1 "TEMPERATURE"]
	set windgeschwindigkeit_ws [get_VALUE_from_CCU IEQxxxxxxx:1 "WIND_SPEED"]
                                     
	if { $windgeschwindigkeit_ws >= 5 } {
			set w16 [format "%2.1f" [ expr { pow($windgeschwindigkeit_ws, 0.16) } ]]
			set wc [format "%2.1f" [ expr { 13.12 + (0.6215 * $temperatur_ws) - (11.37 * $w16) + (0.3965 * $temperatur_ws * $w16) } ]]
		} else {
			set wc $temperatur_ws;
		}
		
	if { $wc >= $temperatur_ws } {
		set chill $temperatur_ws	
	} else {
		set chill $wc
	}

set cmd ""
append cmd "var obj = dom.GetObject(\"Windchill\").State(\"$chill\");"
set push [rega_script "$cmd" ]
##ENDE: WINDCHILL BERECHNEN##
CCU2 mit 61+ Geräten, CCU-Historian und OpenHab auf einem Raspberry 2

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“