Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Digihotte
Beiträge: 40
Registriert: 23.01.2022, 07:53
System: CCU
Wohnort: Hua Hin / Thailand
Hat sich bedankt: 10 Mal
Danksagung erhalten: 5 Mal

Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Digihotte » 28.01.2022, 10:24

Halo zusammen - Ich bin ein Anfänger! Bitte um Nachsicht....

Nach dem ich nun X-Forenbeiträge gelesen habe über Script-Programmierung – über CUXD Timer
Und und und ….
Nun drehe ich mich schon im Kreis und weiß nicht mehr in welche Richtung ich gehen soll.

Ist Zustand:
In der CCU3 habe ich nachfolgende Sys-Variablen definiert:

Sys_Variable Minute_Werteliste
(0;5;10;15;20;25;30;35;40;45;50;55)
Sys_Variable Stunde_Werteliste
(0;1;2;3;4;5;6;7;8;9;10;11;12;13;14:15;16;17;18;19;20;21;22;23)

Sys_Variable Minute_1
(Zahl)
Sys_Variable Stunde_1
(Zahl)
Sys_Variable Minute_2
(Zahl)
Sys_Variable Stunde_2
(Zahl)


In der AiO Creator Neo habe ich 4 Slider definiert. Und die Variablen entsprechend zugeordnet.
In den Variablen „Minute_1“ und „Stunde_1“ werden die Zeiten für Minute und Stunde bei Änderung richtig als Wert übernommen. Dies soll der Einschaltsollwert für eine Pumpe sein.
Genauso funktionieren auch die beiden anderen Slider mit den Variablen „Minute_2“ und „Stunde_2“ die den Ausschaltsollwert darstellen.
Bis dahin funktioniert das auch.

Problem:
Und hier fängt für mich das Problem (weil keine Ahnung ) an.
Der logische Weg wäre eine Sys_Variable für „Ein/Aus“ (als Trigger) zu definieren der dann seinen Zustand ändert, wenn die Tageszeit mit den Sollwerten übereinstimmt.
Da die Änderungsabfrage nur alle 5 Minuten erfolgt sollte sich die Belastung der CCU3 in Grenzen halten.
Lösung ?
Ich wäre sehr dankbar, wenn ihr einem Greenhorn helfen könntet.
Zuletzt geändert von Roland M. am 28.01.2022, 10:35, insgesamt 1-mal geändert.
Grund: Thema verschoben

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

Re: Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Xel66 » 28.01.2022, 11:16

Ich würde für solche Zwecke einen CUxD-Timer nehmen. In diesen kann man reale Uhrzeiten reinschreiben, wann er auslösen soll. Für Lösungen ohne CUxD ist ein zyklisch getaktet Script für den Uhrzeitvergleich.

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

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Fonzo » 28.01.2022, 11:30

Digihotte hat geschrieben:
28.01.2022, 10:24
In der AiO Creator Neo habe ich 4 Slider definiert. Und die Variablen entsprechend zugeordnet.
Warum nutzt Du da eine Werteliste? Ich würde da wenn einfach eine Variable vom Typ (Int / Zahl) nutzten. In NEO setzt Du dann beim Slider einfach eine Schrittweite von 1 und gibst das passende Intervall an.

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Black » 28.01.2022, 11:35

Ich (für mich) würde die Lösung über ein dynamisiertes Zeitmodul wählen.
Grundsätzliche Vorgehensweise: siehe meine Sig.

