Ankündigung

Einklappen
Keine Ankündigung bisher.

stateswitch mit icon.heating: icon nur bei einem Schaltzustand eingefärbt

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

    stateswitch mit icon.heating: icon nur bei einem Schaltzustand eingefärbt

    Hallo,
    ich habe (in FHEM mit SV 3.3) folgendes widget:
    {{ basic.stateswitch('', 'HzgBad', 'mini', [1,0], [icon.heating('','', 'HzgBad', 0, 1, 'red'), icon.heating('','', 'HzgBad', 0, 1, 'blue')]) }}
    Angezeigt wird für die beiden Schaltzustände ('HzgBad' hat die Zustände 'on' und 'off'):
    grafik.png​undgrafik.png​. D.h. beim Zustand 'off' wird nichts eingefärbt.


    Schreibe ich probehalber das widget so:
    {{ basic.stateswitch('', 'HzgBad', 'mini', [1,0], [icon.garagedoor('','', 'HzgBad', 0, 1, 'red'), icon.garagedoor('','', 'HzgBad', 0, 1, 'blue')]) }}
    bekomme ich:
    grafik.png​und grafik.png

    Was verstehe ich falsch (oder hat das icon.heating ne Macke?)

    Gruß

    Franz
    Zuletzt geändert von alkazaa; 21.02.2023, 06:11.

    #2
    Hallo Franz,

    korrekt, Icon heating hat eine Mache. Das hat vor vielen Jahren schon smai festgestellt. Ich finde aber den Thread dazu gerade nicht.

    Gruß
    Alex

    Kommentar


      #3
      Du meinst wahrscheinlich nicht den hier: https://knx-user-forum.de/forum/supp...inf%C3%A4rbbar
      Aber da steht eventuell die Lösung drin mit dem festen Icon sani_heating.svg

      Gruß Stefan

      Kommentar


        #4
        Ich meinte diesen Thread. Hier gab es früher mal ein Problem mit icon.heating

        https://knx-user-forum.de/forum/supp...81#post1231881

        wvhn weiß bestimmt mehr, ob es hier noch Probleme gibt
        Zuletzt geändert von aschwith; 20.02.2023, 23:18.

        Kommentar


          #5
          Danke für den Hinweis und die Antworten.

          Stefan verweist schon auf die Lösung für Deinen Fall. Wenn das item eh vom Typ Bool ist. dann kann man sani_heating verwenden.
          Code:
          {{ basic.stateswitch('', 'test.varbool', 'mini', [1,0], 'sani_heating', '', ['red', 'blue']) }}
          Einziger Unterschied: die Icons sind dann komplett eingefärbt, nicht mit dem beim dynamischen icon üblichen Gradienten.

          Der Gradient ist auch gleichzeitig der Grund für die Macke, die schon seit langem besteht (danke Alex). Hier wurde im Widget eine Funktion für das Anlegen der defs, die für die Farbgradienten zuständig sind, falsch verwendet. Dadurch konnte das icon mit nur einer Farbe pro Visu-Seite verwendet werden.
          In der icon.html kann dies in der Zeile 435 geändert werden:
          Code:
          {% set gradient_id = uid(page, id, item_value~'-gradient') ~'-' ~color|default('') %}
          Mit dem oben geposteten Aufruf des Stateswitch bleibt das icon beim item-Wert 0 weiß. Will man die Farbe blau haben, muss man min und max im icon-Widget vertauschen:
          Code:
          {{ basic.stateswitch('', 'HzgBad', 'mini', [1,0], [icon.heating('','', 'HzgBad', 0, 1, 'red'), icon.heating('','', 'HzgBad', 1, 0, 'blue')]) }}
          Wenn Ihr das nochmal testet, schiebe ich die Korrektur in den develop branch.

          Gruß
          Wolfram
          Zuletzt geändert von wvhn; 21.02.2023, 00:11.

          Kommentar


            #6
            Danke Wolfram, beides (sani_heating und icon.heating(..) ) funktioniert!

            Gruß Franz

            Kommentar


              #7
              Hallo zusammen,

              wvhn : Danke für Deinen Fix im Develop. Ich habe beim Testen trotzdem noch ein Problem mit icon.heating gefunden. Wenn man das Widget folgendermaßen verwendet, kann man normalerweise durch Klicken auf das Icon das item "test.schaltuhr" schalten. Das funktioniert, solange das Statusitem, hier "test.level" einen Wert ungleich 0 hat.
              Code:
              icon.heating('', 'test.schaltuhr', 'test.level', '0', '100', '')
              In dem Sonderfall, dass test.level == 0 ist, funktioniert die gesamte Schaltfunktion nicht mehr und das item "test.schaltuhr" kann nicht mehr geschaltet werden.

              Könnt ihr das bestätigen?

              Kommentar


                #8
                Hallo Alex,

                ich kann das nur zum Teil bestätigen. Wenn man auf das icon klickt, kann man in der Konsole die Log-Ausgaben des Treibers sehen, der jeweils die veränderten Daten an das item "test.schaltuhr" im Backend schickt - unabhängig vom Wert von test.level.

                Alle dynamischen Icons haben allerdings die Eigenschaft, dass sie nicht eingefärbt werden, wenn das item test.level == 0 ist. Das ist schon "immer" so und explizit so programmiert, indem die Klasse "icon1" nur gesetzt wird, wenn beide items != 0 sind. Getestet habe ich das zurück bis v2.8.

                Gruß
                Wolfram

                Kommentar


                  #9
                  Hallo Wolfram,

                  Du hast wie immer völlig recht. Das Schalten funktioniert doch einwandfrei. Ich hatte zusammen mit einem anderen dynamischen Icon getestet und bin damit genau über den zweiten Teil deiner Antwort gestolpert. Warum die Autoren das damals so umgesetzt haben, erschließt sich für mich nicht.

                  Beispiel icon.windrose:

                  Code:
                  {{ icon.windrose('i', 'test.schaltuhr', 'test.level', '0', '100', '') }}
                  Das Item test.level steuert hier rein die Ausrichtung der Windrose. Mit der Farbe hat das Item gar nichts zu tun. Und trotzdem, wie Du schon oben schreibst:

                  Bei test.level != 0 wird das icon gemäß Schaltzustand eingefärbt, bei test.level == 0 wird das Icon gar nicht eingefärbt (unabhängig vom Schaltzustand). Dabei bedeutet test.level == 0 nur, dass die Windrose nach Norden ausgerichtet ist.

                  Ich nutze das Icon nicht als Schalt- und Anzeigeitem, daher ist es für mich auch kein Problem. Ich sehe das trotzdem weiterhin als Fehler an. Zumindest sollte die Doku fett daraufhinweisen.

                  Grüße
                  Alex

                  Kommentar


                    #10
                    Moin Alex,

                    ich überlege mal, wie man das besser machen kann. Eigentlich wollte ich die Schaltfunktion bei den dynamischen Icons schon längst mal rausschmeißen. Wer etwas schalten will, kann einen basic.stateswitch nehmen und das dyn. icon als Anzeige verwenden. Deshalb steht in der Doku auch
                    - item_switch should be left empty since clicking on the icon will toggle the related item​
                    Bei Geräten wie z.B. einem Dimmer oder einem Ventilator, bei dem beide items zum selben Gerät gehören, ist die Art der Darstellung sinnvoll: Level == 0 bedeutet "aus". Wenn man eine Windrose verwendet, findet man wahrscheinlich keinen vernünftigen Grund, warum "Norden" = "aus" bedeuten sollte. Die Funktion ist aber für alle dynamischen Icons im Prototyp-Widget gleich vorgegeben.

                    Gruß
                    Wolfram

                    Kommentar

                    Lädt...
                    X