Ankündigung

Einklappen
Keine Ankündigung bisher.

Reihenfolge von items in Group

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

    Reihenfolge von items in Group

    Kennt jemand von euch eine Möglichkeit die Reihenfolge von items in einer group zu beeinflussen?

    Ich möchte gerne in einer foreach schleife alle Lichter in meiner Gruppe ausschalten und nicht sofort im dunkeln stehen.

    Ich kann Reihenfolge nicht durch das Auftreten der items im .item file beeinflussen (1.6.2 release)

    #2
    Hi,
    ich hatte ein ähnliches Problem und habe es so gelöst, das ich die Items für die Gruppe in der 'richtigen' Reihenfolge definiert und der Gruppe zugewiesen habe. Hat funktioniert. Aber richtig handlich fand ich es auch nicht. Ich wäre auch daran interessiert, wie man die Reihenfolge 'extern' beeinflussen kann.
    Gruß
    Peter

    Kommentar


      #3
      Zitat von Tulamidan Beitrag anzeigen

      Ich möchte gerne in einer foreach schleife alle Lichter in meiner Gruppe ausschalten und nicht sofort im dunkeln stehen.
      was spricht dagegen, eine Rule zu schreiben, die die Lichter nacheinander auschaltet?

      Kommentar


        #4
        Von hinten durch die Brust ins Auge: innerhalb forEach den Namen der Items ermitteln und die gewünschten Items auslassen; in einem zweiten Schritt dann für die ausgelassenen Items nach Ablauf eines Timers das Abschalten nachholen. In dem Zusammenhang finde ich die Nummer mit dem Filter interessant, die Schleife schaut dann nur nach eingeschalteten Lichtern

        Kommentar


          #5
          @thoern: Das geht natürlich, ist aber nicht sonderlich smart... sollten Groups einem diese copy&paste Arien nicht ersparen?
          udo1toni: Wenn ich dich richtig verstehe müsste ich dann aber noch irgendwie sortieren, oder?

          @pschauder: Du initialisierts also die group mit einer rule zu systemstart in der Reihenfolge wie du die item schalten möchtest? Wäre zwar auch eine copy&paste Arie, aber dann kann ich mit der Group immerhin zur laufzeit normal arbeiten.

          Kommentar


            #6
            Du kannst aber auch ein komplett anderes Konstrukt bauen.

            1.) Bei der System initialisierung wird eine Array erzeugt, in dem alle Lampen sind. Hierrüber legst du dann die Reihenfolge fest. Geht auch mit einer Hashmap in der der Key dann die Reihenfolge abbildet, Also Lamp1, Lamp2, ...
            2.) In der Regel gehst du dann durch das Array und prüfst über die Gruppe, ob eine Lampe an ist und schaltest diese dann aus

            Heisst aber, dass Du neben der Gruppe auch das Array pflegen musst.

            Ber nochmal zum Hintergrund. Du möchtest quasi das gesamte Licht ausmachen ohne dass du direkt im Dunkeln stehst. ICh würde mal davon ausgehen, dass eine Schleife über alle Lampen quasi auch keine Zeit benötigt, so dass Du auch recht schnell im dunkeln stehst, also quasi sofort, wenn du keine Verzögerung einbaust. Das könnte man aber mal durch eine einfache Schleife über die Gruppe ausprobieren, denn zum Test kommst ja nicht auf die Reihenfolge an. Ich würde wetten, dass das ganze nicht mehr als 1 Sekunde dauert. Weiter Frage ist, ob Du immer vom selben Standort das Licht ausmachst? Beispiel. Reigenfolge ist Küche, Wohnzimmer, Büro, Bad. Wenn Du im Bad stehst, stehst du als letztes im Dunkeln, wenn du aber in der Küche stehst, dann sofort.

            Gruß
            Thomas

            Kommentar


              #7
              Ich habe einen Nachtmodus, der mir alle Lichter ausschaltet und die BWM sperrt. Momentan habe ich 1s delay in meiner foreach Schleife und damit benötige ich ca. 30s bis alle Lichter und BWM versorgt sind. Das musste ich machen, da OH die Befehle offenbar zu schnell für deb Bus rausgefeuert und sporadisch BWM nicht gesperrt wurden oder Lichter nicht ausgeschaltet wurden. (knx via usb)
              Wenn wir abends die Babys füttern schlafen sie meistens ein und wir tragens sie so nach oben ins Bett. Wir wollen sie nicht durch das Flutlicht im Gang (bwm) wecken, darum schalten wir den Nachmodus an einer Stelle vor dem Treppenhaus ein - somit geht kein unerwünschtes Licht an.

              Wenn jetzt aber der Andere noch am Füttern ist - sitzt er/sie im Dunkeln und so muss man nun immer warten, bis die Gruppe durchgelaufen ist und kann dann das Licht wieder einschalten. Wenn alles Licht gleichzeit ausgehen würde - kein Problem. Dann schaltet man halt sofort wieder ein anderes Licht an und muss nicht warten.

              Wenn jetzt das Licht im Wohnzimmer als Erstes ausgehen würde, dann kann man es gleich wieder einschalten und das Kind ins Bett bringen während der Andere noch füttert. Das wäre meine bevorzugte Lösung.

              Ich habe jetzt also folgende Optionen:
              a) Neue Gruppe anlegen bei der das Wohnzimmer ausgenommen ist - doof weil ich eine weitere Gruppe pflegen, sowie meinen Nachtmodus anpassen muss... aber mit vertretbarem Aufwand machbar.
              b) Bei systemstart ein Array definieren, in dem die items eingefügt werden - noch mehr Aufwand
              c) udo1tonis Lösung mit dem Filter, bei der ich noch nicht ganz durchsteige.
              d) einfach eine eigene Rule mit allen items anlegen - auch nicht so smart und ähnlich zu b)

              e) einen change request stellen, wie items in groups verwaltet werden. - dauert... und wird evtl. nicht umgesetzt

              Kommentar


                #8
                Danke für die erweiterte Info. Das muss sich jetzt erstmal setzen. Punkt C schnalle ich auch noch nicht ganz.

                Thomas

                Kommentar


                  #9
                  Nachdem die Aufgabenstellung jetzt etwas genauer umrissen ist... Das Durchlaufen der Gruppe könnte man sicher etwas beschleunigen, indem man nicht eine Sekunde pro Item wartet, sondern z.B. nur 100msec. Weiterhin sind ja meistens nicht alle Lichter an, sondern nur ein kleiner Teil. Wenn in der Gruppe zufällig das erste und das letzte Item an sind, dauert es dann vom Abschalten des ersten bis zum Abschalten des letzten Items bei 1-Sekunden-Abstand 30 Sekunden, obwohl eine Sekunde vollkommen ausreichend wäre:
                  Code:
                  rule "Alle Lichter aus"
                  when
                      Item Licht_aus received command ON
                  then
                      gLichter.members.filter(leuchte|leuchte.state==ON).forEach(leuchte_an|{
                          leuchte_an.sendCommand(OFF)
                          Thread::sleep(100)
                          }
                      )
                  end
                  schaltet alle 100msec ein Licht aus, das zu dem Zeitpunkt noch an ist. Hoffe ich. Ich bin grad auf der Arbeit und kann das nicht ausprobieren...

                  Abgesehen davon stimme ich Dir vollkommen zu, dass es wünschenswert ist, die Reihenfolge der Items in einer Gruppe gezielt steuern zu können.
                  Zuletzt geändert von udo1toni; 10.06.2015, 09:04.

                  Kommentar


                    #10
                    Hi,
                    Code:
                    @pschauder: Du initialisierts also die group mit einer rule zu systemstart in der Reihenfolge wie du die item schalten möchtest? Wäre zwar auch eine copy&paste Arie, aber dann kann ich mit der Group immerhin zur laufzeit normal arbeiten.
                    nö, viel einfacher. Ich definiere die Items in der Reihenfolge in der .items File, in der ich sie auch in der Group wiederfinden möchte, Gruppe dahinter und schon sind sie drin. Das einzige Problem, was ich bisher hatte, ist, wenn ich sie in zwei Gruppen haben möchte, die unterschiedliche Reihenfolgen haben (eher selten) oder die Items logisch an eine Andere Stelle im Item File gehören..eher kosmetisch aber ich stehe auf Ordnung in Programmen. An der Stelle hab ich bisher die Krücke benutzt, diese Items doppelt zu definieren (also unterschiedlicher Name aber gleiche KNX Adresse). Ich vermute mal, das ist nicht die reine Lehre, hat aber bisher funktioniert.

                    Ich hoffe aber, jetzt kommt keiner und sagt mir, dass es Zufall ist, dass die Items dann in dieser Reihenfolge in der Gruppe stehen.


                    Ansonsten habe ich auch so einen 'mach alles aus' Schalter... hab ich aber nicht komplett über Openhab gelöst sondern zu großen Teilen per KNX. Per langem Aus-Tastendruck auf dem Flur-Licht-Schalter per KNX Gruppenadresse alle Rollos runtergefahrt und per OpenHAB-Rule in weiten Teilen des Hauses mit einer Gruppenadresse das Licht ausschaltet. Bei langem Ein-Tastendruck bleibt die Rule außen vor...Rollo hoch ist ja ok, aber alles Licht an wäre übertrieben:-)



                    Gruß
                    Peter

                    Kommentar


                      #11
                      Das war dann wohl zufall... also ich habe die Reihenfolge in der .items Datei verändert -> aber es hat sich nicht an der Reihenfolge geändert in der die Lichter aus gingen...

                      Kommentar

                      Lädt...
                      X