[gelöst - update] ggf. Bug bei stateFormat

Begonnen von curt, 29 April 2018, 06:09:18

Vorheriges Thema - Nächstes Thema

curt

@rudolfkoenig

Mir ist bei stateFormat ein unschöner Seiteneffekt aufgefallen.

Der Inhalt von stateFormat wird völlig unkritisch in die HTML-Deklaration <div id="irgendwas"  title="genau hier Problem"> übernommen. Die Aufnahme des Inhalts von stateFormat in title der div-Deklaration halte ich für kritisch: Die dahinter liegende "Maschine" erzeugt damit fallweise kaputten HTML-Code.

Ich begründe:
Ich sah mehrere Deklarationen von stateFormat, die mit HTML-Tags wie <br> spielten. Von daher kam ich auf die Idee, dass ich eine Tabelle (im Sinne der HMTL-Codierung einer Tabelle) in stateFormat packen könne. Das funktioniert auch sehr schön. Auf den ersten Blick.

Leider gibt es einen verblüffenden Seiteneffekt: Nach Minuten änderte sich bei mir  die Schriftart und es entstanden zusätzliche Leerzeilen. Dieser Sache versuchte ich auf den Grund zu gehen.

Ich fand heraus, dass der Inhalt von stateFormat unverändert für das HMTL-Attribut "title" im einführenden div verwendet wird. Ich fand weiterhin, dass "die Maschine FHEM" im Fall meiner Tabelle das Attribut "title" gar nicht beendet - sondern sofort mit dem Inhalt von stateFormat fortführt. Der HML-Code der Seite ist völlig kaputt.  (Das stört aktuelle Browser nicht, sie übergehen diesen Teil elegant.) Leider führt das in der Folge zu sehr unschönen Seiteneffekten. Ungewollten Nebeneffekten.

Das title-Attribut von div ist im Grunde unbedeutend. Es ist nicht erforderlich, dass in "title" der komplette Inhalt/Code von stateFormat geschoben wird. Wäre es bitte möglich, das zu ändern?

(Bei Bedarf liefere ich gern ein ein Beispiel.)
RPI 4 - Jeelink HomeMatic Z-Wave

rudolfkoenig

ZitatDas title-Attribut von div ist im Grunde unbedeutend.
Das sehen Leute mit einem Screenreader ganz anders, und wir haben mindestens einen aktiven Vertreter dieser Gruppe hier im Forum.
Hast du einen Vorschlag, wie ich aus dem STATE Internal den Inhalt des Title-Attributes zusammenbauen soll?

curt

Diese Leute dürften aber auch wenig Spaß an einem Tag haben, der nie endet.

Mir würde ein hash (md5) einfallen. Einfacher (weil man auf die Installation von md5sum verrichten kann und den Prozessor nicht so fordert) dürfte azAZ09 sein - nur diese Zeichen "durchlassen".

Die andere Frage ist die, ob da irgendwo vielleicht tatsächlich ein bug schlummert. Das kann ich leider nicht überblicken.
RPI 4 - Jeelink HomeMatic Z-Wave

rudolfkoenig

Das mit dem hash ergibt fuer mich keinen Sinn. Damit der Text noch sinnvoll lesbar ist, muesste man auch noch einige Satzzeichen durchlassen. Und damit ich weiss, was ich fixe, braeuchte ich einen Beispiel.

curt

Folgend Auszüge. Im Beispiel geht es um WuWeather, wounderground.

stateFormat:

<table>
<tr>
<td align=left></td><td align=right>condition</td>
</tr>
<tr>
<td align=left></td><td align=right>temp_c &deg;C humidity %</td>
</tr>
<tr>
<td align=left>Luftdruck</td><td align=right>pressure hPa</td>
</tr>
<tr>
<td align=left>UV-Index</td><td align=right>UV</td>
</tr>
<tr>
<td align=left>Wind</td><td align=right>wind_speed km/h aus wind_direction&deg;</td>
</tr>
<tr>
<td align=left>B&ouml;en</td><td align=right>wind_gust km/h aus wind_direction&deg;</td>
</tr>
<tr>
<td align=left>Sichtweite</td><td align=right>visibility km</td>
</tr>
<tr>
<td align=left>Sonne</td><td align=right>sunrise/sunset Uhr</td>
</tr>
<tr>
<td align=left>Mond</td><td align=right>moonrise/moonset Uhr</td>
</tr>
<tr>
<td align=left>Mondphase&nbsp;&nbsp;</td><td align=right>moon_phase (moon_pct %)</td>
</tr></table>

Vorhersage Xrain_day fc1_rain_day<br>
Vorhersage Xrain_day_in fc1_rain_day_in<br>
Vorhersage Xrain_daytime fc1_rain_daytime<br>
Vorhersage Xrain_daytime_in fc1_rain_daytime_in<br>
Vorhersage Xrain_night fc1_rain_night<br>
Vorhersage Xrain_night_in fc1_rain_night_in<br><br>


Dies führt zu folgendem von FHEM erzeugten HTML-Code (auszugsweise, nur rechte Tabellenspalte):

<table border="0" class="header"><tr><td style="padding:0">
<form method="post" action="/fhem">
<input type="hidden" name="fw_id" value="3229"/>
<input type="hidden" name="room" value="00 Test Wettervorhersage"/>
<input type="hidden" name="fwcsrf" value="csrf_216714736551726"/>
<input type='text' name='cmd' class='maininput' size='40' value='' autocorrect='off' autocapitalize='off'/>
</form>
</td></tr></table>
</div>
<form method="post" action="/fhem" autocomplete="off">
<div id='content'  room='00 Test Wettervorhersage'>
<table class="roomoverview">
<tr class='devTypeTr'><td><div class='devType'>Vorhersage Wittenberg</div></td></tr>
<tr><td>
<table class="block wide" id="TYPE_Vorhersage Wittenberg">

