classchanger data-get-on/off

Begonnen von HGButte, 08 September 2017, 18:29:21

Vorheriges Thema - Nächstes Thema

HGButte

Habe prinzipiell das Problem wie hier beschrieben.
https://forum.fhem.de/index.php/topic,76152.0.html

data-get-on, data-get-off werden korrekt verarbeitet und die entsprechende "class" gesetzt wenn sich das Reading des "Device" während die Seite im Browser geöffnet ist, ändert.
z.B. Radiotitel einblenden wenn Radio:on und verstecken wenn Radio:off.

Wenn ich allerdings einen Reload der Seite mache, wird der Radiotitel angezeigt obwohl Radio:off ist


<div
                data-type="classchanger"
                data-device="EG_WO_INTERNETRADIO"
                data-get="state"
                data-get-on="stop"
                data-get-off="play"
                data-on-class="hide"
                data-off-class=""
                class="bottom">
</div>


Bis zum Update vom 03.09. hatte ich nur folgenden Code, welcher bis dahin funktionierte:

<div
                data-type="classchanger"
                data-device="EG_WO_INTERNETRADIO"
                data-get="state"
                data-get-on="stop"
                data-on-class="hide"
                class="bottom">
</div>


Muss man jetzt zwingend "data-get-on" und "data-get-off" und entsprechend "data-on-class" und "data-off-class" setzen?
Der untere Code hatte ja scheinbar so funktioniert, dass wenn "state" nicht den Wert "stop" hatte wurde automatisch "data-off-class" genutzt.

setstate

classchanger hat default data-get-off='!on'

Also alle was nicht get-on ist. Müsste also wie vorher funktionieren auch ohne data-get-off zu setzen.

du hast data-get-off="play" gesetzt erwartest aber Radio:off ?!?!? Kann das passen?

HGButte

Ich habe das Beispiel vielleicht etwas unglücklich gewählt.


<div data-type="classchanger"
        data-device="Wetter"
        data-get="WindAlarm"                 
        data-off-class="hide">           
            <div class="red">Windalarm</div>           
</div>   


D.h. Windalarm anzeigen wenn Wetter:WindAlarm auf "on" ist, wenn "off" dann verstecken.

Lade ich meine Seite wird folgender HTML Code generiert.
Obwohl  Wetter:WindAlarm "off" ist, wird Attribut "class" nicht auf "hide" gesetzt.


<div data-type="classchanger" data-device="Wetter" data-get="WindAlarm" data-off-class="hide" class="">
        <div data-type="label" class="red">Windalarm</div>
</div>


Schalte ich nun über FHEM Wetter:WindAlarm auf "on" und dann wieder auf "off" wird das Attribut "class" aber korrekt gesetzt.
D.h. im laufenden Betrieb funktioniert bei mir der classchanger, aber nicht bei intialen Laden der Seite.
Das Label "Windalarm" ist immer zu sehen unabhängig ob "on" oder "off".

HGButte

Liegt scheinbar an der Class "hide"

<div
  data-type="classchanger"
  data-device="Wetter"
  data-get="WindAlarm"         
  data-on-class="red"
  data-off-class="blue">         
  <div class="cell inline bigger">Windalarm</div>           
</div>


Generiert


<div data-type="classchanger" data-device="Wetter" data-get="WindAlarm" data-on-class="red" data-off-class="blue" class="blue">         
  <div class="cell inline bigger">Windalarm</div>           
</div>


Da Wetter:Windalarm "off" ist wird das Attribut class="blue" gesetzt.

Ersetze ich im oberen Codeschnipsel "blue" durch "hide" wird das Attribut class="" gesetzt anstatt wie erwartet  class="hide".



setstate

Am .hide lag es. Zum Widget verstecken hatte ich blöderweise auch .hide verwendet. Ist jetzt in .widget-hide umbenannt worden, damit es nicht mehr mit anderen kollidiert.