Liebe FHEM-Gemeinde
Es seien zwei DOIFs gegeben:
define NN.xx.XX.Test.di DOIF test {\
testSub();;\
}\
subs {\
sub testSub {\
Log 1, "$SELF"\
}\
}
attr NN.xx.XX.Test.di room DEV
attr NN.xx.XX.Test.di webCmd test
# DEF test {
# testSub();
#}
#subs {
# sub testSub {
# Log 1, "$SELF"
# }
#}
# FUUID 61cc1787-f33f-c28a-bd9f-6bf5c94667cc0595
# MODEL Perl
# NAME NN.xx.XX.Test.di
# NOTIFYDEV global
# NR 461
# NTFY_ORDER 50-NN.xx.XX.Test.di
# STATE initialized
# TYPE DOIF
# VERSION 26703 2022-11-14 16:43:41
# eventCount 19
# READINGS:
# 2022-11-21 12:04:56 state initialized
# Regex:
# accu:
# collect:
# condition:
# 0
# testSub();
#
# helper:
# NOTIFYDEV global
# globalinit 1
# last_timer 0
# sleeptimer -1
# perlblock:
# 0 test
# uiState:
# uiTable:
#
setstate NN.xx.XX.Test.di initialized
setstate NN.xx.XX.Test.di 2022-11-21 12:04:56 state initialized
und
define NN.xx.XX.Test2.di DOIF test {\
testSub();;\
}\
\
subs {\
sub testSub {\
Log 1, "$SELF"\
}\
\
}\
attr NN.xx.XX.Test2.di room DEV
attr NN.xx.XX.Test2.di webCmd test
# DEF test {
# testSub();
#}
#
#subs {
# sub testSub {
# Log 1, "$SELF"
# }
#
#}
#
# FUUID 637a6969-f33f-c28a-71de-141e277afeff8a8f
# MODEL Perl
# NAME NN.xx.XX.Test2.di
# NOTIFYDEV global
# NR 38792
# NTFY_ORDER 50-NN.xx.XX.Test2.di
# STATE initialized
# TYPE DOIF
# VERSION 26703 2022-11-14 16:43:41
# eventCount 3
# READINGS:
# 2022-11-21 12:10:08 mode enabled
# 2022-11-21 12:10:08 state initialized
# Regex:
# accu:
# collect:
# condition:
# 0
# testSub();
#
# helper:
# NOTIFYDEV global
# globalinit 1
# last_timer 0
# sleeptimer -1
# perlblock:
# 0 test
# uiState:
# uiTable:
#
setstate NN.xx.XX.Test2.di initialized
setstate NN.xx.XX.Test2.di 2022-11-21 12:10:08 mode enabled
setstate NN.xx.XX.Test2.di 2022-11-21 12:10:08 state initialized
Verhalten:
Wird das zweite DOIF modifiziert und gespeichert, rufen beide DOIF die Sub-Funktion des Zweiten auf. Wird das erste DOIF modifiziert und gespeichert rufen beide die Funktion des ersten auf.
Wir haben mehrere DOIFs mit gleichnamigen Subs und haben in der letzten Zeit komisches Verhalten der DOIFs festgestellt und sind dann per Zufall darauf gekommen.
Ist dieses Verhalten so gewünscht?
Lieben Dank für eure Antworten.
Der Code aller DOIFs befindet sich im gleichen Package namens DOIF. Eine neue sub-Definition mit gleichem Namen überschreibt die alte, die letzte gewinnt - das sind Perl-Mechanismen.
Du hast die Möglichkeit:
1) eigenes Package pro DOIF zu definieren
2) unterschiedliche Namen der subs zu nehmen
Das kannst du eindeutig mit $SELF realisieren.
sub $SELF_test ...
Aufruf der Methode geht dann mit $SELF_test (...)
oder
{package $SELF;}
Aufruf der Methode geht dann mit $SELF::test ()
Diese Frage wurde bereits hier behandelt: https://forum.fhem.de/index.php/topic,84969.msg900065.html#msg900065
Vielen herzlichen Dank Damian!
Zitat
Das kannst du eindeutig mit $SELF realisieren.
sub $SELF_test ...
Aufruf der Methode geht dann mit $SELF_test (...)
oder
{package $SELF;}
Aufruf der Methode geht dann mit $SELF::test ()
Leider funktioniert dein Vorschlag nicht, da wir irgendwann vor vielen Jahren einem Entitäten-Namensschema mit Punkten eingeführt haben.
Hast du noch einen anderen Vorschlag?
Zitat von: bstaeheli am 22 November 2022, 15:22:27
Leider funktioniert dein Vorschlag nicht, da wir irgendwann vor vielen Jahren einem Entitäten-Namensschema mit Punkten eingeführt haben.
Und wo ist das Problem?
Edit: Du meinst, du hast Punkte in deinen Devicenamen. Dann musst du dir selbst eindeutige Namen in deinen DOIFs überlegen, wenn du das Konzept mit den Punkten im Name behalten willst.