Batteriestatus und Speicherung des letzten Wechsel

Begonnen von Amenophis86, 12 Januar 2018, 19:23:20

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

#420
Es ist in jedem Fall für die innere Logik von FHEM besser, mit userattr als mit userReadings zu arbeiten - der Typ einer Batterie ist eben kein Messwert des Gerätes.

Zweitens  ein Tipp: Gerade Wandthermostate sitzen oft entweder neben oder in einer 230V-Wandanschlussdose. Die kann man problemlos mit einem 3,3 V-Einbaunetzteil versorgen. Daraus folgt schon mal, dass das gesamte System nicht viel Sinn macht ohne ein Attribut zum ignorieren.

Drittens sollte man die Terminologie im Auge behalten. Ein Attributname "doNotAccount" ist so generisch, dass er sich auf jede Art der Liste beziehen könnte, das sollte man auf jeden Fall vermeiden. Auch beim Sortieren in längeren Attributlisten wäre es besser, wenn man das Attribut "batteryChk" oder so ähnlich nennt. Das mache ich bei mir seit Jahren so, hat sich gut bewährt. Außerdem kann man den Attributwert auch etwas aufpolstern. Beispiel: Der Attributwert kann aus einer "|"-getrennten Liste bestehen, sagen wir

<readingname>|<readingtype>

battery|simple       kann beispielsweise bedeuten, dass das Reading für den Batteriezustand "battery" heißt und nur "ok" oder "low" sein kann.

batteryLevel|ignore  kann beispielsweise bedeuten, dass das Reading den "batteryLevel" heißt, aber bei der Prüfung ignoriert wird.

Entsprechend kann man das auch mit dem Batterietyp machen, z.B. als

<batteryType>|<batteryChange>

Geräte, bei denen das Datum des letzten Wechsels nicht bekannt ist, haben dann eben nur Attributwerte wie z.B. "2AA". Und selbstverständlich könnte man auch erreichen, dass bei einem Wechsel des Messwertes von "low" auf "ok" das Datum automatisch an diesen Attributwert angehängt wird.

Viertens, auch das zur Terminologie: Ein Readingsname "batteryPercent" ist semantisch unsinnig, weil er die Einheit (eben dimensionslose Prozent) in den Namen mit aufnimmt. Das ist ungefähr so doof, als ob man den Messwert der Netzspannung als "Netzvolt" bezeichnet. Wenn man das schon selbst auswählt, sollte man das korrekter benennen, z.B. batteryLevel. Es ist schon ärgerlich genug, dass in vielen FHEM-Devices wie Dimmern und Rollladenaktoren einfach "pct" als Reading auftaucht, das ist aber immerhin weitgehend einheitlich geregelt.

LG

pah

Und noch eine Bitte an alle Neulinge: Nicht immer den bequemen "Zitieren"-Button verwenden. Das müllt den gesamten Thread zu. Der Button "Antworten" ist OBEN.

MadMax-FHEM

Zitat von: TK67 am 21 März 2024, 18:58:42Wäre nett wenn du das auch noch anhängen kannst.
Ich habe hier kein "Monopol" auf den Code ;)

Es darf jeder gerne mitarbeiten :)

Ist ja Code-Schnipsel und kein Modul mit Maintainer...

Aber falls du nicht willst (warum auch immer), kann ich die überschaubaren Änderungen auch einbauen... 8)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

weini

Die Grace Period scheint gut zu funktionieren. Ich hatte die Situation jetzt wieder und die Alarmierung wurde wie gewünscht unterdrückt.
Nochmals vielen Dank!

Prof. Dr. Peter Henning

Zitatelsif($BatteryType[0] eq "batteryPercent"  && ($TYPE eq "ZWave" || $TYPE eq "HUEDevice" || $TYPE eq "FBDECT" || $TYPE eq "MQTT2_DEVICE" || $TYPE eq "withings"))
Sorry wenn ich das so deutlich sage: Aber das ist primitiver Spaghetti-Code, den nach kurzer Zeit niemand mehr warten kann. Außerdem führt er zu vielen unnötigen Tests.

Stattdessen sollte es einen zentralen Hash geben, in dem die Gegebenheiten für bestimmte TYPEs abgelegt sind, und natürlich Ausnahmen für konkrete Modelle.

LG

pah

MadMax-FHEM

Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Es ist in jedem Fall für die innere Logik von FHEM besser, mit userattr als mit userReadings zu arbeiten - der Typ einer Batterie ist eben kein Messwert des Gerätes.
Ja, sehe ich auch so.
Drum ja auch Attribut :)

Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Zweitens  ein Tipp: Gerade Wandthermostate sitzen oft entweder neben oder in einer 230V-Wandanschlussdose. Die kann man problemlos mit einem 3,3 V-Einbaunetzteil versorgen. Daraus folgt schon mal, dass das gesamte System nicht viel Sinn macht ohne ein Attribut zum ignorieren.
Ja und andere Geräte/Gründe...

Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Drittens sollte man die Terminologie im Auge behalten. Ein Attributname "doNotAccount" ist so generisch, dass er sich auf jede Art der Liste beziehen könnte, das sollte man auf jeden Fall vermeiden. Auch beim Sortieren in längeren Attributlisten wäre es besser, wenn man das Attribut "batteryChk" oder so ähnlich nennt. Das mache ich bei mir seit Jahren so, hat sich gut bewährt. Außerdem kann man den Attributwert auch etwas aufpolstern. Beispiel: Der Attributwert kann aus einer "|"-getrennten Liste bestehen, sagen wir

