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.
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>
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.
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 !