Ankündigung

Einklappen
Keine Ankündigung bisher.

Homematic Rolladenaktor per Rule zeitversetzt schalten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Homematic Rolladenaktor per Rule zeitversetzt schalten

    Hallo,

    ich habe mir jetzt endlich mal einige Homematic Rolladenaktoren gegönnt. Im Homematic-Forum hatte ich mal gelesen, daß die Aktoren Aussetzer bekommen, wenn man diese alle gleichzeitig schaltet. Da ich dieses aber vor habe (per Switch Item alle Rolladen hoch/runter), würde ich gerne eine Regel haben, wo diese in ca. 5 Sekunden Abstand nacheinander runter/hoch fahren.
    Ich meine hier auch schon mal so eine Regel entdeckt zu haben, finde sie aber nicht mehr.

    Wäre nett, wenn mir jemand auf die Sprünge helfen würde.

    Hat hier jemand überhaupt diese Erfahrungen gemacht????

    Gruß Teasy

    #2
    Keine Ahnung, ob es eine elegantere Methode gibt...
    Code:
    Rule "alle Läden"
    when
        Item SShutter changed             //SShutter ist der Switch, über den die Gruppe gefahren wird.
    then
        GShutter?.members.forEach(S|{     //GShutter ist die Gruppe, der alle Shutter angehören
            S.sendCommand(SShutter.state) //S ist pro Durchlauf ein einzelnes Gruppenmitglied
            thread::sleep(5000)})         //5000msec Pause
    end
    Wobei die 5 Sekunden sicherlich sehr reichlich sind. Ich habe hier 20 Läden mit KNX, ohne Telegrammabstand fährt meist nur ein einzelner Laden nicht mit, und bei KNX kommen ja auch noch jede Menge Statusmeldungen über den Bus. Letztlich solltest Du den Wert experimentell ermitteln, bei em zuverlässig alle Läden fahren.

    Kommentar


      #3
      Vielen Dank für den Tip.

      Habe jetzt erstmal drei Aktoren eingebunden und da klappt es bis jetzt ohne Zeitverzögerung reibungslos. Es kommen aber noch drei. Ich werde das dann mal ausprobieren.

      Gruß Teasy

      Kommentar


        #4
        Muß das noch einmal ausgraben. Habe jetzt 6 Homematic Rolladenaktoren. Bekomme jetzt ab und zu die Servicemeldung im Homematic Konfigurator, daß die Kommunikation gestört ist. Deshalb wollte ich jetzt das mit der o.g. Rule lösen.

        Habe ich das richtig umgesetzt???

        Code:
        Rule "alle Rolladen"
        when
            Item alleRolladen changed             //alleRolladen ist der Switch, über den die Gruppe gefahren wird.
        then
            Rollershutter?.members.forEach(S|{     //Rollershutter ist die Gruppe, der alle Shutter angehören
                S.sendCommand(SShutter.state)     //S ist pro Durchlauf ein einzelnes Gruppenmitglied
                thread::sleep(5000)})                        //5000msec Pause
        end
        Irgendwie klappt das nicht.

        Gruß Teasy

        Kommentar


          #5
          Ja, in der Originalregel hieß das Trigger-Item Sshutter, wenn Du also auf alleRolladen triggern lässt, musst Du auch S.sendCommand(alleRolladen.state) in der Schleife aufrufen.

          Kommentar


            #6
            Ich bin zu blöd,

            bekomme das irgendwie einfach nicht zum laufen. Muss allerdings auch sagen, daß ich es länger nicht mehr versucht habe.

            Vielleicht kann man mir ja noch einmal helfen. Anbei die einzelnen Ausschnitte aus den Dateien:

            Items:
            Code:
            Group Rolladen <rollershutter> (gRolladen)
            Group:Rollershutter:OR(UP, DOWN, STOP) alleRolladen "Alle Rolladen [(%d)]" <rollershutter> (gRolladen)
            
            /* Rolladen */
            Rollershutter Wohnzimmer_TV  "Rollo Fernseher [%d %%]" <rollershutter> (alleRolladen) {homematic="address=xxx, channel=1, parameter=LEVEL"}
            Rollershutter Balkon           "Rollo Balkon [%d %%]"    <rollershutter> (alleRolladen) {homematic="address=xxx, channel=1, parameter=LEVEL"}
            Rollershutter Schlafzimmer   "Rollo Schlafzimmer [%d %%]"    <rollershutter> (alleRolladen) {homematic="address=xxx, channel=1, parameter=LEVEL"}
            Rollershutter Bad   "Rollo Bad [%d %%]"    <rollershutter> (alleRolladen) {homematic="address=xxx, channel=1, parameter=LEVEL"}
            Rollershutter Kueche   "Rollo Küche [%d %%]"    <rollershutter> (alleRolladen) {homematic="address=xxx, channel=1, parameter=LEVEL"}
            Rollershutter Arbeitszimmer   "Rollo Arbeitszimer [%d %%]"    <rollershutter> (alleRolladen) {homematic="address=xxx, channel=1, parameter=LEVEL"}
            Rule:
            Code:
            rule "alle Rolladen"
            when
                Item alleRolladen changed             //alleRolladen ist der Switch, über den die Gruppe gefahren wird.
            then
                gRolladen?.members.forEach(S|{     //gRolladen ist die Gruppe, der alle Shutter angehören
                    S.sendCommand(alleRolladen.state) //S ist pro Durchlauf ein einzelnes Gruppenmitglied
                    thread::sleep(5000)})         //5000msec Pause
            end
            Sitemap:
            Code:
            Frame label="Rolladen" {
                Text label="Alle Rolladen" icon="rollershutter" {
                    Switch item=Wohnzimmer_TV
                    Switch item=Balkon
                    Switch item=Schlafzimmer
                    Switch item=Bad
                    Switch item=Kueche
                    Switch item=Arbeitszimmer
                    Switch item=alleRolladen label="Alle Rolladen  [(%d %%)]" mappings=[UP="Hoch", STOP="X", DOWN="Runter"]
                    }
                }

            Kommentar


              #7
              Wenn Du die Kommentare in der Rule liest, sollte es eigentlich klar sein. Du musst nach dem then das gRolladen? in alleRolladen? ändern.
              Allerdings willst Du ja auch das GruppenItem verwenden, um die Rule zu triggern, verständlich, aber mit der vorliegenden Variante problematisch. Das Item wird nämlich einen Change melden, wenn z.B. alle Läden oben sind und ein einzelner Laden runter gefahren wird - dann fahren alle anderen Läden auch.
              Eventuell könntest Du das mit einem anderen Trigger lösen,
              Code:
              rule "alle Rollläden"
              when
                   Item alleRolladen received command
              then
                  alleRolladen?.members.forEach(S|{    
                      S.sendCommand(receivedCommand)
                      thread::sleep(500)})
              end

              Kommentar

              Lädt...
              X