<readingname>|<readingtype>

battery|simple      kann beispielsweise bedeuten, dass das Reading für den Batteriezustand "battery" heißt und nur "ok" oder "low" sein kann.

batteryLevel|ignore  kann beispielsweise bedeuten, dass das Reading den "batteryLevel" heißt, aber bei der Prüfung ignoriert wird.

Entsprechend kann man das auch mit dem Batterietyp machen, z.B. als

<batteryType>|<batteryChange>

Geräte, bei denen das Datum des letzten Wechsels nicht bekannt ist, haben dann eben nur Attributwerte wie z.B. "2AA". Und selbstverständlich könnte man auch erreichen, dass bei einem Wechsel des Messwertes von "low" auf "ok" das Datum automatisch an diesen Attributwert angehängt wird.

Den Namen des Attributes kann man ja zu Beginn der Datei selbst festlegen...

Mag sein, dass der von mir gewählte nicht "gut" war aber ich hatte grad keine andere Idee 8)

Ja, klar kann man in einem Attribut auch Listen hinterlegen (gibt ja viele Beispiele: setList, webCmd usw. mit Komma getrennt, mit Leerzeichen getrennt usw.) und auch viel mehr in nur 1 Attribut packen (mache ich für mich an manchen Stellen auch so).

Allerdings würde ich hier den Wechsel auch eher in ein Reading packen denn ein Attribut.
Ist aber Geschmackssache...

Aber: es ist ein Code-Schnipsel (gut inzwischen ein etwas größerer und wachsender ;)  )...

Und auch hier: gerne anpacken ;)


Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 04:26:30Viertens, auch das zur Terminologie: Ein Readingsname "batteryPercent" ist semantisch unsinnig, weil er die Einheit (eben dimensionslose Prozent) in den Namen mit aufnimmt. Das ist ungefähr so doof, als ob man den Messwert der Netzspannung als "Netzvolt" bezeichnet. Wenn man das schon selbst auswählt, sollte man das korrekter benennen, z.B. batteryLevel. Es ist schon ärgerlich genug, dass in vielen FHEM-Devices wie Dimmern und Rollladenaktoren einfach "pct" als Reading auftaucht, das ist aber immerhin weitgehend einheitlich geregelt.
An den Reading-Namen (bzgl. Battrie-Stand) den die Devices (vom jedeiligen Modul) bekommen (haben) kann ich nix ändern.

Wenn die schon gut und v.a. einheitlich wären, dann bräuchte es diesen Code-Schnipsel nicht 8)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

#425
Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 08:09:38Sorry wenn ich das so deutlich sage: Aber das ist primitiver Spaghetti-Code, den nach kurzer Zeit niemand mehr warten kann. Außerdem führt er zu vielen unnötigen Tests.

Stattdessen sollte es einen zentralen Hash geben, in dem die Gegebenheiten für bestimmte TYPEs abgelegt sind, und natürlich Ausnahmen für konkrete Modelle.
Kein Monopol auf Code und Code-Schnipsel ;)

EDIT: und ja, habe auch gemerkt, dass man einiges vereinfachen und zusammenfassen kann aber ich habe dafür keine Zeit (und da ich eh bei mir anderen Code nutze auch keine rechte Lust) und testen ist ohne den Zoo zu haben nicht möglich und dann bei komplett umgebauten Code zu supporten kann ich auch nicht leisten, drum isses wie's ist ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

#426
Zitat von: _fhemuser_ am 21 März 2024, 15:41:19Kann vielleicht in FHEM eine Konfiguration hinterlegt werden bei denen Änderunge zb für die gracetime eingetragen werden. Damit müsste die Datei bei einem Update nicht geändert werden.

Zitat von: weini am 22 März 2024, 07:53:27Die Grace Period scheint gut zu funktionieren. Ich hatte die Situation jetzt wieder und die Alarmierung wurde wie gewünscht unterdrückt.
Nochmals vielen Dank!

Schön, dass es geklappt hat! :)

Ja, hatte auch überlegt das per Attribut zu lösen (ja dann evtl. wirklich ein Attribut mit einer Liste von Einstellungen), also auch gracePeriod pro Device.
Ist das Attribut bzw. der Eintrag vorhanden, dann wird NUR FÜR DIESES Device genau die ANGEGEBENE gracePeriod genommen.
Dann müsste der Anwender halt pro Device Attribute setzen.
Bislang hat der Code-Schnipsel ja "einfach so" funktioniert 8)

EDIT: ja damit würde auch der unten genannte Fall wegfallen. Also ähnlich dem ActionDetector bei Homematic. Betrachtet werden nur (Homematic / CUL_HM) Devices, die das entsprechende Attribut haben...

Und halt: Zeit das zu machen... :-\

Zitat von: TK67 am 21 März 2024, 18:58:42Meine Hue Bewegungsmelder und der Hue Dimmschalter haben jeweils battery und batteryPercent als Readings, dies führte teilweise zu unplausiblen Zuständen.

Ja ;)
Steht hier (denke ich):

https://forum.fhem.de/index.php?topic=82637.msg1299124#msg1299124

