[gelöst] - ReadingsAge in HH:mm / Zeitspannen berechnen

Begonnen von 87insane, 12 April 2018, 16:00:12

Vorheriges Thema - Nächstes Thema

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nils_

viele Wege in FHEM es gibt!

Beta-User

Zitat von: 87insane am 13 April 2018, 07:32:54
Nun habe ich gedacht (ich dummerchen), ich könne wie in Excel einfach die Zeiten voneinander abziehen.
Dir ist schon klar, dass Excel auch nur unterschiedliche "Ebenen" oder Betrachtungsweisen übereinander legt (also z.B. Wert und Formatierung intern gesondert verwaltet), und intern auch Datumsangaben vorrangig als was ansieht? Genau: Sekunden ;D .

Und was genau machst du, wenn du irgend etwas per "define" oder per "attr" festlegst? Genau: Du erteilst Programmanweisungen ;) , vulgo: du programmierst.

Besser, du lernst es eher mit einfachen Dingen (das hier ist einfach!) "from the scratch".

Zitat von: nils_ am 13 April 2018, 10:45:05
willkommen bei fhem :D
Daher: +1

just my2ct.

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

dev0

Zitat von: nils_ am 13 April 2018, 10:45:05
was ist denn an dem Resultat falsch??
Es funktioniert nicht wie in Excel ;)

Zitat von: 87insane am 13 April 2018, 07:32:54
(ich dummerchen), ich könne wie in Excel einfach die Zeiten voneinander abziehen.

87insane

Leicht spöttisch - so so :-P

Ich habe nichts gegen programmieren. Ich habe eben etwas gegen Dinge neu erfinden, die bereits existieren.
Und da es in die eine Richtung geht, suche ich nun die andere Richtung.

Das Ergebnis ist unschön, da es nicht der Aufgabenstellung entspricht. Um es aber vorweg zu nehmen, es ist sehr sehr löblich
das sich alle hier so rein hängen! Das begeistert mich nach wie vor an der FHEM Community !!

Beta-User

Nur mal in's Blaue:

Das war dein Ausgangspunkt:
Zitat von: 87insane am 12 April 2018, 16:00:12
{strftime("%H:%M", localtime(ReadingsAge('s_trockner','total_temp',0)))}
Warum sollte dann eigentlich das hier nicht funktionieren?
{strftime("%H:%M", localtime - ReadingsAge('s_trockner','total_temp',0))}
Zumindest, soweit ich das verstanden habe, kann strftime() gut mit Sekunden rechnen. UU. muß das vorher in eine Variable, aber das sollte es auch schon gewesen sein...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Hey

so eine Lösung habe ich mir vorgestellt. Leider macht es aber keinen Sinn von der Zeit in Sekunden (wie alt ist das reading) die lokale Zeit ab zu ziehen.
Aber die Idee ist gut!

{strftime("%H:%M", localtime - ReadingsTimestamp("s_trockner","running",0))}
Wenn ich das nun mal so teste... Aktuelle Zeit - Reading Timestamp, kommt leider auch nichts richtiges rauß.

localtime ist 11:58
Zeitstempel ist von 11:36
Ergebnis: 00:26
Das Ergebnis ist auch immer gleich. Den Rechenweg muss ich erst mal auseinander nehmen. Vermutlich klappt es wegen der Formate nicht richtig.

Beta-User

Teste das doch dann mal mit ReadingsAge(), oder? Das liefert: Sekunden...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

jkriegl

Meine Solar-Heizungsunterstützung setzt ein reading, ob solar geheizt wird oder nicht.
Wenn dieses auf off geht nehme ich mit readingsage die verstrichen Zeit in Sekunden.
(Da ich Monatswerte haben möchte, summiere ich.)
Da mir die Sekundenanzeihe auch nicht so gefällt formatiere ich, ähnlich wie hier beschrieben, um.
Sieht dann so aus: H.SZaehl 692403 8:00:20
(Summe Sekunden 8 Tage 0 Stunden 20 Minuten)
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

87insane

@jkriegl: Kannst du deinen Code mal senden?

@All: Will nicht zu voreilich sein aber ich habe da was am rennen, was ganz gut aussieht. Einzig warum ich am ende 1 Std abziehen muss ist mir nicht klar. Werde ich aber noch in kleineren Schritten testen.

{strftime("%H:%M", localtime(ReadingsAge('s_trockner','running',0)-3600))}
ReadingsAge: 11:36 Uhr
Aktuelle Zeit: 12:37 Uhr
Ergebnis: 01:01 Std

