Ich habe mal versucht ein kleines Script zu schreiben.
Es ermittelt stündlich von einem Temperatursensor den Messwert und erzeugt dann um 0:00 Uhr einen "Tagesmittelwert" der in einer Systemvariablen abgelegt wird. Es wird dabei noch eine Hilssystemvariable benötigt.
Wenn jemand Verbesserungsvorschläge hat wäre ich dankbar.
Code: Alles auswählen
!! Tagesmitteltemperatur V1.0
!! Ermittlung der mittleren Tagestemperatur gemaess den Vorgaben vom DWD
!! siehe https://de.wikipedia.org/wiki/Tagesmitteltemperatur
!!
!! Das Script sollte jede volle Stunde aufgerufen werden.
!! Ein CUXD Timer kann mit dem Parameter ":0:0" unter "SYSTEM|TIMER_PRESET" mit "SYSTEM|REPEAT" entsprechend konfiguriert werden
!! Funktionsweise:
!! Jede volle Stunde den aktuellen Wert der Aussentemperatur einlesen und der bisher abgespeicherten Temperatur
!! in der Systemvariable 2 aufaddieren.
!! Um 0:00 Uhr die bisherigen addierten Werte (ausser dem aktuellen 0:00 Uhr Wert) durch 24 teilen und dann das Ergebnis
!! in die Systemvariable 1 (Tagesmittelwert) ablegen. Die Systemvariable 1 (Tagesmittelwert) wird daher nur
!! um 0:00 Uhr mit dem errechneten Tagesmittelwert des vergangenen Tages neu überschrieben.
!! Die vorhandene Systemvariable 2 löschen und den gemessenen 0:00 Temperaturwert dort dann ablegen.
!! Wenn es nicht 0:00 Uhr ist wird einfach der gemessene Temperaturwert in der Systemvariable 2 addiert abgelegt
!! Der Tagesmittelwert in der Datenbank gilt also fuer den vergangenen Tag!
!! Ein neuer Tag wird erkannt wenn die Stunde der aktuellen Systemzeit "0" ist.
!! Es wird der in der CCU bekannte Wert der Temperatur vom Sensor abgefragt, es wird keine direkte Abfrage gestartet. Bei Bedarf umstellen!
!!
!!(c) duralis; zur beliebigen freien Verwendung
!!
!! abgefragte Sensoren:
!! Aussentemperatur1 -> BidCos-RF.OEQ1864XXX:1.TEMPERATURE
!!
!! benoetigte Systemvariablen
!! Systemvariable 1 -> Name: v_MT_-TagesmitteltemperaturWetterstation -> Integer; (die errechtete Tagesmitteltemperatur vom vergangenen Tag)
!! Systemvariable 1 -> Name: v_MT_-01-TempTagesmittel01 -> Real; (Zwischensumme der Addition der Tagestemperaturen, maxmal 24x)
! Sensor und Variablendeklaration
! anpassen auf die eigenen Gegebenheiten
string dpTemperatursensor = "OEQ1864668"; ! abzufragender Temperatursensor eintragen
string Var_Mittelwert = "v_MT_-TagesmitteltemperaturWetterstation"; ! Name der Systemvariable für die Tagesmitteltemperatur eintragen
string Var_Zwischenspeicher = "v_MT_-01-TempTagesmittel01"; ! Name der Systemvariable für den Zwischenspeicher eintragen
! ab hier werden keine weiteren Anpassungen benoetigt
var dpname = "TEMPERATURE";
real Temperatur = 0; !lokale Variable zum zwischenspeichern und einfachen Testen
! Objektreferenz auf die Systemvariablen erstellen
var Zwischenspeicher = dom.GetObject(Var_Zwischenspeicher);
var Mittelwert = dom.GetObject(Var_Mittelwert);
! pruefen ob der Tagesmittelwert gebildet werden muss
! aktuelle Stundenzahl ermitteln (0...23)
! Wenn es 0:00 Uhr ist dann die summierten Stundentemperaturen auslesen, durch 24 teilen und in die Systemvariable
! fuer die Tagesmitteltemperatur ablegen
if (system.Date("%H").ToInteger() == 0)
{
! es ist 0:00 Uhr und der Temperaturmittelwert muss gebildet werden
! gespeicherte Summe der 24 Tagestemperaturen auslesen
Temperatur = dom.GetObject(Zwischenspeicher).Value();
! Mittelwert aus den 24 Stundentemperaturen errechnen
Temperatur = Temperatur / 24;
! neuen errechneten Mittelwert in die Systemvariable 1 abspeichern
dom.GetObject(Mittelwert).State(Temperatur);
! dann die Systemvariable fuer den Zwischenspeicher loeschen da es 0:00 Uhr ist, der Mittelwert gebildet und abgespeichert wurde
dom.GetObject(Zwischenspeicher).State(0);
}
!jetzt noch den stündlichen Wert der Temperatur in den Zwischenspeicher aufaddiert ablegen
! Objektreferenz auf Temperaturobjekt erstellen
object ObjektSensor = dom.GetObject("BidCos-RF."#dpTemperatursensor#":1."#dpname);
!Temperatur auslesen und zwischenspeichern
Temperatur = ObjektSensor.Value(); ! vom Temperatursensor den in der CCU aktuell gespeicherten Wert abfragen und in die Variable speichern
! abspeichern des neuen Wertes indem der Alte Wert ausgelesen, mit dem neuen Wert addiert und dann abgespichert wird
dom.GetObject(Zwischenspeicher).State(dom.GetObject(Zwischenspeicher).Value()+Temperatur);
! addierten Wert aus der sytenvariablen wieder auslesen
Temperatur = dom.GetObject(Var_Zwischenspeicher).Value();