1. Programm:
Zeitmodul Zeitbreich: (wird vom Programm 2 dynmisch gesetzt)
dann: script Einschaltdauer Berechnen (Ausschaltzeit-Akuelle Uhrzeit)
Aktor mit Einschaltdauer einschalten (bei Pumpen ist mir sowas lieber, bei einer Funkstörung geht die trotzdem nach der Zeit td aus.
sonst:
Aktor abschalten

2. Programm
bei änderung einer der Zeitvariablen
dann retriggerhaken
script zeitverzögert 30 Sekunden
Einschaltzeit Berechnen
Ausschaltzeit berechnen
Daraus Dauer berechnen
zeitmodul von Programm 1 manipilieren

Das Ganze wäre dann auch Rebootfest

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Digihotte
Beiträge: 40
Registriert: 23.01.2022, 07:53
System: CCU
Wohnort: Hua Hin / Thailand
Hat sich bedankt: 10 Mal
Danksagung erhalten: 5 Mal

Re: Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Digihotte » 29.01.2022, 11:27

Erst mal vielen Dank für eure Mühe!

für Franco:
Warum nutzt Du da eine Werteliste? Ich würde da wenn einfach eine Variable vom Typ (Int / Zahl) nutzten. In NEO setzt Du dann beim Slider einfach eine Schrittweite von 1 und gibst das passende Intervall an.
Habe das so im Forum gefunden - probiert und es ging.... :D
Aber du hast recht, es muss keine Wertelist sein - man kann auch bei "Aktion zuweisen" & "Status zuweisen" die Übergabevariable nehmen.
Was mir aufgefallen ist: Im Popup werden die Werte bei nochmaligem öffnen nicht aktualisiert (geschrieben). Bei eine Seite funktioniert es.
Warum?

Für Black
Da steige ich noch nicht durch. Da bin ich zur Zeit noch zu neu.
Hättest du vielleicht ein einfaches Exemple. Es geht doch um Skripte - oder liege ich da falsch :roll:

Für Xel66
Ja das habe ich verstanden.
Leider bin ich noch mit CUxD überfordert.
Installation - ok
Funktionen - Hast du bitte einen Link zu einer Beschreibung "CUxD-Timer"?
Finde alles mögliche in Bezug auf Geräte, was mir nicht wirklich weiterhilft .

Nochmals Danke - jeder hat mal klein angefangen.

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Fonzo » 29.01.2022, 11:42

Ich selber kann Dir da wenig Tipps bezüglich einer CCU geben, ich setzte Uhrzeiten einfach über einen Timepicker und nutzte dazu keine Variablen direkt auf der CCU selber, das ist mir persönlich einfach zu umständlich.

Vielleicht hilft Dir in Deinem Anwendungsfall ja auch Wecker mit der CCU und NEO weiter.

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

Re: Vergleich der Inhalte von Variablen mit der aktuellen Zeit für einen Trigger

Beitrag von Xel66 » 29.01.2022, 12:04

Digihotte hat geschrieben:
29.01.2022, 11:27
Funktionen - Hast du bitte einen Link zu einer Beschreibung "CUxD-Timer"?
Zu CUxD gibt es eine vorzügliche Anleitung im PDF-Format, in der auch das Handling der Timer, von der Erstellung eines Timergerätes bis zur Befüllung mit sinnvollen Inhalten (Sekunden, Uhrzeiten, Wochentag+Uhrzeit, Verlängerung und Verkürzung von laufenden Timern, Zufallstimern und Multitimern) beschrieben ist. Ich wüsste nicht, was man da noch weiter erklären sollte/könnte. Bei mir laufen zwei virtuelle Timer-Geräte mit jeweils 16 Timern seit Jahren problemlos.

Anbei mal ein Script, welches vor der Verfügbarkeit der variablen Astrozeiten einmal täglich meine Timer für die vorgezogenen Sonnenauf- und -untergangszeiten in die Timer geschrieben hat. Das ist an Banalität kaum noch zu unterbieten. Das Script läuft nachts um 1:00 Uhr und schreibt erst die tagesaktuellen Astrozeiten erst in zwei Scriptvariablen und dann in zwei Timerkanäle eines Timergerätes. Danach werden noch für den Untergang eine halbe Stunde (1800 Sekunden) und für den Aufgang 45 Minuten (2700 Sekunden) abgezogen. Das war es schon. So hatte ich meine vorgezogenen Astrozeiten. Läuft übrigens immer noch so - trotz der mittlerweise im Zeitmodul der RM verfügbaren variablen Astrozeiten. Triggern kann man dann auf diese Timer gemäß der in der Dokumentation beschriebene Weise.

Code: Alles auswählen

! ++++++++++++ Setzen eigener Sonnenstandszeiten ++++++++++
string Sonnunter = system.SunsetTime("%H:%M:%S").ToString();
string Sonnauf = system.SunriseTime("%H:%M:%S").ToString();
dom.GetObject("CUxD.CUX2800002:16.TIMER_SET").State(Sonnunter);
dom.GetObject("CUxD.CUX2800002:15.TIMER_SET").State(Sonnauf);
dom.GetObject("CUxD.CUX2800002:16.TIMER_SET").State("-1800");
dom.GetObject("CUxD.CUX2800002:15.TIMER_SET").State("-2700");
Hier noch ein Beispiel für einen Wecker, der Deinem Anwendungsfall näher kommt. Ich habe zwei Wertelisten für die Stunden und Minuten ("00;01;02.. 23" und "00;05;10...55"). Diese werden bei Aktualisierung ausgelesen und in einen Timer geschrieben. Ich benutze dieses nur für ganz seltene Anwendungsfälle und stelle die Variablen dann mit einer App (Home24/Andorid) ein. Dazu gehört noch eine boolsche Systemvariable für (welchen) Wecker aktiv/deaktiviert, welche ich in zugehörigen Programmen verwende. Ich kann diesen Timer für drei Wecker für drei verschiedene Aktionen (Rollladen, Licht, Heizung) verwenden (natürlich dann mit nur einer gemeinsamen Zeit).

Code: Alles auswählen

! Wertelisteninhalte für Stunden und Minuten in Wecker-Timer schreiben +++++++++
var SYSvar_hh = dom.GetObject("Wecker_HH");
var wert_hh = SYSvar_hh.Value();
var Std = web.webGetValueFromList(SYSvar_hh.ValueList(), wert_hh);
var SYSvar_mm = dom.GetObject("Wecker_MM");
var wert_mm = SYSvar_mm.Value();
var Min = web.webGetValueFromList(SYSvar_mm.ValueList(), wert_mm);
string timer_w = Std # ":" # Min #":" # "00";
dom.GetObject("CUxD.CUX2800003:6.TIMER_SET").State(timer_w);
Vorteil dieser Löung(en). Es ist kein zyklischer Scriptlauf für irgendwelche Zeitvergleiche notwendig. Scripte sind nur erforderlich für das Beschreiben des Timers mit den variablen Inhalten. Natürlich kann man Timer auch mit normalen Programmen befüllen. Ist dann aber in der Variabilität etwas eingeschränkt. Ich benutze viele Timer, die ich nur mit Sekunden in einem Programm setze. Das Schöne an diesen Timern: da sie intern mit realen Uhrzeiten arbeiten, überleben sie auch einen Reboot der CCU.

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)“