Java neu - Berechnungen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

dobby
Beiträge: 23
Registriert: 29. Jan 2022 19:53
Answers: 0

Java neu - Berechnungen

Beitrag von dobby »

Hallo!
Ich habe OH 4 auf einem Raspi 5 installiert. Die Regeln von OH 3 funktionieren da nicht mehr, soweit so gut. Die Syntax sollte ich verstanden haben. Es funktionieren jedoch die einfachsten Berechnungen nicht. Die folgende Subtraktion funktioniert nicht:
items.getItem('prod_tag').postUpdate((items.getItem('smartmeter_produziert').state)-(items.getItem('prod_start').state);
Es wird in "prod_tag" immer nur der Wert von "prod_start" geschrieben. Alle items sind numerisch. Ich habe verschiedene Variationen mit Klammern ausprobiert, leider ohne Erfolg. Etwas, wahrscheinlich Banales, übersehe ich.
Ich hoffe jemand kann mir helfen
Danke

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

Re: Java neu - Berechnungen

Beitrag von udo1toni »

Was Du da zeigst, ist mutmaßlich JavaScript.

Der erste Punkt ist, Du musst unter openHAB4 explizit das JavaScript Scripting Addon installieren (bei openHAB3 war dies automatisch installiert). Punkt zwei ist, es gibt zwei verschiedene Versionen davon. "Nashorn" ist die alte Engine, wenn Du die installierst, sollten die JavaScript Rules auf openHAB3 direkt funktionieren (evtl. mit ein paar Kleinigkeiten, die Du noch anpassen musst) "Graal" ist die moderne Version, die einerseits mehr Anpassungen erfordert, andererseits aber weniger Code braucht, weil diverse Dinge direkter erreichbar sind. Dieses ganze items.getItem-Gedöns sollte viel einfacher funktionieren.
Und was den Status betrifft, wenn Du den als numerischne Wert haben willst, gibt es (zumindest in Graal) .numericState, welches Du explizit auswählen musst.
Genaueres findest Du aber auch in der offiziellen Doku, dort ist JavaScript Scripting inzwischen sehr umfangreich dokumentiert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Harka
Beiträge: 311
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: JavaScript neu - Berechnungen

Beitrag von Harka »

Moin,
sieht eher nach JavaScript aus ;-)
Versuch mal bitte

Code: Alles auswählen

items.getItem('prod_tag').postUpdate((items.getItem('smartmeter_produziert').numericState)-(items.getItem('prod_start').numericState);
Wenn es funktioniert solltest Du Dich noch mit den UoM beschäftigen.

PS. Udo war schneller

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

Re: Java neu - Berechnungen

Beitrag von udo1toni »

Harka hat geschrieben: 10. Apr 2024 22:21 PS. Udo war schneller
Hihi... ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

dobby
Beiträge: 23
Registriert: 29. Jan 2022 19:53
Answers: 0

Re: Java neu - Berechnungen

Beitrag von dobby »

Funktioniert noch immer nicht.
Ich habe folgende add-ons installiert
JavaScript Scripting
JRule - openHAB Rules using Java
Den Code habe ich um die fehlende Klammer ergänzt.

Code: Alles auswählen

items.getItem('prod_tag').postUpdate((items.getItem('smartmeter_produziert').numericState)-(items.getItem('prod_start').numericState));
Alle Items sind als Number definiert. Sollte ich die falschen Add-ons installiert haben?

Harka
Beiträge: 311
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: JavaScript neu - Berechnungen

Beitrag von Harka »

Wie verwaltest Du Deine Regeln? Wenn über die UI -> klapp mal bitte mit dem Pfeil untern rechts die Details auf. Dort sollte ECMAScript 262 Edition 11 aktiviert sein.
Wenn du OH4 als openhabian installiert hast ist automatisch auch frontail für die Logs dabei und unter der Adresse IP:9001 erreichbar. Kommen dort Fehler? Was wird angezeigt wenn Du mit
console.info(items.getItem('DeinItem').numericState);
die Ausgangswerte ausgeben lässt?

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

Re: Java neu - Berechnungen

Beitrag von udo1toni »

Ich möchte auch den Tipp geben, lieber strukturierten Code zu produzieren, als Einzeiler.

Also eher so:

Code: Alles auswählen

val prod = items.getItem('smartmeter_produziert').numericState;
val start = items.getItem('prod_start').numericState;
items.getItem('prod_tag').postUpdate(prod - start);
Zeig doch mal bitte die komplette Codeansicht der Rule (also den gesamten yaml Code).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

dobby
Beiträge: 23
Registriert: 29. Jan 2022 19:53
Answers: 0

Re: Java neu - Berechnungen

Beitrag von dobby »

Ich habe jetzt einiges ausprobiert. ECMAScript 262 Edition 11 ist aktiviert. Folgender Code funktioniert

Code: Alles auswählen

items.getItem('prod_tag').postUpdate(23);

Code: Alles auswählen

items.getItem('prod_tag').postUpdate(items.getItem('prod_start').state);

Code: Alles auswählen

items.getItem('prod_tag').postUpdate(23-17);
Nicht funktiert

Code: Alles auswählen

items.getItem('prod_tag').postUpdate((items.getItem('smartmeter_produziert').state)-(items.getItem('prod_start').state));

Code: Alles auswählen

items.getItem('prod_tag').postUpdate((items.getItem('smartmeter_produziert').numericState)-(items.getItem('prod_start').numericState));
Auch Dein Tipp mit Variablen zu rechnen hat nicht funktioniert.

Vielleicht hast Du ja noch eine Idee.

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

Re: Java neu - Berechnungen

Beitrag von udo1toni »

Wie sind die Items definiert (welcher EXAKTE Typ)?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

dobby
Beiträge: 23
Registriert: 29. Jan 2022 19:53
Answers: 0

Re: Java neu - Berechnungen

Beitrag von dobby »

Alle als Number

Antworten