Guten Tag,
ich möchte gerne eine Rule schreiben, die den einen Wert vom anderen abzieht.
Leider komme ich mit der OH-Doku nicht klar. so dass mir jeder Ansatz fehlt, die Rule zu editieren.
Im Menue links finde ich "Rules >", dann kann ich meine Idee benennen und When-Events zuordnen (s.u).
Bei "Then" komme ich nicht weiter. Edit: nun doch, habe den Schaltet 'Inline-Script' gefunden um eine DSL-Rule einzugeben:
mit hilfe göögle, liefert jedoch keinen Wert aus:
//Variante 1: Mit Einheiten (Empfohlen)
//Verwende diese Variante, wenn dein Ergebnis-Item ein Number:Power oder Number:Energy Item ist. Die Einheit wird automatisch beibehalten.
Zeile1: val val1 = Sonnen_Battery_Battery_Charging as QuantityType<Number>
Z2: val val2 = Sonnen_Battery_Battery_Discharging as QuantityType<Number>
//val val1 = (Sonnen_Battery_Battery_Charging as QuantityType<Number>).floatValue
//val val2 = (Sonnen_Battery_Battery_Discharging as QuantityType<Number>).floatValue
//Variante 2: Als reiner Zahlenwert (Fließkommazahl)
//Verwende diese Variante, wenn dein Ergebnis-Item ein einfaches Number Item ohne feste physikalische Einheit ist.
//val val1 = Sonnen_Battery_Battery_Charging.state as QuantityType<Number>
//val val2 = Sonnen_Battery_Battery_Discharging.state as QuantityType<Number>
Zeile3: val differenz = val1.subtract(val2)
// Wert an das Ergebnis-Item senden
Zeile4: Battery Bilanz Charging (sonnenbattery_bilanz_batteryCharging).postUpdate(differenz)
// (sonnenbattery_bilanz_batteryCharging).postUpdate(differenz)
Dem Ergebnis-Item wird kein Wert zugeordnet (NULL) - Was mache ich bitte falsch?
Newbie fragt: Rules schreiben in OH5
- udo1toni
- Beiträge: 15721
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Newbie fragt: Rules schreiben in OH5
Eine KI kann nur gute Ergebnisse liefern, wenn sie genug Ausgangsmaterial hat 
Zunächst mal: die Zuordnung oben ist durcheinander geraten. Du hast zwei Werte, Charging und Discharging und möchtest die Different dieser beiden Werte.
Variante 1 (mit Einheiten)
Gegeben:
Die Items Sonnen_Battery_Battery_Charging, Sonnen_Battery_Battery_Discharging und
sonnenbattery_bilanz_batteryCharging, alle vom Typ Number:Power (oder Number:Energy, aber alle vom selben Typ)
Variante 2 (ohne Einheiten)
Gegeben:
Die Items Sonnen_Battery_Battery_Charging, Sonnen_Battery_Battery_Discharging und
sonnenbattery_bilanz_batteryCharging, alle vom Typ Number:Power (oder Number:Energy, aber alle vom selben Typ)
Alle Items enthalten den gelieferten Wert in der gleichen Größe, also z.B. alle Power-Werte in Watt
Im Gegensatz zur ersten Variante muss bei der zweiten Variante die Einheit identisch sein, mischen (z.B. Wert 1 in Watt und Wert 2 in Milliwatt) ist nicht erlaubt
Als Trigger für die Rule musst Du zwei changed-Ereignisse setzen, und zwar
Sonnen_Battery_Battery_Charging changed orSonnen_Battery_Battery_Discharging changed, so dass bei jeder möglichen Änderung auch das Ergebnis neu berechnet wird.
Zunächst mal: die Zuordnung oben ist durcheinander geraten. Du hast zwei Werte, Charging und Discharging und möchtest die Different dieser beiden Werte.
Variante 1 (mit Einheiten)
Gegeben:
Die Items Sonnen_Battery_Battery_Charging, Sonnen_Battery_Battery_Discharging und
sonnenbattery_bilanz_batteryCharging, alle vom Typ Number:Power (oder Number:Energy, aber alle vom selben Typ)
Code: Alles auswählen
val nCharge = Sonnen_Battery_Battery_Charging.state as QuantityType<Number>
val nDischarge = Sonnen_Battery_Battery_Discharging.state as QuantityType<Number>
val nDiff = nCharge.subtract(nDischarge)
sonnenbattery_bilanz_batteryCharging.postUpdate(differenz)
Gegeben:
Die Items Sonnen_Battery_Battery_Charging, Sonnen_Battery_Battery_Discharging und
sonnenbattery_bilanz_batteryCharging, alle vom Typ Number:Power (oder Number:Energy, aber alle vom selben Typ)
Alle Items enthalten den gelieferten Wert in der gleichen Größe, also z.B. alle Power-Werte in Watt
Code: Alles auswählen
val nCharge = (Sonnen_Battery_Battery_Charging.state as Number).floatValue
val nDischarge = (Sonnen_Battery_Battery_Discharging.state as Number).floatValue
val nDiff = nCharge - nDischarge
sonnenbattery_bilanz_batteryCharging.postUpdate(differenz)
Als Trigger für die Rule musst Du zwei changed-Ereignisse setzen, und zwar
Sonnen_Battery_Battery_Charging changed orSonnen_Battery_Battery_Discharging changed, so dass bei jeder möglichen Änderung auch das Ergebnis neu berechnet wird.
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.2.3 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Hostsystem Proxmox VE 9.2.3 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte