Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
smart
Beiträge: 24
Registriert: 10.02.2015, 07:24

Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von smart » 06.04.2021, 18:25

Hi,
für ein kleines Projekt benötige ich die jeweils aktuelle Tageszeit, genauer gesagt nur die aktuelle Stunde, in einer Systemvariable "daytime_hour".
Beispiel: von 9:00 bis 9:59 ist daytime_hour=="9" (string oder int egal)
um 10:00 wechselt die daytime_hour auf "10"

Dabei soll die daytime_hour halbwegs aktuell sein spätestens 30 Sekunden nachdem die Tageszeit auf 10:00 wechselt, muss in daytime_hour die "10" stehen.

Prinzipiell gibt es genügend Beispiele im Forum um die aktuelle Uhrzeit in eine Systemvar zu schreiben und das auf die Stunde zu beschränken, sollte auch kein Problem sein.
Allerdings würde das bedeuten, dass ich das Script zur Umwandlung alle 30 Sekunden laufen lassen müsste.
Daher meine Frage: gibt es dafür eine elegantere Möglichkeit, die weniger CPU "Last" erzeugt und trotzdem die gewünschte Genauigkeit liefert?

Gruß,
Markus

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

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von Baxxy » 06.04.2021, 18:52

smart hat geschrieben:
06.04.2021, 18:25
Allerdings würde das bedeuten, dass ich das Script zur Umwandlung alle 30 Sekunden laufen lassen müsste.
Warum? Die volle Stunde ändert sich doch nur jede Stunde. Ich würde zu jeder vollen Stunde mittels WebUI-Programm und CUxD-Timerdevice als Trigger (alternativ Zeitmodul der Zentrale) und Einzeilerscript die SysVar befüllen.

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von dtp » 07.04.2021, 16:45

Genau.

Oder zu jeder vollen Stunde einfach das folgende kleine Skript aufrufen:

Code: Alles auswählen

string svHour = "Name der Systemvariablen";
time currentHour;

currentHour = system.Date("%H").ToTime();
WriteLine(currentHour);

dom.GetObject(ID_SYSTEM_VARIABLES).Get(svHour)).State(currentHour);
Achtung: ist mehr oder weniger aus dem Stehgreif geschrieben und kann daher noch Fehler aufweisen.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

smart
Beiträge: 24
Registriert: 10.02.2015, 07:24

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von smart » 07.04.2021, 16:56

Ich hatte das folgende Programm ausprobiert. Problem: es wird nur einmal getriggert und nicht, wie im Zeitmodul eingestellt, jede Stunde.
Programm_timer_jede_stunde.PNG
timer_jede_stunde_zeitmodul.PNG
timer_jede_stunde_zeitmodul.PNG (20.39 KiB) 695 mal betrachtet
Als Script verwende ich

Code: Alles auswählen

integer zeit = (system.Date("%H").ToInteger());
dom.GetObject("daytime_hour").State(zeit);

Gruß,
Markus

frd030
Beiträge: 3613
Registriert: 14.07.2019, 20:49
System: CCU
Hat sich bedankt: 844 Mal
Danksagung erhalten: 539 Mal

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von frd030 » 07.04.2021, 17:03

smart hat geschrieben:
07.04.2021, 16:56
Ich hatte das folgende Programm ausprobiert. Problem: es wird nur einmal getriggert und nicht, wie im Zeitmodul eingestellt, jede Stunde.
Im Zeitmodul mal "Zeitspanne" und "Ganztägig" auswählen. Den Rest so lassen.
Falls das auch nicht geht: Programm dann zur Sicherheit mal ohne Skript testen, z.B. Lampe ein und ausschalten.

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

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von Xel66 » 07.04.2021, 17:14