Zitat von: MadMax-FHEM am 06 Januar 2024, 14:50:08Es wird nun auf folgende Readings geprüft:
battery -> ok/low für CUL_HM (außer HM-TC-IT-WM-W-EU und HM-CC-RT-DN), MAX!, HMCCU und LaCrosse
batteryLevel -> voltage für HM-TC-IT-WM-W-EU und HM-CC-RT-DN (CUL_HM)
batteryPercent -> percentage für ZWave, HUEDevice, FBDECT und MQTT2_DEVICE <- das darf aber dann KEIN Reading battery haben! (sonst taucht es doppelt auf)
battery -> percentage für MQTT2_DEVICE ("früher" auch ZWave und HUEDevice) <- das darf aber dann KEIN Reading batteryPercent haben! (sonst taucht es doppelt auf)
batteryLevel -> percentage für XiaomiFlowerSens

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

_fhemuser_

Vielen Dank für die schnelle Umsetzung mit den Attributen,

Bei mir fehlen noch ganz viele Sensoren und Geräte in der Readingsgroup und bei einigen steht nur 0.

Alle fehlerhaften und fehlenden sind Zigbee Geräte die über zigbee2mqtt Daten übertragen.

In den Devicereadings ist battery mit 100 (%) enthalten und bei einigen battery_low false (low).

