Fehler mit data-substitution="toDate()"?

Begonnen von FhemPiUser, 27 Februar 2017, 21:19:21

Vorheriges Thema - Nächstes Thema

FhemPiUser

Es scheint mir, als gäbe es noch einen Fehler beim data-substition="toDate()".

Habe folgende Zeilen in meiner html:

<div data-type="label" data-device="httpmod_dwd_alerts" data-get="alert_starts-1" data-pre-text="von " data-substitution="toDate().hhmm()" class="cell left-align inline timestamp"></div>
<div data-type="label" data-device="httpmod_dwd_alerts" data-get="alert_ends-1" data-pre-text="bis " data-substitution="toDate().hhmm()" class="cell left-align inline timestamp"></div>


Die Readings alert_starts-1 und alert_ends-1 sind unterschiedlich und laut fhem wie folgt:

alert_ends-1 1488247200
alert_starts-1 1488225600


trotzdem zeigt er in FTUI bei beidem die gleiche Uhrzeit an:

von 21:11   bis 21:11

setstate

Du hast aber class="timestamp"

Damit wird der Zeitstempel angezeigt und nicht der Wert.

FhemPiUser

die zeit paasr aber grob und ohne class timestamp hatte ich es auch probiert ubd da wurden dann ganz wilde zeiten angezeigt...


setstate

Ohne timestamp nimmt er den Wert. Und dann toDate angewendet, ergibt den Müll.
Was befeutet dieser Zahlen-Wert? Irgendwas in Sekunden? Seit wann gezählt? Da gibt es bestimmt keine sinnvolle toDate Funktion.

FhemPiUser

die werte (z.b. 1488247200) ist unix tinestamp seit 1970, zumindest konvertieren die üblichen timestamp online converter (z.b. www.onlineconversion.com/unix_time.html) das in das korrekte datum...

setstate

Dann muss ich das in toDate reinbauen. Wenn alles Zahlen bestimmter Größe, dann von unixtimestamp zu js Datum

FhemPiUser

das wäre super.

was hattest du denn als input für das toDate() angenommen, wenn es nicht unix timestamp war?

setstate


        var m = str.match(/(\d+)-(\d+)-(\d+)[_\s](\d+):(\d+):(\d+).*/);
        var m2 = str.match(/(\d\d).(\d\d).(\d\d\d\d)/);


Ent-oder-weder :-)

FhemPiUser

ahh ok.

bei der gelegenheit hätte ich neben der unix timestamp konvertierung noch interesse an einer methode toDate().ddmmhhmm(), also datum mit uhrzeit (z.b. 28.02. 16:00)

Standarduser

Ich habe auch noch einen Fehler gefunden. Mein Reading liefert eine Zeit in Sekunden, soll aber als hh:mm:ss angezeigt werden. Dafür verwende ich

<div data-type="label" data-device="DG.ku.MM.Squeezebox" data-get="durationAll" data-substitution="toDate().hhmmss()" data-pre-text="Spieldauer " data-color="#6f6f6f" class="inline"></div>

Das Reading enthält den Wert 2958, was 49 Minuten und 20 Sekunden entspricht. Angezeigt wird aber 01:49:18

Mundus

Bei mir aktualisiert die Funktion toDate() -genutzt in einem Swipe- nur den ersten Datumswert und scheint, bei einem Swipe-Wechsel, keine neue Substitution durchzuführenn.

funktionaer

Hallo,

ich versuche, mit data-substitution="toDate().hhmm()" in einem Label den Wert eines Readings anzuzeigen. Das Reading liefert 8880, sollte also 02:28 sein. Berechnet wird jedoch 03:28. Bei der Berechnung von 0 Sekunden liefert die Funktion 01:00, also auch wieder genau eine Stunde zu viel.

Ist toDate() hier die richtige Herangehensweise?

Danke,
funktionaer

setstate

#12
Das liegt daran, weil die Ausgabe mit GMT+0100 erfolgt. Also mit Sommerzeit. Lässt sich in der Funktion noch optimieren.

fhem-tablet-ui.js ändern in

Zeile 1611


            (m2) ? new Date(70,1,1,0,0,m2[1],0) :

yersinia

#13
Ich kram' den Thread nochmal hervor weil ich gern einen etwas anders zusammengesetzten Datumswert aus einem DOIF timer Reading gern durch ein label-widget gekürzt hätte.

Reading des DOIFs im Format DD.MM.YYYY HH:MM:SS:
2019-08-07 13:19:32   timer_01_c01    07.08.2019 21:50:27

Wenn ich in dem label-widget data-substitution mit der Funktion toDate().ddmmhhmm() verwende
<div class="cell darker top-narrow"
  data-type="label"
  data-device="DOIF_DEVICE"
  data-get="timer_01_c01"
  data-substitution="toDate().ddmmhhmm()">
</div>

kommt dabei
07.08. 02:00
raus.

Laut Wiki hat das Reading auch das falsche Format.
ZitatEingangsformat: YYYY-MM-DD HH:MI:SS oder DD.MM.YYYY

Wie kann ich nun das Zielformat DD.MM. HH:MM (07.08. 21:50) mittels data-substitution erreichen?
Oder gibt es eine noch nicht dokumentierte Funktion?

Danke für Ideen vorab. :)

EDIT 2020-03-16: ich hab das jetzt anders gelöst, falls es jemand gebrauchen kann, ich arbeite nun mit data-substitution="toString().substr(11,5)", dies liefert immerhin die Uhrzeit.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

ambiman

Zitat von: Mundus am 12 April 2017, 22:47:03
Bei mir aktualisiert die Funktion toDate() -genutzt in einem Swipe- nur den ersten Datumswert und scheint, bei einem Swipe-Wechsel, keine neue Substitution durchzuführenn.

Hallo zusammen,

ich bin gerade über das gleiche Problem gestoßen.
In einem Swiper wir tatsächlich nur der Wert (hier: fc0_date) in der ersten "Kachel" ersetzt. In den weiteren Kacheln (bspw. fc1_date) bleibt dann der Wert aus der ersten "Kachel" (fc0_date) bestehen.

Hier mal ein Beispiel:


<div data-type="swiper">
    <ul>
        <li>
            <div class="sheet">
                     <div class="row">
                             <div data-type="label" data-device="Wetter_DWD" data-get="fc0_date" class="cell" data-substitution="toDate().format('eeee, DD.MM.YYYY')"></div>
                     </div>
</div>

</li>
        <li>
            <div class="sheet">
                     <div class="row">
                             <div data-type="label" data-device="Wetter_DWD" data-get="fc1_date" class="cell" data-substitution="toDate().format('eeee, DD.MM.YYYY')"></div>
                     </div>
</div>

</li>
</ul>
</div>



VG,
ambiman