Berechnung in einer rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
goerdi
Beiträge: 120
Registriert: 21. Dez 2019 23:44
Answers: 1

Berechnung in einer rule

Beitrag von goerdi »

Hi !

Ich möchte einen Wert getilt durch 1000 in eine anndere Variable schreiben.
Ich hab schon verschiedene rules getestet... entweder meckert openhab schon beim anlegen oder es kommt ein Fehler beim ausführen...
Could not cast 751 to void; line 8 (das ist vom letzten Versuch...

Code: Alles auswählen

rule "calc used energy to kWh"

when
    Item opendtu_used_energy changed
then
//      var nkWh = opendtu_used_energy / 1000
      opendtu_used_energy_kwh.postUpdate((opendtu_used_energy.state as number) / (1000) )
end
mit der Variable zwischendrin hab ich es auch schon probiert... ging auch nicht ..
beide Items sind als "number" angelegt....

Gruss Gerd

nw378
Beiträge: 345
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Berechnung in einer rule

Beitrag von nw378 »

versuch's mal mit:

Code: Alles auswählen

opendtu_used_energy_kwh.postUpdate((opendtu_used_energy.state as number).floatValue / (1000) )
openHAB 5.0.2 @ RPi 5 / M.2 SSD - openhabian/Debian 13.1 (trixie) - InfluxDB2 und Grafana @ Synology Docker - KNX, Viessmann vcontrol, u.v.m.

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

Re: Berechnung in einer rule

Beitrag von udo1toni »

Stopp!

Warum willst Du überhaupt selbst teilen?
Woher bekommt das Item seinen Status (welches Binding...)? Wie ist das Item definiert? Wie ist der Channel definiert?

openHAB beherrscht Units of Measurement. Bei den meisten Bindings ist das inzwischen mit eingebaut, so dass man "nur" Channel und Item korrekt definieren muss, um auch korrekte Messwerte geliefert zu bekommen.
Bei bestimmten Bindings kann es etwas tricky sein, den Wert samt korrekter Einheit zu übergeben, wenn man das aber mal eingerichtet hat, musst Du nur noch angeben, in welcher Einheit Du die Anzeige haben willst.
Hier ist es wohl so, dass Wh im Item landen. Es handelt sich also um ein Number:Energy Item. Wenn Du im Channel konfigurierst, dass der Wert mit Wh als Einheit empfangen wird, reicht es, beim Item als gewünschte Einheit kWh hinzuschreiben und der Wert wird direkt korrekt angezeigt.

Ach so... Per Rule :)

Gegeben, dass Du das Item nicht als Number:Energy Item anlegen kannst, wäre der korrekte Ausdruck:

Code: Alles auswählen

opendtu_used_energy_kwh.postUpdate((opendtu_used_energy.state as Number).floatValue/1000)
Beachte die Groß-/Kleinschreibung, number gibt es nicht, wohl aber Number.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

goerdi
Beiträge: 120
Registriert: 21. Dez 2019 23:44
Answers: 1

Re: Berechnung in einer rule

Beitrag von goerdi »

Hi !

Ich will einen Wert der in kWh ist mit dem Wh Wert verrechnen.... dazu muss ich ja beides auf dem gleichen level haben...
das Mit der Anzeige ist mir schon klar...

Gruss Gerd

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

Re: Berechnung in einer rule

Beitrag von udo1toni »

Nein. :)
Der Punkt mit UoM ist, dass der Wert mit Einheit da steht. Du kannst die beiden Werte ganz einfach miteinander verrechnen.

Allerdings: Du musst openHAB hier einen kleinen Hinweis geben, dass es sich um QuantityType handelt.

Code: Alles auswählen

val mySum = (Item1.state as QuantityType<Energy>) + (Item2.state as QuantityType<Energy>)
sollte in mySum dann die Summe enthalten, ebenfalls als QuantityType<Energy>, wobei die Werte korrekt nach Wert verrechnet werden.

Auch Multiplikation sollte funktionieren, und zwar so richtig... also die Multiplikation Number:ElectricPotential * Number:ElectricCurrent * Number:Time sollte als Ergebnis Number:Energy liefern (wobei einem klar sein muss, dass das nur näherungsweise stimmen kann, und auch nur, wenn es sich bei Spannung und Strom um echte Mittelwerte über die gesamte Zeitspanne handelt)
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

goerdi
Beiträge: 120
Registriert: 21. Dez 2019 23:44
Answers: 1

Re: Berechnung in einer rule

Beitrag von goerdi »

Hi !

Also Wert a ist 1,5 kWh und Wert 2 sind 500 wh das oll gehen ? Woher weiss das System dass der zweite Wert keine 500 kWh sind sondern nur 500 Wh ?

Gruss Gerd

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

Re: Berechnung in einer rule

Beitrag von udo1toni »

Das geht, weil die Einheit mit übergeben wird. Du musst lediglich die Werte als QuantityType<Energy> verwenden, nicht als Number.floatValue.
Probiere es einfach aus, Du wirst (positiv) überrascht sein.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

Antworten