OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Maverick-811
Beiträge: 64
Registriert: 1. Feb 2023 19:50
Answers: 0

OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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
von Harka » 29. Mär 2025 19:18
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.
Gehe zur vollständigen Antwort

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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.

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Maverick-811
Beiträge: 64
Registriert: 1. Feb 2023 19:50
Answers: 0

Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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

Maverick-811
Beiträge: 64
Registriert: 1. Feb 2023 19:50
Answers: 0

Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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

Maverick-811
Beiträge: 64
Registriert: 1. Feb 2023 19:50
Answers: 0

Re: OH 4.3.3 Blockly Mode Pobleme mit Now vergleich

Beitrag 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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten