[Gelöst] Mit Datum rechnen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

[Gelöst] Mit Datum rechnen

Beitrag von fischmir » 25.07.2021, 12:36

Hallo,

ich habe eine Rollade, welche in unterschiedliche einsetze. Je nachdem, ob miene Buchenhecke schon blickdicht ist.

Mit der Standardlogik sehe ich keine Möglichkeit, die Rollade immer am z.B. 10. Mai YYYY, da ich in der GUI immer ein "vollständiges Datum" eingeben muss. Daher habe ich eine SV erstellt ("Buchenhecke blickdicht") welche ich abhängig vom heutigen Tag setze.

Da ich mir unsicher bin, mit welcher Logik ich auf Monat/Tag rechnen kann, nutze ich derzeit %j => also den Tag im Jahr. Das sieht dann in einem anderen Skript wie folgt aus:

Code: Alles auswählen

!Buchenhecke blickdicht wahr/ falsch; von 10.Mai - 31.12.2020 wahr, sonst falsch

!Nummer des Tages im Jahr
integer sHeuteTagImJahr = system.Date("%j");

WriteLine("Heute: " #sHeuteTagImJahr);

!10. Mai 2020 ist der 131 Tag im Jahr
if (sHeuteTagImJahr >= 131)
{
WriteLine("wahr");
dom.GetObject("Buchenhecke blickdicht").State(1);
}else
{
WriteLine("falsch");
dom.GetObject("Buchenhecke blickdicht").State(0);
}

So richtig elegant ist das nicht.

Wie müsste das aussehen, wenn ich konkret auf den 10. Mai testen möchte?

Danke und Grüße
Christian
Zuletzt geändert von fischmir am 25.07.2021, 13:19, insgesamt 1-mal geändert.

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Mit Datum rechnen

Beitrag von 66er » 25.07.2021, 12:46

Hallo Christian.

Der 10.Mai ist alle 4 Jahre der 132ste Tag. :wink:
fischmir hat geschrieben:
25.07.2021, 12:36
...
Wie müsste das aussehen, wenn ich konkret auf den 10. Mai testen möchte?
...
Der Ansatz ist schon richtig.

- aktuelles Datum zerlegen in Tag und Monat.
- Wenn Tag=10 und Monat=5 ....

Viel Erfolg. :+1:

Stefan
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!

Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps

Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly

Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos

>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker

Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: Mit Datum rechnen

Beitrag von fischmir » 25.07.2021, 12:48

Nicht schön. Gehe ich recht in der Annhame, dass es keinen Datenttypen für "DATE" gibt?

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

Re: Mit Datum rechnen

Beitrag von Black » 25.07.2021, 12:50

Dein Ausdruck gibt einen String Zurück, mit diesem sind natürlich artihmetische Vergleiche für die Katz.
date.PNG
Hier siehst du, das trotz deiner Deklaration als integer nach system.Date aus deiner Variable ein String geworden ist.


Tip, benutz localtime.Day() und Localtime.Month(), damit kannst du bequem nach allem prüfen, deren Ergebnis ist auch Integer.

date2.PNG

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

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: Mit Datum rechnen

Beitrag von 66er » 25.07.2021, 13:06

Black hat geschrieben:
25.07.2021, 12:50
Dein Ausdruck gibt einen String Zurück, mit diesem sind natürlich artihmetische Vergleiche für die Katz.
...
Nur um auf ein Datum zu prüfen geht auch das.(Stringvergleich)
Nutze ich so z.B: zur Variablenerstellung am Monatsende für den nächsten Monat. :wink:

Rechnen damit geht natürlich nicht (direkt),

Der Unterschied beider Wege ist halt Stringvergleich vs. Zahlenvergleich.

LG
Stefan

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: Mit Datum rechnen

Beitrag von fischmir » 25.07.2021, 13:18

Ok, danke euch. Das hilf mir weiter!

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: [Gelöst] Mit Datum rechnen

Beitrag von alchy » 25.07.2021, 14:11

fischmir hat geschrieben:
25.07.2021, 12:48
Nicht schön. Gehe ich recht in der Annhame, dass es keinen Datenttypen für "DATE" gibt?
du meinst TIME?
Es gibt sogar Sachen wie .ToTime() was man eben auch auf Strings anwenden soll/muss wenn man eine string als Zeit betrachten will.


Aber nimm doch einfach .Yearday()
angewendet auf global definierte scriptvariablen currenttime oder localtime (deren Typ schon mal time ist)
ergibt .Yearday() automatisch integer.

Code: Alles auswählen

var sHeuteTagImJahr = currenttime.Yearday();
system.Date() ergibt glaube immer erstmal einen string, was dann erstmal zum Wandeln mittels .ToTime() zwingt.
Sollte aber z.B. auch so gehen.

Code: Alles auswählen

var sHeuteTagImJahr  = (system.Date("%F %X").ToTime()).Yearday();



Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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

Re: Mit Datum rechnen

Beitrag von Xel66 » 25.07.2021, 14:13

fischmir hat geschrieben:
25.07.2021, 12:48
Nicht schön. Gehe ich recht in der Annhame, dass es keinen Datenttypen für "DATE" gibt?
Wie? Du experimentierst mit Scripting und kennst die zugegebenermaßen rudimentären Dokumentationen des Herstellers nicht? In der Script Dokumentation (Teil 1: Sprachbeschreibung) ist unter "6.5.1 Zugriff auf einzelne Elemente" der Zugriff auf einzelne Elemente von time beschrieben.

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

MichaelN
Beiträge: 9534
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 692 Mal
Danksagung erhalten: 1604 Mal

Re: [Gelöst] Mit Datum rechnen

Beitrag von MichaelN » 25.07.2021, 14:15

Es geht doch viel einfacher. Ganz ohne Skript

Wenn Zeitmodul jährlich 10. Mai
Dann SV auf blickdicht

Und im Herbst eben entsprechend.

Smart wäre es, wenn du Tageslänge und Temperatur berücksichtigst und daraus berechnet wann die Hecke blickdicht ist.
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 +++

Antworten

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