Regel von Openhab 3.5 auf 4.0 ändern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

N1d45
Beiträge: 123
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von N1d45 »

Moin. Erst einmal Danke.

Ich werde mich heute Abend mal damit beschäftigen.

Ein paar Fragen dazu:
* Welche Sprache ist es?
* Muss man dazu eine Erweiterung (Automation) installieren?

Ich kann bei mir als Sprache (Skriptart) wählen:
* Blockly
* ECMAScript (ECMA - 262 Edition 5.1) Bedingt durch die Nashorn Erweiterung
* Rule DSL (v1)

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

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von Harka »

Mit Blockly in ECMAScript 262 Edition 11erzeugt und leicht nachpolliert.

Solltest auch beide ECMAScript-Versionen gleichzeitig installieren können.

N1d45
Beiträge: 123
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von N1d45 »

Muss man, damit man Blockly nutzen kann, eine Java Automation in openHAB installieren?

Ich bekomme selbst bei dem einfachsten Blockly Skripts folgende Fehlermeldung im log:

Code: Alles auswählen

[ERROR] [ipt.internal.ScriptEngineManagerImpl] - ScriptEngine for language 'application/javascript' could not be found for identifier: 850f53da-7fd2-4478-b0c6-346e71e683f1

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

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von udo1toni »

In openHAB4.0 verwendet Blockly GraalVM/JS (wie auch immer...), das ist das JavaScript Scripting ohne weitere Information im Namen (also ohne Nashorn), bzw. ECMAScript 2022+, wenn Du Rules erzeugst, ist das ECMAScript 262 Edition 11
Die JavaScript Engine (Nashorn) verwendet ECMAScript 5.1, wenn Du Rules erstellst heißt das ECMA - 262 Edition 5.1

Hier mal die Code Ansicht von einer UI Rule, welche je eine Action mit den beiden Versionen enthält:

Code: Alles auswählen

configuration: {}
triggers: []
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      type: application/javascript;version=ECMAScript-5.1
    type: script.ScriptAction
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
    type: script.ScriptAction
- inputs: {}
    id: "3"
    configuration:
      blockSource: <xml xmlns="https://developers.google.com/blockly/xml"></xml>
      type: application/javascript
      script: ""
    type: script.ScriptAction

Nur bei dem Script mit der ID 2 bietet openHAB aus dem Script Editor heraus an, das Script mittels Blockly zu erstellen (in OH4.1.0 M2)
Die ID 3 ist direkt aus der UI heraus als Blockly Script erzeugt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

N1d45
Beiträge: 123
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von N1d45 »

Das heißt indirekt das etwas bei mir nicht richtig installiert ist, wenn Blockly bei mir eine Fehlermeldung wirft? Es scheinst das dieses …
udo1toni hat geschrieben: 28. Okt 2023 11:35
Blockly GraalVM/JS (wie auch immer...),
bei mir nicht funktioniert.

Erst wenn ich ECMAScript 5.1 zusätzlich auswähle, verschwindet die Fehlermeldung. Der generierte Code ist dann aber auch völlig anders.

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

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von udo1toni »

Wenn Du openHAB4 nutzt, sollte Blockly die neue Engine verwenden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

N1d45
Beiträge: 123
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von N1d45 »

Macht es leider nicht. Zumindest nicht Stand Allone. Deshalb ja die Frage, ob ich da zwingend zusätzlich etwas installieren muss.

Bin gerade unterwegs. Ich muss zuhause mal schauen ob ich dieses GraalVM/JS irgendwie einbinden kann.

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

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von Harka »

der Wechsel ist hier beschrieben. Habe gerade das nachträgliche Installieren der neuen JS-Version unter Settings/Automation/JavaScript Scripting getestet - hier läufts.

N1d45
Beiträge: 123
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von N1d45 »

Ja. Das hatte ich schon gelesen.

Ich ging davon aus, wenn man das von openHAB empfohlene Blockly verwenden will, das man nichts zusätzlich installieren muss. Wie es aussieht, muss man aber JS Scripting Addon manuell installieren.