Dieser Sensor wird mit 0 in der Readingsgroup angezeigt:define Fenster_Ess MQTT2_DEVICE zigbee_Sensor_Fenster_Licht
attr Fenster_Ess BatteryTyp CR2032
attr Fenster_Ess DbLogExclude .*
attr Fenster_Ess DbLogInclude tamper.*|state.*|battery.*
attr Fenster_Ess devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green\
.*false:rc_BLANK \
.*true:message_service@red\
Batt.*100:measure_battery_100@green \
Batt.*9[0-9].*:measure_battery_100@green \
Batt.*8[0-9].*:measure_battery_75@green \
Batt.*7[0-9].*:measure_battery_75@green \
Batt.*6[0-9].*:measure_battery_50@green \
Batt.*5[0-9].*:measure_battery_50@green \
Batt.*4[0-9].*:measure_battery_50@green \
Batt.*3[0-9].*:measure_battery_25@orange \
Batt.*2[0-9].*:measure_battery_25@orange \
Batt.*1[0-9].*:measure_battery_25@red \
Batt.*[0][0-9].*:measure_battery_0@red
attr Fenster_Ess devicetopic zigbee2mqtt/Sensor_Fenster_Licht
attr Fenster_Ess fp_Grundriss 206,847,1,Fenster_Ess
attr Fenster_Ess genericDeviceType ContactSensor
attr Fenster_Ess group Door-Window
attr Fenster_Ess homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;;open:CONTACT_NOT_DETECTED
attr Fenster_Ess icon tuer_fenster_kontakt
attr Fenster_Ess jsonMap contact:state
attr Fenster_Ess model zigbee2mqtt_ContactSensor
attr Fenster_Ess readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=$ret->{state} eq 'true' ? 'closed' : 'open';; return $ret }
attr Fenster_Ess room Heizkoerper->-Heizkoerper,MQTT2_DEVICE,Zigbee
attr Fenster_Ess stateFormat state\
Batt: battery\
Hell: illuminance
attr Fenster_Ess userReadings batteryPer {ReadingsVal($NAME,'battery',0) }
#   CID        zigbee_Sensor_Fenster_Licht
#   DEF        zigbee_Sensor_Fenster_Licht
#   FUUID      6593dfde-f33f-d33d-4e3d-3167c848f406e555
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.103_53406
#   MQTT2_FHEM_Server_MSGCNT 48
#   MQTT2_FHEM_Server_TIME 2024-03-22 08:04:43
#   MSGCNT     48
#   NAME       Fenster_Ess
#   NR         858
#   STATE      closed
#Batt: 100
#Hell: 447
#   TYPE       MQTT2_DEVICE
#   eventCount 54
#   Helper:
#     DBLOG:
#       battery:
#         logdb:
#           TIME       1711091083.43459
#           VALUE      100
#       batteryPer:
#         logdb:
#           TIME       1711091083.43459
#           VALUE      100
#       state:
#         logdb:
#           TIME       1711091083.43459
#           VALUE      closed
#   JSONMAP:
#     contact    state
#   OLDREADINGS:
#   READINGS:
#     2024-03-21 09:24:16   IODev           MQTT2_FHEM_Server
#     2024-03-22 08:04:43   battery         100
#     2024-03-22 08:04:43   batteryPer      100
#     2024-03-22 08:04:43   device_applicationVersion 131
#     2024-03-22 08:04:43   device_friendlyName Sensor_Fenster_Licht
#     2024-03-22 08:04:43   device_hardwareVersion 1
#     2024-03-22 08:04:43   device_ieeeAddr 0xa4c138b67155d016
#     2024-03-22 08:04:43   device_manufacturerID 4098
#     2024-03-22 08:04:43   device_manufacturerName _TZE200_pay2byax
#     2024-03-22 08:04:43   device_model    ZG-102ZL
#     2024-03-22 08:04:43   device_networkAddress 63979
#     2024-03-22 08:04:43   device_powerSource Battery
#     2024-03-22 08:04:43   device_softwareBuildID 0122052017
#     2024-03-22 08:04:43   device_stackVersion 2
#     2024-03-22 08:04:43   device_type     EndDevice
#     2024-03-22 08:04:43   device_zclVersion 3
#     2024-03-22 08:04:43   illuminance     447
#     2024-03-22 08:04:43   illuminance_interval 60
#     2024-03-22 08:04:43   last_seen       2024-03-22T08:04:43+01:00
#     2024-03-22 08:04:43   linkquality     255
#     2024-03-22 08:04:43   state           closed
#     2024-01-04 07:17:08   tamper          false
#
setstate Fenster_Ess closed\
Batt: 100\
Hell: 447
setstate Fenster_Ess 2024-03-21 09:24:16 IODev MQTT2_FHEM_Server
setstate Fenster_Ess 2024-03-22 08:04:43 battery 100
setstate Fenster_Ess 2024-03-22 08:04:43 batteryPer 100
setstate Fenster_Ess 2024-03-22 08:04:43 device_applicationVersion 131
setstate Fenster_Ess 2024-03-22 08:04:43 device_friendlyName Sensor_Fenster_Licht
setstate Fenster_Ess 2024-03-22 08:04:43 device_hardwareVersion 1
setstate Fenster_Ess 2024-03-22 08:04:43 device_ieeeAddr 0xa4c138b67155d016
setstate Fenster_Ess 2024-03-22 08:04:43 device_manufacturerID 4098
setstate Fenster_Ess 2024-03-22 08:04:43 device_manufacturerName _TZE200_pay2byax
setstate Fenster_Ess 2024-03-22 08:04:43 device_model ZG-102ZL
setstate Fenster_Ess 2024-03-22 08:04:43 device_networkAddress 63979
setstate Fenster_Ess 2024-03-22 08:04:43 device_powerSource Battery
setstate Fenster_Ess 2024-03-22 08:04:43 device_softwareBuildID 0122052017
setstate Fenster_Ess 2024-03-22 08:04:43 device_stackVersion 2
setstate Fenster_Ess 2024-03-22 08:04:43 device_type EndDevice
setstate Fenster_Ess 2024-03-22 08:04:43 device_zclVersion 3
setstate Fenster_Ess 2024-03-22 08:04:43 illuminance 447
setstate Fenster_Ess 2024-03-22 08:04:43 illuminance_interval 60
setstate Fenster_Ess 2024-03-22 08:04:43 last_seen 2024-03-22T08:04:43+01:00
setstate Fenster_Ess 2024-03-22 08:04:43 linkquality 255
setstate Fenster_Ess 2024-03-22 08:04:43 state closed
setstate Fenster_Ess 2024-01-04 07:17:08 tamper false
Dieser Thermostat gar nicht.define MQTT2_zigbee_Heiz_Ess MQTT2_DEVICE zigbee_Heiz_Ess
attr MQTT2_zigbee_Heiz_Ess userattr AlleHeizungen AlleHeizungen_map MQTTHeizungen MQTTHeizungen_map structexclude weekprofile
attr MQTT2_zigbee_Heiz_Ess BatteryTyp 2 x AA
attr MQTT2_zigbee_Heiz_Ess DbLogInclude desired-temp temperature mode\
desiredTemperature
attr MQTT2_zigbee_Heiz_Ess alias Ess
attr MQTT2_zigbee_Heiz_Ess devStateIcon .*UNLOCK:secur_open@green:btnLock+LOCK\
.*LOCK:secur_locked@yellow:btnLock+UNLOCK \
\
.*Battery.*ok:measure_battery_100@green \
\
Frost.*ON:frost@lime:frost_protection+OFF\
Frost.*OFF:frost@grey:frost_protection+ON\
\
Fenster.*OFF:fts_window_1w@green:open_window+ON\
Fenster.*ON:fts_window_1w_open@red:open_window+OFF\
\
.*Aus.*ON:sani_heating@red:heating_stop+OFF # Thermostat abgeschaltet im Sommer  Strom sparen\
.*Aus.*OFF:sani_heating@green:heating_stop+ON+preset+auto # Thermostat abgeschaltet im Sommer  Strom sparen\
\
.*auto:sani_heating_automatic@lightgray:preset+manual \
.*manual:sani_heating_manual@black:preset+auto\
\
BT.*[0-9][0-9][1-9]*:sani_heating_boost@red\
BT.*[1-9]:sani_heating_boost@orange\
BT.*0:sani_heating_boost@grey:boost_time+300\
\
.*temporary:sani_heating_timer@red\
.*holiday:sani_heating_calendar@blue:preset+auto
attr MQTT2_zigbee_Heiz_Ess devicetopic zigbee2mqtt/Heiz_Ess
attr MQTT2_zigbee_Heiz_Ess fp_Grundriss 333,1074,1,MQTT2_zigbee_Heiz_Ess,
attr MQTT2_zigbee_Heiz_Ess genericDeviceType thermostat
attr MQTT2_zigbee_Heiz_Ess icon temp_control
attr MQTT2_zigbee_Heiz_Ess jsonMap current_heating_setpoint:desiredTemperature local_temperature:temperature Battery:batteryPercent system_mode:mode battery:batteryPercent voltage:batterymV btnLock:child_lock
attr MQTT2_zigbee_Heiz_Ess model zigbee2mqtt_thermostat_with_weekrofile
attr MQTT2_zigbee_Heiz_Ess readingList $DEVICETOPIC:.* { my %h;; my $temp = $EVENT;; $temp =~ s/,?("(holidays|workdays)":.([^]]+))./$h{$2}=$3/ge;; $EVENT =~ s/,?("(holidays|workdays)":.([^]]+)).//g;; my $h2 = json2nameValue($EVENT,'',$JSONMAP);; %h = (%h,%$h2);; \%h }
attr MQTT2_zigbee_Heiz_Ess room Heizkoerper->-Heizkoerper,Heizkoerper->Ess,MQTT2_DEVICE
attr MQTT2_zigbee_Heiz_Ess setList desiredTemperature:slider,5.0,0.5,22.0,1 $DEVICETOPIC/set {"current_heating_setpoint": $EVTPART1 }\
btnLock:LOCK,UNLOCK $DEVICETOPIC/set {"child_lock": "$EVTPART1"}\
preset:auto,manual,holiday $DEVICETOPIC/set {"preset": "$EVTPART1"}\
mode:heat,auto,off $DEVICETOPIC/set {"system_mode": "$EVTPART1"}\
holidays $DEVICETOPIC/set/schedule { "holidays":[$EVTPART1] }\
open_window:OFF,ON $DEVICETOPIC/set {"open_window": "$EVTPART1"}\
workdays $DEVICETOPIC/set/schedule { "workdays":[$EVTPART1] }\
week:5+2,6+1,7 $DEVICETOPIC/set $EVTPART1\
weekprofile { FHEM::attrT_z2m_thermostat_Utils::z2t_send_weekprofile($NAME, $EVTPART1, $EVTPART2) }\
x_send_set_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //;; qq($DEVICETOPIC/set $payload)}\
boost_time:select,20,60,120,180,240,300,450 $DEVICETOPIC/set {"boost_timeset_countdown": $EVTPART1}\
comfort_temperature:slider,5.0,0.5,30.0,1 $DEVICETOPIC/set {"comfort_temperature": $EVTPART1}\
frost_protection:OFF,ON $DEVICETOPIC/set {"frost_protection": "$EVTPART1"}\
heating_stop:OFF,ON $DEVICETOPIC/set {"heating_stop": "$EVTPART1"}\
holiday_temperature:slider,8.0,0.5,18.0,1 $DEVICETOPIC/set {"holiday_temperature": $EVTPART1 }\
open_window_temperature:slider,6.0,0.5,15.0,1 $DEVICETOPIC/set {"open_window_temperature": $EVTPART1 }\
local_temperature_calibration:slider,-5.0,0.1,5.0,1 $DEVICETOPIC/set {"local_temperature_calibration": $EVTPART1 }
attr MQTT2_zigbee_Heiz_Ess stateFormat Modus: preset\
Kinder: child_lock\
Frost: frost_protection\
Aus: heating_stop\
BT:boost_timeset_countdown\
<br>\
Fenster: open_window\
Battery: batteryState\
<br>\
Temp: temperature°C, \
Wunsch: desiredTemperature °C\
Dev: diffe °C
attr MQTT2_zigbee_Heiz_Ess userReadings batteryState:battery_low.* {ReadingsVal($name,'battery_low','false') eq 'false'?'ok':'low'}, \
batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}, \
diffe {sprintf("%.1f", ReadingsVal($name, "temperature", 0) - ReadingsVal($name, "desiredTemperature", 0))},\
batteryPer {if\
(ReadingsVal($NAME,"batteryState","") eq "ok") {return 100} elsif\
(ReadingsVal($NAME,"batteryState","") eq "low") {return 1} else \
{return -1}}
attr MQTT2_zigbee_Heiz_Ess webCmd temperature:desiredTemperature
attr MQTT2_zigbee_Heiz_Ess widgetOverride temperature:slider,5,0.1,25,1 desiredTemperature:select,6.0,8.0,10.0,13.0,14.0,16.0,17.5,19.0,20.0,21.5,30.0
#   CID        zigbee_Heiz_Ess
#   DEF        zigbee_Heiz_Ess
#   FUUID      653d1be3-f33f-d33d-abf5-9957dfd784cccbc3
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.0.103_53406
#   MQTT2_FHEM_Server_MSGCNT 335
#   MQTT2_FHEM_Server_TIME 2024-03-22 08:27:08
#   MSGCNT     335
#   NAME       MQTT2_zigbee_Heiz_Ess
#   NR         844
#   STATE      Modus: auto
#Kinder: UNLOCK
#Frost: OFF
#Aus: OFF
#BT:0
#<br>
#Fenster: OFF
#Battery: ok
#<br>
#Temp: 20.3°C,
#Wunsch: 20 °C
#Dev: 0.3 °C
#   TYPE       MQTT2_DEVICE
#   eventCount 395
#   Helper:
#     DBLOG:
#       BatteryTyp:
#         logdb:
#           TIME       1711025830.11604
#           VALUE      2 x AA
#       batteryPer:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      100
#       batteryState:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      ok
#       battery_low:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      false
#       boost_timeset_countdown:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      0
#       child_lock:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      UNLOCK
#       comfort_temperature:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      20
#       desiredTemperature:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      20
#       device_applicationVersion:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      69
#       device_dateCode:
#         logdb:
#           TIME       1711092428.41369
#           VALUE     
#       device_friendlyName:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      Heiz_Ess
#       device_hardwareVersion:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      1
#       device_ieeeAddr:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      0x0c4314fffe6a36b5
#       device_manufacturerID:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      4098
#       device_manufacturerName:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      _TZE200_mudxchsu
#       device_model:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      TV02-Zigbee
#       device_networkAddress:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      30240
#       device_powerSource:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      Battery
#       device_stackVersion:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      0
#       device_type:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      EndDevice
#       device_zclVersion:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      3
#       diffe:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      0.3
#       eco_temperature:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      16
#       error_status:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      0
#       frost_protection:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      OFF
#       heating_stop:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      OFF
#       holiday_start_stop:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      2024/05/01 02:00 _ESC_ 2024/10/15 01:00
#       holiday_temperature:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      13
#       last_seen:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      2024-03-22T08:27:08+01:00
#       linkquality:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      255
#       local_temperature_calibration:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      -1
#       mode:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      heat
#       online:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      ON
#       open_window:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      OFF
#       open_window_temperature:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      8
#       preset:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      auto
#       schedule_friday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_monday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_saturday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_schedule:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_sunday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_thursday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_tuesday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_wednesday:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#       schedule_week_day:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      monday
#       state:
#         logdb:
#           TIME       1711091083.29753
#           VALUE      open_window
#       temperature:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      20.3
#       update_available:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      false
#       update_installed_version:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      69
#       update_latest_version:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      69
#       update_state:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      idle
#       working_day:
#         logdb:
#           TIME       1711092428.41369
#           VALUE      mon_sun
#   JSONMAP:
#     Battery    batteryPercent
#     battery    batteryPercent
#     btnLock    child_lock
#     current_heating_setpoint desiredTemperature
#     local_temperature temperature
#     system_mode mode
#     voltage    batterymV
#   OLDREADINGS:
#   READINGS:
#     2024-03-21 09:24:17   IODev           MQTT2_FHEM_Server
#     2024-03-22 08:27:08   batteryPer      100
#     2024-03-22 08:27:08   batteryState    ok
#     2024-03-22 08:27:08   battery_low     false
#     2024-03-22 08:27:08   boost_timeset_countdown 0
#     2024-03-22 08:27:08   child_lock      UNLOCK
#     2024-03-22 08:27:08   comfort_temperature 20
#     2024-03-22 08:27:08   desiredTemperature 20
#     2024-03-22 08:27:08   device_applicationVersion 69
#     2024-03-22 08:27:08   device_dateCode
#     2024-03-22 08:27:08   device_friendlyName Heiz_Ess
#     2024-03-22 08:27:08   device_hardwareVersion 1
#     2024-03-22 08:27:08   device_ieeeAddr 0x0c4314fffe6a36b5
#     2024-03-22 08:27:08   device_manufacturerID 4098
#     2024-03-22 08:27:08   device_manufacturerName _TZE200_mudxchsu
#     2024-03-22 08:27:08   device_model    TV02-Zigbee
#     2024-03-22 08:27:08   device_networkAddress 30240
#     2024-03-22 08:27:08   device_powerSource Battery
#     2024-03-22 08:27:08   device_stackVersion 0
#     2024-03-22 08:27:08   device_type     EndDevice
#     2024-03-22 08:27:08   device_zclVersion 3
#     2024-03-22 08:27:08   diffe           0.3
#     2024-03-22 08:27:08   eco_temperature 16
#     2024-03-22 08:27:08   error_status    0
#     2024-03-22 08:27:08   frost_protection OFF
#     2024-03-22 08:27:08   heating_stop    OFF
#     2024-03-22 08:27:08   holiday_start_stop 2024/05/01 02:00 | 2024/10/15 01:00
#     2024-03-22 08:27:08   holiday_temperature 13
#     2024-03-22 08:27:08   last_seen       2024-03-22T08:27:08+01:00
#     2024-03-22 08:27:08   linkquality     255
#     2024-03-22 08:27:08   local_temperature_calibration -1
#     2024-03-22 08:27:08   mode            heat
#     2024-03-22 08:27:08   online          ON
#     2024-03-22 08:27:08   open_window     OFF
#     2024-03-22 08:27:08   open_window_temperature 8
#     2024-03-22 08:27:08   preset          auto
#     2024-03-22 08:27:08   schedule_friday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_monday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_saturday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_schedule 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_sunday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_thursday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_tuesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_wednesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
#     2024-03-22 08:27:08   schedule_week_day monday
#     2024-03-22 08:04:43   state           open_window
#     2024-03-22 08:27:08   temperature     20.3
#     2024-03-22 08:27:08   update_available false
#     2024-03-22 08:27:08   update_installed_version 69
#     2024-03-22 08:27:08   update_latest_version 69
#     2024-03-22 08:27:08   update_state    idle
#     2024-03-22 08:27:08   working_day     mon_sun
#
setstate MQTT2_zigbee_Heiz_Ess Modus: auto\
Kinder: UNLOCK\
Frost: OFF\
Aus: OFF\
BT:0\
<br>\
Fenster: OFF\
Battery: ok\
<br>\
Temp: 20.3°C, \
Wunsch: 20 °C\
Dev: 0.3 °C
setstate MQTT2_zigbee_Heiz_Ess 2024-03-21 09:24:17 IODev MQTT2_FHEM_Server
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 batteryPer 100
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 batteryState ok
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 battery_low false
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 boost_timeset_countdown 0
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 child_lock UNLOCK
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 comfort_temperature 20
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 desiredTemperature 20
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_applicationVersion 69
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_dateCode
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_friendlyName Heiz_Ess
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_hardwareVersion 1
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_ieeeAddr 0x0c4314fffe6a36b5
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_manufacturerID 4098
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_manufacturerName _TZE200_mudxchsu
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_model TV02-Zigbee
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_networkAddress 30240
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_powerSource Battery
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_stackVersion 0
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_type EndDevice
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 device_zclVersion 3
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 diffe 0.3
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 eco_temperature 16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 error_status 0
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 frost_protection OFF
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 heating_stop OFF
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 holiday_start_stop 2024/05/01 02:00 | 2024/10/15 01:00
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 holiday_temperature 13
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 last_seen 2024-03-22T08:27:08+01:00
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 linkquality 255
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 local_temperature_calibration -1
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 mode heat
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 online ON
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 open_window OFF
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 open_window_temperature 8
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 preset auto
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_friday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_monday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_saturday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_schedule 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_sunday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_thursday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_tuesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_wednesday 00:10/16 07:00/16 10:00/20 11:00/20 20:00/20 24:00/16
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 schedule_week_day monday
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:04:43 state open_window
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 temperature 20.3
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_available false
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_installed_version 69
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_latest_version 69
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 update_state idle
setstate MQTT2_zigbee_Heiz_Ess 2024-03-22 08:27:08 working_day mon_sun

