Seite 1 von 1

Rule mit Feedback -> Lampen blinken

Verfasst: 12. Nov 2022 12:23
von mad-mike
Hallo zusammen.

Ich möchte eine ""Feedback"" Kontrolle, wenn ich ein Taster drücke.
Besagter Taster ist neben der Haustür, und wird beim verlassen des Hauses einmal gedrückt, -> Zack sind alle Lampen aus.

nun habe ich dies so gelöst:

Code: Alles auswählen

rule "Zentral_off"
when

    Channel "shelly:shelly25-relay:784c5f2ecc:relay2#button" triggered SHORT_PRESSED or         //Taster - Haustür
    Item Zentral_taster changed to ON                                           //APP


then

    Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)  
    Thread::sleep(500)
    Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)  
    Thread::sleep(500)
    Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)  
    Thread::sleep(500)
    Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)  
    Thread::sleep(1000)
    Lampe.sendCommand(OFF)                                                      //Gruppe OFF
    HTTPURLThing_km7.sendCommand(ON)                                            //Relai ON
    Zentral_taster.sendCommand(OFF)                                             //APP Schalter
    
end
Jedoch weiß ich, das hier einige User Verbesserungs Vorschläge haben, um das ganze zu optimieren.

Nun wollte ich mal ganz nett fragen, ob man das so realisiert, oder ob man auch dies optimieren kann??

Danke und Gruss

Re: Rule mit Feedback -> Lampen blinken

Verfasst: 12. Nov 2022 18:00
von udo1toni
Naheliegend wäre, einen Timer zu nutzen :)

Code: Alles auswählen

var Timer tZentralAus = null                                                                // ein Zeiger für einen Timer
var Integer iZentralAus                                                                     // ein Zähler
val Integer iMio = 1000000

rule "Zentral_off"
when
    Channel "shelly:shelly25-relay:784c5f2ecc:relay2#button" triggered SHORT_PRESSED or     // Taster - Haustür
    Item Zentral_taster changed to ON                                                       // APP
then
    tZentralAus?.cancel                                                                     // Falls Timer existiert, weg damit
    iZentralAus = 5                                                                         // Zähler initialisieren
    tZentralAus = createTimer(now.plusNanos(10*iMio), [|                                    // Timer anlegen und fast sofort starten
        iZentralAus-=1                                                                      // Zähler runterzählen
        if(iZentralAus < 1) {                                                               // falls am Ende angekommen
            Lampe.sendCommand(OFF)                                                          // Gruppe OFF
            HTTPURLThing_km7.sendCommand(ON)                                                // Relais ON
            Zentral_taster.sendCommand(OFF)                                                 // APP Schalter
        } else {                                                                            // ansonsten
            Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)    // toggle Relais
            tZentralAus.reschedule(now.plusNanos((if(iZentralAus > 1) 500 else 1000)*iMio)) // plane den Timer erneut ein
        }
    ])
end
Da JavaTime kein plusMillis() kennt, muss es plusNanos() sein, was um den Faktor Million größere Zahlen bedeutet. Die Zahlen kann man natürlich auch ausschreiben :) dann kann man sich auch die eine oder andere Klammer sparen.

Relais ist übrigens Singular und Plural, blöde Franzosen...

Re: Rule mit Feedback -> Lampen blinken

Verfasst: 13. Nov 2022 11:03
von mad-mike
Danke.
Funktioniert auf Anhieb.
;)