Seite 1 von 1

OpenHab 2 Rules Addon Verzögerung?

Verfasst: 24. Jan 2019 16:51
von NeticsDE
Hallo,

zurzeit nutze ich das openHab2 auf meine Raspberry. Alles funktioniert auch wirklich super zuverlässig. Ich habe nun das Problem das wenn ich eine Regel erstelle mit meinen Kriterien schaltet er es zwar super, doch mein LED Controller schaltet zu langsam. Er verschluckt dann Befehle. Zur Erklärung

Wenn

XYZ

Dann

An
Color XYZ
Off

Aber nur wenn

XYZ

Ich brauche aber nach ON eine kleine Pause und nach dem Farbwechsel auch eine kleine Pause bis er dann wieder aus geht.


Ich nutze die PaperUI das für mein Verwendungszweck auch wirklich reicht. Nur er prügelt die Befehle einfach zu schnell durch sodass einfach der Farbwechsel nicht durch kommt bzw nur sporadisch.

Gibt es da eine Lösung oder muss ich zwingend auf diverse Tools umsteigen wie es sich eigentlich gehört? Wenn das zu vermeiden ist würde ich das wirklich bevorzugen.

LG Jan

Re: OpenHab 2 Rules Addon Verzögerung?

Verfasst: 24. Jan 2019 23:37
von udo1toni
Die Next Generation Rules sind immer noch experimentell. In den "alten" Rules ist diese Problem keines, wahlweise (wenn die Pause wirklich klein sein soll) mit einem kurzen Thread::sleep() (weniger als 500 Millisekunden) oder mit einem internen Timer. Die Syntax ist auch einfach und fast alle Rules, die in den diversen Foren zu finden sind, laufen in der alten Rule Engine. Konkret sähe das so aus:

Code: Alles auswählen

var Timer myTimer = null                                    // Timer Variable definieren
var Number nStep = 0                                        // Zähler Variable definieren

rule "Farbalarm"                                            // Rule Name
when
    Item XYZ received command                               // Trigger
then                                                        // Tu das
    if(ZYX.state == ON) {                                   // aber nur falls
        myTimer?.cancel                                     // falls ein Timer aktiv ist, canceln
        nStep = 0                                           // Zähler initialisieren
        myTimer = createTimer(now, [|                       // Timer anlegen (und sofort ausführen)
            nStep ++                                        // Zähler erhöhen
            switch nStep {                                  // selektiv nach Zähler
                case 1 : {                                  // falls 1
                    abc.sendCommand(ON)                     // einschalten
                    myTimer.reschedule(now.plusMillis(500)) // Timer neu planen (in 500 Millisekunden)
                }
                case 2 : {                                  // falls 2
                    abc.sendCommand(color as HSBType)       // Farbe setzen
                    myTimer.reschedule(now.plusSeconds(15)) // Timer neu planen (in 15 Sekunden)
                }
                default : {                                 // ansonsten
                    abc.sendCommand(OFF)                    // ausschalten
                    myTimer = null                          // Timervariable leeren
                }
            }
        ])
    }
end
Diese Rule ist eine kleine State Maschine, da sie nur eine Steuergröße hat, könnte man es auch als Chaser bezeichnen. Die Befehle sollten einigermaßen selbsterklärend sein. Natürlich sind einige Teile nur angedeutet, da Du in Deinem Posting auch nur allgemein beschrieben hast.