Gruß
_fhemuser_
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | homebridge | alexa
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

MadMax-FHEM

Ja, inzwischen bzw. auch schon vorher dachte ich mir: mal aufnehmen was da ist und neu machen. Evtl. als Modul (ähnlich ActionDetector) aber da steht halt folgendes entgegen:

Zitat von: MadMax-FHEM am 22 März 2024, 08:19:04EDIT: und ja, habe auch gemerkt, dass man einiges vereinfachen und zusammenfassen kann aber ich habe dafür keine Zeit (und da ich eh bei mir anderen Code nutze auch keine rechte Lust) und testen ist ohne den Zoo zu haben nicht möglich und dann bei komplett umgebauten Code zu supporten kann ich auch nicht leisten, drum isses wie's ist ;)

Zitat von: MadMax-FHEM am 22 März 2024, 08:46:05Und halt: Zeit das zu machen... :-\

Weil mal ein wenig an dem Code-Schnipsel "basteln" ist das eine aber ein Modul (erstellen: eieiei) maintainen ist dann doch was anderes...

Hier (noch mal) Hut ab vor allen, die das machen!!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

_fhemuser_

#429
Dann gebe ich auch mal etwas zurück.

Erweiterung für MQTT Geräte die das Attribut battery_low haben
##############################################
# MQTT2_DEVICE that have battery Reading showing battery_low
##############################################
  elsif($BatteryType[0] eq "battery_low"  && $TYPE eq "MQTT2_DEVICE")
  {
    my $GraceStatus = checkGracePeriod($Device, $BatteryStatusBot, ReadingsVal($Device, "battery", "low"), $GracePeriod);

    if(ReadingsVal($Device, "battery_low", "false") eq "false")
    {
      # check if battery was low before -> possibly changed
      if(ReadingsVal($BatteryStatusBot, $SignalDevice, "none") eq "low")
      {
        # set date/time for changed battery if it was low before (so probably a change happended)
        fhem("setreading $BatteryChanged $Device $text_changed");
        # set the signal state back to none
        fhem("setreading $BatteryStatusBot $SignalDevice none");
      }

      # status is "ok" so we set to 100% (we don't know better)
      fhem("setreading $BatteryStatus $Device 100");
    }
    else
    {
      if($GraceStatus eq "true")
      {
        # send message
        Battery_Send_Alarm($BatteryStatusBot, $SignalDevice, $text_soon);

        # status is NOT "ok" ("low") so we set to 0% (we don't know better)
        fhem("setreading $BatteryStatus $Device 0");
      }
    }
  }
