Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Gildo
Beiträge: 17
Registriert: 17.06.2018, 11:36
Hat sich bedankt: 1 Mal

Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Beitrag von Gildo » 02.04.2021, 12:46

Hallo und Frohe Ostern an alle.

Ich hab ein kleinen Problem und weis einfach nicht wo der Fehler ist:

Nach dem Wechsel von der CCU2 auf die CCU3 geht der befehl überprüfe den 1 Tag des Monats

Code: Alles auswählen

if (system.Date("%d") ==1)  {
nicht mehr.

Wochen gehen ohne Probleme

Code: Alles auswählen

if (system.Date("%u") == 1) {
Meine CCU3 hat die aktuelle Firmwareversion: 3.57.4 installiert.

Hat jemand eine Idee woran das liegen könnte

im prinzip sieht das dann so aus

Code: Alles auswählen

!Monatszaehler
if (system.Date("%d") == 1) {
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var vMg = dom.GetObject("Strom Verbrauch laufender Monat");
vMz.State(vMg.State() + vMz.State());
vMg.State(0.00);
Grüße
Gildo
Je älter mann wird, um so mehr Zeit hat man für die Bastelei an der HomeMatic :lol:

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

Re: Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Beitrag von dtp » 02.04.2021, 13:03

Versuch's mal mit

Code: Alles auswählen

if(system.Date("%d") == "01"){...}
oder mit

Code: Alles auswählen

if(system.Date("%d").ToInteger() == 1){...}
Tipp: einfach mal mit

Code: Alles auswählen

WriteLine(system.Date("%d"));
schauen, was da so ausgespuckt wird.
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.

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

Re: Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Beitrag von Black » 02.04.2021, 13:10

der Ansatz von dtp war schon der richtig Weg. System.Date liefert als ergebnis einen String.
sdate.PNG

und dein <vergleich eines <strings auf eine integer ist da nicht zielführend, weil ein nicht leerer string immer als Bool wahr bzw integer 1 erkannt wird. heisst, egal was system.Date zurückgibt, solange es irgendwas ist und kein Leerstring ist deine Bedingung immer erfüllt

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

[sprotte80]
Beiträge: 336
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Beitrag von [sprotte80] » 02.04.2021, 13:26

Hi

gleich nen Int nehmen

Code: Alles auswählen

if (localtime.Day() == 1) { }
WriteLine(localtime.Day());
Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

Gildo
Beiträge: 17
Registriert: 17.06.2018, 11:36
Hat sich bedankt: 1 Mal

Re: Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Beitrag von Gildo » 02.04.2021, 13:32

Danke dtp und Black für die schnelle Hilfe.

Das was dtp als erste Hilfe angeboten hat war schon erfolgreich :D

Code: Alles auswählen

if(system.Date("%d") == "01"){...}
auf die Idee mit den Anführungszeichen bin ich nicht gekommen.

Ist nur komisch das es mit der CCU2 funktioniert hat und die CCU3 das nicht mehr versteht.

Also nochmals vielen Dank und allen Frohe Ostern

Gildo
Je älter mann wird, um so mehr Zeit hat man für die Bastelei an der HomeMatic :lol:

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

Re: Nach Wechsel von CCU2 auf CCU3 gerht if (system.Date("%d") nicht mehr

Beitrag von Xel66 » 02.04.2021, 14:01

Gildo hat geschrieben:
02.04.2021, 13:32
Ist nur komisch das es mit der CCU2 funktioniert hat und die CCU3 das nicht mehr versteht.
Hmmm... nicht wirklich komisch. Die CCU wandelt intern die Variablentypen je nach Inhalt bedarfsmäßig um. Erst kürzlich habe ich wieder gemahnt, sich auf diesen Automatismus, der in anderen Sprachen auch eher unüblich ist, zu verlassen. Kann durchaus mal sein, dass dieses überarbeitet und an das Verhalten in anderen Scriptsprachen angeglichen wird. Scriptvariablen deklariert man eben vorzugsweise für den Typ, für den man sie auch zu verwenden gedenkt, bzw. beim Import von Inhalt wandelt man diesen auf das entsprechende Typsystem.

Beispiel: Wenn man eben das Datum importiert, wandelt man es eben in das Format, mit dem man solche Vergleiche anstellen will. Will ich das Datum integer vergleichen, dann wandelt man es eben in eine Integerzahl. Ein Vergleich von integer mit string kann nur wie von Black dargelegt in die Hose gehen. Mit dem Verzicht auf die automatische Typwandlung ist man vor irgendwelchen Automatikwandlungsfehlern wenigstens relativ sicher. Alternativ wandelt man direkt vor der Vergleichs- oder mathematische Operation. Die Mathematikfunktionen der Scriptsprache halten auch so einige Überraschungen bereit. Da kommt bei 1.2 * 3 auch nicht unbedingt das Gleiche wie bei 3 * 1.2 raus.

Code: Alles auswählen

real produkt_a = 1.2 * 3;
WriteLine(produkt_a);
real produkt_b = 3 * 1.2;
WriteLine(produkt_b);
Gruß und frohe Ostern 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)“