[gelöst] FRITZ!DECT 301 battery-Reading ohne %

Begonnen von LutzG, 14 Januar 2023, 03:53:12

Vorheriges Thema - Nächstes Thema

LutzG

Hallo,

ich habe mehrere Device (zigbee: Lidl, Treadfri, SonOff) mit einem "battery"-Reading, die kein "%" anzeigen. Nur das FRITZ!DECT 301 zeigt mit % an, Beispiel: "battery 60 %".

Ich habe nur "readingsChange" gefunden, um das zu ändern:
defmod rsFBDECT_HKV_301_WZ readingsChange FBDECT_HKV_301_WZ battery (\d+).* $1
attr rsFBDECT_HKV_301_WZ DbLogExclude .*
attr rsFBDECT_HKV_301_WZ room Geräte->AVM

setstate rsFBDECT_HKV_301_WZ active
setstate rsFBDECT_HKV_301_WZ 2023-01-14 03:13:19 state active


Oder gibt es da was anderes? Hintergrund: Batterieüberwachung: und nur der Heizkörperregler FRITZ!DECT 301, der aus der Reihe fällt. Bei allen Device deswegen ein userReading zu machen, fände ich "komisch".

Viele Grüße, Lutz
DMZ: J5040 mit OpenMediaVault, in Docker: Portainer, Fhem, MariaDB, zigbee2mqtt, esphome, NextCloudPi, Jellyfin, Grocy.
Intranet: J5005 mit OpenMediaVault, in Docker: Portainer, Fhem-minimal, urbackup - läuft nur, wenn Rechner laufen.

OdfFhem

userReadings
Mittels userReadings kann man einen neuen Wert ermitteln - unter Erhalt des eigentlichen Readingwertes
--> battery enthält das Prozentzeichen und wird zusätzlich z.B. zu battery_new, wo dann kein Prozentzeichen mehr enthalten ist

readingsChange
Mittels readingsChange kann man einen neuen Wert ermitteln - der eigentliche Readingwert wird unwiderbringlich überschrieben
--> battery bleibt battery, enthält aber kein Prozentzeichen mehr


Im Grunde scheint man "alle" Mittel zur Hand zu haben (neuer oder alter/neuer Wert).
Zielt Deine Frage darauf ab,
... ob es z.B. noch ein Attribut im betroffenenen Gerät geben könnte
... oder ob der FB-Modulautor eingreifen würde und das Prozentzeichen eliminiert (lt. AHA könnte das Prozentzeichen direkt vom AVM-Gerät kommen)
... oder geht es um eine readingsGroup, wo Du die Anzeige korrigieren möchtest
... oder um z.B. FTUI/FTUI3, wo Du die Anzeige korrigieren möchtest
... oder ?

LutzG

Hallo,

@OdfFhem vielen Dank für die Antwort! Was bedeutet AHA? Admin hilft Admin?

Zitat von: OdfFhem am 14 Januar 2023, 06:49:02
Zielt Deine Frage darauf ab,
... ob es z.B. noch ein Attribut im betroffenenen Gerät geben könnte
... oder ob der FB-Modulautor eingreifen würde und das Prozentzeichen eliminiert (lt. AHA könnte das Prozentzeichen direkt vom AVM-Gerät kommen)
... oder geht es um eine readingsGroup, wo Du die Anzeige korrigieren möchtest
... oder um z.B. FTUI/FTUI3, wo Du die Anzeige korrigieren möchtest
... oder ?
... um so ziemlich alle deine Vermutungen! Respekt, deine Glaskugel ist echt gut!  ;D

Ich vermute, dass der Standard, beim battery-reading, ohne "%" ist und habe vermutet, dass ich nur nicht gefunden habe, wo / wie man das ändert. Wenn es wirklich der Standard ist, wäre das natürlich ein Traum, wenn der FB-Modulautor das ändern könnte!  8)