Ist quasi der Teil aus MAX! mit der passenden Bedingung.
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | homebridge | alexa
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Prof. Dr. Peter Henning

@MadMax-FHEM: Erst einmal großes Lob, dass Du Dir das überhaupt an die Backe gebunden hast. Das ist nämlich wirklich ein wilder Zoo, der sich kaum in einer einzelnen Codebasis verwalten lässt. Und wenn man glaubt, fertig zu sein, kommt noch User DAU123 und schreibt, dass leider sein Device Garglschnax aus dem Baumarkt in Hintertupfingen immer noch nicht korrekt angezeigt wird.

Andererseits zeigt gerade dieser Traffic, dass dafür ein großer Bedarf besteht. Also hier der konkrete Vorschlag:

Statt des gigantischen if - elsif - Konstruktes kürzt Du Deinen Code auf ein Minimum. Die einzelnen elsif-Zweige werden in separate Unterprogramme ausgelagert. Beispielsweise gibt es ein sub "batteryCheckZWaveType", das als Argument den Devicenamen bekommt. Und entweder die globalen Parameter $BatteryStatus etc. kennt, oder auf diese zugreifen kann.

In dem eigentlichen Code gibt es dann einen Hash, der unter anderem enthält

( "ZWave" => "ZWaveType",
  "HUEDevice" => "ZWaveType" ...)

