FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: ulobo60 am 05 November 2017, 16:21:47

Titel: [Gelöst] netatmo - Darstellung von 'Vor x Minuten aktualisiert'
Beitrag von: ulobo60 am 05 November 2017, 16:21:47
Diese Anzeige - vor wieviel Minuten die netatmo-Werte zuletzt abgefragt wurden - erhält man auf den netatmo-Apps. Ich würde diese Info gern auf meiner FTUI-Hauptseite oben links anzeigen lassen.
Habe hier viel über Datumsberechnung gelesen und vermute, dass ich über ein UserReading aus den netatmo-Sensoren zum Erfolg kommen könnte. Meine bisherigen Kenntnisse reichen aber nicht aus, um das konkreter umzusetzen.

Listing meines Devices 'netatmo_indoor60':

Internals:
   DEF        70:ee:50:29:1a:b4
   Device     70:ee:50:29:1a:b4
   INTERVAL   900
   IODev      netatmo
   LAST_POLL  2017-11-05 15:20:09
   NAME       netatmo_indoor60
   NOTIFYDEV  global
   NR         20
   NTFY_ORDER 50-netatmo_indoor60
   STATE      T: 22.5 H: 44
   SUBTYPE    DEVICE
   TYPE       netatmo
   altitude   46
   city       xyz
   country    DE
   dataTypes  Temperature,CO2,Humidity,Noise,Pressure
   date_setup 2017-10-14 14:42:20
   firmware   132
   last_setup 2017-10-14 14:42:20
   last_status_store 2017-11-05 15:19:56
   last_upgrade 2017-10-14 14:42:21
   location   51.xxxxxxx,6.yyyyyyy
   model      NAMain
   moduleName indoor60
   openRequests 0
   stationName ulobo60
   status     ok
   wifi_status 57
   Helper:
     DBLOG:
       active:
         logdb:
           TIME       1509891609.8968
           VALUE      ok
       co2:
         logdb:
           TIME       1509891609.72503
           VALUE      541
       ftuiIcon:
         logdb:
           TIME       1509891609.72503
           VALUE      pic1
       humidity:
         logdb:
           TIME       1509891609.77728
           VALUE      44
       noise:
         logdb:
           TIME       1509891609.81854
           VALUE      38
       pressure:
         logdb:
           TIME       1509891609.8573
           VALUE      1013.6
       pressure_abs:
         logdb:
           TIME       1509890188.17889
           VALUE      1007.7
       pressure_trend:
         logdb:
           TIME       1509890188.23298
           VALUE      up
       temp_max:
         logdb:
           TIME       1509890188.32521
           VALUE      23.7
       temp_min:
         logdb:
           TIME       1509890188.3667
           VALUE      19.4
       temp_trend:
         logdb:
           TIME       1509890188.28378
           VALUE      down
       temperature:
         logdb:
           TIME       1509891609.67121
           VALUE      22.5
   READINGS:
     2017-11-05 15:20:09   active          ok
     2017-11-05 15:19:56   co2             541
     2017-11-05 15:19:56   ftuiIcon        pic1
     2017-11-05 15:19:56   humidity        44
     2017-11-05 15:19:56   noise           38
     2017-11-05 15:19:56   pressure        1013.6
     2017-11-05 14:49:43   pressure_abs    1007.7
     2017-11-05 14:49:43   pressure_trend  up
     2017-11-05 00:41:29   temp_max        23.7
     2017-11-05 10:30:58   temp_min        19.4
     2017-11-05 14:49:43   temp_trend      down
     2017-11-05 15:19:56   temperature     22.5
   helper:
     NEXT_POLL  1509892508
     readingNames:
       temperature
       co2
       humidity
       noise
       pressure
Attributes:
   IODev      netatmo
   alias      indoor60
   devStateIcon 1
   room       netatmo
   stateFormat T: temperature H: humidity
   userReadings ftuiIcon:co2.* {my $state = ReadingsVal($name,"co2",0); if ($state < 700) {return "pic1";} elsif ($state < 1200) {return "pic2";} else {return "pic3";}}

Ich kann mir also den Unix-Timestamp eines readings (bspw. humidity) als userReading holen und vom aktuellen Timestamp abziehen. Das Ergebnis wieder umrechnen (in Minuten). Aber: wie und wo erstelle ich die Subtraktion? Muss ich eine Funktion codieren und die in die myUtils.pm einfügen? Kann man das anders, einfacher erledigen? Oder gibt's für dieses Problem sogar schon eine 'fertige Lösung'?
Für eine Hilfe wäre ich sehr dankbar.
Titel: Antw:netatmo - Darstellung von 'Vor x Minuten aktualisiert'
Beitrag von: setstate am 05 November 2017, 16:34:18
Das Label-Widget kann auch schon selbst einiges

<div data-type="label" data-device="ftuitest" data-get="state" data-refresh="10" data-substitution="toDate().ago('hh:mm:ss')" class="timestamp"></div>
Titel: Antw:netatmo - Darstellung von 'Vor x Minuten aktualisiert'
Beitrag von: ulobo60 am 05 November 2017, 16:52:18
Hallo setstate,

was für eine Super-Community! Professionelle Antwort bereits nach ein paar Minuten! Vielen Dank.
Bin noch ein ziemlicher FHEM-Newbie - daher diese Frage:
Ist es richtig, dass 'ftuitest' der Name für ein userReading ist, in das der Timestamp eines Readings geschrieben wird?
Deine Lösung sieht ansonsten seeehr übersichtlich aus und auf diese data-substitution muss man erst mal kommen! Klasse - danke.
Titel: Antw:netatmo - Darstellung von 'Vor x Minuten aktualisiert'
Beitrag von: ulobo60 am 05 November 2017, 23:27:11
hi setstate,

alles prima!
Gelöst mit userReading im Device netatmo_indoor60:

vor_minuten:humidity.* {my $state = (split(' ',ReadingsTimestamp($name,"humidity",0)))[1]}


... und dem  HTML-Eintrag:

<div data-type="label"
data-device="netatmo_indoor60"
data-get="vor_minuten"
data-refresh="10"
data-substitution="toDate().ago('m')"
data-pre-text="Vor "
data-post-text=" Minute(n)"
class="timestamp">
</div>


Merci vielmals !