Seite 1 von 1

Regeloptimierung: Beamer an - Leinwand runter

Verfasst: 19. Feb 2021 22:09
von christian1312
Ich habe folgendes Problem ... Ich steuer meine Leinwand über einen Shelly 2.5 an.
Sobald der Verbrauch des Beamers steigt, soll die Leinwand herunterfahren.
Wenn der Verbrauch wieder gegen 0 geht soll die Leinwand hochfahren.

Das ganze funktioniert auch, allerdings wird das UP und DOWN Signal permanent gesendet.

Nun soll die Regel ergänzt werden, sodass die Position der Leinwand zuerst überprüft wird.
Allerdings bekomme ich das nicht hin.

Meine aktuelle Regel sieht wie folgt aus:

Code: Alles auswählen

// Beamer an - Leinwand runter
rule "Beamer an"
when
    Item eg_partyraum_beamer changed
then
    var Number verbrauch = eg_partyraum_beamer.state as Number
    if (verbrauch > 50) 
    {
        // eg_partyraum_leinwand.sendCommand(DOWN)
    }
    if (verbrauch <= 50) 
    {
        // eg_partyraum_leinwand.sendCommand(UP)
    }
end
Und durch folgende Änderung wollte ich das permante Senden des Signals vermeinden:

Code: Alles auswählen

// Beamer an - Leinwand runter
rule "Beamer an"
when
    Item eg_partyraum_beamer changed
then
    var Number verbrauch = eg_partyraum_beamer.state as Number
    var Number position = leinwandposition.state as Number
    if (verbrauch > 50 && position = 0) 
    {
        // eg_partyraum_leinwand.sendCommand(DOWN)
    }
    if (verbrauch <= 50 && position = 100) 
    {
        // eg_partyraum_leinwand.sendCommand(UP)
    }
end
Oder kann er die leinwandposition.state nicht als Number ausgeben?

Kann mir jemand helfen?

Danke!

Re: Regeloptimierung: Beamer an - Leinwand runter

Verfasst: 19. Feb 2021 22:22
von int5749
Aber dann würde ja bei jeder Stromänderung (beim starten des Beamers sicher häufiger zum aufwärmen) ein ON senden.
Ich würde ein entweder ein Dummy Item nehmen, welches nach einem ON auf 1 gesetzt wird und dies mit abfragen (nur in Unkenntnis, was der Shelly der Leinwand liefern kann). Alternativ, wenn der Shelly Strom liefert, würde ich kein ON mehr senden, sobald Shelly bereits Strom liefert.
Als letzte Möglichkeit nur dan nein ON senden, wenn der Stelly nicht ON ist.

z.B.

Code: Alles auswählen

if (verbrauch <= 50 && shellyLeinwand != ON)

Re: Regeloptimierung: Beamer an - Leinwand runter

Verfasst: 20. Feb 2021 03:36
von udo1toni
Die Frage ist ja, wie die Items definiert sind.

Re: Regeloptimierung: Beamer an - Leinwand runter

Verfasst: 20. Feb 2021 19:51
von christian1312
Also mit den Dummys kenne ich mich nicht aus. Wie würde das aussehen?

Die Items sehen wie folgt aus:
// Partyraum

// Beleuchtung
Switch eg_partyraum_licht_jackdaniels "Jack Daniels" <lightbulb> (licht) {channel="shelly:shellyplugs:6a645b:relay#output"}
Switch eg_partyraum_licht_kilkenny "Kilkenny" <lightbulb> (licht) {channel="shelly:shellyplugs:021ba6:relay#output"}

// Multimedia
Rollershutter eg_partyraum_leinwand "Leinwand" <projector> {channel="shelly:shelly25-roller:8caab5058f78:roller#control"}

// Sonstiges
Number eg_partyraum_beamer "Verbrauch Beamer" <projector> {channel="shelly:shellyplugs:6a5e11:meter#currentWatts"}
Switch eg_partyraum_kuehlschrank "Kühlschrank" <switch> {channel="avmfritz:FRITZ_DECT_200:192_168_178_1:087610357401:outlet"}
Switch eg_partyraum_zapfanlage "Zapfanlage" <switch> {channel="shelly:shellyplugs:62774a1dce:relay#output"}

Re: Regeloptimierung: Beamer an - Leinwand runter

Verfasst: 20. Feb 2021 19:53
von christian1312
int5749 hat geschrieben: 19. Feb 2021 22:22 Aber dann würde ja bei jeder Stromänderung (beim starten des Beamers sicher häufiger zum aufwärmen) ein ON senden.
Ich würde ein entweder ein Dummy Item nehmen, welches nach einem ON auf 1 gesetzt wird und dies mit abfragen (nur in Unkenntnis, was der Shelly der Leinwand liefern kann). Alternativ, wenn der Shelly Strom liefert, würde ich kein ON mehr senden, sobald Shelly bereits Strom liefert.
Als letzte Möglichkeit nur dan nein ON senden, wenn der Stelly nicht ON ist.

z.B.

Code: Alles auswählen

if (verbrauch <= 50 && shellyLeinwand != ON)
Genau das ist ja mein Problem, das permanent Signale gesendet werden. Denn selbst wenn der Beamer aus ist, ist er im Standby immer zwischen 0.0 und 0.4 Watt, sodass immer eine Statusänderung vorliegt und dadurch ein erneutes UP geschickt wird.

Re: Regeloptimierung: Beamer an - Leinwand runter

Verfasst: 21. Feb 2021 02:01
von udo1toni
Gewöhnlich löse ich das so:

Code: Alles auswählen

// Beamer an - Leinwand runter
rule "Beamer an"
when
    Item eg_partyraum_beamer changed
then
    val verbrauch = (eg_partyraum_beamer.state as Number).floatValue

    var Soll = 0

    if (verbrauch > 50) 
        Soll = 100

    if(eg_partyraum_leinwand.state != Soll)
        eg_partyraum_leinwand.sendCommand(Soll)
end
Die Rule steuert so natürlich über absolute Positionen. Sollte das nicht möglich sein, so müsste man das sendCommand leicht abändern, z.B. so:

Code: Alles auswählen

        eg_partyraum_leinwand.sendCommand(if(Soll == 100) DOWN else UP)