Hallo,
ich habe ein FHEM-Device, das in einem Reading einen fertig formatierten HTML-Code enthält (Tabelle mit div Tags und FTUI Klassen col und row).
Bisher konnte ich das in einem Label-Widget darstellen. Seit einem Update vorhin geht das nicht mehr. Es wird nur die erste Zeile der Tabelle (enthält die Überschrift) ausgegeben.
Von der 2. Zeile wird nur "02" angezeigt. Möglicherweise liegt es am Inhalt (Datum). Hier mal der Inhalt des Readings (die Klasse col-12 ist selbst definiert, entspricht col-1-2 minus 1%):
<div class="cell">
<div class="row">
<div class="red">
<div class="col-12">Uhrzeit</div><div class="col-12">Nummer</div>
</div>
</div>
<div class="row">
<div class="black">
<div class="col-12">02.03 18:48</div><div class="col-12">01714234217</div>
</div>
</div>
</div>
Moin.
Ja es liegt leider am Datum/Uhrzeit... Da gab es schon einige Diskussionen dies bzgl.
Habe leider das gleiche Problem: Bei wird Datum/Uhrzeit aus SYSMON starttime_text nicht mehr korrekt angezeigt. Witzigerweise ist hier ein Punkt der auslöser. Nicht wie in den anderen Diskussionen der Doppelpunkt aus der Uhrzeit.
Beispiel-Reading SYSMON: 24.02.2016 12:02
Beispiel-Anzeige-FTUI: 24.02
Grüße^^
P.S. Hatte vorhin auch mal versucht HTML in ein Dummy zu verpacken. Leider ist es am Semikolon ; gescheitert. War Java-Code mit drin :'(
Könnte mit der neu eingeführten Formatierung der Nachkommastellen zusammenhängen. Ich hoffe, setstate behebt das. Vor der aktuellen Version hat das zumindest mit native html funktioniert. Durfte nur kein Newline drin sein.
Ich könnte mir auch eine Klasse oder ein Attribut vorstellen, das dem Widget signalisiert, dass das Reading HTML enthält, das nicht angefasst werden soll.
ich glaube, ich habe die fragliche Stelle im Label Widget gefunden:
if (val.indexOf('.')>-1){
var vals = val.split('.');
val = "<span class='label-precomma'>"+vals[0]+"</span>" +
"<span class='label-comma'>.</span>" +
"<span class='label-aftercomma'>"+vals[1]+"</span>";
}
Sieht so aus, als würde das Widget jeden Wert, der einen Punkt enthält, wie eine Zahl behandeln. Die <spans> zerschiessen dann den HTML-Code in meinem Reading.
Das ist natürlich wahr. Danke dir für die Ursachensuche.
Schaue ich mir an, das ist noch nicht so gut gelöst.
mgl. Lösung?
if (!isNaN(parseFloat(val)) && isFinite(val) && val.indexOf('.')>-1){
var vals = val.split('.');
val = "<span class='label-precomma'>"+vals[0]+"</span>" +
"<span class='label-comma'>.</span>" +
"<span class='label-aftercomma'>"+vals[1]+"</span>";
}
Ja, ich denke das würde gehen. Würde nur schief gehen, wenn im Value ein Datum der Form "01.03" steht. Aber mit einer Änderung auf "01.03." sollte das dann auch keine Probleme mehr machen.
Was hältst Du davon, alternativ ein Element "data-content" einzuführen? Das könnte das Format von Value explizit festlegen. Mögliche Werte könnten sein: "number", "text", "static". Der Wert "static" würde für das Widget bedeuten: fasse den Inhalt nicht an. Das wäre dann für vorformatierten Inhalt wie z.B. HTML gedacht.
Moin,
ich kämpfe ebenfalls mit dem . Problem.
Hat das schon irgendwer in den Griff bekommen?
Ja, habe eine Kopie mit dem Namen widget-exlabel angelegt, im Widget alles was label war auf exlabel geändert, ein zusätzliches Element "data-content" eingebaut und in Abhängigkeit von dessen Inhalt den Code für die Punktverarbeitung ausgeschlossen.
Hallo zap,
kannst Du bitte Dein Widget widget-exlabel zur Verfügung stellen. Mein eigener Versuch auf Grundlage von widget_label und widget_example ein HTML-fähiges Widget zu bauen, führt leider nicht zu einem brauchbaren Ergebnis. Wenn das darzustellende HTML eine Tablelle enthält, blitzt diese nach Browseraktualisierung kurz auf. Danach ist das Widget leer. Einfache HTML-Konstrukte werden richtig dargestellt.
Gruß,
Mario
Bei mir funktioniert das normale Label Widget seit dem letzten Update wieder. Ich verwende auch Tabellen, sowohl mit div als auch normalen table Tags. Ich poste später mal ein Beispiel.
Danke für die Rückmeldung. Verwendest Du die 2.0 Beta?
Gruß,
Mario
Ja. Hier der Inhalt eines Readings. Vielleicht gut zu wissen: in dem Code kommt kein newline vor!
<table width="100%"><tr><th>Zeitraum</th><th>Warnung</th></tr><tr style="color: #ffff00;"><td width="20%" valign="middle" class="border-t">16.03.2016 00:00:00<br>16.03.2016 10:00:00</td><td width="80%" align="left" valign="middle" class="border-t">Vor allem bei Aufklaren tritt leichter Frost um -1 °C auf.</td></tr><tr style="color: #ffff00;"><td width="20%" valign="middle" class="border-t">15.03.2016 20:00:00<br>16.03.2016 10:00:00</td><td width="80%" align="left" valign="middle" class="border-t">Es tritt oberhalb 400 m leichter Frost zwischen -1 °C und -4 °C auf.</td></tr></table>
Danke für den Hinweis auf das Newline. Ein $messageTable =~ s/[\x0A\x0D]//g;
hat (fast) alle Probleme gelöst.
Ist bekannt warum die Mechanik so empfindlich gegenüber Zeilenschaltungen ist?
Danke & Gruß,
Mario
Ich nehme an, das hängt mit der Art und Weise zusammen, wie Tablet-UI die Readings abfragt. Möglicherweise hat sich das durch die Verwendung von JSON in der 2.0 Beta verbessert. Ich würde mir wünschen, dass setstate ein Attribut data-content einbaut, mit dem man steuern kann, ob der Content 1:1 aus dem Reading übernommen wird.
BTW: Falls Du newlines unbedingt brauchst, kannst Du <br/> verwenden. Das funktioniert.
Nein die Newlines brauche ich an sich nicht. Die Inhalte der Zellen in der Tabelle sind jeweils relativ kurz.
Das sind Verkehrsmeldungen (inkl. Blitzer ;), welche ich mit einem eigenen von HTTPMOD abgekupferten Modul aus einer Website extrahiere und beliebig (z.B. gefiltert) wieder zusammenbauen kann.
Das generierte HTML ist dann nur schlecht lesbar. Das ist aber nicht weiter tragisch.