ReadingsGroup zeigt Device zwei mal

Begonnen von holgerschlegel, 20 November 2015, 18:16:15

Vorheriges Thema - Nächstes Thema

holgerschlegel

Hi,

ich verwendet eine ReadingsGroup um den Batteriestatus aller (HM-)Geräte anzuzeigen.

Die ReadingsGroup ist mit
<Gerät>,<Batterie %>,<Zeitpunkt> .*:FILTER=device!=.+:[Bb]attery(Level)?
definiert.

Damit sollen alle Geräte eingesammelt werden die ein Reading battery und/oder ein Reading batteryLevel haben.
Der etwas merkwürdig aussehende Filter verhindert das Channels mit einem solchen Reading angezeigt werden.
Der Climate Kanal meiner (gepeerten)  HM-CC-RT-DN hat ein battery Reading. Zusätzlich zu dem des Devices.
Soweit ... sogut.

Leider gibt es Geräte die beide Readings haben, also sowohl battery als auch batteryLevel.
Bei mir sind dies die Wandthermostate vom Typ HM-TC-IT-WM-W-EU.

Das führt dazu, das diese Geräte doppelt angezeigt werden.

Da ich den Anzeigewert über eine Perl-Funktion im valueFormat ermittle (% Berechnung mittels batteryLevel und R-lowBatLimitRT), habe ich also zwei komplett identische Zeilen in der ReadingsGroup.


Gibt es ein Trick um die doppelten Zeilen zu verhindern?
Zum Beispiel ein entsprechenden Attribut was ich übersehen habe.
Oder eine Anpassung des RegExp, das solche Geräte nur einmal gefunden werden?

Grüße
Holger

Bennemannc

Hallo,

also der Unterschied zwischen den beiden Readings - der eine ist rein numerisch und der andere alphanumerisch. Das könnte man über die Regexp rausfiltern.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

justme1968

auf regex ebene kannst du das nicht lösen da die readingsGroup die readings alle unabhängig voneinander betrachtet.

du kannst entweder den filter erweitern so das model=HM-TC-IT-WM-W-EU ausgeschlossen ist und diese dann getrennt betrachten:
<Gerät>,<Batterie %>,<Zeitpunkt> .*:FILTER=device!=.+:FILTER=model!=HM-TC-IT-WM-W-EU:[Bb]attery(Level)? .*:FILTER=model=HM-TC-IT-WM-W-EU: battery

einfacher ist es aber vermutlich wenn du dir valueFormat so anlegst das bei den HM-TC-IT-WM-W-EU ignoriert wird. z.b. so:attr <rg> valueFormat {..., batteryLevel => '{ return undef if( AttrVal($DEVICE,'model','' ) eq 'HM-TC-IT-WM-W-EU' ); return $VALUE }', ... }

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

über den inhalt des readings kann man im define der readingsGroup nicht gehen da hier nur der name betrachtet wird.

im valueFormat könnte man readings ignorieren die einen (oder keinen) buchstaben enhalten.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

holgerschlegel

Ignoriert die ReadingsGroup Treffer wenn das valueFormat undef liefert?

Wenn ich also für das HM-TC-IT-WM-W-EU zu dem Treffer mit battery undef liefere, und zu dem Treffer mit batteryLevel den gesuchten Wert, taucht das Device nur einmal in der Liste auf?

(Kann das gerade nicht ausprobieren, da ich nicht am richtigen Rechner bzw. im richtigen Netz bin)

Gruß
Holger

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968