<tr class="odd"><td><div class="col1"><a href="/fhem?detail=WUweather">4-Tages-Wetter</a></div></td>
<td informId="WUweather"><div id="WUweather"  title="<table>
<tr>
<td align=left></td><td align=right>Heiter</td>
</tr>
<tr>
<td align=left></td><td align=right>17.7 &deg;C 66 %</td>
</tr>
<tr>
<td align=left>Luftdruck</td><td align=right>1003 hPa</td>
</tr>
<tr>
<td align=left>UV-Index</td><td align=right>0.0</td>
</tr>
<tr>
<td align=left>Wind</td><td align=right>2.9 km/h aus 27&deg;</td>
</tr>
<tr>
<td align=left>B&ouml;en</td><td align=right>3.5 km/h aus 27&deg;</td>
</tr>
<tr>
<td align=left>Sichtweite</td><td align=right> km</td>
</tr>
<tr>
<td align=left>Sonne</td><td align=right>05:44/20:30 Uhr</td>
</tr>
<tr>
<td align=left>Mond</td><td align=right>19:45/06:00 Uhr</td>
</tr>
<tr>
<td align=left>Mondphase&nbsp;&nbsp;</td><td align=right>Vollmond (100 %)</td>
</tr></table>

Vorhersage Xrain_day 0<br>
Vorhersage Xrain_day_in 0<br>
Vorhersage Xrain_daytime 0<br>
Vorhersage Xrain_daytime_in 0<br>
Vorhersage Xrain_night 0<br>
Vorhersage Xrain_night_in 0<br><br>" class="col2"><table>
<tr>
<td align=left></td><td align=right>Heiter</td>
</tr>
<tr>
<td align=left></td><td align=right>17.7 &deg;C 66 %</td>
</tr>
<tr>
<td align=left>Luftdruck</td><td align=right>1003 hPa</td>
</tr>
<tr>
<td align=left>UV-Index</td><td align=right>0.0</td>
</tr>
<tr>
<td align=left>Wind</td><td align=right>2.9 km/h aus 27&deg;</td>
</tr>
<tr>
<td align=left>B&ouml;en</td><td align=right>3.5 km/h aus 27&deg;</td>
</tr>
<tr>
<td align=left>Sichtweite</td><td align=right> km</td>
</tr>
<tr>
<td align=left>Sonne</td><td align=right>05:44/20:30 Uhr</td>
</tr>
<tr>
<td align=left>Mond</td><td align=right>19:45/06:00 Uhr</td>
</tr>
<tr>
<td align=left>Mondphase&nbsp;&nbsp;</td><td align=right>Vollmond (100 %)</td>
</tr></table>

Vorhersage Xrain_day 0<br>
Vorhersage Xrain_day_in 0<br>
Vorhersage Xrain_daytime 0<br>
Vorhersage Xrain_daytime_in 0<br>
Vorhersage Xrain_night 0<br>
Vorhersage Xrain_night_in 0<br><br></div></td>
</tr>
</table>
</td></tr>
</table><br>
</div>
</form>
</body></html>


Der Code ist nicht valide. Trotzdem wird das Ganze (zunächst) im Testraum völlig korrekt dargestellt. Erst nach einiger Zeit (wohl nach Änderung Readings) ändert sich die Schriftart. Zudem wird nach jeder Zeile eine Leerzeile eingefügt.

FF56.0/64 Ubuntu, weitere Browser.

P.S: Ich kann gern die komplette Deklaration zeigen, dann aber als PN.
RPI 4 - Jeelink HomeMatic Z-Wave

rudolfkoenig

ZitatDer Code ist nicht valide.
Gibts dafuer Hinweise?
Da HTML Tags im title Attribut sinnfrei sind, habe ich alle tags hier entfernt. Die beobachtete Schriftartaenderung kommt daher, dass ueber longpoll empfangene Daten mit <pre> geklammert werden, falls sie ein NL enthalten. Gedacht ist das fuer Attribute wie comment. Ich habe das abgeschaltet, falls die Daten auch Tags enthalten, leider hat das Nebeneffekte, bin gespannt, wann die erste Meldung deswegen eintrifft.

curt

Zu NL muss ich präzise nachfragen - damit ich nichts falsch verstehe: Gemeint sind die Zeilenumbrüche, die durch Verwendung der Enter-Taste entstehen?

Darauf kann ich notfalls verzichten. Das habe ich, damit während der Anpassung das für mich lesbar bleibt.
RPI 4 - Jeelink HomeMatic Z-Wave

rudolfkoenig

ZitatGemeint sind die Zeilenumbrüche, die durch Verwendung der Enter-Taste entstehen?
Ja.

curt

Zitat von: rudolfkoenig am 30 April 2018, 00:49:32
Ich habe das abgeschaltet, falls die Daten auch Tags enthalten, leider hat das Nebeneffekte, bin gespannt, wann die erste Meldung deswegen eintrifft.

Hat sich schon jemand beschwert?

Da das oft zu kurz kommt:
Ich möchte mich sehr herzlich bedanken!
RPI 4 - Jeelink HomeMatic Z-Wave

Benni

Zitat von: curt am 01 Mai 2018, 03:10:22
Hat sich schon jemand beschwert?

Das normale Update steht gewöhnlich erst am Folgetag ab ca. 8:00 Uhr bereit.
Vorher wohl kaum jemand evtl. Nebenwirkungen bemerken (können).

gb#