Ankündigung

Einklappen
Keine Ankündigung bisher.

OH3 - Gruppe von Lichtern

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

    OH3 - Gruppe von Lichtern

    Hallo,

    Ich bin gerade dabei auf meinem Testsystem OH3 einzurichten. Die Items und Models habe ich jetzt soweit eingerichtet.
    Jetzt wollte ich eine Gruppe meiner Lichter anlegen und mir die Anzahl der eingeschalteten Lichter auf der Übersichtsseite anzeigen.
    Aber wie mach ich das in OH3?

    In OH2.5 hab ich das so gemacht:

    items:
    Code:
    Group:Switch:OR(ON, OFF)           gLight           "Licht [(%d)]"                 <light>           (Home)   ["Lighting", "Switchable"]
    sitemap
    Code:
    Switch item=g_OG_Light label="OG Licht Gesamt" icon="light" mappings=[OFF="Aus"]
    Ich hab in OH3 jetzt eine Gruppe angelegt und dieser die Lichter zugewiesen.
    Als State Description hab ich bei Pattern d% eingetragen.
    Aber es zeigt mir wie im Bild zu sehen nur Null an und nicht die Anzahl der eingeschalteten Lichter.

    Und wie mach ich das mit dem Widget auf der Übersichtseite, dass mir dort die Anzahl der Lichter angezeigt werden und beim Klick auf das Widget alle Lichter ausgehen?

    OH3.jpg

    Tom

    #2
    Hast Du denn die Funktion OR auch eingestellt?

    Kommentar


      #3
      Zitat von udo1toni Beitrag anzeigen
      Hast Du denn die Funktion OR auch eingestellt?
      Wo mach ich das denn?
      Folgendes hab ich noch eingestellt:
      OH3_1.jpg OH3_2.jpg

      Tom

      Kommentar


        #4
        Die Aggregation Function muss auf "One ON then ON else OFF" stehen (sobald [mindestens] ein Member ON ist setze die Gruppe auf ON, ansonsten setze die Gruppe auf OFF)
        Vielleicht irre ich mich aber auch und es muss "All OFF then OFF else ON" eingetragen werden.

        Kommentar


          #5
          Zitat von udo1toni Beitrag anzeigen
          Die Aggregation Function muss auf "One ON then ON else OFF" stehen (sobald [mindestens] ein Member ON ist setze die Gruppe auf ON, ansonsten setze die Gruppe auf OFF)
          Vielleicht irre ich mich aber auch und es muss "All OFF then OFF else ON" eingetragen werden.
          Hab ich gemacht, aber er zählt mir die Lichter nicht. Hab jetzt im log gesehen dass er das %d als State Description nicht mag.

          2021-02-26 18:39:24.863 [WARN ] [e.internal.SseItemStatesEventBuilder] - Exception while formatting value 'OFF' of item gLichtTest with format '[%d]': d != java.lang.String
          Was gehört dann dort hin?

          Kommentar


            #6
            keiner eine Idee mehr?
            Nutzt denn keiner der OH3 einsetzt dieses Group:Switch:OR(ON, OFF) mit Anzeige der Anzahl?

            Kommentar


              #7
              Offensichtlich ist das (noch?) nicht implementiert. Schau mal hier https://community.openhab.org/t/open...-card/111270/7 im englischen Forum, da hat jemand das mit einer Rule gelöst (das ist natürlich nicht schön...)

              Kommentar


                #8
                Zitat von udo1toni Beitrag anzeigen
                Offensichtlich ist das (noch?) nicht implementiert. Schau mal hier https://community.openhab.org/t/open...-card/111270/7 im englischen Forum, da hat jemand das mit einer Rule gelöst (das ist natürlich nicht schön...)
                Danke, den Beitrag habe ich auch gerade gefunden, habe es aber jetzt so gelöst dass ich die Aggregation Function auf Number:Sum geändert habe.
                OH3_3.jpg


                Kommentar


                  #9
                  Leider funktioniert das mit der Aggregation Function "Number:SUM" nur bei "normalen" Lichtern (Ein/Aus). Da ich auch Lichter mit Dimmer zählen möchte funktioniert es nicht.
                  Das Script in dem Beitrag von Dir funktioniert auch nicht. Hast Du eine Idee wie ich das ergänzen müsste damit es auch bei Dimmern (0-100%) funktioniert?

                  Kommentar


                    #10
                    Genau. Die Dimmer sind der Haken an der Sache. Die Aggregation SUM habe ich bei mir gar nicht gefunden (vermutlich hatte ich kein Group:Number Item definiert)

                    Letztlich wirst Du dann nicht um eine Rule herum kommen, es sei denn, es gibt auch noch die Aggregation Count (ich habe gerade kein OH3 zur Hand)

                    Falls Count zur Verfügung steht, sollte das Group Item alle Dimmer Dimmer !=0 zählen und ebenso alle Switches mit Zustand ON.
                    Falls Count nicht zur Verfügung steht, wäre es das sinnvollste, das mit einer Rule zu erschlagen, z.B. so:
                    Code:
                    rule "Count lights"
                    when
                        Member of gLights changed
                    then
                        gLights.postUpdate(gLights.members.filter[i|i.getStateAs(OnOffType) == ON].size)
                    end
                    Witzigerweise reicht eine einzige Zeile Code locker aus...
                    Das (Number) Group Item bekommt als Status die Anzahl der Einträge der Liste zugewiesen, die alle Items enthält, welche zur Group gehören und als Status (der explizit als OnOffType ausgelesen wird) ON liefern.

                    Diese Rule sollte man sogar über die UI erstellen können (mit dem then-Block in DSL)

                    Kommentar


                      #11
                      Zitat von udo1toni Beitrag anzeigen
                      Falls Count zur Verfügung steht, sollte das Group Item alle Dimmer Dimmer !=0 zählen und ebenso alle Switches mit Zustand ON.
                      Nein, Count gibt es nicht. Nur None, AVG, MIN,MAX und SUM.

                      Zitat von udo1toni Beitrag anzeigen
                      Falls Count nicht zur Verfügung steht, wäre es das sinnvollste, das mit einer Rule zu erschlagen, z.B. so:
                      Code:
                      rule "Count lights"
                      when
                      Member of gLights changed
                      then
                      gLights.postUpdate(gLights.members.filter[i|i.getStateAs(OnOffType) == ON].size)
                      end
                      Witzigerweise reicht eine einzige Zeile Code locker aus...
                      Das (Number) Group Item bekommt als Status die Anzahl der Einträge der Liste zugewiesen, die alle Items enthält, welche zur Group gehören und als Status (der explizit als OnOffType ausgelesen wird) ON liefern.
                      Leider funktioniert das so nicht. Wenn ich die Aggregation Function auf Number:SUM lasse, erhalte ich folgenden Fehler:

                      2021-03-02 20:15:06.437 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Licht_OG_Bad_Decke' changed from 0 to 48
                      2021-03-02 20:15:06.468 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gLight' changed from 2.00000000 to 2.48000000 through Licht_OG_Bad_Decke
                      2021-03-02 20:15:06.475 [WARN ] [e.internal.SseItemStatesEventBuilder] - Exception while formatting value '2.48000000' of item gLight with format '%d': d != java.math.BigDecimal
                      Wenn ich Aggregation Function auf Switch One On then On else Off ändere erhalte ich folgende Meldung

                      2021-03-02 20:18:34.931 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Licht_OG_Buero_Decke' changed from OFF to ON
                      2021-03-02 20:18:34.970 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gLight' changed from OFF to ON through Licht_OG_Buero_Decke
                      2021-03-02 20:18:35.011 [WARN ] [e.internal.SseItemStatesEventBuilder] - Exception while formatting value 'ON' of item gLight with format '%d': d != java.lang.String

                      Zitat von udo1toni Beitrag anzeigen
                      Diese Rule sollte man sogar über die UI erstellen können (mit dem then-Block in DSL)
                      Da muss man erstmal durchblicken was man da auswählen muss.
                      So sieht der Code der Rule jetzt aus:
                      Code:
                      triggers:
                      - id: "1"
                      configuration:
                      groupName: gLight
                      type: core.GroupStateChangeTrigger
                      conditions: []
                      actions:
                      - inputs: {}
                      id: "2"
                      configuration:
                      type: application/vnd.openhab.dsl.rule
                      script: gLight.postUpdate(gLight.members.filter[i|i.getStateAs(OnOffType) ==
                      ON].size)
                      type: script.ScriptAction
                      OH3_4.jpg
                      Zuletzt geändert von TomW80; 02.03.2021, 20:32.

                      Kommentar


                        #12
                        Wenn Du die Rule verwenden willst, darf das Group Item gar keine Aggregation haben, die Rule kümmert sich ja schon darum.

                        Kommentar


                          #13
                          Zitat von udo1toni Beitrag anzeigen
                          Wenn Du die Rule verwenden willst, darf das Group Item gar keine Aggregation haben, die Rule kümmert sich ja schon darum.
                          Ok, jetzt funktioniert es aber auch nicht. ("Members Base Type" auf Number)
                          Ich erhalte die Meldung:

                          2021-03-03 20:29:14.451 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Licht_OG_Bad_Spiegel' changed from OFF to ON
                          2021-03-03 20:29:14.488 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gLight' changed from 2.0 to UNDEF through Licht_OG_Bad_Spiegel
                          2021-03-03 20:29:23.259 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Licht_OG_Bad_Spiegel' changed from ON to OFF
                          2021-03-03 20:29:23.276 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gLight' changed from 3 to UNDEF through Licht_OG_Bad_Spiegel
                          Wenn ich den "Members Base Type" auch auf "None" setze erhalte ich folgende Meldung:

                          2021-03-03 20:02:36.770 [WARN ] [b.core.model.script.actions.BusEvent] - Cannot convert '2' to a state type which item 'gLight' accepts: [OnOffType, UnDefType].

                          Kommentar


                            #14
                            OK, dann ergänze mal eine kleine Denkpause, damit der Schreibzugriff des Items schon durch ist:
                            Code:
                            triggers:
                            - id: "1"
                            configuration:
                            groupName: gLight
                            type: core.GroupStateChangeTrigger
                            conditions: []
                            actions:
                            - inputs: {}
                            id: "2"
                            configuration:
                            type: application/vnd.openhab.dsl.rule
                            script: Thread::sleep(250)
                            gLight.postUpdate(gLight.members.filter[i|i.getStateAs(OnOffType) ==
                            ON].size)
                            type: script.ScriptAction
                            Im schlimmsten Fall müsstest Du ein ungebundenes Item verwenden, um die Anzahl zu speichern (und anzuzeigen)
                            Zuletzt geändert von udo1toni; 03.03.2021, 20:40.

                            Kommentar


                              #15
                              Zitat von udo1toni Beitrag anzeigen
                              Im schlimmsten Fall müsstest Du ein ungebundenes Item verwenden, um die Anzahl zu speichern (und anzuzeigen)
                              Damit funktioniert es, das Sleep hatte nichts gebracht.
                              Aber leider kann ich jetzt nicht wie bei OH2.5 die Gruppe auch ausschalten.
                              Ich hoffe das ganze wird noch angepasst.

                              Kommentar

                              Lädt...
                              X