Ankündigung

Einklappen
Keine Ankündigung bisher.

rule mit Variablen nutzen

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

    #16
    Die Alexa Items gehören momentan keiner gemeinsamen Gruppe an. Außerdem fehlt das Gruppenitem und vermutlich möchtest Du die Gruppe gar nicht Alexa nennen. Also eher so:
    Code:
    Group:Switch gAlexaRollos // in diese Gruppe kommen alle Alexa "Rollershutter" Items
    Also bei allen Alexa Items noch ein (gAlexaRollos) ergänzen.
    Und in der Rule muss es dann natürlich
    Code:
    val String myItem = gAlexaRollos.members...
    heißen.

    Kommentar


      #17
      Ah OK, es lag an der passenden Gruppe. Gehirn einschalten...
      Klasse. Jetzt reagiert das System. Ich muss jetzt nur noch an den Namen schrauben, damit Alexa auch alles richtig versteht...
      1000Dank nochmal!

      Kommentar


        #18
        *Hust*
        Hallo!
        Ich nochmal.
        Ich bin gerade an der vorn geposteten Lösung dran, um jetzt alle Bürorolladen fahren zu können.

        items:
        Code:
        Group gBueroRollo
        Group gEGRollo    (gBueroRollo)
        Group gOGRollo    (gBueroRollo)
        Group:Switch gAlexaRollos
        
        Rollershutter eg_buero_ro_ost    "Rollo Büro Ost"        <rollershutter>    (gBueroEG, gEGRollo)                                        {knx="1/0/7, 1/0/6, 1/0/107"}
        Switch alexa_eg_buero_ro_ost     "Rollo Büro Ost"                         (gAlexaRollos)                                ["Switchable"]
        Rollershutter eg_buero_ro_nord    "Rollo Büro Nord"         <rollershutter>    (gBueroEG, gEGRollo)                                        {knx="1/0/5, 1/0/4, 1/0/105"}
        Switch alexa_eg_buero_ro_nord     "Rollo Büro Nord"                         (gAlexaRollos)                                ["Switchable"]
        Switch alexa_buero_ro_alle         "Alle Bürorollos"                         (gAlexaRollos)                                ["Switchable"]
        rules:
        Code:
        rule "alle Büro Rollo"
        when
            Item alexa_buero_ro_alle received command
        then
            gBueroRollo.members.filter(r|(r.state as DecimalType).intValue != if(receivedCommand==ON) 0 else 100).forEach(r|r.sendCommand(if(receivedCommand==ON) UP else DOWN))
        end
        Passieren tut leider nix. Nur eine Fehlermeldung im Log:
        17:39:39.567 [INFO ] [smarthome.event.ItemCommandEvent ] - Item 'alexa_buero_ro_alle' received command OFF
        17:39:39.569 [INFO ] [smarthome.event.ItemStateChangedEvent] - alexa_buero_ro_alle changed from NULL to OFF
        17:39:39.569 [INFO ] [home.event.GroupItemStateChangedEvent] - gAlexaRollos changed from NULL to UNDEF through alexa_buero_ro_alle
        17:39:40.418 [ERROR] [l.script.engine.ScriptExecutionThread] - Rule 'alle Büro Rollo': org.eclipse.smarthome.core.library.types.DecimalTy pe
        Klingt so, wäre eine Definition falsch/fehlend.
        Ich habe bestimmt wieder was nicht richtig gemacht, oder?

        Kommentar


          #19
          Sind denn die Läden schon mal gefahren, seit openHAB in Betrieb ging? Das Problem ist, wenn die Läden nie bewegt wurden, hat openHAB auch keinen gültigen Status. Das könnte man natürlich ebenfalls berücksichtigen, nur wird das Ganze dadurch nicht einfacher, und die Läden fahren dann im Zweifel gar nicht. Eigentlich sollten die Aktoren ihren Status beim Start von openHAB auf Anfrage melden, dazu muss aber auch eine pasende GA vergeben sein. Mit der Definition
          Code:
          Rollershutter eg_buero_ro_ost "Rollo Büro Ost" <rollershutter> (gBueroEG, gEGRollo) {knx="1/0/7, 1/0/6, 1/0/107+<1/0/207"}
          fragt openHAB beim Programmstart auf der GA 1/0/207 den Status ab. Diese GA muss also am Statusobjekt Position hängen. Die GA darf nur einem einzigen Aktorkanal zugeordnet sein, und der Aktor darf als Einziges auf Read Requests antworten (L-Flag gesetzt). Wenn openHAB für jeden Rollladen eine gültige Position hat, sollte die Rule durchlaufen. Ansonsten kannst Du den Filter auch weg lassen und einfach mit dem .forEach... weiter machen.

          Kommentar


            #20
            Hallo!
            Danke für deine Antwort!
            Ja, die Rollos fahren täglich hoch und runter.
            Die 1/0/107 ist ja bereits die RM-Adresse. Für Position habe ich noch keine GAs angelegt. Ich war bisher der Meinung, dass dies das selbe ist. Dann fummel ich mal die Positions-GA und probiere dann erneut.

            Kommentar


              #21
              Hi nochmal!
              Ich habe Gira 207812 Jalousieaktoren (16fach/8fach). Dort habe ich die Möglichkeit eines RM-Objektes und einer Position. Der Status ist dort per Standard als Schreibbar definiert. Muss dieser zwingend auf L gesetzt werden? Weil drin stehen tut nix, laut Monitor.

              Kommentar


                #22
                Es gibt eigentlich immer mindestens zwei GA, eine zum Steuern und eine zum Erfragen bzw. Rückmelden des Status. Im Falle eines Rollladens wäre das die Position, ich hatte bis vor kurzem Aktoren, die das noch nicht konnten, die haben dann halt nur die letzte Fahrtrichtung rückgemeldet.

                Deine Jalousieaktoren sind übrigens die 1038 00. Die Nummer 207812 ist die Softwareapplikation.
                Ich zitiere mal aus dem technischen Handbuch: (Fußnote)
                2: Jedes Kommunikationsobjekt kann ausgelesen werden. Zum Auslesen muss das L-Flag gesetzt werden.
                3: Die Kommunikationsflags werden automatisch in Abhängigkeit der Parametrierung gesetzt. "Ü"-Flag bei aktivem Meldeobjekt; "L"-Flag bei passivem Statusobjekt.
                Die Rückmeldung der Position erfolgt auf Objekt Nr. 24 + (KanalNr.-1)*26 als DPT 5.001. Dort sollten laut Fußnote 3 die Flags K Ü L automatisch gesetzt sein.

                Die Flags in knx haben folgende Funktion:
                • K(ommunikation) -> findet statt (dieses Flag muss also gesetzt sein, wenn man ein Objekt nutzen will)
                • Ü(bertragen) -> Bei Wertänderung wird diese auf den Bus gesendet
                • S(chreiben) -> Wertänderungen auf dem Bus werden vom Gerät übernommen
                • L(esen) -> Leseanfragen vom Bus werden beantwortet
                • A(ktualisieren) -> Wertantworttelegramme (siehe L-Flag) von anderen Busteilnehmern werden als Schreibbefehl gewertet.
                  Ein Readrequest auf einen anderen Busteilnehmer führt also zur Aktualisierung des eigenen Status.

                Jegliche Kommunikation in knx ist immer über diese Flags gesteuert, soweit das Gerät über ETS konfiguriert werden kann.

                Kommentar


                  #23
                  Danke für deine umfangreiche Antwort!!
                  Derzeit sieht ein Rollo bei mir in der ETS so aus: Gira.png

                  Wenn ich dich richtig verstanden habe, muss es dann so aussehen: gira-1.png

                  Damit steht jetzt wenigstens 0% in 1/1/105 drin.
                  Ändern tut sich aber nichts, wenn ich das Rollo runter und wieder hoch fahre. Es bleibt 0% drin stehen. Auch nicht, wenn ich noch zusätzlich das "A"- oder "Ü"-Flag setze. Es ändert lediglich immer nur die RM (in %).

                  Kommentar


                    #24
                    Nein, das L-Flag gehört auf die 76, das zugehörige Item sieht dann so aus:
                    Code:
                    Rollershutter Buero_Ost "Büro Ost [%d%%]" {knx="1/1/6,1/1/5,1/1/105+<1/1/106",autoupdate="false"}
                    autoupdate="false" sorgt dafür, dass openHAB den Status nicht proaktiv ändert, sondern auf ein Telegramm über die Adressen 1/1/105 oder 1/1/106 (oder 1/1/6) wartet. Die Rückmeldung kommt erst, wenn der Laden seine Position erreicht hat, entsprechend springt das Item dann am Ende der Fahrt auf die aktuelle Position.
                    Zuletzt geändert von udo1toni; 22.09.2017, 15:56.

                    Kommentar


                      #25
                      Hallo!
                      Ich habe das jetzt soweit umgesetzt. Ich bekomme in der Basic UI jetzt auch prima die Prozentanzahl angezeigt, wie weit der Rollo unten ist. Rollo-basicui.png

                      In der ETS sieht es jetzt bei obigen Beispiel so aus: ETS-rollo.png


                      Alexa sagt auch prima "OK" wenn Sie den Befehl "Alle Büro Rollos aus/ein/hoch/runter" bekommt, eine Ausführung erfolgt aber dennoch nicht, sondern immer noch der Fehler:
                      18:16:12.140 [ERROR] [l.script.engine.ScriptExecutionThread] - Rule 'alle Büro Rollo': org.eclipse.smarthome.core.library.types.DecimalTy pe
                      Liegt es evtl. daran, dass Dezimalzahlen erwartet werden, es aber nur Integer kommen/geliefert werden?

                      Kommentar


                        #26
                        Integer sind (normalerweise) Dezimalzahlen

                        Zeig bitte nochmal genau die Rule, wie sie jetzt ist.

                        Kommentar


                          #27
                          Hallo!
                          Eigentlich genau noch so, wie oben. Aber ich weiß, sicher ist sicher.
                          Code:
                          rule "alle Büro Rollo"
                          when
                              Item alexa_buero_ro_alle received command
                          then
                              gBueroRollo.members.filter(r|(r.state as DecimalType).intValue != if(receivedCommand==ON) 0 else 100).forEach(r|r.sendCommand(if(receivedCommand==ON) UP else DOWN))
                          end

                          Kommentar


                            #28
                            Erweitere bitte die Rule mal:
                            Code:
                            rule "alle Büro Rollo"
                            when
                               Item alexa_buero_ro_alle received command
                            then
                                gBueroRollo.members.[COLOR=#FF0000]filter(r|r.state instanceof DecimalType).[/COLOR]filter(r|(r.state as DecimalType).intValue != if(receivedCommand==ON) 0 else 100).forEach(r|r.sendCommand(if(receivedCommand==ON) UP else DOWN))
                            end

                            Kommentar


                              #29
                              Danke!
                              Es erscheint jetzt keine Fehlermeldung mehr, nur noch das im Log:
                              Code:
                              16:32:29.865 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'alexa_buero_ro_alle' received command OFF
                              16:32:29.869 [INFO ] [smarthome.event.ItemStateChangedEvent] - alexa_buero_ro_alle changed from ON to OFF
                              16:32:44.232 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'alexa_buero_ro_alle' received command ON
                              16:32:44.235 [INFO ] [smarthome.event.ItemStateChangedEvent] - alexa_buero_ro_alle changed from OFF to ON
                              Ein Rollo bewegt sich aber nicht.
                              Zuletzt geändert von maennchen1; 02.10.2017, 21:00.

                              Kommentar


                                #30
                                Schade. Das bedeutet, dass keiner der Rollläden, die zur Gruppe gehören einen passenden Status hat. Füge mal bitte hinter dem then diese Zeile ein:
                                Code:
                                gBueroRollo.members.forEach(r|logInfo("Rollos","Itenmane: {} Status: {}",r.name,r.state.toString))
                                Nachdem Du die Rule einmal ausgelöst hast, solltest Du dann in der Datei openhab.log für jeden Rollladen eine Zeile mit dem aktuellen Status finden. Das wäre mal interessant

                                Kommentar

                                Lädt...
                                X