Temperaturdiffenz aus variabeln berechnen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von Tyfys » 13.03.2024, 14:13

Matsch hat geschrieben:
13.03.2024, 12:34
Du weist a im Test a = 0; zu


es wurde nur geschrieben:
BobBi hat geschrieben:
11.03.2024, 10:33
Die Variablen haben in den SV z.B. folgende Werte:
Gruß
Harry

Matsch
Beiträge: 5454
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 116 Mal
Danksagung erhalten: 743 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von Matsch » 13.03.2024, 14:16

Hoffentlich war's so gemeint.

Benutzeravatar
robbi77
Beiträge: 13864
Registriert: 19.01.2011, 19:15
System: CCU
Wohnort: Landau
Hat sich bedankt: 182 Mal
Danksagung erhalten: 739 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von robbi77 » 13.03.2024, 18:50

Baxxy hat geschrieben:
13.03.2024, 12:17
Die Displays nuckeln ordentlich am DC, erst recht wenn sie im 3min Aktualisierungsintervall eines HM-Sensors beschrieben werden.
Nur geänderte Daten zu übertragen ist daher nicht verkehrt.
Was senden die denn wenn sie doch empfangen sollen?

Benutzeravatar
Baxxy
Beiträge: 10850
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2229 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von Baxxy » 13.03.2024, 19:03

Ok ich präzisiere...

Das Senden von Daten an die Displays nuckelt ordentlich am DC der Zentrale. Man sollte also nicht in kurzen Zyklen das Display ansteuern.

BobBi
Beiträge: 15
Registriert: 19.10.2021, 16:23
System: CCU und Access Point
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von BobBi » 14.03.2024, 11:18

Baxxy hat geschrieben:
13.03.2024, 10:49
Den 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.
Ich habe nun diesen Weg gewählt, so kann ich Zeitlich abfragen ob es Veränderungen gegeben hat.
68 Geräten
-----------------
1x HmIPW-DRAP, 1x RPI-RF-MOD, 2x HmIP-HAP, 5x HmIPW-DRI32, 3x HmIPW-FALMOT-C12, 2x HMIP-SWDO, 4x HmIP-SWDO-I, 1x CUX28, 1x HmIP-SLO, 1x HmIPW-STHD, 3x HmIPW-STH, 8x HmIPW-WTH, 4x HmIPW-DRBL4, 2x HmIP-SWDM-B2, 1x HmIP-FSI16, 1x HM-LC-Sw1-FM, 1x HmIP-PS-2, 1x HMIP-PS, 1x HM-LC-Sw2-FM, 6x HmIPW-DRS4, 4x HmIPW-DRS8, 2x HmIP-MOD-OC8, 4x HmIPW-DRD3, 1x HmIP-PDT, 3x HMIP-PSM, 1x HM-OU-LED16, 1x HmIP-STHO, 1x HmIP-RCV-50, 3x HmIP-SWD

BobBi
Beiträge: 15
Registriert: 19.10.2021, 16:23
System: CCU und Access Point
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von BobBi » 14.03.2024, 11:22

Matsch hat geschrieben:
13.03.2024, 10:39
Ja, 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.
Mein Code lautet nun so:

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); 
}
Aber eine Frage noch, kann der Letzte Wert auch gleich sein, wenn der vom Temperatursensor geliefert werden? Also wenn es nun 60 minuten die gleiche Temperatur hat, ist der Wert und der letzte Wert dann gleich?
68 Geräten
-----------------
1x HmIPW-DRAP, 1x RPI-RF-MOD, 2x HmIP-HAP, 5x HmIPW-DRI32, 3x HmIPW-FALMOT-C12, 2x HMIP-SWDO, 4x HmIP-SWDO-I, 1x CUX28, 1x HmIP-SLO, 1x HmIPW-STHD, 3x HmIPW-STH, 8x HmIPW-WTH, 4x HmIPW-DRBL4, 2x HmIP-SWDM-B2, 1x HmIP-FSI16, 1x HM-LC-Sw1-FM, 1x HmIP-PS-2, 1x HMIP-PS, 1x HM-LC-Sw2-FM, 6x HmIPW-DRS4, 4x HmIPW-DRS8, 2x HmIP-MOD-OC8, 4x HmIPW-DRD3, 1x HmIP-PDT, 3x HMIP-PSM, 1x HM-OU-LED16, 1x HmIP-STHO, 1x HmIP-RCV-50, 3x HmIP-SWD

dondaik
Beiträge: 12929
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1604 Mal
Danksagung erhalten: 222 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von dondaik » 14.03.2024, 11:54

erklärung war doch oder ?
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Matsch
Beiträge: 5454
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 116 Mal
Danksagung erhalten: 743 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von Matsch » 14.03.2024, 11:58

Die Funktion .Abs() im Code vergessen?

Und wenn die Diffrenz die gleiche bleibt, fängst du die Ausgabe auch nicht ab. Kann zwar sein, dass das bei deiner SV keine schädlichen Auswirkungen hat, aber hängt eben von der Verwendung dieset SV ab - und die kann sichauch mal ändern.
Deshalb schließe ich Ausgaben auch auf SVs grundsätzlich bei Gleichheit aus. Sollte der Vergleich mit .Abs() sich nicht überhaupt auf den Vergleich zwischen altem und neuen Differenzwert beziehen? Dann wäre das Script ziemlich falsch.
Zuletzt geändert von Matsch am 14.03.2024, 12:20, insgesamt 1-mal geändert.

Benutzeravatar
Baxxy
Beiträge: 10850
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2229 Mal

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von Baxxy » 14.03.2024, 12:16

Jedes mal wenn ein Wert vom Sensor kommt wird dieser zu .Value()
Der bisherige .Value() wird dabei immer nach .LastValue() "verschoben".
Der Vergleich macht also nur Sinn wenn man ihn bei jeder Aktualisierung des Sensorwertes ausführt.

Wäre ja mal gut den geheimen Sensor zu kennen, dann könnte man besser helfen.

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

Re: Temperaturdiffenz aus variabeln berechnen

Beitrag von Xel66 » 14.03.2024, 12:23

BobBi hat geschrieben:
14.03.2024, 11:22
Also wenn es nun 60 minuten die gleiche Temperatur hat, ist der Wert und der letzte Wert dann gleich?
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.

Ich speichere für diesen Zweck meine Außentemperatur in einer Systemvariable (AT_Mittel10) zwischen und habe da einen gewissen "historischen" gleitenden Mittelwert. Daraus kann ich eine Differenz zu aktuellen Temperatur bilden und einen Trend ablesen, um auch schnelle Temperaturänderungen zu erfassen (aufziehendes Unwetter). Das Scipt triggert auf die Aktualisierung der Außentemperatur eines klassischen Außentemperatursensors.

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);
"AT_Mittel10" heißt deswegen so, weil es "früher" der Mittelwert der letzten 10 Messungen war. Aktuell habe ich in "n = 5.0;" fünf Zyklen festgelegt. In die Vairable "AT_Trend" schreibe ich den kurzfristigen Temperaturtrend zur Erkennung, ob es aktuell gerade wärmer oder kälter wird, bzw. einen Temperatursturz (kurzfristige starke Temperaturänderungen durch aufziehendes Unwetter). Für das Script benötigst Du also zwei Sytemvariablen vom Typ "Zahl".


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

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“