Ankündigung

Einklappen
Keine Ankündigung bisher.

Regel funktioniert nicht - Sehe aber den Fehler nicht...

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

    Regel funktioniert nicht - Sehe aber den Fehler nicht...

    Hallo zusammen,

    folgende Regel soll bewirken, dass das Rollo der Terrassentuer nicht nach unten fährt, wenn alle Rollos im Erdgeschoss den Befehl "DOWN" erhalten, die Tür aber noch geöffnet ist.
    Die Rollos werden per KNX gesteuert, der Status der Tür wird von einem HomeMatic Griffsensor ermittelt.

    Code:
    rule "rollo stop bei tuer auf"
        
        when
            Item knx_item_rollo_eg received command DOWN
        then
            if
                (hm_terrassentuer_griff.state == OPEN) {
                    knx_item_rollo_wz_2.sendCommand(STOP)
                    
                }
        end
    Leider funktioniert das Ganze aber nicht....und ich erkenne den Fehler nicht

    Die Items sollten korrekt definiert sein und auch der Status passt. Das KNX event wird ebenfalls gefeuert

    Code:
    openhab> smarthome:status hm_terrassentuer_griff
    OPEN
    Code:
    [ome.event.ItemCommandEvent] - Item 'knx_item_rollo_eg' [COLOR=black]received command[/COLOR] DOWN
    Als Editor nutze ich MS VS Code, welcher die Syntax nicht anmeckert.


    Könnte bitte mal ein Experte ein Auge drauf werfen und mir einen Tipp geben?

    Vielen Dank vorab




    #2
    Du verwendest mutmaßlich das falsche Item.
    Das Rollo knx_item_rollo_eg wird herunter gefahren. Falls im Moment des Befehls der Terrassentürgriff offen meldet, wird ein anderes Rollo (knx_item_rollo_wz_2) gestoppt. Vermutlich möchtest Du eher knx_item_rollo_eg stoppen.

    Kommentar


      #3
      Danke für die Antwort. Aber die items sind korrekt. knx_item_rollo_eg steuert alle Rollos im EG. Wenn dieses z.B. durch Sonnenuntergang den Befehl "DOWN" erhält, dann schließen alle Rollos im EG. item knx_item_rollo_wz_2 soll den Befehl STOP erhalten, wenn die Tür offen ist. Alle anderen Rollos sollen weiter nach unten fahren.

      Edit: Vielleicht habe ich mich unglücklich ausgedrückt.
      knx_item_rollo_eg wird u.a. durch den Sonneruntergang gesteuert. Wenn Sonnenuntergang, dann knx_item_rollo_eg --> down. Dann schließen alle Rollos im Erdgeschoss, auch knx_item_rollo_wz_2. knx_item_rollo_wz_2 ist das Rollo der Terrassentür im EG. Wenn also alle Rollos im EG über knx_item_rollo_eg schließen, dann soll das Rollo der Terrassentür den Befehl STOP erhalten und nicht schließen. Aber leider funktioniert das nicht....

      Zuletzt geändert von thefox73; 15.08.2018, 13:33.

      Kommentar


        #4
        Weiss nicht, ob dein Ansatz hier der richtige ist:
        1.) Alle Rollos im EG runter
        2.) Wenn Terrasse offen, stopp Rollo Terrasse
        Selbst wenn deine Rule funktioniert, hast hier ggfls. ein Timingproblem und dein Rollo beginnt trotzdem zu fahren und stoppt dann wieder.

        Ich hab hier einen KNX-nahen Ansatz:
        1.) Wenn Terrasse geöffnet wird, Rollo sperren (KNX)
        2.) Alle Rollos im EG runter

        Damit werden alle Rollos im EG geschlossen und das bei der Terrassentüre bleibt oben (beginnt gar nicht zu fahren).
        Wenn dann die Terrassentüre geschlossen wird, wird das Rollo wieder entsperrt.
        Zuletzt geändert von trant; 16.08.2018, 08:52.
        lg
        Stefan

        Kommentar


          #5
          Also, grundsätzlich sollte das schon funktionieren. Die Frage ist aber, ob die Rule überhaupt getriggert wird, da kommt es sehr darauf an, wie die Gruppe definiert ist.

          Also, wie sind die Items definiert?

          Am Rande, wegen des Timings: Ja, es mag sein, dass der Laden anläuft, aber wir reden hier von (typisch) wenigen Millisekunden, der Rollladen sollte hier allenfalls zucken.

          Wie ist das Auflösen der Gruppe gelöst?

          Kommentar


            #6
            Ich bin ja nur blutiger Laie...daher glaube ich, dass es hier gar keine Gruppe gibt. Da mag ich aber ganz falsch liegen....
            Hier die beiden KNX items

            Code:
            Rollershutter knx_item_rollo_wz_2 "Wohnzimmer 2" {knx="3/0/13,3/0/14"}
            Rollershutter knx_item_rollo_eg "EG ALLE" {knx="0/0/3,0/0/4"}
            Wenn ich das richtig verstehe, muss die "Gruppe" innerhalb von KNX vorhanden sein, oder?
            Ich habe keine Möglichkeit die Konfiguration des KNX einzusehen :-(

            Zum Timing: Es geht hier darum, dass das Rollo zur Terrasse nicht komplett schließt, sollte noch jemand draußen sein. Wenn es ein wenig nach unten fährt, spielt das keine Rolle.

            Danke für Eure Hilfe


            Edit:

            Das Event "EG DOWN" wird sauber erkannt. Ich hab die Regel einfach mal geändert und einen Zwischenstecker anstatt "Rollo Terrasse" geschaltet. Das funktioniert einwandfrei

            Code:
            2018-08-16 19:51:39.111 [ome.event.ItemCommandEvent] - Item 'knx_item_rollo_eg' [COLOR=black]received command[/COLOR] DOWN
            2018-08-16 19:51:42.262 [ome.event.ItemCommandEvent] - Item 'zbv1' [COLOR=black][COLOR=black]received command[/COLOR] ON[/COLOR]
            2018-08-16 19:51:42.285 [vent.ItemStateChangedEvent] - zbv1 changed from OFF to ON
            Es liegt an der Abfrage des Status "Griff Terrassentuer". Mit dieser Bedingung schaltet auch der Zwischenstecker nicht.
            Aber warum ist das so???
            Zuletzt geändert von thefox73; 16.08.2018, 19:18.

            Kommentar


              #7
              Moin zusammen,

              ich habe gestern noch einige Tests durchgeführt. Meiner Meinung nach funktioniert die Regel nicht, weil der Status von hm_terrassentuer_griff nicht sauber ausgewertet wird. Allerdings wird der Status in der Konsole via smarthome:status hm_terrassentuer_griff zu jeder Zeit korrekt angezeigt. D.h. das HomeMatic binding übermittelt den Status sauber an OH, innerhalb der Regel wird er aber nicht korrekt gezogen.
              Es handelt sich um einen HomeMaticIP HmIP-SRH. Ich nutze RaspberryMatic auf einem RPi 3 B+. OH läuft ebenfalls auf einem Rpi3 mit openhabian.
              Jemand eine Idee dazu?
              Zuletzt geändert von thefox73; 17.08.2018, 11:22.

              Kommentar


                #8
                Also, ein erster Schritt wäre mal, Deine Rule mit log-Befehlen zu versehen:
                Code:
                rule "rollo stop bei tuer auf"
                when
                    Item knx_item_rollo_eg received command DOWN
                then
                    logInfo("rollo","Rule getriggert!")
                    logInfo("rollo","Terrassentür: {}",hm_terrassentuer_griff.state)
                    if (hm_terrassentuer_griff.state == OPEN) {
                        logInfo("rollo","Stoppe Rollo Tür!")
                        knx_item_rollo_wz_2.sendCommand(STOP)
                    }
                end
                Der Code sollte identisch zu Deinem sein, nur die logInfo() Befehle sind dazu gekommen. Diese erzeugen eine Ausgabe in openhab.log, Du kannst das in der Karaf Konsole mittels log:tail live mitverfolgen.

                Kommentar


                  #9
                  Danke für den Code.
                  Hier das Ergebnis

                  Code:
                  2018-08-17 16:30:23.697 [ome.event.ItemCommandEvent] - Item 'knx_item_rollo_eg' [COLOR=black]received command[/COLOR] DOWN
                  2018-08-17 16:30:23.769 [COLOR=green][INFO ][/COLOR] [eclipse.smarthome.model.script.rollo] - Rule getriggert!
                  2018-08-17 16:30:23.799 [COLOR=green][INFO ][/COLOR] [eclipse.smarthome.model.script.rollo] - Terrassentür: OPEN
                  Hm, Rule wird getriggert, Status der Tür wird erkannt, aber der Stop-Befehl wird nicht gesendet.
                  Zuletzt geändert von thefox73; 17.08.2018, 15:36.

                  Kommentar


                    #10
                    Kann es sein, dass hr_terrassentuer_griff ein String Item ist? Dann prüfe bitte mit

                    Code:
                    if (hm_terrassentuer_griff.state.toString == "OPEN")

                    Kommentar


                      #11
                      Manchmal sind es die kleinen Dinge ;-)
                      Es ist tatsächlich ein String-Item und mit der Konvertierung funktioniert jetzt auch alles wie gewünscht.
                      Timing-Probleme gibt es übrigens keine. Das Rollo stoppt quasi sofort.

                      Vielen Dank udo1toni und ein schönes WE

                      Kommentar


                        #12
                        Sehr gut, halte das Vorgehen trotzdem, wenn man schon KNX hat, für nicht korrekt.
                        lg
                        Stefan

                        Kommentar


                          #13
                          Korrekt, ist ja immer auch ein bisschen von der Perspektive abhängig. Eine Sperre des Aktors könnte unerwünscht sein, sprich, man soll z.B. am Wandtaster den Laden dennoch bewegen dürfen.
                          Korrekt im Sinne von openHAB wäre am ehesten, die knx-Gruppe nicht zu benutzen und stattdessen eine openHAB-Gruppe aller Läden zu erstellen. Dann kann man gezielt einzelne Items vom DOWN-Befehl ausnehmen...

                          Kommentar

                          Lädt...
                          X