Seite 1 von 1
OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 29. Mär 2025 18:02
von Maverick-811
Hallo Zusammen,
nachdem ich einen Update on 4.1.1 auf 4.3.3 gemacht habe funktioniert eine Rule nicht mehr.
Ich habe darin eine If Abfrage mit dem Wert von "NOW" und einer Zeitangabe. Die scheint nicht mehr zu funktionieren.
Ich habe mal nur eine If Abfrage von "NOW" großer gleich mit dem Wert "NOW -5 Sec" eingetragen und damit sollte doch die Anweisung immer ausgeführt werden. Oder?
Funktioniert bei euch alle Rules mit den Zeitwerten?
Ich hoffe, ihr könnt mir helfen
Grüße aus München
Hors
Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 29. Mär 2025 19:18
von Harka
Moin,
wie machst Du den Vergleich? Für Zeit gibt es einen Extra-Block
https://www.openhab.org/docs/configurat ... comparison und der funktioniert hier ohne rumzuzicken.
Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 29. Mär 2025 19:19
von udo1toni
Poste doch bitte mal den Inhalt der Code Ansicht (als Text, hier im Forum als Code markieren)
NOW gibt es in openHAB nicht. Eventuell meinst Du now (Groß/Kleinschreibung hat in openHAB eine Bedeutung)
Und ja, grundsätzlich funktionieren alle Rules, die unter openHAB 4.1 funktioniert haben auch unverändert unter openHAB 4.3.3 (ganz unabhängig von Zeit)
Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 29. Mär 2025 21:59
von Maverick-811
Hallo udo1toni,
ich habe now nur deshalb groß geschrieben um es hervorzuheben. Im Blockly Mode ist es ja vorgeschrieben.
Hier der Code:
Code: Alles auswählen
if ((time.ZonedDateTime.now()) >= time.ZonedDateTime.now().minusSeconds(5)) {
items.getItem('shellypro334987aa8afc4__192168178112_Betrieb_1').sendCommand('ON');
}
Ist ganz einfach, aber er funktioniert einfach nicht.
Gruß
Horst
Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 29. Mär 2025 22:08
von Maverick-811
Hallo Harka,
soll das heißen, dass der Vergleich mit einer IF Anweisung nicht geht?
In der OH 4.1.1 hat es funktioniert.
Hier der alte Code:
Code: Alles auswählen
var TitleK_C3_BCche, NextTimeK_C3_BCche, NextSollK_C3_BCche, TargetK_C3_BCche;
TitleK_C3_BCche = '';
NextTimeK_C3_BCche = items.getItem('Terminfilter_Kueche_Start').state;
TitleK_C3_BCche += String(items.getItem('Terminfilter_Kueche_Titel').state);
NextSollK_C3_BCche = TitleK_C3_BCche.slice(14, 18);
if ((time.ZonedDateTime.now()) >= NextTimeK_C3_BCche) {
TargetK_C3_BCche = NextSollK_C3_BCche;
items.getItem('TargetSetpointKueche').sendCommand(TargetK_C3_BCche);
NextTimeK_C3_BCche = items.getItem('Terminfilter_Kueche_Start').state;
if (items.getItem('TargetSetpointKueche').state >= items.getItem('ESP8266151Temp').state) {
items.getItem('shellypro334987aa8afc4__192168178112_Betrieb_1').sendCommand('ON');
} else {
items.getItem('shellypro334987aa8afc4__192168178112_Betrieb_1').sendCommand('OFF');
}
}
Gruß
Horst
Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 30. Mär 2025 08:01
von Harka
Moin,
das gibt hier jeweils eine Fehlermeldung im Log. item.state gibt einen Wert vom Typ String zurück. Dies mit Typ DateTime zu vergleichen habe ich bisher nie versucht. Nimm den oben genannten Block und für die Variable "NextTimeK_C3_BCche"
Datetime_from_item
Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich
Verfasst: 31. Mär 2025 16:31
von Maverick-811
Hallo zusammen,
erst mal Danke an Harka für die Info.
Es gibt wahrschein eine Änderung bzgl. der IF Abfrage aus OH 4.1.1 und 4.3.3
Wie bereits (siehe oben) hatte ich eine If-Abfrage mit "now" größer-gleich einer Variablen mit einem Datum/Zeit Wert.
Die funktioniert nicht mehr in OH 4.3.3
Deshalb habe ich die IF-Abfrage, wie von Harka geschrieben geändert.
Hier das geändert Blockly:
Blockly_1.jpg
und hier der Code:
Code: Alles auswählen
var TitleK_C3_BCche, NextSollK_C3_BCche, TargetK_C3_BCche;
// graalVM
function zdtCompare(zdt1, zdt2, compareOp, precision, compDate) {
switch (precision) {
case 'years':
zdt2 = zdt2.withMonth(zdt1.monthValue());
case 'months':
zdt2 = zdt2.withDayOfMonth(zdt1.dayOfMonth());
case 'days':
zdt2 = zdt2.withHour(zdt1.hour());
case 'hours':
zdt2 = zdt2.withMinute(zdt1.minute());
case 'minutes':
zdt2 = zdt2.withSecond(zdt1.second());
case 'seconds':
zdt2 = zdt2.withNano(zdt1.nano());
}
if (compDate === 'date') {
zdt1 = zdt1.toLocalDate();
zdt2 = zdt2.toLocalDate();
} else if (compDate === 'time') {
zdt1 = zdt1.toLocalTime();
zdt2 = zdt2.toLocalTime();
}
switch (compareOp) {
case 'before':
return zdt1.isBefore(zdt2);
case 'equal':
return zdt1.equals(zdt2);
case 'after':
return zdt1.isAfter(zdt2);
case 'beforeEqual':
return zdt1.isBefore(zdt2) || zdt1.equals(zdt2);
case 'afterEqual':
return zdt1.isAfter(zdt2) || zdt1.equals(zdt2);
}
}
TitleK_C3_BCche = '';
TitleK_C3_BCche += String(items.getItem('Terminfilter_Kueche_Titel').state);
NextSollK_C3_BCche = TitleK_C3_BCche.slice(14, 18);
if (zdtCompare((time.ZonedDateTime.now()), (time.toZDT(items.getItem('Terminfilter_Kueche_Start'))), 'afterEqual', 'seconds', 'dateandtime')) {
TargetK_C3_BCche = NextSollK_C3_BCche;
items.getItem('TargetSetpointKueche').sendCommand(TargetK_C3_BCche);
}
if (items.getItem('TargetSetpointKueche').state >= items.getItem('ESP8266151Temp').state) {
items.getItem('shellypro334987aa8afc4__192168178112_Betrieb_1').sendCommand('ON');
} else {
items.getItem('shellypro334987aa8afc4__192168178112_Betrieb_1').sendCommand('OFF');
}
Vielen Dank für eure Hilfe
Horst