Seite 1 von 1

Rule bricht ab, obwohl nicht so programmiert

Verfasst: 26. Apr 2020 19:50
von OliverCJ
Hallo zusammen,

ich habe mal wieder eine, nein zwei, Fragen zu einer Rule...

Code: Alles auswählen

rule "Musik fuer Olli"

when
  Item Olli_Handy changed from OFF to ON

then
  if(Matzi_Handy.state == OFF) {
  Hub_EG_Aktion.sendCommand("Radio")
  }

end


rule "Squeezebox aus"

when
  Item gAnwesende changed from ON to OFF

then
  Hub_EG_Aktion.sendCommand("PowerOff")

end
Die erste Rule soll also die Harmony-Aktion "Radio" starten, wenn ich nach Hause komme, meine Frau aber nicht zu Hause ist.
Die zweite beendet jegliche Harmony-Aktion, wenn alle das Haus verlassen haben.

Beides funktioniert im Grunde auch. Nur gestern ist mir was aufgefallen: Wir sind gemeinsam nach Hause gekommen und mein Handy hat sich wohl 2 Sekunden früher ins Netz geloggt als das meiner Frau, also dudelte das Radio los... ging aber nach 3 Sekunden wieder aus. Und genau das meinte ich mit der Überschrift und ist meine 1. Frage:
Ein Ausschalten wenn beide zu Hause sind, habe ich nicht programmiert. Und wenn die Rule einmal gestartet ist und somit die Aktion, sollte die sich doch nicht wieder ausschalten. Warum hat sie das getan?
2. Ich würde gerne noch einen 10 Sekunden Timer einbauen, also wenn ich nach Hause komme und 10 Sekunden später bin ich immer noch alleine im Netz, dann soll das Radio erst starten... äh, Timer sind noch nicht so meins. Was nehm ich da am besten???

Danke!
VG, Oliver

Re: Rule bricht ab, obwohl nicht so programmiert

Verfasst: 27. Apr 2020 16:28
von Tokamak
Nein, das hast du nicht programmiert. Die Frage ist höchstens, wie die Gruppe gAnwesende tickt, ob sie aus irgendeinem Grunde OFF gegangen sein könnte.
Und: Wie verlässlich ist deine Anwesenheitserkennung?

Die Light-Variante der Rule mit Timer ist:

Code: Alles auswählen

rule "Musik fuer Olli"
when
  Item Olli_Handy changed from OFF to ON
then
    createTimer(now.plusSeconds(10), [| 
        if(Matzi_Handy.state == OFF) {
            Hub_EG_Aktion.sendCommand("Radio")
        }
    ])
end
Light, weil sie nicht darauf reagiert, wenn du das Haus innerhalb der 10 Sekunden Wartezeit verlässt. Dann geht die Musik an, wenn du gar nicht mehr da bist, und wird auch nicht wieder augeschaltet, weil die Rule "Squeezebox aus" innerhalb der 10 Sekunden bereits alles ausgeschaltet hat.

Da ist dann schon etwas mehr zu tun:

Code: Alles auswählen

var Timer radioTimer=null

rule "Musik fuer Olli"
when
  Item Olli_Handy changed
then
    if (radioTimer!==null) {
        radioTimer.cancel()
        radioTimer=null
    }
    if (Olli_Handy.state==ON) {
        radioTimer=createTimer(now.plusSeconds(10), [| 
                       if(Matzi_Handy.state == OFF) {
                           Hub_EG_Aktion.sendCommand("Radio")
                       }
                       radioTimer=null
                   ])
    }
end

Re: Rule bricht ab, obwohl nicht so programmiert

Verfasst: 23. Jul 2020 12:51
von OliverCJ
Hallo Tokamak,

es ist zwar schon ne Weile her, aber heute bin ich endlich mal dazu gekommen, die Rule anzupassen. Naja, es war irgendwie notgedrungen, denn heute Nacht um 1:23 scheinen sich beide Handys kurzzeitig aus dem WLAN verabschieden zu haben und prompt war meins das, welches sich 2 min später zuerst wieder eingeloggt hat und schon hatten wir einen schönen Wecker :( .

Also musste ich ran und habe dann direkt noch eingebaut, dass das Ganze nur zwischen 8 und 20 Uhr laufen soll.

Wir haben zwar noch nicht 20 Uhr, aber zumindest gerade jetzt funktioniert es prima. Von daher an dieser Stelle noch mal Danke!

Viele Grüße
Oliver

PS. Ich habe mich übrigens für die umfangreichere Variante entschieden...