Rule mit Wertevergleiche eines Items

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Abraxsas
Beiträge: 56
Registriert: 24. Feb 2019 13:58
Answers: 0

Rule mit Wertevergleiche eines Items

Beitrag von Abraxsas »

Guten Morgen,

ich benötige mal einen kleinen Denkanstoß.
Ich messe an einer Steckdose die verbrauchte Leistung. Ich möchte jetzt das die Regel bei einer Leistungsänderung über einem bestimmten Wert erst reagiert. Anders gesagt ich möchte den alten wert und den neuen Leistungswert vergleichen und hierdrauf reagieren.

Code: Alles auswählen

rule Lampe2Aus

when Item Leistung_Stehlampe_Wohnzimmer changed

then

var Leistung = Leistung_Stehlampe_Wohnzimmer.state as Number

if (Leistung <= 15.0) {
EG_Plug_Stehlampe2.sendCommand(OFF)
}

end 
Dieses funktioniert allerdings nur wenn die Lesitunng unter 15 W fällt. Es soll aber Reagieren wenn die Leistung um mehr als 5 W Unterschied liegt.

Vielen Dank für eure Hilfe

Gruß
Tim

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Rule mit Wertevergleiche eines Items

Beitrag von int5749 »

Ungetestest aber so in etwas könnte es gehen

Code: Alles auswählen

rule Lampe2Aus

when Item Leistung_Stehlampe_Wohnzimmer changed

then

var Leistung = Leistung_Stehlampe_Wohnzimmer.state as Number

if (Leistung <= Leistung_Stehlampe_Wohnzimmer.previousState as Number +5) {
EG_Plug_Stehlampe2.sendCommand(OFF)
}

end 
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Rule mit Wertevergleiche eines Items

Beitrag von udo1toni »

Aber nur, wenn das Item persistiert wird. Ansonsten muss die Rule so aussehen:

Code: Alles auswählen

rule "Lampe 2 Aus"
when 
    Item Leistung_Stehlampe_Wohnzimmer changed
then
    var Leistung1 = newState as Number
    var Leistung2 = previousState as Number
    if (Leistung1 <= Leistung2 +5) {
        EG_Plug_Stehlampe2.sendCommand(OFF)
    }
end 
Streng genommen sollte man zunächst prüfen, ob beide impliziten Variablen auch eine gültige Zahl enthalten. So:

Code: Alles auswählen

rule "Lampe 2 Aus"
when 
    Item Leistung_Stehlampe_Wohnzimmer changed
then
    if(!(newState instanceof Number)) {
        logWarn("lampe2aus","kein gültiger neuer Wert! Abbruch")
        return;
    }
    if(!(previousState instanceof Number)) {
        logWarn("lampe2aus","kein gültiger alter Wert! Abbruch")
        return;
    }
    if ((newState as Number <= (previousState as Number) + 5) {
        EG_Plug_Stehlampe2.sendCommand(OFF)
    }
end 
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Abraxsas
Beiträge: 56
Registriert: 24. Feb 2019 13:58
Answers: 0

Re: Rule mit Wertevergleiche eines Items

Beitrag von Abraxsas »

if (Leistung1 <= Leistung2 +5)
Wenn ich es richtig verstehe dann muss hier die Leistung 1 kleiner = Leistung 2 sein. Die gemessene Leistung schwankt aber leider in beide Richtungen.
Die lampe hat 20W und Schwankt immerziwschen 19,3 und 21.

Ich dachte eher sowas wie das, aber hier scheinen die Typen unverträglich?!
rule "Lampe 2 Aus"
when
Item Leistung_Stehlampe_Wohnzimmer changed
then
var Leistung1 = newState as Number
var Leistung2 = previousState as Number
var Schwankung = Leistung1- Leistung2

if (Math.abs(Schwankung) >= 5) {
EG_Plug_Stehlampe2.sendCommand(OFF)
}
end
Das Problem wäre hier das Leistung 1 immer größer sein muss als Leistung 2.

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

Re: Rule mit Wertevergleiche eines Items

Beitrag von udo1toni »

Wieso? Math::abs(Schwankung) ergibt ja immer den Absolutwert. Aber ich habe evtl. das Szenario noch nicht ganz verstanden.
Du möchtest, dass die zweite Stehlampe ausgeschaltet wird, egal, ob die erste Stehlampe heller oder dunkler geregelt wird? Aber die normalen Schwankungen im Stromnetz sollen dabei ausgeblendet werden?.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Abraxsas
Beiträge: 56
Registriert: 24. Feb 2019 13:58
Answers: 0

Re: Rule mit Wertevergleiche eines Items

Beitrag von Abraxsas »

Also... Ich habe zwei Lampen, beide Stecken in einem Shellyplug. Die eine (Lampe1) wird über den Schalter der Lampe geschaltet. Deshalb die Anfrage der Wattzahl. Wenn die Wattzahl Steigt dann soll Lampe 2 mit angehen. Und wenn Lampe 1 wieder am Schalter ausgeschaltet wird dann soll auch Lampe 2w wieder ausgehen (das Funktioniert).

Aber, wenn lampe 1 aus ist und ich Lampe 2 alleine anschalte, dann wird sie natürlich wieder ausgeschalet wenn Lampe1 eine kleine Schewankung hat. (Lampe 1 hat ein netzteil was aus im ausgeschalteten zustand 1W verbraucht).

Ich wollte das nun umgehen das die Schaltbefehle nur geschaltet werden wenn der Leistungsunterschied mehr als 5 Watt beträgt.

Math::abs(Schwankung) ergibt ja immer den Absolutwert
Richtig Somit kann ich Sagen das der unterschiedswert immer Positiv ist. Weil die Leistungsunterschiede schwanken in beide Richtungen.

Verständlicher?

Bubbleman
Beiträge: 122
Registriert: 22. Dez 2020 17:03
Answers: 1

Re: Rule mit Wertevergleiche eines Items

Beitrag von Bubbleman »

Andere Möglichkeit:
Solltest du Tasmota auf den Shellys haben, dann gibt es dort "PowerDelta" welches in einer Tasmota Rule verwendet werden kann. So könntest du das auch in der Steckdose ablaufen lassen und dann zB ein Topic absetzen.
Ich nutze das zB um damit den Betriebszustand (1 oder 0) eines angeschlossenen Gerätes per Topic zu übermitteln, habe damit einen Betriebsstundenzähler.
openHAB 4.3.2 in einem Proxmox LXC, SONOFF Zigbee 3.0 USB Dongle Plus
PVE Hardware: ASRock N100M 32GB RAM, diverse SSD+HDD in einem weißen Jonsbo N4 Gehäuse (love it)

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

Re: Rule mit Wertevergleiche eines Items

Beitrag von udo1toni »

Na, dann musst Du aber nicht den Absolutwert erfassen. Leistung1 muss niedriger als Leistung2 sein. Zustand Lampe an -> Leistung1 ist hoch. Wie hoch auch immer, Leistung2 wird nicht mehr als 5 abweichen.
Zustand Lampe aus -> Leistung1 ist niedrig. Es gilt das Gleiche wie für Leistung1.
Lampe wird eingeschaltet: Leistung1 steigt, Leistung2 ist zunächst niedrig. -> Leistung1 >> als Leistung2 -> Lampe einschalten.
Lampe wird ausgeschaltet: Leistung1 sinkt, Leistung2 ist zunächst hoch. -> Leistung1 << als Leistung2 -> Lampe ausschalten.

Du brauchst also lediglich zwei Abfragen: (und das Vorzeichen muss geändert werden...)

Code: Alles auswählen

rule "Lampe 2 Aus"
when 
    Item Leistung_Stehlampe_Wohnzimmer changed
then
    if(!(newState instanceof Number)) {
        logWarn("lampe2aus","kein gültiger neuer Wert! Abbruch")
        return;
    }
    if(!(previousState instanceof Number)) {
        logWarn("lampe2aus","kein gültiger alter Wert! Abbruch")
        return;
    }
    if ((newState as Number) <= (previousState as Number) - 5) { // neuer Wert mindestens 5 unter altem Wert -> aus
        EG_Plug_Stehlampe2.sendCommand(OFF)
    }
    if ((newState as Number) >= (previousState as Number) + 5) { // neuer Wert mindestens 5 über altem Wert -> an
        EG_Plug_Stehlampe2.sendCommand(ON)
    }
end 
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Abraxsas
Beiträge: 56
Registriert: 24. Feb 2019 13:58
Answers: 0

Re: Rule mit Wertevergleiche eines Items

Beitrag von Abraxsas »

Auha...

Das kommt als Fehler :
fehler.JPG
??!!!!!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Rule mit Wertevergleiche eines Items

Beitrag von udo1toni »

Ja, da fehlt leider jeweils eine schließende Klammer nach dem (newState as Number. Ich hab es in meinem Posting korrigiert...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten