FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: NewbieNew am 15 März 2022, 07:47:24

Titel: Einfache readingsGroup
Beitrag von: NewbieNew am 15 März 2022, 07:47:24
Guten Morgen,
ich habe viele Batteriegeräte und habe folgende Readinggruppe erstellt:

defmod 02_Batterie readingsGroup .*:[Bb]attery .*:[Bb]atteryLevel .*:BATTERY .*:Battwechsel
attr 02_Batterie comment https://forum.fhem.de/index.php?topic=28326.0
attr 02_Batterie valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE eq "ok" );; return "25" if( $VALUE < 2.1 );; return "50" if( $VALUE < 2.3 );; return "75" if( $VALUE < 2.5 );; return "100"}
attr 02_Batterie valueIcon {'battery.0' => 'measure_battery_0@red','battery.100' => 'measure_battery_100@green','Battery.0' => 'measure_battery_0@red','Battery.100' => 'measure_battery_100@green','batteryLevel.0' => 'measure_battery_0@red','batteryLevel.25' => 'measure_battery_25@red','batteryLevel.50' => 'measure_battery_50@orange','batteryLevel.75' => 'measure_battery_75@green','batteryLevel.100' => 'measure_battery_100@green'}


Klappt super.
Nun wollte ich das mit einem Batteriewechseldatum ergänzen:

in der global ein userattr Battwechsel gesetzt und bei jedem Gerät den letzten Battwechsel eingtragen.

list .* Battwechsel:

HM_HZ_Dusche             2022-03-13
HM_HZ_Kueche             2022-03-13
HM_HZ_Schlaf01           2022-02-25


Ich habe also vorerst nichts formatiert. Nur Text im "Battwechsel"

in der readingGroup nun:

.*:[Bb]attery .*:[Bb]atteryLevel .*:BATTERY .*:Battwechsel, also .*:Battwechsel ergänzt.

Angezeigt wird mir aber ein Datum incl. Zeit.

z.B.

HM_HZ_Kueche:battery  (icon)   2022-03-13 20:25:22

Bei vielen aber der jetzige Zeitpunkt, egal ob was bei Battwechsel eingetragen ist oder nicht.

Was mache ich falsch?

Beste Grüße
Titel: Antw:Einfache readingsGroup
Beitrag von: OdfFhem am 15 März 2022, 09:10:29
@NewbieNew

Datum und Zeit entsprechen dem Zeitstempel eines Readings; im Zweifel unterbindet man die Anzeige  mit dem Attribut notime.

Laut Deiner Definition kann ein Gerät mehrfach in der readingsGroup vorkommen ... korrekt bzw. gewollt ?
Titel: Antw:Einfache readingsGroup
Beitrag von: MadMax-FHEM am 15 März 2022, 09:15:59
Wenn du ein Attribut anzeigen willst, dann:

Zitat von: https://wiki.fhem.de/wiki/ReadingsGroup#Internal_Values_ausgeben
Das FHEM-Hilfsmodul readingsGroup bietet eine einfache Möglichkeit, Readings (kein Präfix vor dem Reading-Namen), Internals (Präfix "+" vor dem Namen des internen Wertes) und Attributes (Präfix "?" vor dem Namen des Attributs) von einem oder mehreren Devices darzustellen und flexibel zu formatieren.

also ein Fragezeichen davor...

Bzgl. Mehrfachanzeige/-auftauchen in der RG hat ja OdfFhem schon was geschrieben ;)

Ich nutze ja das hier: https://forum.fhem.de/index.php/topic,82637.msg747514.html#msg747514
Inkl. autom. Erkennung von Batteriewechsel und Auflistung des letzten Wechsels inkl. Lebesdauerberechnung (nicht im Forum-Code) und "Prüfung", ob Batterien vorhanden und wenn nicht, Nachricht welche zu besorgen (nicht im Forums-Code)...

Es gibt wohl auch was "von DOIF" inkl. einer Übersichtsanzeige (nutze ich aber nicht, musst du mal [im DOIF-Unterforum] suchen)...


Gruß, Joachim
Titel: Antw:Einfache readingsGroup
Beitrag von: Beta-User am 15 März 2022, 09:28:04
 :) dann werfe ich hier mal noch als weiteren Aspekt "valueFormat" in den Raum...

Hier sollte wohl das Datum speziell behandelt werden, also eine erste Prüfung auf das Format erfolgen? Ungetestet in etwa so:
return $VALUE if $VALUE =~ m,\d+-\d+-\d+,;
Titel: Antw:Einfache readingsGroup
Beitrag von: NewbieNew am 15 März 2022, 09:46:24
Hallo
Hallo,
Zitat von: OdfFhem am 15 März 2022, 09:10:29
@NewbieNew
Datum und Zeit entsprechen dem Zeitstempel eines Readings; im Zweifel unterbindet man die Anzeige  mit dem Attribut notime.

wo, in der Readingsgroup? Da erscheint dann keine Zeit mehr. Ist da meine Definition flasch? Es sollte doch das Userreading
angezeigt werden, was bei
list .* Battwechsel
richtig angezeigt wird.

Zitat
Laut Deiner Definition kann ein Gerät mehrfach in der readingsGroup vorkommen ... korrekt bzw. gewollt ?
nein, aber in Ermangelung von Fachwissen zähneknischend akzeptiert. Gibts da eine Lösung für?

Dankeschön
Titel: Antw:Einfache readingsGroup
Beitrag von: MadMax-FHEM am 15 März 2022, 09:57:10
Noch mal: BattWechsel ist laut deiner Angabe ein Attribut.

(leider kein list eines "Ausgangsdevices", dann würde man das gesehen haben ;) )

Dann muss in die readingsGroup VOR BattWechsel ein "Fragezeichen" -> "Abfrage" eines Attributes:


defmod 02_Batterie readingsGroup .*:[Bb]attery .*:[Bb]atteryLevel .*:BATTERY .*:?Battwechsel

(so ich das richtig interpretiere)

Zitat von: NewbieNew am 15 März 2022, 09:46:24
nein, aber in Ermangelung von Fachwissen zähneknischend akzeptiert. Gibts da eine Lösung für?
Filter setzen, also so, dass für den jeweiligen Typ nur eines genommen wird, selbst wenn mehrere Batteriewerte/-readings vorhanden sind oder "einzeln aufführen", also statt .*:[B|b]attery -> DeviceA:battery DeviceB:batteryLevel usw. (unschön und nicht flexibel)...
...oder das nehmen was ich nutze ;)
Oder mal schauen wie das bei einem (bestimmt vorhandenen) DOIF-Beispiel gelöst wurde...
(Vermute: Filter)

Gruß, Joachim
Titel: Antw:Einfache readingsGroup
Beitrag von: Beta-User am 15 März 2022, 10:07:09
defmod 02_Batterie readingsGroup .*:[Bb]attery,[Bb]atteryLevel,?Battwechsel
attr 02_Batterie valueFormat {return $VALUE if $VALUE =~ m,\d+-\d+-\d+,;; return 0 if $VALUE eq 'low';; return 100 if $VALUE eq 'ok';; return 25 if $VALUE < 2.1;; return '50' if $VALUE < 2.3;; return 75 if $VALUE < 2.5;; return 100}

Titel: Antw:Einfache readingsGroup
Beitrag von: NewbieNew am 15 März 2022, 10:36:33
Hallo,
sieht langsam gut aus, danke allen und BetaUser.

Die doppelten Devices sind weg. Allerdings verwerfen die Attribute

battery
und
batteryLevel

die Tabelle, da sie manchmal "entweder oder" oder beide vorhanden sind?

Kann man die Spalten, wenn kein Eintrag da ist dennoch mit leer anzeigen? Damit die Spalten richtig bleiben.

Dankeschön
Titel: Antw:Einfache readingsGroup
Beitrag von: Beta-User am 15 März 2022, 10:46:45
...jein...
Es gibt "das Aufrufezeichen":
defmod 02_Batterie readingsGroup .*:![Bb]attery,[Bb]atteryLevel,?Battwechsel

Das "Problem" hier ist, dass dann uU. alle (!) Geräte gelistet werden. Es ist daher m.E. für diese ".*"-readingsGroup besser, dafür zu sorgen, dass das "allgemeingültige" Reading batteryLevel ordentlich gefüllt ist (und ganz auf [Bb]attery zu verzichten).