[gelöst] classchanger mit data hide on/off - Fehler nach Update?

Begonnen von ih-sqeezer, 02 September 2017, 23:34:56

Vorheriges Thema - Nächstes Thema

ih-sqeezer

Hallo zusammen,

seit dem letzten Update auf die 2.6.20 funktioniert das widget classchanger nicht mehr wie bisher.
Folgenden code hatte ich im FTUI mehrfach seit einigen Monaten so im Einsatz:
<div class="inline">
<div data-type="symbol"
data-device="BadFensterState"
data-get-on="opened"
data-get-off="closed"
data-off-color="#3D4C66"
data-on-color="firebrick"
class="big">
</div>
<div data-type="classchanger"
                data-device="BadFensterState"
                data-get="state"
                data-get-on="opened"
                data-off-class="hide"
                data-on-class="" >
<div class="">geöffnet
        </div>
</div>
<div data-type="classchanger"
                data-device="BadFensterState"
                data-get="state"
                data-get-on="closed"
                data-off-class="hide"
                data-on-class="" >
<div class="">geschlossen
</div>
</div>
</div>

Jedoch erscheinen seit dem letzten Update immer beide Zustände "geöffnet / geschlossen" als Text im FTUI.
Scheinbar muss sich etwas beim widget_classchanger.js geändert haben.
Kann mir da Jemand einen Tip geben? Wie muss der code angepasst werden?

Danke und beste Grüße,
Ingo

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ih-sqeezer

#2
Das habe ich heute schon als erstes ausprobiert, leider ohne Erfolg.
Diese Version von der der widget_classchanger.js ist nicht wirklich viel anders.
Jedoch habe ich gesehen, dass sich ebenfalls mit dem Update die fhem-tablet-ui.css geändert hat. Eventuell hat es mehr damit zu tun.
Ich führe eigentlich immer regelmäßig die Updates von fhem und FTUI durch, also mind. 1x im Monat. Demnach sollte sich eigentlich immer nicht so viel ändern.

Leider werde ich immer noch nicht schlau aus der ganzen Sache. Ich versuche mich jedoch noch zu erinnern, ob vlt dieser Fehler schon mit einer der vorherigen updates entstanden sein könnte und es mir erst jetzt aufgefallen ist. Aber es fehlen ganze buttons im FTUI, welche ich via classchanger ein- bzw. ausblenden lasse.

Hat noch jemand eine Idee?

Nachtrag: Ebenfalls hat sich die Datei fhem-tablet-ui.js mit dem update geändert. Wie ich schon bei Anderen im Forum gelesen habe, ist auch an anderen Stellen mit diesem Update einiges durcheinander geraten im FTUI. Das muss ich mir mal etwas genauer anschauen...

Grüße,
Ingo

amenomade

ZitatDiese Version von der der widget_classchanger.js ist nicht wirklich viel anders.
Jedoch habe ich gesehen, dass sich ebenfalls mit dem Update die fhem-tablet-ui.css geändert hat.

Das kannst Du testen, indem Du auf der vorherige Version von widget_classchanger.js zurück kommst.
https://github.com/knowthelist/fhem-tablet-ui/commits/973b842214f0e6811fd7d4b2cdce34a4f48e8d5d/www/tablet/js/widget_classchanger.js
https://github.com/knowthelist/fhem-tablet-ui/blob/eef78b4b60af6785d5d2e7a23b6fe216f8ef2106/www/tablet/js/widget_classchanger.js
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ih-sqeezer

Hm, das widget_classchanger.js hat sich ja doch ernorm geändert. Es wurde sehr stark dezimiert.
Bezüglich der Fenster habe ich jetzt das Ganze in ein Label geformt und classchanger gar nicht mehr verwendet. Das klappt problemlos und der code ist um einiges kürzer geworden.
Jedoch verwende ich den classchanger immer noch bei anderen widgets. Ich habe zum Bsp drei ähnliche widgets, welche ich von einer variable abhängig ein- bzw. ausblende.
Da habe ich jedoch noch keine Idee zur Umsetzung. Im Detail habe ich somit bislang von der Heizung den wdtimer als popup aufgerufen. Hier habe ich jeweils drei unterschiedliche Heizprofile, bei denen ich dann jeweils einen unterschiedlichen wdtimer aufrufe.

Vlt. hat jemand eine Idee, als Alternative für den classchange?

Danke und Grüße,
Ingo

setstate

Wieso Alternative? Es sollte alles wie gewohnt laufen, nur RegEx wird jetzt unterstützt.

Browser-Cache geleert?

ih-sqeezer

Hallo setstate,
jep, den cache leere ich immer bei neuen Programmierungen bzw nach updates.
Wie gesagt, der code lief bei mir Monate in dem Zustand ohne jegliche Probleme.
Hier noch mal der code am Bsp für das KüchenFenster:
<div class="inline">
<div data-type="symbol"
data-device="KuecheFensterState"
data-get-on="opened"
data-get-off="closed"
data-off-color="#3D4C66"
data-on-color="firebrick"
class="big">
</div>
<div data-type="classchanger"
                                data-device="KuecheFensterState"
                                data-get="state"
                                data-get-on="opened"
                                data-off-class="hide"
                                data-on-class="" >
