DOIF - Verwendung von $SELF, Syntax Verständnisfrage

Begonnen von Homalix99, 15 Oktober 2024, 15:22:25

Vorheriges Thema - Nächstes Thema

Homalix99

Hallo,
ich habe für WaMa, W.-Trockner und Spülmaschine 3 funktionierende DOIFs welche doch mit jeweils 6 verschiedenen Ausführungsteilen langsam unübersichtlich werden.
Bei jedem DOIF werden die jeweils zuständigen Leistungsmesser abgefragt und anhand der gemessenen Leistung und Energiedaten der Zustand und E.-Umsatz der Maschinen festgestellt.
Da die Leistung und der aktuelle Energieverbrauch mehrfach abgefragt wird, muss bei Austausch eines Energiemesser (so was geht auch mal kaputt) an zig Stellen der DOIF Definition (FHEM-Mode) geändert werden.
Ziel ist es, in einem Reading bzw. Attribut der DOIFs die HW, welche die Daten liefert und deren relevante Readings (als Art Variablen) festzulegen so dass am Inhalt der DOIF Definition nichts angepasst werden muss.
Als Beispiel:
Bisher:
DOIF: di_W_Trockner
## CMD 1 - Ein
([MQTT2_WaTr:switch_apower:d] > [$SELF:P_Ein] and [?di_W_Trockner] =~ "cmd_6|initialized|initialize")
(({Log 3, "$SELF: Waeschetrockner eingeschaltet"}))

Angedacht:
DOIF di_W_Trockner (neu)
## CMD 1 - Ein
([$SELF:EnergyDevice:$SELF:PowerReading:d] > [$SELF:P_Ein] and [?di_W_Trockner] =~ "cmd_6|initialized|initialize")
(({Log 3, "$SELF: Waeschetrockner eingeschaltet"}))

Wobei das Reading EnergyDevice den Wert: MQTT2_WaTr
beinhaltet, und
das Reading PowerReading den Wert: switch_apower
beinhaltet, so dass bei Auswechselung der Energiemessdevices nur die beiden Readings angepasst werden müssen.


So wie ich mir das gedacht habe, funktioniert es natürlich nicht, möchte aber gerne eine Lösung mit funktionierender Syntax oder eine abdere elegante Lösung, die mir aber nicht einfällt.
Vielen Dank erstmal im voraus.

Gruß

Alex
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

Prof. Dr. Peter Henning

Erst einmal halte ich es für schlechte Praxis, feste Parameterwerte wie die genannten Device:Reading-Kombinationen selbst wieder in Readings zu stecken. Wenn überhaupt, sollten das Attribute sein.

Zweitens verstehe ich das Problem nicht. Wenn ein Leistungssensor (oder "Wattmeter", aber kein "Messer" - die sind zum schneiden...) ausfällt, setzt man einen anderen ein und nennt den in FHEM genau so wie den vorigen. Man könnte auch mit Alias arbeiten.

Und drittens: Klar werden solche verschachtelten DOIFs mit der Zeit unwartbar. Dafür hat uns eine höhere Macht die Möglichkeit gegeben, das in ordentlichen und kommentierten Perl-Code zu gießen und den in eine eigene Datei zu schreiben, von mir aus 99_EnergyUtils.pm.

LG

pah