[GELÖST] - stateFormat Zeit eines Readings OHNE Perl

Begonnen von 87insane, 10 April 2019, 16:56:52

Vorheriges Thema - Nächstes Thema

87insane

Hallo zusammen,

gibt es einen Weg, den Zeitstempel eines Readings, ggf. sogar anders formatiert, mit ins stateformat zu schreiben, dies aber OHNE Perl?
Bei einem Backup würde ich das gerne in der Übersicht haben. Nun kenne ich aber nur den PERL-Weg. Dachte mir aber das dies auch ohne
gehen sollte. Ich denke, ich kenne eine Funktion mal wieder nicht.

Alles was man an Readings in stateFormat schreib, wird direkt in den entsprechenden Inhalt umgewandelt. Nun habe ich einiges probiert aber
ohne PERL bekomme ich es nicht hin :(

Danke!

DeeSPe

Wieso muss/soll es ohne Perl gehen?
Ich sehe irgendwie keinen wirklichen Grund dafür.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

87insane

Das ist reine rum-probiererei...

Geht mir darum diese ganze Befehle mal zu lernen. Mich nervt es die nicht zu kennen.

Wenn stateFormat den Inhalt eines Readings ausgeben kann, dann sicher auch die Zeit/Datum....

Beta-User

Hmmm,

spekuliere mal: Du willst eine formatierte Angabe haben und das mehrzeilig nutzen; das einzige, was via Perl ausgelesen werden müßte, wäre der Zeitstempel. Aber deswegen dann ein ganzes devStateIcon mit Perl zu bauen ist zu mühselig...

Hatte neulich ein ähnliches Problem. Da habe ich das Umformatieren mit einem userreadings-Eintrag gelöst und dann ein mehrzeiliges stateFormat.

Auszug aus dem entsprechenden template (ebusd):
attr DEVICE userReadings formatedUptime:uptime.* {my $m = ReadingsVal($name,"uptime",0)/60;; return sprintf "0 000 00:%02d", $m if $m < 60;; my $h = $m / 60;; $m %= 60;; return sprintf "0 000 %02d:%02d", $h, $m if $h < 24;; my $d = $h / 24;; $h %= 24;; return sprintf "0 %03d %02d:%02d", $d, $h, $m if $d <365;; my $y = $d / 365;; $d %= 365;; return sprintf "%d %03d %02d:%02d", $y, $d, $h, $m}
attr DEVICE stateFormat Status: \
1:running\
Signal: \
2:signal\
<br>Uptime: formatedUptime
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

DeeSPe

Zitat von: 87insane am 10 April 2019, 17:07:41
Wenn stateFormat den Inhalt eines Readings ausgeben kann, dann sicher auch die Zeit/Datum....

Geht auch, aber meines Wissens nach nur mit Perl.
Du kennst ReadingsTimestamp?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

87insane

Jo das habe ich vorhin probiert. Leider ging es nicht oder ich hatte es falsch probiert.

Hatte auch gedacht das sowas ggf. mit [] geht. Nach dem Motto: [Gerät:Reading:Hier eine Angabe was getan werden soll, wie auch beim runden oder aber was er zeigen soll]

Beta-User

Geht wohl wirklich nur mit Perl; dazu den Code von oben ändern - unter Verwendung der von Dan genannten Funktion ReadingsTimestamp() (oder wenn du eine Art Laufzeit haben willst mit ReadingsAge und der von mir genannten Funktion zum Formatieren).
Sieht dann so aus, wenn man dazu noch devStateIcon so belegt:
attr DEVICE devStateIcon 1.true:it_net 1.false:it_net@red  2.true:lan_rs485 2.false:lan_rs485@red
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

DeeSPe

ReadingsTimestamp funktioniert im Prinzip genau so wie ReadingsVal.

{ReadingsTimestamp("DEVICENAME","READINGNAME","DEFAULTWERT")}

Habe gerade in set magic etwas entdeckt:
[DEVICENAME:READINGNAME:t]
um den Zeitstempel des Readings zu erhalten. Das kannte ich auch noch nicht.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

87insane

Geil! Geht und sowas suchte ich... Werde ich gleich mal setmagic genauer untersuchen. Danke dir!

87insane

Würde aber noch kurz dazu sagen,
wenn man das in stateFormat nutzt, muss man alle anderen Readings auch so angeben. Ansonsten werden diese nicht angezeigt.

87insane

#10
Zitat von: Beta-User am 10 April 2019, 17:09:48
Hmmm,

spekuliere mal: Du willst eine formatierte Angabe haben und das mehrzeilig nutzen; das einzige, was via Perl ausgelesen werden müßte, wäre der Zeitstempel. Aber deswegen dann ein ganzes devStateIcon mit Perl zu bauen ist zu mühselig...

Hatte neulich ein ähnliches Problem. Da habe ich das Umformatieren mit einem userreadings-Eintrag gelöst und dann ein mehrzeiliges stateFormat.

Auszug aus dem entsprechenden template (ebusd):
attr DEVICE userReadings formatedUptime:uptime.* {my $m = ReadingsVal($name,"uptime",0)/60;; return sprintf "0 000 00:%02d", $m if $m < 60;; my $h = $m / 60;; $m %= 60;; return sprintf "0 000 %02d:%02d", $h, $m if $h < 24;; my $d = $h / 24;; $h %= 24;; return sprintf "0 %03d %02d:%02d", $d, $h, $m if $d <365;; my $y = $d / 365;; $d %= 365;; return sprintf "%d %03d %02d:%02d", $y, $d, $h, $m}
attr DEVICE stateFormat Status: \
1:running\
Signal: \
2:signal\
<br>Uptime: formatedUptime

Diesmal ging es tatsächlich nur um meinen Backup Dummy. Da wollte ich keine Symbole. Hier ging es nur darum, den Text halbwegs schön zu haben. Etwas mehr Formatierung kann er noch vertragen. Das muss ich mir aber noch angucken. Wollte mal schauen ob ich das alles ohne Perl schaffe. Ist quasi ne reine Übung. Wie der dummy am ende aussieht ist egal, da er ja eh von alleine läuft und sich im Notfall meldet.

So sieht das ding aktuell aus. (https://uploads.tapatalk-cdn.com/20190410/6711517ffeb398161cd1b6fec1e59fc9.jpg)


Edit: trotzdem habe ich das mal gespeichert. Hab sogar schon ne idee für ein anderes gerät. Mal wieder ein schönes Stück Code und ne gute Idee! Damit sind beide Beiträge gemeint.

Gesendet von meinem LG-H850 mit Tapatalk