Differenz von Item-Werten
-
- Beiträge: 123
- Registriert: 2. Feb 2021 21:31
Differenz von Item-Werten
Hi,
über Gruppen ziehe ich Summen von Item-Werten (z.B. Gesamtenergiebedarf).
Jetzt wollte ich das analog für eine Differenz machen, aber dafür braucht es (nach Adam Ries) ja eine Reihenfolge. Wie macht man das am besten? Würde die Differenz am liebsten in einem Hilfsitem zur Verfügung haben.
Danke!
Grüße
André
über Gruppen ziehe ich Summen von Item-Werten (z.B. Gesamtenergiebedarf).
Jetzt wollte ich das analog für eine Differenz machen, aber dafür braucht es (nach Adam Ries) ja eine Reihenfolge. Wie macht man das am besten? Würde die Differenz am liebsten in einem Hilfsitem zur Verfügung haben.
Danke!
Grüße
André
Du brauchst eine Rule, welche triggert, wenn sich der Status eines der beteiligten Items ändert, also z.B. (als DSL Code für Textdateien):
Fortan landet immer die Differenz zwischen Minuend und Subtrahend im Item Differenz, Vorausgesetzt, beide Items halten eine gültige Zahl. Die beiden if-Anweisungen brechen die Rule vorzeitig ab, falls dem nicht so ist, da es sonst zu einer Exception käme.
Gehe zur vollständigen AntwortCode: Alles auswählen
rule "Differenz errechnen"
when
Item Minuend changed or
Item Subtrahend changed
then
if(!(Minuend.state instanceof Number))
return;
if(!(Subtrahend.state instanceof Number))
return;
Differenz.postUpdate((Minuend.state instanceof Number).floatValue-(Subtrahend.state instanceof Number).floatValue)
end
--
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
-
- Beiträge: 188
- Registriert: 7. Jan 2020 14:45
- Kontaktdaten:
Re: Differenz von Item-Werten
Meinst Du zum Beispiel den Tagesverbrauch? Das kannst Du über die historischen Werte bekomme
Code: Alles auswählen
DeinItem.minimumSince(now.minusHours(24)).state)
BYe
Harald
Harald
-
- Beiträge: 123
- Registriert: 2. Feb 2021 21:31
Re: Differenz von Item-Werten
Danke für den Reply.
Nein, ich hab verschiedene Stromwerte und brauche die aktuelle Differenz.
Nein, ich hab verschiedene Stromwerte und brauche die aktuelle Differenz.
--
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
-
- Beiträge: 188
- Registriert: 7. Jan 2020 14:45
- Kontaktdaten:
Re: Differenz von Item-Werten
Bin mir nicht sicher ob ich Deine Frage verstanden habe ...
so etwas in der Art?
so etwas in der Art?
Code: Alles auswählen
var PowerSumme = StromzaehlerNormal_PowerL1.state as DecimalType + StromzaehlerNormal_PowerL2.state as DecimalType + StromzaehlerNormal_PowerL3.state as DecimalType
BYe
Harald
Harald
- udo1toni
- Beiträge: 13948
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Differenz von Item-Werten
Also, Du nutzt ein Group Item in der Form Group:Number:SUM gSumme ... und packst die Items zum Summieren in die Gruppe.
Ja, so kannst Du keine Differenz bilden
Was ginge, wäre, Items zu kennzeichnen, dass sie abgezogen werden sollen, also z.B.
Zahl1minus Zahl2minus Zahl3plus Zahl4plus Zahl5plus. Dann kannst Du eine Rule schreiben, die so aussieht:
Mutmaßlich wird es aber eh nur um zwei Werte gehen, die Du voneinander abziehen willst, also
Und falls es sich teilweise um UoM Items handelt, am besten (solange sie die gleiche Einheit nutzen):
Bei Addition oder Subtraktion von einheitenbehafteten Werten ist immer Vorsicht geboten, da kommen manchmal seltsame Werte raus, die erst nach langem Grübeln sinnvoll erscheinen. Deshalb ist es oft einfacher, die Einheit zu entfernen (wie im Beispiel).
Ja, so kannst Du keine Differenz bilden
Was ginge, wäre, Items zu kennzeichnen, dass sie abgezogen werden sollen, also z.B.
Zahl1minus Zahl2minus Zahl3plus Zahl4plus Zahl5plus. Dann kannst Du eine Rule schreiben, die so aussieht:
Code: Alles auswählen
var sum1 = 0
var sum2 = 0
gSumme.members.forEach[i|
if(i.name.endsWitch("minus"))
sum2 = sum2 + (i.state as Number)
else
sum1 = sum1 + (i.state as Number)
]
val ergebnis = sum1 - sum2
Code: Alles auswählen
val ergebnis = (Item1.state as Number) - (Item2.state as Number)
Code: Alles auswählen
val ergebnis = (Item1.state as Number).floatValue - (Item2.state as Number).floatValue
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 123
- Registriert: 2. Feb 2021 21:31
Re: Differenz von Item-Werten
Hey,
ja - ich hätte jetzt nach der Summe keine Differenz erwartet o)
Danke für das
Ganz doofe Frage: Wo schreibe ich das jetzt hin, damit das in einem Hilfsitem gespeichert wird? Ich versuche solche Sachen alle als Item zu handeln und diese Items dann stringent im UI zu verwenden. Keine Logik im UI o)
Danke!
Grüße
André
ja - ich hätte jetzt nach der Summe keine Differenz erwartet o)
Danke für das
Code: Alles auswählen
val ergebnis = (Item1.state as Number).floatValue - (Item2.state as Number).floatValue
Danke!
Grüße
André
--
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
- udo1toni
- Beiträge: 13948
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Differenz von Item-Werten
Du brauchst eine Rule, welche triggert, wenn sich der Status eines der beteiligten Items ändert, also z.B. (als DSL Code für Textdateien):
Fortan landet immer die Differenz zwischen Minuend und Subtrahend im Item Differenz, Vorausgesetzt, beide Items halten eine gültige Zahl. Die beiden if-Anweisungen brechen die Rule vorzeitig ab, falls dem nicht so ist, da es sonst zu einer Exception käme.
Code: Alles auswählen
rule "Differenz errechnen"
when
Item Minuend changed or
Item Subtrahend changed
then
if(!(Minuend.state instanceof Number))
return;
if(!(Subtrahend.state instanceof Number))
return;
Differenz.postUpdate((Minuend.state instanceof Number).floatValue-(Subtrahend.state instanceof Number).floatValue)
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 123
- Registriert: 2. Feb 2021 21:31
Re: Differenz von Item-Werten
alles klar. Hab vielen Dank!
--
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
Connectivity: Z-WAVE, TCP/IP, Hue Bridge und IO-Homecontrol
Backend: openHAB 3.3.0 im Docker Container auf QNAP NAS
UI: HABPanel auf Amazon Fire 8
-
- Beiträge: 59
- Registriert: 9. Mär 2018 16:06
Re: Differenz von Item-Werten
Ich klinke mich hier mal ein - genau das habe ich gesucht.EmptySoft hat geschrieben: ↑1. Dez 2022 15:20 Meinst Du zum Beispiel den Tagesverbrauch? Das kannst Du über die historischen Werte bekommeCode: Alles auswählen
DeinItem.minimumSince(now.minusHours(24)).state)
Aber wie bekomme ich das in der Sitemap angezeigt?
Das scheint nicht zu funktionieren.
Code: Alles auswählen
Text item=KE_s_wemos1_counter.minimumSince(now.minusHours(24))
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 6.4-13 auf Intel NUC 5i3ryh
- udo1toni
- Beiträge: 13948
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Differenz von Item-Werten
So funktioniert das nicht In einer Sitemap nutzt Du einen Verweis auf ein Item, nicht auf dessen Status (.state). Entsprechend kannst Du auch nicht andere Methoden verwenden.
Wenn Du also einen berechneten wert anzeigen lassen willst, musst Du ein Item für diesen Wert erzeugen (ohne Channel Link) und eine Rule anlegen, welche die Berechnung anstellt (z.B. .minimumSince(...).state) und das Ergebnis in das neue Item schreibt. Dieses Item kannst Du dann in der Sitemap verwenden.
Konkret für den Gasverbrauch (angenommen ist ein existierendes Item gasZaehler, welches den Zählerstand hält und ein Item gasVerbrauch zur Anzeige):
Wenn Du also einen berechneten wert anzeigen lassen willst, musst Du ein Item für diesen Wert erzeugen (ohne Channel Link) und eine Rule anlegen, welche die Berechnung anstellt (z.B. .minimumSince(...).state) und das Ergebnis in das neue Item schreibt. Dieses Item kannst Du dann in der Sitemap verwenden.
Konkret für den Gasverbrauch (angenommen ist ein existierendes Item gasZaehler, welches den Zählerstand hält und ein Item gasVerbrauch zur Anzeige):
Code: Alles auswählen
rule "Gasverbrauch aktualisieren"
when
Item gasZaehler changed or
Time cron "1 0 0 * * ?" // täglich um 00:00:01 Uhr
then
val midnight = LocalDateTime.of(LocalDate.now(),LocalTime.MIDNIGHT)
gasVerbracuh.postUpdate(gasZaehler.deltaSince(midnight))
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet