[phpBB Debug] PHP Warning: in file [ROOT]/ext/kinerity/bestanswer/event/main_listener.php on line 514: Undefined array key "poster_answers"
[phpBB Debug] PHP Warning: in file [ROOT]/ext/kinerity/bestanswer/event/main_listener.php on line 514: Undefined array key "poster_answers"
openhabforum.de • Probleme mit DSL Rule „if then else“ - Seite 2
Seite 2 von 2

Re: Probleme mit DSL Rule „if then else“

Verfasst: 19. Jan 2023 21:32
von udo1toni
fmmephisto hat geschrieben: 19. Jan 2023 20:46 Werde mal versuchen, die Timervariablen anders zu benennen. Damit sollte es ja möglich sein, dass mehrere Timer zur gleichen Zeit laufen.
Du kannst beliebig viele Timer gleichzeitig nutzen. Die Frage ist aber, was Du erreichen willst.
Geht es um zwei voneinander unabhängige Dinge, nutzt Du natürlich auch zwei voneinander unabhängige Timer.

Nutzt Du allerdings eine Abfolge von Befehlen (gerne genommen: partielle Bewässerung des Gartens, weil der Wasserdruck nicht ausreicht), ist es sinnvoller, eine Statemaschine zu bauen (ich nutze gerne das Bild eines mechanischen Programmschalters aus einer alten Waschmaschine).
Man nutzt dann nur einen einzigen Timer, der dafür aber mehrfach ausgeführt wird. Eine Hilfsvariable zählt dabei die Aufrufe mit und innerhalb des Codes wird je nach Schritt etwas anderes gemacht:

Code: Alles auswählen

var Timer tAblauf = null
var Integer iAblauf = 0

rule "Ablaufsteuerung"
when
    //irgendein Trigger, der den Vorgang startet
then
    tAblauf?.cancel // falls schon ein Timer existiert, entferne ihn
    iAblauf = 0    // initialisiere den Zähler
    iAblauf = createTimer(now.plusSeconds(1), [|
        iAblauf ++
        if(iAblauf == 1) Licht1.sendCommand(ON)
        if(iAblauf == 2) Licht1.sendCommand(OFF)
        if(iAblauf == 3) Licht2.sendCommand(ON)
        if(iAblauf == 4) Licht1.sendCommand(ON)
        if(iAblauf == 5) Licht2.sendCommand(OFF)
        if(iAblauf == 6) Licht1.sendCommand(OFF)
        if(iAblauf < 6) tAblauf.reschedule(now.plusSeconds(iAblauf))
    ])
end
Nur als Beispiel... Die Rule wird durch irgendeinen Trigger gestartet und initialisiert den Timer. Das dauert etwa zwei Millisekunden. danach ist die Rule beendet.

Nach einer Sekunde wird Licht1 durch den Timer eingeschaltet.
Nach einer weiteren Sekunde wird Licht1 ausgeschaltet.
Nach zwei weiteren Sekunden wird Licht2 eingeschaltet.
Nach drei weiteren Sekunden wird Licht1 eingeschaltet.
Nach vier weiteren Sekunden wird Licht2 ausgeschaltet.
Nach fünf weiteren Sekunden wird Licht1 ausgeschaltet.
Danach endet der Timer, ohne erneut geplant zu werden.

Das Codebeispiel ist weitgehend sinnfrei :) aber zumindest sollte klar werden, dass Timer sehr mächtig sein können. Die Rule wird nur einmal ausgeführt, aber es gibt sechs Schaltereignisse innerhalb 16 Sekunden, alles über einen einzigen Timer. Und natürlich kann man beliebige Werte verwenden, es geht hier ja nur um ein Beispiel.

Re: Probleme mit DSL Rule „if then else“

Verfasst: 20. Jan 2023 06:17
von fmmephisto
Danke!
Jetzt habe ich auch den Unterschied zwischen sendcommand und postupdate verstanden.
Habe für mich in meiner aktuellen 350 Items-Welt nur wenige postupdate-Anwendungsfälle gefunden. Ausser: es ist ein item ohne Channel, weil ich teilweise Items als Variablen nutze.Aber vielleicht ändert sich das alles nochmals.

Verstanden ist es.

Auch die Timer-Nummer habe ich nun glaube ich - wie beschrieben - verstanden.
Wenn ich 1 Lampe schalten will..... nehme ich z. b. einen Timer....
- Trigger löst aus...... Lampe 5 Sekunden in rot an
- nach 3 Sekunden kommt aber ein anderer Trigger und soll Lampe für 5 Sekunden auf grün schalten. Also Timer abbrechen, neu starten und Farbe ändern.
- Wenn Lampe 5 Sekunden an sein soll, aber die andere Steckdose zur gleichen Zeit 10 Sekunden an gehen sollen, nehme ich unterschiedliche Timer.

Auch verstanden.

Danke euch. Und der Anfang ist glaube ich sehr schwer. Wenn man die ersten grossen Betonwände überwunden hat, ist der Rest fast ein Kinderspiel.
Vielleicht starte ich mal ein Thema, wo ich so das eine oder andere als Erfahrung teile und versuche eine kleine "Anleitung für Anfänger" zu schreiben.
;)

Danke nochmals... Jetzt komme ich auch besser mit euren Codeschnipseln klar.

Re: Probleme mit DSL Rule „if then else“

Verfasst: 20. Jan 2023 06:56
von udo1toni
fmmephisto hat geschrieben: 20. Jan 2023 06:17 der Anfang ist glaube ich sehr schwer
Ja, das ganze Thema Smarthome wird extrem unterschätzt (also die Komplexität), nicht nur von vielen Hobbyisten, die einsteigen und erst mal erschlagen werden von all den Möglichkeiten, aber eben auch Voraussetzungen. Aber auch diverse Firmen, die "professionelle" Produkte in dem Bereich anbieten unterschätzen die Komplexität.

Aber wenn man sich erst mal reingewühlt hat, macht es auch sehr viel Spaß :) und im Gegensatz zur Modelleisenbahn im Keller ;) nutzt man das Smarthome buchstäblich die ganze Zeit über und hat also einen "echten" Nutzen davon (wobei ich die Modelleisenbahn nicht schlecht reden will...)

Re: Probleme mit DSL Rule „if then else“

Verfasst: 20. Jan 2023 07:11
von fmmephisto
Für Anfänger im Smarthome Bereich... klar.
Aber auch für die, die eigentlich schon viel mit Smarthome gemacht haben.
Ich habe mir auch über die Jahre schon einige Rauchmelder, Tür/Fensterkontakte, Bewegungsmelder, Kameras, HKTs, Schalter, Lampen angesammelt.
Die ganze Geschichte lief bisher auch absolut problemlos.
Schlimm wird es erst, wenn ein Anbieter, der schon ein gutes Angebot hatte, nun den Markt verlässt. Dann muss man schauen, wie man künftig die Dinge steuern kann. (Das war ja mein Problem!) Sich dann umzustellen ist schwer. Ich baue jetzt erstmal alle meine Szenarien/Rules auf OH3 um. Jeder Schalter, jede Lampe, alles. Auch wenn man es nicht unbedingt müsste. Aber ich lerne dadurch. Allein meine "Brandmelde- und Sicherheitszentrale" ist da schon eine Herausforderung. Dort werden Lampen in Farben gesteurt, je nach Zustand der Alarmanlage, ob an- oder abwesend, ob Stiller Alarm oder mit viel Licht und Sirenen.... nicht so einfach... aber ich bekomme es so langsam hin.

Smarthome wurde und wird noch immer von vielen unterschätzt. Man kann so viel damit machen. Aber viele sagen auch: wir wollen gar nicht in einem intelligenten Haus wohnen. Denen ist das teilweise unheimlich, wenn ich denen sage: Hey... mein Pool hat gerade 26Grad und mein Rasenmähroboter hat sich gerade wieder im Garten festgefahren.... :-) Dabei ist es auch schön, wenn man z. b. im Flur keine Lichtschalter mehr betätigen muss, weil das Licht angeht, wenn es Dunkel ist und ein Bewegung festgestellt wird. Beispiel: Arme/Hände voll vom Einkauf? Lichtschalter??? Nö. Licht geht selber an. Kellertreppe runter: Licht geht selber an und aus.

Alles nur ein paar blöde kleine Beispiele, die ich schon geniesse. Das was man hier im Forum liest, ist sicher noch besser. Werde auch mal schauen, ob ich mein Hörmann Garagentor über Smarthome steuern werde. Dafür brauche ich glaube ich nur irgendeinen Schalter. Aktuell habe ich ihn nur über einen Taster an der Wand gesteuert oder über die Original Zubehör Funktaster. Das muss auch noch anders gehen.

Re: Probleme mit DSL Rule „if then else“

Verfasst: 20. Jan 2023 10:00
von BOP
Ich bin im Laufe der Jahre allerdings auch wieder zurückgerudert. Sieht man jetzt mal davon ab, dass man sich streiten kann, was ein "Smart"home überhaupt ist (ein einfaches schalten über Bewegungsmelder oder zu bestimmten Uhrzeiten ist für mich eigentlich nicht "smart", sondern schlichte eine Automatisierung), betreibe ich mein "Smarthome" inzwischen als Komfortlösung. Oder anders ausgedrückt: Sollte das System mal ausfallen, kann ich alles weiterhin benutzen, aber eben ohne die Annehmlichkeiten.

ABER(!) das liegt bei mir hauptsächlich daran, dass ich keine Profisysteme (wie z.B. KNX) betreibe, die zuverlässig über Jahre (ohne Ausfälle) laufen. Meine Homematic und Zigbee Sachen sind halt Hobby.