Seite 1 von 1
Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 10:01
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
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 12:39
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
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 16:12
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
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 17:07
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.
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 17:15
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?.
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 17:58
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?
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 18:39
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.
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 18:44
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
Re: Rule mit Wertevergleiche eines Items
Verfasst: 20. Dez 2021 19:05
von Abraxsas
Auha...
Das kommt als Fehler :
fehler.JPG
??!!!!!
Re: Rule mit Wertevergleiche eines Items
Verfasst: 21. Dez 2021 09:50
von udo1toni
Ja, da fehlt leider jeweils eine schließende Klammer nach dem (newState as Number. Ich hab es in meinem Posting korrigiert...