Ankündigung

Einklappen
Keine Ankündigung bisher.

rules: Problem mit forEach

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

    rules: Problem mit forEach

    Hallo liebes Forum,

    ich mache meine ersten Schritte mit dem openHAB Designer und komme nicht ganz mit der forEach Konstruktion klar.
    Ich habe ein Item angelegt
    Code:
    Rollershutter itmRollosMain "Alle Rollos" <rollershutter> (All)
    Mit diesem sollen alle Rollos im Haus zentral geöffnet oder geschlossen werden.
    Die Rollos sind definiert mit
    Code:
    Rollershutter itmRollo_Arbeiten_P "Arbeiten P [%d %%]"     <rollershutter> (RollosAlle,OG)     {hier steht das binding}
    Rollershutter itmRollo_Gaestebad         "Gästebad [%d %%]"             <rollershutter> (RollosAlle,EG)      {hier steht das binding}
    Rollershutter itmRollo_Gast             "Gast [%d %%]"                 <rollershutter> (RollosAlle,All)    {hier steht das binding}
    Rollershutter itmRollo_Arbeiten_L "Arbeiten L [%d %%]"     <rollershutter> (RollosAlle,All)     {hier steht das binding}
    Die Rollos funktionieren alle bei Einzelbetätigung.

    Das itmRollosMain ist mit folgender Regel verknüpft:
    Code:
    rule "TestMain"
    when
        Item itmRollosMain received command DOWN
    then
            RollosAlle?.members.forEach(rollo|
                sendCommand(rollo, UP)
            )
                    
    end
    Bei betätigung von down passiert aber nichts und es erscheint folgende Fehlermeldung im Log
    2015-06-25 06:53:05.991 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'TestMain': Could not invoke method: org.openhab.model.script.actions.BusEvent.sendComm and(java.lang.String,java.lang.String) on instance: null
    Im Demoprojekt findet sich eine vergleichbare Regel für "alle Lichter aus"
    Code:
    rule "Initialize light states"
        when
            System started
        then
            Lights?.members.forEach(light|
                postUpdate(light, if(Math::random > 0.7) ON else OFF)
            )
    end
    Kann mir jemand helfen und sagen, warum meine Regel eine Fehlermeldung erzeugt?
    Danke im Voraus
    wbuh

    #2
    Hi wbuh,
    könnte es sein, dass du vergessen hast die Gruppe "RollosAlle" zu definieren?
    Deine Rollershutter hast du dieser Gruppe hinzugefügt und auch das foreach ruft die Gruppe ab, allerdings sehe ich die Gruppendefinition nicht.
    Sollte gemäß der Anleitung hier definiert werden:
    https://github.com/openhab/openhab/w...ation-of-items

    Also:
    Code:
    Group RollosAlle
    Grüße
    Mitch

    Kommentar


      #3
      Hallo Mitch,

      sorry, ich poste mal die item Datei von Anfang an
      Code:
      Group All
      Group EG            (All)
      Group OG            (All)
      Group Garten        (All)
      Group Front            (Garten)
      Group Seite            (Garten)
      Group Hinten        (Garten)
      Group Sicherheit    (All)
      Group RollosAlle    (All)
      Group RollosOben    (RollosAlle)
      Group RollosUnten    (RollosAlle)
      
      
      Switch Anwesend "Anwesend" <present>
      
      // Rollos
      Rollershutter itmRollo_Arbeiten_P     "Arbeiten P [%d %%]"     <rollershutter> (RollosAlle,OG)     {hier ist das binding}
      Rollershutter itmRollo_Gaestebad         "Gästebad [%d %%]"             <rollershutter> (RollosAlle,EG)      {hier ist das binding}
      Rollershutter itmRollo_Gast             "Gast [%d %%]"                 <rollershutter> (RollosAlle,All)    {hier ist das binding}
      Rollershutter itmRollo_Arbeiten_L     "Arbeiten L [%d %%]"     <rollershutter> (RollosAlle,All)     {hier ist das binding}
      
      Rollershutter itmRollosMain "Alle Rollos" <rollershutter> (All)
      RollosAlle ist also drin, ja.

      Kommentar


        #4
        Zitat von wbuh Beitrag anzeigen
        Das itmRollosMain ist mit folgender Regel verknüpft:
        Code:
        rule "TestMain"
        when
        Item itmRollosMain received command DOWN
        then
        RollosAlle?.members.forEach(rollo|
        sendCommand(rollo, UP)
        )
        end
        Das sollte sich doch ohne forEach auch lösen lassen. Ich würde hier einfach die Gruppe aufrufen.
        Code:
        rule "TestMain"
        when
             Item itmRollosMain received command DOWN
        then
             sendCommand(RollosAlle, UP)
        end
        Hab das Ganze jetzt aber nicht getestet. Ev. geht der sendCommand ja nur auf einzelne Items. Du könntest es aber mal ausprobieren.

        Kommentar


          #5
          Ev. geht der sendCommand ja nur auf einzelne Items. Du könntest es aber mal ausprobieren.
          Hatte ich auch schon erfolglos probiert.
          Code:
          sendCommand(RollosAlle,UP)
          Geht nicht. Fehler ist:
          2015-06-25 06:30:00.671 [WARN ] [g.openhab.core.items.GroupItem] - Command 'UP' has been ignored for group 'RollosAlle' as it is not accepted.
          Zuletzt geändert von wbuh; 25.06.2015, 14:45.

          Kommentar


            #6
            Hallo
            Ich würde mal die forEach Schleife löschen und da ein Log aufrufen.
            Dann bist Du sicher das wenn "Item itmRollosMain received command DOWN" aufgerufen der Teil zwischen then und end abgearbeitet wird.
            Gruß NetFritz


            KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
            WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
            PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

            Kommentar


              #7
              Also, grundsätzlich funktioniert das so bei mir, allerdings verwende ich eine andere Schreibweise:
              Code:
              RollosAlle?.members.forEach(rollo|rollo.sendCommand(UP))
              Erstmal sollte das natürlich keine Rolle spielen. Vielleicht hat sich irgendwo ein (unsichtbares) Zeichen eingeschlichen? Zum testen kannst Du auch mal statt des sendCommand ein
              Code:
              logInfo("Logger","Itemname ist: "+rollo.name)
              einbauen. Evtl. ist ein nicht-existentes Item in der Gruppe, das sollte natürlich mit einem Neustart von openHAB als Fehler raus fallen.

              Kommentar


                #8
                Zitat von udo1toni Beitrag anzeigen
                (..) grundsätzlich funktioniert das so bei mir, allerdings verwende ich eine andere Schreibweise:
                Code:
                RollosAlle?.members.forEach(rollo|rollo.sendCommand(UP))
                Erstmal sollte das natürlich keine Rolle spielen.
                Hey udo1toni,
                offenbar spielt es eine Rolle, denn mit Deiner Schreibweise funktioniert's.
                Besten Dank für die Hilfe!

                Kommentar

                Lädt...
                X