Und ja, es geht um zwei ReadingsGroup, die ich vor einiger Zeit angelegt (und wegen Erkältung vergessen) hatte und dann im Log immer wieder Warnungen hatte:
2023.01.13 00:27:28.232 1: PERL WARNING: Argument "60 %" isn't numeric in numeric lt (<) at (eval 35695) line 1.
2023.01.13 00:27:28.232 1: stacktrace:
2023.01.13 00:27:28.232 1:     main::__ANON__                      called by (eval 35695) (1)
2023.01.13 00:27:28.232 1:     (eval)                              called by ./FHEM/33_readingsGroup.pm (357)
2023.01.13 00:27:28.232 1:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (540)
2023.01.13 00:27:28.232 1:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (1109)
2023.01.13 00:27:28.232 1:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1210)
2023.01.13 00:27:28.232 1:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2150)
2023.01.13 00:27:28.232 1:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (1198)
2023.01.13 00:27:28.232 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (609)
2023.01.13 00:27:28.232 1:     main::FW_Read                       called by fhem.pl (3976)
2023.01.13 00:27:28.232 1:     main::CallFn                        called by fhem.pl (784)

... wo ich nach vielem Suchen gefunden habe, dass es um die 60 % vom "FRITZ!DECT 301" geht.

Die ReadingsGroup, die ich gefunden / angelegt habe, ReadingsGroup 1 (RAW):
defmod BatterieLevel readingsGroup .*:[Bb]attery
attr BatterieLevel DbLogExclude .*
attr BatterieLevel notime 1
attr BatterieLevel room System->Status
attr BatterieLevel valueFormat {return "0" if( $VALUE eq "low" );;;;return "100" if( $VALUE eq "ok" );;;;return "0" if( $VALUE < 15 );;;;return "25" if( $VALUE < 35 );;;;return "50" if( $VALUE < 65 );;;;return "75" if( $VALUE < 90 );;;;return "100";;;;}
attr BatterieLevel 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','battery.0' => 'measure_battery_0@red','battery.25' => 'measure_battery_25@red','battery.50' => 'measure_battery_50@orange','battery.75' => 'measure_battery_75@green','battery.100' => 'measure_battery_100@green'}


ReadingsGroup 2  (RAW):
defmod BatterieZustand readingsGroup .*:[Bb]attery .*:[Bb]atteryLevel
attr BatterieZustand DbLogExclude .*
attr BatterieZustand comment https://www.meintechblog.de/2015/08/fhem-rechtzeitige-benachrichtigung-bei-leeren-batterien/#more-9307\
https://forum.fhem.de/index.php/topic,109080.msg1184735.html#msg1184735
attr BatterieZustand notime 1
attr BatterieZustand room System->Status
attr BatterieZustand valueIcon {'batteryPercent.ok' => 'measure_battery_100@green','batteryPercent' => '{if ($VALUE <= 25) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@red"} else {if ($VALUE <= 50) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@orange"} else {if ($VALUE <= 75) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@grey"} else {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@green"}}}}'}

... sollten mir als Vorlage dienen, damit ich irgend wann Mal eine Anzeige hin bekomme in etwa: Device | BatterieSymbol | Wert %.

FTUI (spiele mit Ver. 3) bin ich noch ganz am Anfang. Da soll dass natürlich auch Mal, irgend wann, angezeigt werden. Da fehlt es aber noch am Tablet? / Raspberry? / ESP32? und viel Informationen / Wissen.

Viele Grüße, Lutz
DMZ: J5040 mit OpenMediaVault, in Docker: Portainer, Fhem, MariaDB, zigbee2mqtt, esphome, NextCloudPi, Jellyfin, Grocy.
Intranet: J5005 mit OpenMediaVault, in Docker: Portainer, Fhem-minimal, urbackup - läuft nur, wenn Rechner laufen.

OdfFhem

Zitat von: LutzG am 14 Januar 2023, 23:53:03
Was bedeutet AHA? Admin hilft Admin?
Keine schlechte Idee ... bedeutet aber offiziell: AVM Home Automation

Zitat von: LutzG am 14 Januar 2023, 23:53:03
Und ja, es geht um zwei ReadingsGroup

- ReadingsGroup 1 nach Deiner Vorgabe angelegt
- bei irgendeinem Testgerät ein "fehlerverursachendes" battery-Reading angelegt: setreading ftuitest battery 60 %
- Anzeige aktualisiert
- FHEM-Logfile geschaut: PERL WARNING: Argument "60 %" isn't numeric in numeric lt (<) at (eval 940) line 1.

Um den Fehler loszuwerden, das Attribut valueFormat erweitert (RAW):

attr BatterieLevel valueFormat {my $value = ($VALUE =~ m/(\d+)/)?$1:$VALUE;; return "0" if( $value eq "low" );; return "100" if( $value eq "ok" );; return "0" if( $value < 15 );; return "25" if( $value < 35 );; return "50" if( $value < 65 );; return "75" if( $value < 90 );; return "100";;}

