nö
es wurde nur geschrieben:
Moderator: Co-Administratoren
Ich habe nun diesen Weg gewählt, so kann ich Zeitlich abfragen ob es Veränderungen gegeben hat.Baxxy hat geschrieben: ↑13.03.2024, 10:49Den Umweg über die SysVar kann man sich sparen.
Datenpunkte "beinhalten" immer 2 Werte, .Value() und .LastValue().
Auch die fixen 5min sind nicht sinnvoll. "Besser" ist es einfach auf Aktualisierung des Sensorwertes zu triggern. Bei HM ca. alle 3min, bei IP variabel und abhängig von den Einstellungen der zykl. Meldungen.
Mein Code lautet nun so:Matsch hat geschrieben: ↑13.03.2024, 10:39Ja, und warum weist du dann a einen Wert zu? Braucht es doch gar nicht.
Im übrigen haben es real-Zahlen-Berechnungen so an sich (wenn es denn um solche geht), dass durch intern bedingte Rundungsabweichungen es ungünstig ist, diese direkt zu vergleichen ( b == c ), weil sie letztlich in der 12. Stelle nach dem Komma dann doch nicht gleich sind.
Hier sollte man mit Hysterese arbeiten, also z.B.
Code: Alles auswählen
real AußentemperaturNow = dom.GetObject("Außentemperatur").Value();
real AußentemperaturLast = dom.GetObject("Außentemperatur").LastValue();
dom.GetObject("Außentemperatur_Differenz").Variable(false);
if ((AußentemperaturNow-AußentemperaturLast) > 0.1) {
dom.GetObject("Außentemperatur_Differenz").Variable(true);
}
Unwahrscheinlich, dass die Temperatur exakt gleich bleibt. Vielleicht solltest Du erst mal erklären, was Du damit überhaupt bezwecken willst. Möchtest Du einen Trend erfassen, dann ist die Methode ungeeignet, weil sich innerhalb eines Sendeintervalls die Temperatur nicht so signifikant ändert, dass sich wirklich ein Trend daraus erfassen lässt. Beziehungsweise lassen die kurzfristigen Differenzen keine Aussage über einen Trend zu. Hier müsstest Du mit größeren Zeitkonstanten arbeiten.
Code: Alles auswählen
! ++++++++ Script berechnet den gleitenden Mittelwert der Aussentemperatur und den Temperaturtrend ++++++
var ta = datapoints.Get("$src$").Value();
var tm = dom.GetObject("AT_Mittel10").Value();
var n = 5.0;
tm = (((n - 1) * tm) + ta) / n;
dom.GetObject("AT_Mittel10").State(tm);
dom.GetObject("AT_Trend").State(dom.GetObject("$src$").Value() -tm);