DANKE! Ich hoffe ich habe mich hier nicht verzettelt.
Spannend ist das Thema aber nach wie vor! Warum macht es jeder anders wenn es (ich hoffe mal) so auf Dauer läuft?

Beta-User

Irgendwie will mir das noch nicht so recht einleuchten, dass das so passen soll:
Zitat von: 87insane am 13 April 2018, 12:38:16
{strftime("%H:%M", localtime(ReadingsAge('s_trockner','running',0)-3600))}
So wie ich das verstanden habe, liefert "localtime" (ohne Klammern) die aktuelle Zeit in Sekunden und beachtet dabei die lokalen Gegebenheiten (Sommerzeit).
Danach hätte ich angenommen, dass
{strftime("%H:%M", localtime - ReadingsAge('s_trockner','running',0))}
jederzeit das richtige Ergebnis liefern sollte, der andere Code aber immer "etwas mehr als eine Stunde" (Sommerzeit) bzw. "etwas mehr als einen Sekundenbruchteil" (Winterzeit).

Werde das wohl mal auch selbst testen (auch wenn ich noch nicht weiß, wofür ich das in meiner Installation mal brauche, für interne Zwecke haben mir reine Sekundenangaben bisher genügt, damit kann man schön rechnen...).

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

#26
{strftime("%H:%M", localtime - ReadingsAge('s_trockner','running',0))}

liefert bei folgenden Zeiten..
Reading Alter: 180 Sekunden
localtime: 13:15 Uhr
Ergebnis: 00:56 Uhr

Das verstehe ich leider gar nicht! PS: Wenn ich es eine Minute später noch mal durchführe kommt 00:55 dabei rauß. Also immer eine Minute weniger.

Der Code an sich kommt mir aber unlogisch vor. Ich nehme die Zeit von jetzt und diese dann minus das Alter des Readings in Sekunden... Das Ergebnis müsste (in meinen Augen) so aussehen:
localtime: 13:15 Uhr - Reading Alter: 180 Sekunden = Ergebnis: 13:12

Wenn mein Code bzw. das Ergebnis aller hier funktioniert, ist es in meinen Augen auf jeden Fall besser, als das durch Variablen zu ersetzen.
Klar funktioniert der Code mit den Variablen auch und ist auch ne gute Sache. Aber warum Variablen belegen wenn dies nicht nötig ist?
Der Ansatz hier ist bei allen anders. Das ist auch gut so!

Edit: So wie ich localtime verstanden habe in meiner Konstellation liefert er einfach alles (Zeiten natürlich) was in den Klammern steht zurück im gewünschten Format (Umrechnung was sonst über die Variablen läuft.). In meinem Fall HH:MM. Natürlich aber in dem Zusammenspiel da oben mit strftime, welches ja das Format als solches bereit stellt.

localtime: http://perldoc.perl.org/functions/localtime.html
strftime: http://search.cpan.org/~dexter/POSIX-strftime-GNU-0.02/lib/POSIX/strftime/GNU.pm

Beta-User

Arghh...

Mach mal localtime und das "-" da weg ;) ...

Wir suchen doch nur nach der Ausgabe von ReadingsAge(). Mann ist der Wald dicht...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

#28
Liefert das gleiche wie meins oben...

Reading: 13:12
localtime: 13:42
Ergebnis: 1:29

Das noch minus 3600 und wir sind auf dem gleichem Ergebnis.
Einzig die Klammern habe ich mehr. Die werden aber wohl keine Probleme machen (Denke ich).

Bevor jemand der das hier später nachliest verwirrt ist...

RESULTAT - Die beiden Varinaten machen genau was ich will! Zeitumrechnung von Sekunden in Stunden / Minuten oder was man will. Und das OHNE um die Ecke programmieren zu müssen.
{strftime("%H:%M", localtime(ReadingsAge('s_trockner','running',0)-3600))}
{strftime("%H:%M", localtime ReadingsAge('s_trockner','running',0)-3600)}


PS: Mich würde interessieren was die Kollegen vom Anfang des Threads dazu sagen. Immerhin ist das kein schlechtes Ergebnis.
PPS: Und ein fettes Sorry das ich genau das zu beginn schon geschrieben habe. Mir ist nur die eine Stunde mehr nicht aufgefallen. Mega peinlich!

Danke an alle Helfer!

dev0

ZitatPS: Mich würde interessieren was die Kollegen vom Anfang des Threads dazu sagen. Immerhin ist das kein schlechtes Ergebnis.
Du bist nicht an einem Ergebnis interessiert, sondern Du suchst eine Sonderlocke, die _Du_ als gut/einfach/sinvoll empfindest.