Ankündigung

Einklappen
Keine Ankündigung bisher.

Rollladen Item - STOP bzw (X) - in der GUI - faehrt einen schritt nach oben?

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

    Rollladen Item - STOP bzw (X) - in der GUI - faehrt einen schritt nach oben?

    Hallo!

    Beim herumspielen mit dem Rollladen Item bin ich draufgekommen, das ein click in der OH GUI einen rollladen in ruhe um einen kleinen/grossen schritt nach oben fahren laesst.
    Ich haette erwartet, dass in diesem fall nix passiert.

    Ist das normal und wenn ja, warum?

    Danke,
    Alex.

    P.S.: Nachdem meine rollladen aktoren keine % werte koennen, bin ich gerade am herumspielen ob das nicht auch per OH machbar ist. Ich habe mir https://knx-user-forum.de/forum/supp...erst%C3%BCtzen als anleihe genommen, aber so wie der code dort ist funktioniert das bei mir einfach nicht - meine Jung taster senden kein STOP kommando, sondern unterbrechen die fahrt mit einem "Kurz-Fahren" kommando. Und in den .rules finde ich keinen weg zu unterscheiden, ob der rollladen jetzt ein kommando fuer UP oder DOWN bekommen hat. Grrr.

    #2
    Zitat von alex73 Beitrag anzeigen
    Beim herumspielen mit dem Rollladen Item bin ich draufgekommen, das ein click in der OH GUI einen rollladen in ruhe um einen kleinen/grossen schritt nach oben fahren laesst.
    Ich haette erwartet, dass in diesem fall nix passiert.

    Ist das normal und wenn ja, warum?
    Ich gehe mal davon aus, dass Du knx als Bussystem einsetzt, dann ist dieses Verhalten normal. Ursache ist, dass der Stop-Code in Wirklichkeit ein Step-Code ist, da es für Rollladenaktoren üblicherweise nur UP/DOWN Move (1Bit) und UP/DOWN Step (1Bit) gibt. Den Step braucht es eigentlich nur bei Jalousien, um den Lamellenwinkel einstellen zu können, die Steuerung ist aber genauso.

    P.S.: Nachdem meine rollladen aktoren keine % werte koennen, bin ich gerade am herumspielen ob das nicht auch per OH machbar ist. Ich habe mir https://knx-user-forum.de/forum/supp...erst%C3%BCtzen als anleihe genommen, aber so wie der code dort ist funktioniert das bei mir einfach nicht - meine Jung taster senden kein STOP kommando, sondern unterbrechen die fahrt mit einem "Kurz-Fahren" kommando. Und in den .rules finde ich keinen weg zu unterscheiden, ob der rollladen jetzt ein kommando fuer UP oder DOWN bekommen hat. Grrr.
    Ja, daran habe ich mir auch schon die Zähne ausgebissen. Wenn die Rule bei mir aktiv war, führte das dazu, dass ich die Läden überhaupt nicht mehr steuern konnte (evtl. hatte ich beim kopieren und anpassen damals auch einen Fehler gemacht). In zwischen bin ich dahinter gekommen, dass man autoupdate=false bei der Itemdefinition dazu schreiben muss, damit der UP/DOWN-Befehl nicht zu einem Setzen der Position auf 0% bzw 100% führt. Ebenso wird man wahrscheinlich die Rückmeldung des Aktors (meiner meldet ja nur die letzte Fahrtrichtung) in ein eigenes Item packen müssen, damit die Rule damit umgehen kann. Was openHAB empfängt, wenn Du am Taster den Laden anhältst, kannst Du auf jeden Fall in der event.log nachschauen, da muss auf jeden Fall ein anderer Befehl kommen als UP/DOWN (bei mir steht da dann MOVE) Entsprechend müsstest Du in den Rules also "nur" auf receivedCommand = UP / DOWN / MOVE hören.

    Kommentar


      #3
      Zitat von udo1toni Beitrag anzeigen
      Ich gehe mal davon aus, dass Du knx als Bussystem einsetzt
      Ja habe ich. Das ist sicher eine hilfreich info fuer meine frage ... sigh

      In zwischen bin ich dahinter gekommen, dass man autoupdate=false bei der Itemdefinition dazu schreiben muss, damit der UP/DOWN-Befehl nicht zu einem Setzen der Position auf 0% bzw 100% führt.
      Danke fuer den tip. Das werde ich als einen der naechsten schritte probieren. Aber so weit bin ich eigentlich noch nicht mit dem code. Derzeit jagen mich syntax fehler aus denen ich nicht schlau werde.
      Ich bin so frei einen kurzen auszug hier reinzustellen. Eventuell kann mir jemand sagen was ich da falsch mache.

      Code:
      import org.openhab.core.types.Command
      import org.openhab.core.library.types.DecimalType
      import org.openhab.model.script.actions.Timer
      
      // Times in seconds for various actions
      var double Shutter_L2_Step = 0.512            // From actor config
      var double Shutter_L2_LongStep = 1.024        // ??!! really ??!!
      var double Shutter_L2_Full = 41.0             // Interpolated
      var double Shutter_L2_Full_UP = 46.0          // Real world measured
      var double Shutter_L2_Full_DOWN = 36.0        // Real world measured
      var double Shutter_L2_Direction_Delay = 1.0   // From actor config
      
      var double Shutter_L2_Position = 0            // Current position in percent from top
      
      var Command Shutter_L2_Last_CMD = STOP        // Last command received
      var double Shutter_L2_Last_CMD_TS = 0         // Timestamp of last command for pending actions. 0 if no pending action axpected
      
      var Timer tShutter_L2                         // Full move "overflow" timer to set proper state value
      Und dann weiter unten im code:
      Code:
              if (receivedCommand == STOP || receivedCommand == MOVE)
              {
                  var double nowTS = 0.0
                  var double duration = 0.0
                  
                  nowTS = now.millis / 1000.0    // calculate seconds. ### really like this?!
      
      [B][COLOR=#FF0000](X)[/COLOR][/B] Incompatible types. Expected double or java.lang.Double but was java.math.BigDecimal
      // wie das bitte? alles double ...
                  duration = nowTS - Shutter_L2_Last_CMD_TS    // shutter moved this long               
                  
                  // Check if timer still armed. If so, cancel it before it goes off
                  if (tShutter_L2 != null)
                  {
                      tShutter_L2.cancel()
                  }
                  
                  // calculate position of shutter based on
                  // moving time and direction
                  if (Shutter_L2_Last_CMD == UP)
                  {
      [B][COLOR=#FF0000](X)[/COLOR][/B] Incompatible types. Expected double or java.lang.Double but was java.math.BigDecimal
      // wie das bitte? alles double ...
                      Shutter_L2_Position = Shutter_L2_Position - duration * 100.0 / Shutter_L2_Full_UP
                  }
                  else if (Shutter_L2_Last_CMD == DOWN)
                  {
      [B][COLOR=#FF0000](X)[/COLOR][/B] Incompatible types. Expected double or java.lang.Double but was java.math.BigDecimal
      // wie das bitte? alles double ...
                      Shutter_L2_Position = Shutter_L2_Position + duration * 100.0 / Shutter_L2_Full_DOWN
                  }
      
                  // Some sanity checking just in case
                  if (Shutter_L2_Position > 100)
                      Shutter_L2_Position = 100
      
                  if (Shutter_L2_Position < 0)
                      Shutter_L2_Position = 0
      
                  Shutter_L2.postUpdate(Shutter_L2_Position)
      
                  // No more pending action expected        
                  Shutter_L2_Last_CMD_TS = 0
                  return
              }
      Was mache ich hier falsch? Es sind doch alle variablen double typen!

      Entsprechend müsstest Du in den Rules also "nur" auf receivedCommand = UP / DOWN / MOVE hören.
      Habe beim herumspielen herausgefunden, dass meine JUNG TSMs sowohl MOVE als auch STOP kommandos senden, je nachdem ob ich die wippe oben oder unten druecke.

      Danke,
      Alex.

      P.S.: Hoffentlich bekomme ich das generisch hin und muss nicht zu sehr auf das "KURZ-LANG"/"KURZ" schema von JUNG eingehen.

      Kommentar


        #4
        Das Typecasting treibt mich auch immer wieder in den Wahnsinn... Schau mal mit dem Designer, welchen Typ now.millis und die Konstante 1000.0 haben.

        Deine Probleme mit dem Jung Taster verstehe ich nicht. KNX Standard ist, dass die Rolläden bei einer 1 Auf dem Auf/Ab Objekt zu- und bei einer 0 Hochfahren. Auf Stopobjekt führt jedes Telegramm, egal ob 0 oder 1 zum Anhalten. Genau so machen das auch meine Jung Taster, mit dem jeweiligen Schema stellst nur ein, wann genau die Telegramme bei der Bedienung gesendet werden. Du kannst auch mal in der Konfiguration des Aktors schauen, ob man den zwischen Rolläden und Jalousien umschalten kann, meine Hager sparen sich dann bei einem Stop den kleinen Schritt zur Lamellenverstellung.

        Eine Abfrage in den Regel auf receivedCommand = STOP sollte auch funktionieren, wenn ich wieder zu Hause bin kann ich mal schauen wie ich das gemacht habe. Eventuell fehlt noch ein passendes Mapping.

        Kommentar


          #5
          Zitat von Jockel Beitrag anzeigen
          Das Typecasting treibt mich auch immer wieder in den Wahnsinn... Schau mal mit dem Designer, welchen Typ now.millis und die Konstante 1000.0 haben.
          Hier ist ein noob am werk - wie mache ich das? Programmiere im Designer, aber ich habe in keinem kontextmenue etwas passendes gefunden. Egal ob ich das statement markiert habe oder nicht. Mouse-Over ist auch nicht hilfreich.

          Deine Probleme mit dem Jung Taster verstehe ich nicht. KNX Standard ist, dass die Rolläden bei einer 1 Auf dem Auf/Ab Objekt zu- und bei einer 0 Hochfahren. Auf Stopobjekt führt jedes Telegramm, egal ob 0 oder 1 zum Anhalten. Genau so machen das auch meine Jung Taster, mit dem jeweiligen Schema stellst nur ein, wann genau die Telegramme bei der Bedienung gesendet werden. Du kannst auch mal in der Konfiguration des Aktors schauen, ob man den zwischen Rolläden und Jalousien umschalten kann, meine Hager sparen sich dann bei einem Stop den kleinen Schritt zur Lamellenverstellung.
          Ich verwende die SelfBus/FreeBus aktoren mit stand 2011. Verhalten sich wie Jung 2204REGHR - naja, grossteils :-] Da gibt es nur Kurzzeitbetrieb, Langzeitbetrieb und 2 Sicherheits Objekte - kein Stop objekt. Allerdings, man kann den Kurzzeitbetrieb auf 0s parametrieren, dann verhaelt sich dieser angeblich wie ein STOP. Ich habe das jetzt aber (noch?) nicht getestet.

          Eine Abfrage in den Regel auf receivedCommand = STOP sollte auch funktionieren, wenn ich wieder zu Hause bin kann ich mal schauen wie ich das gemacht habe. Eventuell fehlt noch ein passendes Mapping.
          Ja das funktioniert bereits.

          Danke, ich bin fuer jede hilfe dankbar :-)

          Kommentar

          Lädt...
          X