readingsGroup: Wie kann ich Readings und ihre Timestamps unterscheiden

Begonnen von hopgeq, 31 Oktober 2017, 01:40:21

Vorheriges Thema - Nächstes Thema

hopgeq

Hallo,
ich habe Devices, deren letztes Lebenszeichen und RSSI ich darstellen möchte.

defmod rg_rssi readingsGroup ESPEasy.*SystemInfo:state:sec,RSSI


Die Zeitangabe in Sekunden ist schwer lesbar, ich formatiere sie mit meiner Helperfunktion see_sec() um.

attr rg_rssi valueFormat {RSSI => "%.0f",  state=> see_sec($VALUE) }

Soweit so gut. Seltsamerweise muss ich state schreiben, nicht state:sec. Das wird gleich zum Problem. Denn dummerweise stellt sich heraus, dass die Zeitangabe state:sec gar nicht stimmt, sie ist falsch. Das einzige Reading, dessen Zeitangabe stimmt, ist RSSI. Ich muss also RSSI:sec schreiben:

defmod rg_rssi readingsGroup ESPEasy.*SystemInfo:RSSI:sec,RSSI


Jetzt kann ich aber valueFormat nicht mehr anwenden:

attr rg_rssi valueFormat {RSSI => "%.0f",  RSSI:sec=> see_sec($VALUE) }

gibt einen Fehler. Es scheint, dass die Zeitangabe nur mit RSSI (und nicht mit RSSI:sec) adressierbar ist. Ich kann die beiden Werte in valueFormat also nicht unterscheiden.

Wie kann ich RSSI und RSSI:sec unterschiedlich formatieren?




hopgeq

Keine eine Idee?

Vielleicht formuliere ich meine Frage noch mal um.

Mein Ziel ist, das letzte Lebenszeichen aller Devices und ihren RSSI-Wert darzustellen. Dazu verwende ich eine readingsGroup und stelle das RSSI-Reading und seinen Timestamp dar. Also:

define rg_rssi readingsGroup .*RSSI:sec,RSSI


Weil der Timestamp nicht intuitiv erfassbar ist, formatiere ich ihn mit einer eigenen Hilfsroutine in ein besser lesbares Format (siehe https://forum.fhem.de/index.php/topic,78455.msg707893.html#msg707893).
Dazu verwende ich das Attribut valueFormat.

attr rg_rssi valueFormat {RSSI => "%.0f",  RSSI:sec=> see_sec($VALUE) }


Das funktioniert so nicht.
Wenn ich mit valueFormat den Zahlenwert formatieren möchte, muss ich valueFormat {RSSI => irgendwas} schreiben.
Wenn ich mit valueFormat den Timestamp formatieren möchte, muss ich ebenfalls valueFormat {RSSI => irgendwas} schreiben (und nicht RSSI:sec).
Weil beide Werte unter dem gleichen Namen laufen, kann ich sie nicht getrennt formatieren.

Habe ich da etwas am Konzept der readingsGroup bzw. von valueFormat falsch verstanden?
Oder wie löst ihr es sonst, das letzte Lebenszeichen aller Devices und ihren RSSI-Wert darzustellen, so dass man auf einen Blick erkennen kann, ob alles ok ist?