Die BatteryStatusFunction schaut dann in diesem Hash nach, welche Funktion für ein Device des gegenwärtigen TYPE aufgerufen werden muss - eben z.B. dieselbe, wie bei ZWave.

Diese einzelnen Funktionen kann man (weil jetzt sehr viel kompakter) problemlos auf je einer Wiki-Seite beschreiben. Und wer möchte, kann sich diese eben in seiner eigenen 99_BatteryUtils.pm (oder was auch immer...) zusammenkopieren. Oder dazu eine eigene Funktion schreiben.

LG

pah


_fhemuser_

Hier fehlten die Leerzeichen zwischen Batterien und $BatteryTypeText ca Zeile 42:
  my $text_now = "Die Batterien $BatteryTypeText von $Device müssen JETZT gewechselt werden!"; #Text for changing battery now
  my $text_soon = "Die Batterien $BatteryTypeText von $Device sollten bald gewechselt werden!"; #Text for changing battery soon

Könnte man auch den Aliasnamen statt des Devicenamens nehmen?

Gruß
_fhemuser_
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | homebridge | alexa
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

MadMax-FHEM

Zitat von: _fhemuser_ am 22 März 2024, 10:25:04Hier fehlten die Leerzeichen zwischen Batterien und $BatteryTypeText ca Zeile 42:
-> NEIN!

