Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von Henke » 16.09.2022, 03:12

Ziel:

Script zum Erzeugen von Differenzwerten berechnet auf 1 Stunde eines Datenpunktes, so das darüber z.B. der "Boost" der Wandheizung im Bad gesteuert werden kann. Die Dusche erhöht die Feuchte dramatisch -> Handtuch wärmen.
Das Script kann aber auf beliebige Datenpunkte angewendet werden.
Die Installation soll dabei möglichst automatisch und einfach sein.

Screenshot 2022-09-16 024705.jpg
Anzeige beim Kanal
Screenshot 2022-10-06 204513.jpg
Beispiel: Programm, das die Variable auswertet
Implementierung:

CCU-Programm anlegen, siehe:
Screenshot 2022-10-06 204020.jpg
CCU-Programm
In diesem Beispiel habe ich 3 Sensoren angelegt. Auch mehr sind möglich.
Für das CCU-Programm das folgende Script einfügen. Anpassungen am Script sind nicht nötig!

Scrip_ Delta_Wert.zip
Script
(1.45 KiB) 14-mal heruntergeladen

Ich hoffe es ist nützlich.

G
Michael

Edit:
V0.6 Werte umgedreht
V0.7 Verhalten beim Neustart verbessert
Programm auf "Bei Aktualisierung" geändert
Script in .zip geändert
Zuletzt geändert von Henke am 31.12.2023, 04:42, insgesamt 5-mal geändert.

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

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von MichaelN » 16.09.2022, 08:31

Dein anderes Skript hat mich da auf eine Idee gebracht. Ich möchte zum Beispiel nicht das delta von 60 Minuten haben sondern nur von 10. Klar könnte man nun das Programm anpassen. Aber dein Ziel ist ja eine universelle Lösung zu haben.

Nun meine Idee: man übergibt die Zeitspanne zum Auswerten im WebUI-Programm.

z. B. So:

Code: Alles auswählen

WENN Gerät bei Änderung auslösen
      UND SV_Zeitspanne kleiner als 30 nur prüfen
.... 
Haken daran ist die SV_Zeitspanne muss schon existieren und sollte 0 sein.
Dann könntest Du in Deinem Skript prüfen ob es eine 2. Bedingung gibt und dort den Zahlen Wert auslesen.

Allerdings verstehe ich deine Berechnung noch nicht ganz:

Code: Alles auswählen

integer timeDiff = oDP.Timestamp().ToInteger() - oDP.LastTimestampSeconds().ToInteger();
if (!timeDiff) { quit; }

real valDiff = oDP.Value().ToFloat() - oDP.LastValue().ToFloat();
real valDiffH1 = (valDiff * 60 * 60) / timeDiff; 
Ich habe einen Temperatursensor, der alle 3 Minuten einen Wert sendet. Die Temperatur ist um 0.2° gefallen. Dann ermittelt dein Programm 4°
D.h. Es handelt sich um eine Hochrechnung?
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
HM-Villa
Beiträge: 488
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 113 Mal

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von HM-Villa » 16.09.2022, 09:42

Hallo MichaelN,

@Henke ermittelt aus der zeitlichen und der Änderung des Wertes des DP ein Delta pro Zeitschritt, das durch (* 60 * 60) auf eine Stunde umgerechnet wird. Um bei Deinem Beispiel zu bleiben also 4°C/h (unter der Voraussetzung, dass sich die Temperatur alle 3 min weiter um je 0,2°C ändern würde). Insofern ist das schon eine Hochrechnung, denn die o. g. Voraussetzung muss gelten. Es ist aber der tatsächliche Anstieg im letzten Sendeintervall, der auf eine Stunde normiert wurde.

Um mit diesem Wert sinnvoll etwas steuern zu können, ist diese Vorgehensweise erforderlich (Reaktion auf kurzfristige [starke] Änderungen eines Wertes). Die tatsächliche Änderung eines Wertes im Zeitraum einer Stunde wird in der Praxis oft sehr viel geringer ausfallen (außer, etwa bei Deinem Beispiel der Heizung, vielleicht in der morgendlichen Aufheizphase), so dass Änderungen zu wenig differenziert sind, um darauf reagieren zu können.

@Henke: Normalerweise müssten die Operatoren umgedreht werden. Man subtrahiert immer das neue Niveau vom alten. Dann wäre korrekterweise der Anstieg beim Beispiel von @MichaelH mit -4°C/h auch negativ.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

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

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von MichaelN » 16.09.2022, 10:02

HM-Villa hat geschrieben:
16.09.2022, 09:42
Um mit diesem Wert sinnvoll etwas steuern zu können, ist diese Vorgehensweise erforderlich
Wirklich? Es ist doch nur ein Faktor eingebaut. Daher ist es am Ende egal, ob ich auf (hochgerechnete) 5° reagiere oder auf 0.25° Änderung.
Ne, das nicht ganz das was ich mir vorstellte. Der einzige Vorteil ist, daß die Änderungen normiert auf ein festes Zeitintervall berechnet werden.
Aber wenn ich weiß das mein Gerät ca. Alle 3 Minuten sendet und ich starke Änderungen erfassen will, dann kann ich davon ausgehen, das eben nach 3 Minuten auch ein neuer Messwert kommt.
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
HM-Villa
Beiträge: 488
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 113 Mal

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von HM-Villa » 16.09.2022, 11:32

MichaelN hat geschrieben:
16.09.2022, 10:02
HM-Villa hat geschrieben:
16.09.2022, 09:42
Um mit diesem Wert sinnvoll etwas steuern zu können, ist diese Vorgehensweise erforderlich
Wirklich? Es ist doch nur ein Faktor eingebaut.
Ich meinte, auch wenn das zugegebenermaßen nicht so richtig heraus kam, damit den normierten Wert, nicht den Faktor selbst, der den Wert ja erst normiert. Außerdem ermöglicht die Normierung erst, dem Wert eine Einheit (z. B. °C/h) zuzuordnen und damit die Dimension noch besser vorstellbar zu machen. Darüber hinaus wird die Abhängigkeit vom Sendeabstand, der ja nicht bei jedem Sensor immer gleich sein muss, beseitigt.

Natürlich kann man mit Timestamp und Value und deren Vorgängern immer selbst im Script rechnen. Ein weiterer Vorteil ist aber, dass man dann quasi ohne Script (dieses hier unberücksichtigt), den Anstiegs-DP nur mit Hilfe eines Programmes benutzen kann. Für Anwendungen, in denen z. B. der Temperaturgradient mehrfach benötigt wird, ist das doch gar nicht so schlecht?
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

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

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von MichaelN » 16.09.2022, 12:25

Nein, schlecht ist die Idee nicht.
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: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 304 Mal

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von Henke » 16.09.2022, 17:43

HM-Villa hat geschrieben:
16.09.2022, 09:42
@Henke: Normalerweise müssten die Operatoren umgedreht werden. Man subtrahiert immer das neue Niveau vom alten. Dann wäre korrekterweise der Anstieg beim Beispiel von @MichaelH mit -4°C/h auch negativ.
@HM-Villa
Erledigt! Bevor es zu häufig genutzt wird, ist dafür jetzt der richtige Zeitpunkt.
Reaktion auf kurzfristige [starke] Änderungen eines Wertes
Super erklärt. Das genau ist das Ziel. Die Werte selber sind eigentlich Schrott. thx
Screenshot 2022-09-16 172704.jpg
Beispiel Feuchte Bad, wenn geduscht wird.
Daher muss auch direkt auf das Event reagieren werden. Das kommt schon spät spät genug und mit einer zeitlichen Abfrage passt es nicht mehr.

@MichaelN
MichaelN hat geschrieben:
16.09.2022, 08:31
Dein anderes Skript hat mich da auf eine Idee gebracht. Ich möchte zum Beispiel nicht das delta von 60 Minuten haben sondern nur von 10. Klar könnte man nun das Programm anpassen. Aber dein Ziel ist ja eine universelle Lösung zu haben.
Dafür ist dieses Script weniger geeignet. Es wäre ziemlich aufwendig die Werte zu loggen/speichern um daraus eine saubere Durchschnittsberechnung zu machen. Aber, hmmm, das nächste Script zur Berechnung von Min/Max und Tagesdurchschnitt mach ja genau das. :D
Ich sehe mir das noch mal an, bevor ich es veröffentliche. Aktuell schmeißt es gleiche Werte direkt raus. Behalte ich die aber als Paar, so habe ich alle Informationen die gebraucht werden. Mal sehen, was da raus kommt.

LG
Michael

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

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von MichaelN » 16.09.2022, 18:09

Henke hat geschrieben:
16.09.2022, 17:43
Es wäre ziemlich aufwendig die Werte zu loggen/speichern um daraus eine saubere Durchschnittsberechnung zu machen
Man kann es mit einem gewichteten Mittelwert relativ einfach machen. Dann müsstest du nur einen Wert zwischen speichern. Zum Beispiel in den Metadaten des Gerätes. Der Unterschied wäre dann, dass die Ausgabe nicht die Hochrechnung aus den letzten beiden Messwerten ist, sondern die Differenz aus dem letzten Messwert und dem Durchschnitt über X Werte.

Ich bin nicht sicher, aber gefühlt macht es keinen Unterschied wenn man einen starken Sprung identifizieren will. Es sei denn man hat eh stark schwankende Messwerte.

Beispiel zur Berechnung viewtopic.php?f=43&t=10182&hilit=gleite ... ert#p94879
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 +++

aschenk
Beiträge: 12
Registriert: 20.02.2016, 17:32
Hat sich bedankt: 1 Mal

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von aschenk » 04.10.2022, 15:23

Wenn ich das richtig einordne, dann kann ich mir mit so einem Script alle Fenster- und Türkontakte sparen, oder?
Zumindest wenn es um das Ausschalten der Heizung beim Lüften geht und das Script die Temperatur statt die Luftfeuchtigkeit prüft.
Oder sehe ich das falsch?

Gruß Achim

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

Re: Script Delta Wert (Zeitliche Änderung) aus einem Gerät in eine Systemvariable schreiben

Beitrag von Henke » 04.10.2022, 15:51

Ausprobieren. Ich befürchte zum Abschalten der Heizung kommen die Werte zu Träge langsam. Als Warnung das Fenster wieder zu schließen, reicht es aber.

Antworten

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