Seite 1 von 1

Berechnung in einer rule

Verfasst: 8. Nov 2025 14:19
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

Re: Berechnung in einer rule

Verfasst: 8. Nov 2025 17:56
von nw378
versuch's mal mit:

Code: Alles auswählen

opendtu_used_energy_kwh.postUpdate((opendtu_used_energy.state as number).floatValue / (1000) )

Re: Berechnung in einer rule

Verfasst: 8. Nov 2025 23:28
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.

Re: Berechnung in einer rule

Verfasst: 9. Nov 2025 13:36
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

Re: Berechnung in einer rule

Verfasst: 9. Nov 2025 16:45
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)

Re: Berechnung in einer rule

Verfasst: 11. Nov 2025 20:22
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

Re: Berechnung in einer rule

Verfasst: 11. Nov 2025 22:48
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.