Bzw. hat dies nicht richtig funktioniert beim Upgrade von 3.5 auf 4.0

N1d45
Beiträge: 123
Registriert: 5. Jan 2020 14:26
Answers: 2

Re: Regel von Openhab 3.5 auf 4.0 ändern

Beitrag von N1d45 »

Das Nachinstallieren von Settings/Automation/JavaScript Scripting hat geholfen. Jetzt funktionieren auch von Haus aus mit Blockly erstellte Skripte.

Das einzige was noch nicht funktioniert, ein einzelnes Backslash in einen String über Blockly einzubinden.

Alexa braucht für ein Befehl in der Sprachausgabe eine Markierung von \Befehl\.

Wenn ich in Blockly ein \ schreibe wird automatisch ein \\ daraus.
Ich habe es jetzt händisch ohne Blockly gelöst:

Code: Alles auswählen

/* ECMAScript-11 Part (GraalJS) */
var ausgabeText = '';
var nameTimer = 'FensterTimer';
var timerZeitMinuten = 15;
var temperatur = 17;

function fTimerCode() {
  if (items.getItem('OpenWindows').numericState > 0 && items.getItem('SensEgg58_Temperatur').numericState < temperatur) {
    ausgabeText = '';
    if (((time.ZonedDateTime.now()).hour()) >= 19 || ((time.ZonedDateTime.now()).hour()) <= 6) ausgabeText += '<amazon:effect name="whispered"> ';
    if (items.getItem('FensterkontaktBadezimmer_Wert1').state == 'OPEN') ausgabeText += 'Bad <break time =\"200ms\"/>';
    if (items.getItem('FensterkontaktBalkon_Wert1').state == 'OPEN') ausgabeText += 'Balkon <break time =\"200ms\"/>';
    if (items.getItem('FensterkontaktSchlafzimmer_Wert1').state == 'OPEN') ausgabeText += 'Schlafen<break time =\"200ms\"/>';
    if (items.getItem('FensterkontaktBuro_Wert1').state == 'OPEN') ausgabeText += 'Niki <break time =\"200ms\"/>';
    if (items.getItem('FensterkontaktKinderzimmer_Wert1').state == 'OPEN') ausgabeText += 'Kinder <break time =\"200ms\"/>';
    if (items.getItem('FensterkontaktWohnzimmer_Wert1').state == 'OPEN') ausgabeText += 'Wohnen <break time =\"200ms\"/>';
    if (items.getItem('FensterkontaktKuche_Wert1').state == 'OPEN') ausgabeText += 'Küche <break time =\"200ms\"/>';
    ausgabeText += 'Fenster schließen';
    if (((time.ZonedDateTime.now()).hour()) >= 19 || ((time.ZonedDateTime.now()).hour()) <= 6) ausgabeText += '</amazon:effect>';
    console.info(ausgabeText);
    if (((time.ZonedDateTime.now()).hour()) <= 21 && ((time.ZonedDateTime.now()).hour()) >= 8) items.getItem('EchoNici_Sprich').sendCommand(ausgabeText);
    items.getItem('EchoWohnen_Sprich').sendCommand(ausgabeText);
    items.getItem('EchoKuche_Sprich').sendCommand(ausgabeText);
    items.getItem('EchoBad_Sprich').sendCommand(ausgabeText);
    if (cache.private.exists(nameTimer)) cache.private.get(nameTimer).reschedule(time.ZonedDateTime.now().plusMinutes(timerZeitMinuten));
  }
}

if (items.getItem('SensEgg58_Temperatur').numericState < temperatur) {
  if (cache.private.exists(nameTimer) === false || cache.private.get(nameTimer).hasTerminated()) {
    cache.private.put(nameTimer, actions.ScriptExecution.createTimer(nameTimer, time.ZonedDateTime.now().plusMinutes(timerZeitMinuten), function () {
      fTimerCode();
      }));
  } else {
    cache.private.get(nameTimer).reschedule(time.ZonedDateTime.now().plusMinutes(timerZeitMinuten));
  };
}

Antworten