Bei Berechnung Ergebnis nur als positive Zahl oder Null

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Ramme
Beiträge: 3
Registriert: 9. Jun 2020 11:04
Answers: 0

Bei Berechnung Ergebnis nur als positive Zahl oder Null

Beitrag von Ramme »

Hallo allerseits.
Ich habe in meinen Regeln eine Berechnung,bei der eine Negative Zahl raus kommt, wenn im Haus mehr Strom verbraucht als erzeugt wird. Diese Zahl soll dann als null dargestellt werden.
Ich habe überlegt, ein 2. Item anzulegen und dann über eine Regel eine negative Zahl als 0 darstellen zu lassen. Ist halt wieder ein Mehr an Daten in der Datenbank die man sich vieleicht sparen kann.
Gibt es auch eine Möglichkeit direkt in der Berechnungsregel negative Ergebnisse als 0 darzustellen?
Hier die Berechnungsregel wie sie aktuell ist:

rule "Einspeisung_Netz_Aktuell"
when
Item Einspeisung received update
then
Einspeisung_Netz_Aktuell.
postUpdate((Einspeisung_Aktuell.state as DecimalType) - (Hausverbrauch_Aktuell.state as DecimalType))
end

Irgendwie bekomm ichs nicht hin.
Danke für eure Ideen :)

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Bei Berechnung Ergebnis nur als positive Zahl oder Null

Beitrag von KellerK1nd »

Würde das selber tatsächlich über ein Proxyitem realisieren und nur das stellst du dann auch da.

Item:

Code: Alles auswählen

Number Einspeisung_Netz_Aktuell_Proxy "Einspeisung"
Regel:

Code: Alles auswählen

rule "Einspeisung_Netz_Aktuell in Proxyitem speichern"
when
Item Einspeisung_Netz_Aktuell changed
then
if((Item Einspeisung_Netz_Aktuell.state as Number) >= 0){
Einspeisung_Netz_Aktuell_Proxy.
postUpdate(Einspeisung_Aktuell.state as Number)
}
if((Item Einspeisung_Netz_Aktuell.state as Number) <=0){
Einspeisung_Netz_Aktuell_Proxy.postUpdate(0)
}
end
Es gilt aber zu beachten, das dein Item Einspeisung_Netz_Aktuell ohne Einheit sein darf, ansonsten gilt:

Regel:

Code: Alles auswählen

rule "Einspeisung_Netz_Aktuell in Proxyitem speichern"
when
Item Einspeisung_Netz_Aktuell changed
then
if((Item Einspeisung_Netz_Aktuell.state as Number).floatValue >= 0){
Einspeisung_Netz_Aktuell_Proxy.
postUpdate((Einspeisung_Aktuell.state as Number).floatValue)
}
if((Item Einspeisung_Netz_Aktuell.state as Number).floatValue <=0){
Einspeisung_Netz_Aktuell_Proxy.postUpdate(0)
}
end
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

Ramme
Beiträge: 3
Registriert: 9. Jun 2020 11:04
Answers: 0

Re: Bei Berechnung Ergebnis nur als positive Zahl oder Null

Beitrag von Ramme »

Hallo Kellerk1nd,
danke für deine Antwort. Diese Lösung hatte ich schon überlegt, es geht mir allerdings darum, ob man sich ein zusätzliches Item, und damit zusätzliche Datenbankeinträge, sparen kann.

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Bei Berechnung Ergebnis nur als positive Zahl oder Null

Beitrag von KellerK1nd »

Das eine Item macht das Kraut nicht fett. ;) Ich glaube schlecht geschriebene Regeln machen mehr aus, als 100 Items mehr in der Datenbank. Udo hat bestimmt noch eine einfachere Lösung, ich stecke in der Programmiersprache nicht so drin wie er, ich arbeite erst seit nem halben Jahr so richtig mit openHAB und lerne jeden Tag dazu.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Bei Berechnung Ergebnis nur als positive Zahl oder Null

Beitrag von Tokamak »

Vielleicht verstehe ich das Problem nicht richtig.

Warum nicht so

Code: Alles auswählen

rule "Einspeisung_Netz_Aktuell"
when
    Item Einspeisung_Aktuell received update
then
    val diff=(Einspeisung_Aktuell.state as Number) - (Hausverbrauch_Aktuell.state as Number)
    Einspeisung_Netz_Aktuell.postUpdate(if (diff>0) diff else 0)
end
Man könnte auch das Maximum von der Differenz und 0 nehmen, was aber die Lesbarkeit nicht erhöht.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Ramme
Beiträge: 3
Registriert: 9. Jun 2020 11:04
Answers: 0

Re: Bei Berechnung Ergebnis nur als positive Zahl oder Null

Beitrag von Ramme »

Tokamak hat geschrieben: 9. Jun 2020 14:44 Vielleicht verstehe ich das Problem nicht richtig.

Warum nicht so

Code: Alles auswählen

rule "Einspeisung_Netz_Aktuell"
when
    Item Einspeisung_Aktuell received update
then
    val diff=(Einspeisung_Aktuell.state as Number) - (Hausverbrauch_Aktuell.state as Number)
    Einspeisung_Netz_Aktuell.postUpdate(if (diff>0) diff else 0)
end
Man könnte auch das Maximum von der Differenz und 0 nehmen, was aber die Lesbarkeit nicht erhöht.
Danke,

hab die Regel mal danach angepasst und bisher schauts erstmal gut aus. Werds beobachten und dann Rückmeldung geben :)

Antworten