<div class="">geöffnet
</div>
</div>
<div data-type="classchanger"
                                data-device="KuecheFensterState"
                                data-get="state"
                                data-get-on="closed"
                                data-off-class="hide"
                                data-on-class="" >
<div class="">geschlossen
</div>
</div>
</div>


In diesem Fall des Fenstertextes werden beide Texte unter dem Fenstersymbol angezeigt, egal welchen Zustand das Fenster hat.

Die Umstellung ohne den classchanger habe ich heute so realisiert:
<div class="inline">
<div data-type="symbol"
data-device="BadFensterState"
data-get-on="opened"
data-get-off="closed"
data-off-color="#3D4C66"
data-on-color="firebrick"
class="big">
</div>
<div data-type="label"
                                data-device="BadFensterState"
data-substitution='["opened","geöffnet","closed","geschlossen"]'
                                data-get="state">
<div class=""></div>
</div>
</div>


Ist einfacher und wesentlich kürzer. Damals war ich wahrscheinlich noch nicht soweit mit der ganzen Thematik.
Dennoch muss sich etwas im code geändert haben. Weil so wie vorher funktioniert der classchanger nicht mehr.

Und die wdtimer habe ich herausgefunden, werden desshalb nicht angezeigt, weil die doch im Sommer die Heizung ausgeschalten ist :-(. Sorry für die Verwirrung.

Danke und Grüße,
Ingo

ih-sqeezer

Nachtrag meinerseits:

Gibt es eine Möglichkeit für den wdtimer vom classchanger ebenfalls wegzukommen und es vereinfacht in einem div zu schreiben:
<div data-type="classchanger"
                data-device="HeatingControlStateHome"
                data-get="state"
                data-get-on="on"
                data-off-class="hide"
                data-on-class="" >
<div id="wdtimer_ftui"
data-type="wdtimer"
data-device="BadHeatingControlHome"
data-style="round"
data-theme="custom"
data-width="800"
data-height="600"
data-title="Bad - Heizzeiten"
data-savecfg="true"
data-cmdlist='{"4.5°C off":"off","15°C Eco":"eco","18°C":"18.0","20°C Komfort":"comfort","22°C":"22.0"}'>
<div data-type="push"
data-off-color="#808080"
data-off-background-color="#3D4C66"
data-icon="fa-wrench"
class="big">
</div>
<div class="">Programm
</div>
</div>
</div>
<div data-type="classchanger"
                data-device="HeatingControlStateMixed"
                data-get="state"
                data-get-on="on"
                data-off-class="hide"
                data-on-class="" >
<div id="wdtimer_ftui"
data-type="wdtimer"
data-device="BadHeatingControlMixed"   
data-style="round"
data-theme="custom"
data-width="800"
data-height="600"
data-title="Bad - Heizzeiten"
data-savecfg="true"
data-cmdlist='{"4.5°C off":"off","15°C Eco":"eco","18°C":"18.0","20°C Komfort":"comfort","22°C":"22.0"}'>
<div data-type="push"
data-off-color="#808080"
data-off-background-color="#3D4C66"
data-icon="fa-wrench"
class="big">
</div>
<div class="">Programm
</div>
</div>
</div>
<div data-type="classchanger"
                data-device="HeatingControlStateWork"
                data-get="state"
                data-get-on="on"
                data-off-class="hide"
                data-on-class="" >
<div id="wdtimer_ftui"
data-type="wdtimer"
data-device="BadHeatingControlWork"   
data-style="round"
data-theme="custom"
data-width="800"
data-height="600"
data-title="Bad - Heizzeiten"
data-savecfg="true"
data-timesteps="15"
data-cmdlist='{"4.5°C off":"off","15°C Eco":"eco","18°C":"18.0","20°C Komfort":"comfort","22°C":"22.0"}'>
<div data-type="push"
data-off-color="#808080"
data-off-background-color="#3D4C66"
data-icon="fa-wrench"
class="big">
</div>
<div class="">Programm
</div>
</div>
</div>


Ich bräuchte sozusagen eine Methode, wo ich den dummy "HeatingControlStateXXX" auszulesen. Wobei das XXX ebenfalls in einem dummy bereitgestellt wird. Es müsste nur möglich sein diese beiden dummies im data-device als einen string zusammenzusetzen. Geht das irgendwie mit RegEx zum Bsp.?
Bislang habe ich jeweils das aktive widget eingeblendet und die anderen beiden ausgeblendet.

Danke und Grüße,
Ingo

setstate

bei den Fenstern fehlte nur der Wert für AUS: data-get-off

oben

data-get-on="opened"
data-get-off="closed"


unten

data-get-on="closed"
data-get-off="opened"

ih-sqeezer

Hallo setstate,

jep, das war goldrichtig! Danke dir!

Hast du zufällig noch einen Tipp für mich in Bezug auf die drei unterschiedlichen wdtimer?

Danke und Grüße,
Ingo

setstate

Ich verstehe leider nicht, worauf du hinaus willst.
Aber vorab, Device-Name aus verschiedenen Strings zusammensetzen geht nicht

ih-sqeezer

Ok, dann bleibt es erstmal bei dieser Lösung mit dem aus- bzw. einschalten der unterschiedlichen wdtimer widgets.

Hab trotzdem vielen Dank!