Ich würde eine feste Uhrzeit eingeben 0:00 bis 23:59 Uhr. So erfolgt das erste Triggern nicht irgendwann in der Stunde (abhängig vom Bootzeitpunkt oder Einrichtung des Programms) und dann nachfolgend im Abstand von einer Stunde, sondern zu einem festen Starttermin und dann alle volle Stunde. Der Rest unten kann so bleiben. Und für "Projekte" würde ich immer das Zahlenformat und keinesfalls String benutzen, wenn man damit Vergleiche oder Berechnungen anstellen will, denn 01 ist nicht größer 1 als Stringvergleich.

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

smart
Beiträge: 24
Registriert: 10.02.2015, 07:24

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von smart » 07.04.2021, 18:39

Hi,
Xel66 hat geschrieben:
07.04.2021, 17:14
Ich würde eine feste Uhrzeit eingeben 0:00 bis 23:59 Uhr. So erfolgt das erste Triggern nicht irgendwann in der Stunde (abhängig vom Bootzeitpunkt oder Einrichtung des Programms) und dann nachfolgend im Abstand von einer Stunde, sondern zu einem festen Starttermin und dann alle volle Stunde. Der Rest unten kann so bleiben. Und für "Projekte" würde ich immer das Zahlenformat und keinesfalls String benutzen, wenn man damit Vergleiche oder Berechnungen anstellen will, denn 01 ist nicht größer 1 als Stringvergleich.
Ich hatte es auch mit Zeitspanne versucht. allerdings nicht über den ganzen Tag. Probiere ich aber mal aus.
Die 23:05 bei Startpunkt waren nur zum Testen, da es beim Programm erstellen gerade kurz nach 23:00 war und ich wollte, dass das Programm kurzfristig das erste mal getriggert wird. Hat auch geklappt, danach allerdings nicht mehr.

BTW, daytime_hour ist vom Typ Zahl.

Gruß,
Markus

smart
Beiträge: 24
Registriert: 10.02.2015, 07:24

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von smart » 07.04.2021, 18:44

Hi,
frd030 hat geschrieben:
07.04.2021, 17:03
smart hat geschrieben:
07.04.2021, 16:56
Ich hatte das folgende Programm ausprobiert. Problem: es wird nur einmal getriggert und nicht, wie im Zeitmodul eingestellt, jede Stunde.
Im Zeitmodul mal "Zeitspanne" und "Ganztägig" auswählen. Den Rest so lassen.
Falls das auch nicht geht: Programm dann zur Sicherheit mal ohne Skript testen, z.B. Lampe ein und ausschalten.
Wenn ich Zeitspanne = ganztägig wähle, habe ich doch das Problem, dass der Startzeitpunkt zufällig (genauer Erstellzeitpunkt oder Neustartzeitpunkt) ist (siehe auch Einwand von Xel66).


Gruß,
Markus

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

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von Xel66 » 07.04.2021, 22:13

Nein, der Startzeitpunkt ist 0:00 Uhr. Und von da an stündlich. Das "Ganztägig" kann man für andere (kürzere) Intervalle benutzen. Mal abgesehen, dass ich dem Anwendungszweck nicht so recht folgen kann, würde ich für stündlich Trigger auf 00 auf CUxD-Timer setzen.

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

smart
Beiträge: 24
Registriert: 10.02.2015, 07:24

Re: Aktuelle Uhrzeit (nur Stunde) in Systemvariable ohne "Dauer-Polling"?

Beitrag von smart » 07.04.2021, 22:59

Hi,
Xel66 hat geschrieben:
07.04.2021, 22:13
Nein, der Startzeitpunkt ist 0:00 Uhr. Und von da an stündlich. Das "Ganztägig" kann man für andere (kürzere) Intervalle benutzen. Mal abgesehen, dass ich dem Anwendungszweck nicht so recht folgen kann, würde ich für stündlich Trigger auf 00 auf CUxD-Timer setzen.
Das bei der Zeitspanne auch autmatisch die Anfangszeit immer der Startpunkt ist war der entscheidende Hinweis. Läuft jetzt. Danke!

Gruß,
Markus.

Antworten

Zurück zu „HomeMatic allgemein“