Weil sonst OHNE das Attribut 2 Leerzeichen da sind ;)
Mit dem Attribut passt es (sollte)...

Zumindest bei meinen Tests... 8)

Zitat von: _fhemuser_ am 22 März 2024, 10:25:04Könnte man auch den Aliasnamen statt des Devicenamens nehmen?
Klar, es ist SW und da geht (fast) alles ;)

Mal sehen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27@MadMax-FHEM: Erst einmal großes Lob, dass Du Dir das überhaupt an die Backe gebunden hast. Das ist nämlich wirklich ein wilder Zoo, der sich kaum in einer einzelnen Codebasis verwalten lässt. Und wenn man glaubt, fertig zu sein, kommt noch User DAU123 und schreibt, dass leider sein Device Garglschnax aus dem Baumarkt in Hintertupfingen immer noch nicht korrekt angezeigt wird.
Danke!
Gerne!

Nur wer mitmacht und so :)


Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27Andererseits zeigt gerade dieser Traffic, dass dafür ein großer Bedarf besteht.
Ja, der ist aber Wellenweise, weil es war ganz zu Beginn etwas los (da war der TE ja noch dabei/dran)...
...dann passierte lange nichts.

Dann kamen ein paar Ergänzungswünsche aber auch "überschaubar"...

So viel Interesse und Traffic gab es (gefühlt) noch nie (auf jeden Fall schon lange nicht mehr)... ;)


Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27Also hier der konkrete Vorschlag:

Statt des gigantischen if - elsif - Konstruktes kürzt Du Deinen Code auf ein Minimum. Die einzelnen elsif-Zweige werden in separate Unterprogramme ausgelagert. Beispielsweise gibt es ein sub "batteryCheckZWaveType", das als Argument den Devicenamen bekommt. Und entweder die globalen Parameter $BatteryStatus etc. kennt, oder auf diese zugreifen kann.

In dem eigentlichen Code gibt es dann einen Hash, der unter anderem enthält

( "ZWave" => "ZWaveType",
  "HUEDevice" => "ZWaveType" ...)

Die BatteryStatusFunction schaut dann in diesem Hash nach, welche Funktion für ein Device des gegenwärtigen TYPE aufgerufen werden muss - eben z.B. dieselbe, wie bei ZWave.

Ja so oder so ähnlich hatte ich überlegt.
Hash, hmmm, mal sehen...

Aber das wird sicher dauern, wenn ich das überhaupt "raffe" und schaffe...


Zitat von: Prof. Dr. Peter Henning am 22 März 2024, 10:02:27Diese einzelnen Funktionen kann man (weil jetzt sehr viel kompakter) problemlos auf je einer Wiki-Seite beschreiben. Und wer möchte, kann sich diese eben in seiner eigenen 99_BatteryUtils.pm (oder was auch immer...) zusammenkopieren. Oder dazu eine eigene Funktion schreiben.

Ja, auch das müsste dann jemand machen (wollen)... ;)

Es kommt ja Ostern, ich denk mal drüber nach, vielleicht schaffe ich was vernünftiges zu bauen...
...aber grad weil Zeit ist könnte ich auch andere Projekte endlich mal umsetzen/angehen...
(noch dazu, wo ich selbst ganz anderen Code verwende, der aber ähnlich gewachsen ist ;-) :-\  )

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat von: _fhemuser_ am 22 März 2024, 10:00:58Dann gebe ich auch mal etwas zurück.

Erweiterung für MQTT Geräte die das Attribut battery_low haben

Hier wird aber ein Reading abgefragt ;)
Zitat von: _fhemuser_ am 22 März 2024, 10:00:58if(ReadingsVal($Device, "battery_low", "false") eq "false")

Wo kommt/käme das her? ;)

Ich muss mal sehen, vielleicht fällt mir was brauchbares ein.
Bzw. würde ich es ja gerne so machen, dass es für Anwender ohne Lust und Ahnung weiterhin einfach geht bzw. bestehende Anwender nix (groß) merken...
...andererseits wäre ein Attribut das angibt, dass der Code das Device beachten soll (und u.U. auch wie: welcher Readingname, GraceTime, Batterietyp, ...) sicher hilfreich, um Devices mit mehreren Batterie-Readings auseinaderhalten zu können...
Aber wenn ein Anwender dann das Attribut nicht (entsprechend) gesetzt hat, würde ja gar nix (mehr) klappen...

Nicht so einfach...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)