- Anzeige aktualisiert
- FHEM-Logfile geschaut: kein neuer Fehler zu sehen

Zitat von: LutzG am 14 Januar 2023, 23:53:03
FTUI (spiele mit Ver. 3) bin ich noch ganz am Anfang.


  <ftui-label [text]="ftuitest:battery"></ftui-label>
  <ftui-label [text]="ftuitest:battery | part(1)"></ftui-label>

Ergibt 2 Darstellungen ... 60 % bei der ersten Zeile ... 60 bei der zweiten Zeile

rudolfkoenig

ZitatIch vermute, dass der Standard, beim battery-reading, ohne "%" ist und habe vermutet, dass ich nur nicht gefunden habe, wo / wie man das ändert. Wenn es wirklich der Standard ist, wäre das natürlich ein Traum, wenn der FB-Modulautor das ändern könnte!  8)
Wir hatten mal 'ne laengere Diskussion, dessen Ergebnis hier festgehalten wurde:
http://www.fhemwiki.de/wiki/DevelopmentGuidelines#BatteryReadings

Danach sind nur batteryState, batteryPercent und batteryVoltage standardisiert, alles andere ist Wildwuchs bzw. historisch begruendet.
FBAHA hatte von Anfang an battery und batterylow, und erst nach Festlegung dieses Standards batteryState und batteryPercent eingefuehrt.

LutzG

#5
Hallo,

Zitat von: OdfFhem am 15 Januar 2023, 07:08:15
Um den Fehler loszuwerden, das Attribut valueFormat erweitert (RAW):
Ja, Regex ist leider noch nicht mein Freund. Eine mir verständliche Anleitung hab ich noch nicht gefunden (englisch bin ich leider nicht so fit).  :-[ Vielen Dank für den Code, auch für das FTUI3! Hilft mir echt weiter!

Zitat von: rudolfkoenig am 15 Januar 2023, 10:44:13
Wir hatten mal 'ne laengere Diskussion, dessen Ergebnis hier festgehalten wurde:
http://www.fhemwiki.de/wiki/DevelopmentGuidelines#BatteryReadings

Danach sind nur batteryState, batteryPercent und batteryVoltage standardisiert, alles andere ist Wildwuchs bzw. historisch begruendet.
FBAHA hatte von Anfang an battery und batterylow, und erst nach Festlegung dieses Standards batteryState und batteryPercent eingefuehrt.
Vielen Dank für den Link! Die Seite hatte ich mir noch nicht durchgelesen. Da lag ich ja mit meiner Vermutung total daneben. FBAHA hält sich an den Standard...  ::)

Also bei den Devices, bei denen batteryPercent fehlt, ein UserReading?
batteryPercent {ReadingsNum($name,'battery','0')}

Was passiert eigentlich, wenn das Modul (per Update) das Reading hat bekommt. Wird das UserReading automatisch gelöscht, oder nur wenn das attrTemplate neu gesetzt wird?

Viele Grüße, Lutz

Edit: hat in bekommt geändert.
DMZ: J5040 mit OpenMediaVault, in Docker: Portainer, Fhem, MariaDB, zigbee2mqtt, esphome, NextCloudPi, Jellyfin, Grocy.
Intranet: J5005 mit OpenMediaVault, in Docker: Portainer, Fhem-minimal, urbackup - läuft nur, wenn Rechner laufen.

rudolfkoenig

ZitatWas passiert eigentlich, wenn das Modul (per Update) das Reading hat bekommt. Wird das UserReading automatisch gelöscht, oder nur wenn das attrTemplate neu gesetzt wird?
Das per userReadings definierte Reading wird bei jeder Nachricht, was das Geraet betrifft, aktualisiert, man kann bzw sollte aber die Quelle filtern.
Die userReadings Definition wird normalerweise von attrTemplate nicht ueberschrieben, es gibt aber Ausnahmen.
In so einem Fall muss man userReadings nach Anwendung des attrTemplates erweitern.

LutzG

Hallo,

vielen Dank für die vielen Infos. Für mich ist damit dieses Problem geklärt!

Viele Grüße, Lutz
DMZ: J5040 mit OpenMediaVault, in Docker: Portainer, Fhem, MariaDB, zigbee2mqtt, esphome, NextCloudPi, Jellyfin, Grocy.
Intranet: J5005 mit OpenMediaVault, in Docker: Portainer, Fhem-minimal, urbackup - läuft nur, wenn Rechner laufen.