Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX Raffstores via openHAB steuern und visualisieren

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

    KNX Raffstores via openHAB steuern und visualisieren

    Bräucht mal eure Hilfestellung beim Konfgurieren von smartVISU bzw. openHAB zur Steuerung und Visualisierung meiner Raffstores.

    Würde gerne alle Möglichkeiten mit openHAB wieder haben die ich mit SmarthomeNG habe, doch mir ist nicht klar wie das funktioneren soll.

    In SmarthomeNG habe ich mehrere Items für einen Raffstore(up/down, stop/step, Position, Lamellenpostion, Status Position, Status Lamellenpostion...), in openHAB sind das -wenn ich richtig recherchiert habe- nur 2(rollershutter für Behang und Lamellen).

    Hier mal meine Konfi

    openHAB-Things:
    Code:
    Thing device knx_jalousien "KNX Jalousien" [
    ] {
    Type rollershutter : Res-Jal_A_A "[Res] Jalousie A_A" [ upDown="4/0/151", stopMove="4/1/151", position="4/2/151+<4/4/152" ]
    Type rollershutter : Res-Jal_Lam "[Res] Jalousie Lamellen" [ upDown="4/1/151", position="4/3/151+<4/4/153" ]
    }
    openHAB-Items:
    Code:
    Rollershutter Res_Jalousie_A_A "Resi Jalousie auf/ab [%d %%]" <rollershutter> { channel="knx:device:bridge:knx_jalousien:Res-Jal_A_A" }
    Rollershutter Res_Jalousie_Lamellen "Resi Jalousie Lamellen [%d %%]" <rollershutter> { channel="knx:device:bridge:knx_jalousien:Res-Jal_Lam" }

    smartVISU-Einbindung(Test):
    HTML-Code:
    <span data-role="controlgroup" data-type="horizontal">
    {{ basic.stateswitch('Res_Jalousie_pos_00', 'Res_Jalousie_A_A', 'micro', '0', '', '0%') }}
    {{ basic.stateswitch('Res_Jalousie_pos_25', 'Res_Jalousie_A_A', 'micro', '25', '', '25%') }}
    {{ basic.stateswitch('Res_Jalousie_pos_50', 'Res_Jalousie_A_A', 'micro', '50', '', '50%') }}
    {{ basic.stateswitch('Res_Jalousie_pos_75', 'Res_Jalousie_A_A', 'micro', '75', '', '75%') }}
    {{ basic.stateswitch('Res_Jalousie_pos_100', 'Res_Jalousie_A_A', 'micro', '100', '', '100%') }}
    {{ basic.print('Res_Jal_pos_wert', 'Res_Jalousie_A_A', '%') }}
    {{ icon.shutter('Res_Jalousie_position', '', 'Res_Jalousie_A_A', 0, 100) }}
    </span>
    
    <span data-role="controlgroup" data-type="horizontal">
    {{ basic.stateswitch('Res_Jal_lam_00', 'Res_Jalousie_Lamellen', 'micro', '0', '', '0%') }}
    {{ basic.stateswitch('Res_Jal_lam_25', 'Res_Jalousie_Lamellen', 'micro', '25', '', '25%') }}
    {{ basic.stateswitch('Res_Jal_lam_50', 'Res_Jalousie_Lamellen', 'micro', '50', '', '50%') }}
    {{ basic.stateswitch('Res_Jal_lam_75', 'Res_Jalousie_Lamellen', 'micro', '75', '', '75%') }}
    {{ basic.stateswitch('Res_Jal_lam_100', 'Res_Jalousie_Lamellen', 'micro', '100', '', '100%') }}
    {{ basic.print('Res_Jal_lamelle_wert', 'Res_Jalousie_Lamellen', '%') }}
    {{ icon.blade_arc('Res_Jal_lamelle', '', 'Res_Jalousie_Lamellen', 0, 100) }}
    </span>
    Was funktioniert:
    • -Behang hochfahren via Pfeilnachoben-Button
    • -Behang positionieren über die Prozentbuttons
    • -Behang stoppen
    • -dynamische Anzeige des Behangs mit icon.shutter
    • -Prozentanzeige via basic.print(Behang und Lamellen)

    Was funktioniert nicht:
    • -Behang herunterfahren mit Pfeilnachunten-Button -> leider nur Step
    • -Lammellenwinkel positionieren -> leider nur Step z.B.Lamellen stehen auf 100%, beim klick auf 0% kippen sie auf 93% obwohl beim basic.print kurz 0% angzeigt wird
    • -dynamische Anzeige der Lamellen mit icon.blade_arc -> ändert sich aber falsche Stellung​
    Zuletzt geändert von Yfkt5A; 30.08.2023, 14:28.
    cu Yfkt5A
    DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
    microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

    #2
    Im Ordner ./driver gibt es die Datei hints_openHAB.md mit einigen Hinweisen, auch zu Raffstoren.

    Gruß
    Wolfram

    Kommentar


      #3
      Danke wvhn für deine Antwort.

      Das kannte ich noch nicht und habs mir natürlich angesehen, leider bringt mich das aber nicht wirklich weiter.

      Evtl. sollte ich doch in OH noch mehrere Things/Items anlegen um diese in smartVISU einzeln verarbeiten zu können.


      Hol mir da mal den udo1toni mit rein, der hat da bestimmt Ahnung von wie man das Problem am besten lösen kann.

      cu Yfkt5A
      DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
      microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

      Kommentar


        #4
        Da ich hinsichtlich openHAB nicht helfen kann, war die Idee, dass Du mit den Hinweisen und dem twig / html-Code von device.blind die Parametrierung Deiner stateswitches selbst ableiten kannst.

        Jetzt fällt mir auf, dass der html-Code für den nicht funktionierenden Teil fehlt. Man sieht nicht, wie Du die Auf/Ab Buttons realisiert hast. Falls Du dies mit den smartVISU-Widgets device.shutter oder device.blind gemacht hast: diese senden auf item_move nur 0 oder 1. Du brauchst vermutlich 0 / 100. Deshalb der Hinweis, dass item_move leer zu lassen ist. Dann werden 0 und 100 auf item_pos geschickt.

        Bei der Anzeige des Lamellenwinkels kannst Du mal die Endwerte tauschen.
        Code:
        {{ icon.blade_arc('Res_Jal_lamelle', '', 'Res_Jalousie_Lamellen', 100, 0) }}
        Gruß
        Wolfram

        Kommentar


          #5
          Vorweg: ich habe keine Ahnung von SmartVisu.
          Der eigentliche Punkt ist aber: Du hast ein knx Gerät, mit dem der Raffstore gesteuert wird.
          Der Raffstore hat einen (1) Motor, dreht der Motor in die eine Richtung, werden zunächst die Lamellen in eine Richtung gekippt, bis sie "am Anschlag" sind, dann bewegt sich der Raffstore in eine Richtung. dreht der Motor in die andere Richtung, werden zunächst die Lamellen in die andere Richtung gekippt, bis sie am Anschlag sind, dann bewegt sich der Raffstore in die andere Richtung.

          Entsprechend reichen zwei Rollershutter Channel, um den Raffstore zu bedienen.
          Die beiden Rollershutter Items, welche mit den beiden Channels verlinkt sind, kennen die Befehle UP/DOWN/STOP und die Zahlen von 0 bis 100, wobei 0 "vollständig geöffnet" bedeutet und 100 "vollständig geschlossen". Das trifft natürlich nur beim Langzeit Channel zu, beim Kurzzeit Channel ist es der Lamellenwinkel.
          In welche Richtung die Lamellen stehen, kommt aber nur auf die Bauart des Raffstore an (wobei die vermutlich alle gleich funktionieren, ich habe aber keine...) und openHAB hält sich streng an die knx Definition, also 0 = UP, 1 = DOWN (sowohl für Langzeit als auch für Kurzzeit).
          Die Position wird hingegen ausschließlich vom Aktor geliefert (zumindest, wenn man in den Item Metadaten autoupdate="false" setzt - das sollte man grundsätzlich bei allen knx Item tun, weil knx ja echte Status liefert).

          Prüfe, ob die Steuerbefehle in openHAB sauber funktionieren (Positionsfahrten z.B. über Schaltflächen in der openHAB UI, relative Steuerung (UP/DOWN/STOP) ebenfalls über Schaltflächen. Alternativ kannst Du auch die Karaf Konsole verwenden:
          Einloggen über openhab-cli console, Passwort habopen,
          Befehl z.B. openhab:send <itemname> UP, openhab:send <itemname> STOP oder auch openhab:send <itemname> 68​ (wobei die spitzen Klammern hier nur kennzeichnen, dass da ein Platzhalter steht, die lässt Du also beim echten Aufruf weg

          openHAB muss auf jeden Fall in der Lage sein, sowohl relative als auch absolute Kommandos zu senden (und der Raffstore muss den Befehlen natürlich folgen).

          Erst danach kannst Du Dich daran machen, die Befehle von SmartVisu aus an openHAB zu senden (ich nehme an, so ist der Weg der Steuerung).
          Die zwei Items sind auf jeden Fall hinreichend, um den Raffstore vollständig zu steuern und zu visualisieren.

          Kommentar


            #6
            Also erstmal ein großes Danke für eure Hilfsbereitschaft.

            Die gute Nachricht:
            In OH kann ich den Behang auf/ab/stop fahren und die Lamellen step up/down verstellen.
            via Cli kann ich auch die Positionen anfahren openhab:send<itemname>50

            Über die Konsole konnte ich dann auch sehen was passiert wenn ich etwas in der smartVISU betätige.
            deshalb habe ich nun die auf/ab/stop-Buttons folgendermaßen eingebaut:
            Code:
            {{ basic.stateswitch('', item_move, type|default('micro'), 'UP', 'carat-u') }}
            {{ basic.stateswitch('', item_stop, type|default('micro'), 'STOP', 'audio_stop') }}
            {{ basic.stateswitch('', item_move, type|default('micro'), 'DOWN', 'carat-d') }}
            ​
            (Code aus Widget)

            Was jedoch noch nicht funktioniert sind die Lamellenpositionen 0 und 100 aus der smartVISU heraus.
            Da kommt dann in der OH-Konsole anstatt 0 -> UP und 100-> DOWN an, sprich erst "steppt" dann immer nur. Alle anderen Werte von 1-99 funktionieren einwandfrei aus der VISU raus.

            Zitat von wvhn Beitrag anzeigen
            Bei der Anzeige des Lamellenwinkels kannst Du mal die Endwerte tauschen.
            Code:
            {{ icon.blade_arc('Res_Jal_lamelle', '', 'Res_Jalousie_Lamellen', 100, 0) }}
            Daran liegt es nicht, Problem ist das meine Lamellen nur um 90° verstellt werden.
            Heißt bei 0 bzw. beim Auffahren stehen sie waagrecht bei 100% und DOWN senkrecht.
            Müsste da wohl den Wert irgendwie skalieren 0 = 50, 100 =100.
            cu Yfkt5A
            DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
            microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

            Kommentar


              #7
              Wenn das item "Res_Jalousie_Lamellen" den Wert 0 hat, sehen die Lamellen so aus (siehe inline-Doku -> design -> icons):
              grafik.png
              und beim Wert 100:
              grafik.png
              D.h. Du kannst entweder icon_blade verwenden, oder Du skalierst icon_blade_arc neu von -100 bis 100. Dann stehen die Lamellen bei 0 waagerecht.

              Ausprobieren kannst Du das im Widget-Assistent, indem Du folgendes in das Code-Fenster eingbst und dann mit der Skalierung im icon spielst:
              Code:
              basic.slider('','bath.light.value', 0, 100)<br>
              icon.blade_arc('','','bath.light.value', -100,100)​
              Bei Eingabe von ...100, -100 dreht die Lamelle z.B. von waagerecht aus in die andere Richtung.
              "bath.light.value" ist ein item aus der Doku. Du kannst stattdessen auch das item "Res_Jalousie_Lamellen" verwenden und live beobachten, was die Jalousie macht. (Ich arbeite nur dann mit echten items, wenn ich sicher weiß, dass dabei keine falschen Werte auf den Bus geschickt werden.)

              Musst Du die Lamellenposition unbedingt als Rollershutter-item anlegen? Die Übersetzung von "0" in "UP" und "100" in "DOWN" ist nämlich im Treiber so hinterlegt
              (./driver/io_openhab.js ab Zeile 307 / 310). Wenn Du stattdessen ein normales numerisches item verwendest, sollten auch 0 und 100 korrekt übertragen werden. Möglicherweise reicht es auch, den Teil (Zeilen 307 -311 im aktuellen Master, 310 - 314 im aktuellen Develop Branch) auszukommentieren. Das müsstest Du probieren, v.a. ob dann die Steuerung der Behang-Höhe noch funktioniert.

              Gruß
              Wolfram
              Zuletzt geändert von wvhn; 07.09.2023, 08:13. Grund: Zeilennummern master / develop korrigiert

              Kommentar


                #8
                das Blade.Arc-Icon ist schon das richtige, meine Lamellen sind gebogen.
                Mit deinem Tipp icon.blade_arc('','','bath.light.value', -100,100)​ funktioniert es nun auch wie gewünscht.
                Hatte schon alles mögliche probiert, aber darauf es mit negativen Werten zu probieren bin ich nicht gekommen.


                Zitat von wvhn Beitrag anzeigen
                Musst Du die Lamellenposition unbedingt als Rollershutter-item anlegen?
                Gute Frage... hatte auch Beispiele als Dimmer gefunden, aber die aktuelle Empfehlung ist wohl ein 2tes rollershutter.

                evtl. kann hier udo1toni was zu sagen

                Zitat von wvhn Beitrag anzeigen
                Die Übersetzung von "0" in "UP" und "100" in "DOWN" ist nämlich im Treiber so hinterlegt
                (./driver/io_openhab.js ab Zeile 310). Wenn Du stattdessen ein normales numerisches item verwendest, sollten auch 0 und 100 korrekt übertragen werden. Möglicherweise reicht es auch, den Teil (Zeilen 310 - 314) auszukommentieren. Das müsstest Du probieren, v.a. ob dann die Steuerung der Behang-Höhe noch funktioniert.
                Vielleicht ein Issue für den Treiber? udo1toni

                Als Workaround habe ich die Werte jetzt auf 0.1 und 99.9 gesetzt. Als Rückmeldung vom KNX kommt das in OH dann wieder als 0 und 100 an.

                cu Yfkt5A
                DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
                microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

                Kommentar


                  #9
                  Der Treiber stammt von PatrikG und ist sicherlich mit den item-Typen und Aktoren, die er verwendet, zuverlässig getestet. Das ist kein issue für udo1toni.

                  Gruß
                  Wolfram

                  Kommentar


                    #10
                    Na ja, der Punkt ist, dass der Channel ein Rollershutter Channel sein muss, wenn man die Befehle UP/DOWN (also relatives verstellen) der Lamellen nutzen will.
                    Wenn man hingegen immer mit einem absoluten Lamellenwinkel arbeiten will, kann man natürlich auch ein Dimmer Item und einen Dimmer Channel nehmen, dann lässt man halt den Parameter mit dem Step weg (Dimmer-Telegram für INCREASE/DECREASE ist 4-Bit, Shutter Step ist 1-Bit)

                    Ansonsten sollte klar sein, dass die Lamellen insgesamt weit weniger als 180° schwenken können, schließlich stoßen sie mechanisch mit den darüber/darunter liegenden Lamellen zusammen. 0 bis 100 ist ein prozentualer Wert, wobei 0 halt "maximal nach außen geneigt" bedeutet und 100 "maximal nach innen geneigt" (oder anders rum... Du verstehst, was ich meine... )

                    Kommentar


                      #11
                      Dann fasse ich mal zusammen:
                      • items in openHAB vom Typ Rollershutter nehmen nicht nur Werte für die absolute Position entgegen, sondern verstehen zusätzlich die Befehle „UP“ und „DOWN“, sowie „STOP“. „UP“ und „DOWN“ bewirken bei der Behanghöhe eine Fahrt bis zum Endanschlag und beim Lamellenwinkel ein schrittweises Verstellen.
                      • Die Jalousie-Widgets in smartVISU gehen immer von separaten items aus: item_pos und item_angle für die absoluten Positionen (basic.shutter, device.blind, device.shutter), sowie item_move und item_stop für die Steuerung der Bewegung (device.blind und device.shutter). Letztere items können jeweils nur die Werte 0 und 1 annehmen. Die Bewegungsrichtung und die Endwerte für die Behanghöhe kann in der Parametrierung der Widgets angegeben werden. Lässt man items in der Parametrierung weg, werden die zugehörigen Buttons ausgeblendet. Fehlt item_move, dann werden bei Betätigen der aufwärts/abwärts-Tasten statt 0/1 die angegebenen min- und max-Werte auf item_pos geschrieben.
                      • Der openHAB-Treiber in smartVISU verbindet die beiden Welten, indem er „0“ in „UP“ umcodiert, „1“ in „STOP“ und „100“ in „DOWN“. Dadurch fehlen diese Werte allerdings für die absoluten Positionen, was bei der Behanghöhe keinen Unterschied macht, aber beim Lamellenwinkel dazu führt, dass nur ein Schritt gefahren wird. Wegen der Umcodierung muss item_move im Widgetaufuf leer bleiben, da sonst nur „UP“ (item = 0) funktioniert und „STOP“ statt „DOWN“ (item = 1) gesendet wird.
                      Wer zu den smartVISU-Widgets zusätzliche Buttons für die Positionen einsetzt, muss als Workaround bei den Lamellen „0.1“ statt „0“ und „99.9“ statt „100“ senden und die „1“ vermeiden.

                      Gruß
                      Wolfram

                      Kommentar

                      Lädt...
                      X