Hauptmenü

Rename und $SELF

Begonnen von Elektrolurch, 20 Juni 2022, 00:03:52

Vorheriges Thema - Nächstes Thema

Elektrolurch

Ich habe ein "rename a_doif b_doif" durchgeführt und danach funktionierte das DOIF nicht mehr.
Grund: Durch das rename wurde für das lfd. DOIF die Variabele Variable $SELF nicht angepasst.
Ein kleiner bug, sollte man aber wissen.

Elektrolurch
configDB und Windows befreite Zone!

Damian

#1
Zitat von: Elektrolurch am 20 Juni 2022, 00:03:52
Ich habe ein "rename a_doif b_doif" durchgeführt und danach funktionierte das DOIF nicht mehr.
Grund: Durch das rename wurde für das lfd. DOIF die Variabele Variable $SELF nicht angepasst.
Ein kleiner bug, sollte man aber wissen.

Elektrolurch

Das Problem liegt außerhalb des DOIF-Moduls. $SELF wird bei der Initialisierung des Devices ersetzt. Wenn durch den rename-Befehl keine Initialisierung des Moduls erfolgt, dann kann $SELF nicht ersetzt werden. Das DOIF-Device bekommt es ja nicht mit, dass es umbenannt wurde. Beim copy-Befehl funktioniert es dagegen, denn dann wird das Device auch initialisiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

Zitat von: Damian am 20 Juni 2022, 07:52:23
Das DOIF-Device bekommt es ja nicht mit, dass es umbenannt wurde.
Man kann veranlassen, dass das Modul die Info bekommt: https://wiki.fhem.de/wiki/DevelopmentModuleIntro#X_Rename
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Damian

Zitat von: Beta-User am 20 Juni 2022, 12:49:38
Man kann veranlassen, dass das Modul die Info bekommt: https://wiki.fhem.de/wiki/DevelopmentModuleIntro#X_Rename

ja, mal schauen. Wahrscheinlich würde ich dann die Initialisierung des Devices durchlaufen lassen, weil man nicht weiß, was die User so programmiert haben.

Man kann auch gleich ein copy des Devices durchführen und disable/delete des alten Devices vornehmen, dann ist das neue wenigstens sauber initialisiert.

Wenn jemand aber mit dem konkreten Namen des Devices hantiert, dann hilft das alles nichts.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

Zitat von: Damian am 20 Juni 2022, 13:11:22
ja, mal schauen. Wahrscheinlich würde ich dann die Initialisierung des Devices durchlaufen lassen, weil man nicht weiß, was die User so programmiert haben.
Weiß nicht, was die "korrekte" Lösung des Problems darstellt. Im laufenden Problem eine Reinitialisierung zu machen ist auch zweischneidig (Bauchgefühl meint: vermutlich ist es besser, $SELF kaputt zu halten)

Zitat
Man kann auch gleich ein copy des Devices durchführen und disable/delete des alten Devices vornehmen, dann ist das neue wenigstens sauber initialisiert.
Nope. copy hat grade den "Nachteil", dass erst mal alle Internals erhalten bleiben bzw. übernommen werden (über den Punkt bin ich v.a., aber nicht nur bei MQTT2_DEVICE ein paarmal gestolpert; kann aber sein, dass das zwischenzeitlich gefixt ist).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Damian

Zitat von: Beta-User am 20 Juni 2022, 13:20:18
Weiß nicht, was die "korrekte" Lösung des Problems darstellt. Im laufenden Problem eine Reinitialisierung zu machen ist auch zweischneidig (Bauchgefühl meint: vermutlich ist es besser, $SELF kaputt zu halten)
Nope. copy hat grade den "Nachteil", dass erst mal alle Internals erhalten bleiben bzw. übernommen werden (über den Punkt bin ich v.a., aber nicht nur bei MQTT2_DEVICE ein paarmal gestolpert; kann aber sein, dass das zwischenzeitlich gefixt ist).

Ein umbenanntes DOIF muss auf jeden Fall die Definitionsroutine durchlaufen, denn vor allem zu diesem Zeitpunkt werden $SELFs durch den Devicenamen ersetzt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF