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.
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.
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
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:
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.
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
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.
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)
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...)