Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX-Szenen Widget

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

    KNX-Szenen Widget

    Hallo, ich habe mir gerade ein kleines Widget zum Speichern von KNX-Szenen gebastelt.
    Ziel ist es KNX-Szenen auf Button nachträglich in der Visu ändern zu können.
    Mit diesem Widget kann man nun bestimmen wie viele Button in einem Block (KNX-Szenen Adresse) angezeigt werden (Max 8).
    In der Visu kann man dann jederzeit die Buttons mit einer Szene neu belegen (Szene speichern).
    Und dazu das Symbol per Visu ändern.

    Hier ein paar Screenshots:
    2019_01_02_22_00_16_SmartVisu2.9.png

    Beim Klick auf die Überschrift öffnet sich dann dieses Popup:
    2019_01_02_22_03_42_SmartVisu2.9.png
    Hier kann dann die KNX-Szene gespeichert werden und ein Symbol für den Button ausgesucht werden.
    Für das Ändern der Icons werden Hilsitems benötigt. Wie die Angelegt werden ist im Widget beschrieben.

    Der Aufruf auf der Raumseite für 5 Button erfolgt dann so:
    Code:
    {{ widget_knx_szene.saveszene('', 'EG.Raum7.szenen_knx_Licht', 'EG.Raum7.szenen_knx_Licht.Button', 3, '5', 'Szenen Licht') }}
    P.S. Der Code ist nicht anspruchsvoll, hat mir aber bei meiner Visu sehr geholfen. Evtl. kann das ja noch jemand gebrauchen.

    Hier das Widget:
    widget_knx_szene.zip
    Angehängte Dateien
    Zuletzt geändert von schuma; 02.01.2019, 22:13.

    #2
    Gelöscht...
    Zuletzt geändert von schuma; 02.01.2019, 22:11.

    Kommentar


      #3
      Zitat von schuma Beitrag anzeigen
      Jetzt würde ich gerne noch den Szene Button, Icons aus einem Set von Icons zuweseisen können.
      Dazu, so war meine Idee, müsste ich einem Statswitch das icon als Item übergeben können.
      Du meinst etwa so wie beim basic.symbol, dass man angeben kann, bei welchem Wert welches Icon angezeigt wird?

      Dies ging nicht - zumindest bis grade eben.

      Nun kann man in allen Widgets, in denen man Icons angeben kann (also nicht nur im stateswitch) neben den gewöhnlichen und den dynamischen Icons auch basic.symbol verwenden.
      Folgendes ergibt dann etwa einen Button, welcher eine 1 sendet und und davon unabhängig je nach Wert von bath.multistate rot, gelb oder grün ist.
      Code:
      {{ basic.stateswitch('', 'bath.light.switch', 'icon', 1, basic.symbol('', 'bath.multistate', '', 'message_led', [1,2,3], '', ['red','#EAFF00','green'])) }}

      Kommentar


        #4
        smai voll cool.
        Das eröffnet ganz neue Möglichkeiten.
        Ich versuche es gleich mal einzubauen!

        Vielen Dank.

        Kommentar


          #5
          smai Ich habe das neue Feature jetzt mal umgesetzt.
          Klappt wunderbar. Jetzt kann ich in der Visu die Icons der Szene Buttons ändern

          Den Post #2 habe ich ergänzt und das neue Widget hochgeladen.

          Kommentar


            #6
            Eben habe ich noch eine Erweiterung für basic.stateswitch committed, welche für Szenen ebenfalls interessant sein könnte:
            Der stateswitch kann jetzt einen separaten Wert bei Landruck senden, damit kann das Verhalten eines KNX-Szenetasters nachgebaut werden.
            Ein entsprechendes Beispiel findet sich in der Doku.

            Kommentar


              #7
              Zitat von smai Beitrag anzeigen
              Eben habe ich noch eine Erweiterung für basic.stateswitch committed
              Auch sehr cool! Werde ich dann auch noch einbauen.

              Aber eine andere Sache noch. Ich habe das immer noch nicht so richtig verstanden wie das mit dem Indikator beim Stateswitch funktioniert.

              Wenn ich auf den Stateswitch drücke, sollte doch dann der Indikator ‚icon1‘ angehen und wenn keine Reaktion von dem Item kommt nach 3 Sekunden wieder ausgehen.

              jetzt habe ich ja ein Szenen Item, wo es auch keine Rückmeldung gibt. Aber der Button wechselt auch nicht in icon1.

              Code:
              {{ basic.stateswitch(id~'', item_szene, 'midi', '0', basic.symbol(id~'', item_iconpfad~'1', '', ['light_light_dim_100.svg', 'scene_livingroom.svg', 'it_television.svg', 'light_television_backlight.svg', 'light_light_dim_40.svg', 'scene_cat.svg'], [1,2,3,4,5,6], '', ''), '1', '', 'icon1') }}

              Kommentar


                #8
                Ich fürchte, dass der Indikator aktuell im Zusammenspiel mit SHNG wenig Sinn macht, weil SHNG den Wert des Items immer direkt ändert und zurückmeldet.
                Z.B. in ioBroker ist das anders gelöst, da wird zwischen Wert raussenden (z.B. an KNX) und Status empfangen unterschieden. Die Bestätigung kommt also erst, wenn der Aktor den Status bestätigt bzw. zurückmeldet.

                Ich bin mir nicht sicher, ob ich da was sinnvolles machen kann.

                Kommentar


                  #9
                  Zitat von smai Beitrag anzeigen
                  Nun kann man in allen Widgets, in denen man Icons angeben kann (also nicht nur im stateswitch) neben den gewöhnlichen und den dynamischen Icons auch basic.symbol verwenden.
                  Könnte man hier noch etwas einbauen?
                  Könnte man die iconfarbe, wenn im Basic.symbol keine Farbe angegeben ist, dann wieder vom Stateswitch nehmen?

                  Ich hatte das mit dem Indikator noch mal getestet und irgendwie funktioniert das doch. Allerdings in meinem Fall nur auf den Text im Stateswitch, da ich als icon für die Szenebutton ja jetzt ein Basic.symbol nehme. Dadurch habe ich das wohl übersehen.
                  Hier wäre es cool, wenn die Fabe des Icons dem Stateswitch folgen würde wenn im Basic.symbol keine Farbe angegeben ist.

                  Ein weiteres Beispiel:
                  Ich Sperre gelegentlich einen Stateswitch ca 2 Sekunden um einer Logik dahinter Zeit zum Abarbeiten zu geben. In der Zeit wo das Item gesperrt ist (durch ein zweites item) blende ich ein Symbol auf dem Stateswitch ein. Dadurch verliert aber der Stateswitch seine Anzeige (icon0, icon1). Hier wäre es dann auch nützlich die Farbe des Stateswitch zu übernehmen wenn keine andere Farbe angegeben ist.

                  Evtl nur dann die Farbe übernehmen wenn explizit eine Farbe im Stateswitch angegeben wurde.

                  Was meinst Du Smai?

                  Kommentar


                    #10
                    Das geht ziemlich sicher nicht, das symbol ist unabhängig vom stateswitch, auch wenn es innerhalb angezeigt wird.

                    Kommentar


                      #11
                      Ok, hatte ich mir schon fast gedacht.
                      Ist aber auch so eine coole neue Funktion!

                      Kommentar


                        #12
                        Zitat von smai Beitrag anzeigen
                        Das geht ziemlich sicher nicht, das symbol ist unabhängig vom stateswitch, auch wenn es innerhalb angezeigt wird.
                        Tastendrucksperre für zwei Sekunden:
                        Nach einmal drüber schlafen, habe ich das jetzt in der Logik umgesetzt (Symbol item = num und dann den Status für das Symbol (0,1,2) in der Logik mitgezogen) und dem Stateswitch ein eval: if.... spendiert. Was jetzt noch etwas stört ist, dass der Text in dem Stateswitch immer schaltet egal ob das Item sich bewegt oder nicht. Das habe ich jetzt durch ein ['icon0', 'icon0'] gelöst. Dann bleibt der Text zwar immer weiß aber zeigt halt keinen falschen Status an.

                        Ein basic.Symbol für das text Element im stateswitch wäre wahrscheinlich zuviel des guten.

                        Mit etwas Logik bekommt man das Problem mit den Szene Buttons, denke ich, auch hin.

                        Kommentar


                          #13
                          smai Ich würde gerne in dem Widget, in einem Stateswitch den Text dynamisch ändern.

                          Ich bekomme es aber nicht hin, den text Parameter durch eine Variable zu ersetzten.
                          Kannst Du da noch einmal unterstützen?

                          Code:
                          {% macro saveszene(id, item_szene, item_button_pfad, mode, button_anzahl, headline, button_icon1, button_icon2, button_icon3, button_icon4, button_icon5, button_icon6, button_icon7, button_icon8) %}
                          
                          {{ basic.stateswitch(id~'', item_szene, 'midi', '0', basic.symbol(id~'', item_button_pfad~'1.icon', '', ['light_light_dim_100.svg', 'scene_livingroom.svg', 'it_television.svg', 'scene_living.svg', 'light_light_dim_40.svg', 'scene_cat.svg', 'audio_audio.svg', 'scene_cooking_alternat.svg', 'scene_drink.svg', 'scene_baby.svg'], [1,2,3,4,5,6,7,8,9,10], '', ''), item_button_pfad~'1.Text', '', 'icon1') }}

                          Kommentar


                            #14
                            Geht nicht und kann ich nicht so einfach analog dem Icon machen. Der Text wird HTML encoded und das aus gutem Grund. Sonst würde es bei normalem Text Probleme geben, wenn jemand Zeichen wie " oder > verwenden will.

                            Irgendwie verstehe ich nicht ganz, wozu diese dynamischen Icons und Texte notwendig sind. Die verfügbaren Szenen sind doch fix, oder übersehe ich etwas?

                            Ich habe bisher alle Hässlichkeiten in deinem Code ignoriert, aber auf eine möchte ich dich doch noch hinweisen:
                            Was willst du mit den vielen   id~''  erreichen, diese machen überhaupt keinen Sinn. Im Gegenteil ergibt es invalides HTML, weil so dieselbe ID mehrmals vorkommt.
                            Lass die ID in den basic Widgetaufrufen doch einfach weg. Dafür solltest du sie einmalig als HTML-Attribut im   <span data-role="controlgroup"  aufführen (bzw. zwei Mal, jeweils für die beiden Varianten   mode > 0 and mode < 3  und   mode == 3  - welche es sinnvollerweise aber gar nicht doppelt geben sollte, weil sie redundant sind).

                            Kommentar


                              #15
                              Zitat von smai Beitrag anzeigen
                              Geht nicht und kann ich nicht so einfach analog dem Icon machen. Der Text wird HTML encoded und das aus gutem Grund. Sonst würde es bei normalem Text Probleme geben, wenn jemand Zeichen wie " oder > verwenden will.
                              OK.
                              Zitat von smai Beitrag anzeigen
                              Irgendwie verstehe ich nicht ganz, wozu diese dynamischen Icons und Texte notwendig sind. Die verfügbaren Szenen sind doch fix, oder übersehe ich etwas?
                              Das Ziel ist es, die Szenen Button per Visu weitestgehend per Klick konfigurierbar zu machen. In jedem Szenen Block soll in der Visu die anzahl der Button geändert werden können. Jeder Szene Button wiederum soll konfigurierbar sein mit: Icon (Aus der Auswahl von 10 Icons), Text (Geht nun nicht) und Szenennummer (Muss ich noch testen).

                              Das Widget was ich hier in Post 2 stehen hatte war ja nur eine frühe Version. Ich habe die nun mal entfernt, da die aktuelle Version auch schon stark von der esrten abweicht.

                              Zitat von smai Beitrag anzeigen
                              Ich habe bisher alle Hässlichkeiten in deinem Code ignoriert, aber auf eine möchte ich dich doch noch hinweisen:
                              Danke für die Hilfe!!!!
                              Zitat von smai Beitrag anzeigen
                              Was willst du mit den vielen   id~''  erreichen, diese machen überhaupt keinen Sinn. Im Gegenteil ergibt es invalides HTML, weil so dieselbe ID mehrmals vorkommt.
                              Lass die ID in den basic Widgetaufrufen doch einfach weg. Dafür solltest du sie einmalig als HTML-Attribut im   <span data-role="controlgroup"  aufführen (bzw. zwei Mal, jeweils für die beiden Varianten   mode > 0 and mode < 3  und   mode == 3  - welche es sinnvollerweise aber gar nicht doppelt geben sollte, weil sie redundant sind).
                              Die ID wird ja überhaupt nicht benötigt, ich hatte das nur so aus einem anderen Widget kopiert und in der Version halt noch nicht rausgenommen.
                              Ist also schon geändert in ''.
                              Ich hätte allerdings auch gedacht, dass solange da keiner etwas als ID übergibt, sich das auch nicht negativ auswirkt. Da ja dann am Ende auch wieder ''+'' also '' rauskommt.


                              Zuletzt geändert von schuma; 02.01.2019, 11:41.

                              Kommentar

                              Lädt...
                              X