[ERLEDIGT] [perldoif] Parameter für Perl-Block

Begonnen von bstaeheli, 11 April 2024, 09:46:40

Vorheriges Thema - Nächstes Thema

bstaeheli

Liebe FHEM-Gemeinde

Wie kann ich einem Perl-Block einen Parameter übergeben? ich würde gerne aus aus FHEM folgendes aufufen:

fhem set NN.xx.XX.Test2.di test 3000 und dann im entsprechenden Perl-Block daraufeingehen, eigentlich so, wie es bei den Subs mit Parametern funktioniert.

Bis jetzt habe ich das nur sehr umständlich in der Art wie im nachfolgenden Test-DOIF angegeben hingekriegt. Kennt jemand einen eleganteren Weg?

Vielen herzlichen Dank für etwaige Hilfestellungen im voraus!

Liebe Grüsse, Boris

defmod NN.xx.XX.Test2.di DOIF setTestReading {\
x637a6969_doSomething([$SELF:test]);;\
}\
\
subs {\
\
sub x637a6969_doSomething($) {\
my ($testReadingValue) = @_;;\
Log 1, "$testReadingValue"\
}\
\
}\

attr NN.xx.XX.Test2.di readingList test
attr NN.xx.XX.Test2.di room DEV
attr NN.xx.XX.Test2.di setList test:slider,0,100,9000

setstate NN.xx.XX.Test2.di initialized
setstate NN.xx.XX.Test2.di 2024-04-11 09:32:55 block_setTestReading executed
setstate NN.xx.XX.Test2.di 2024-04-11 09:32:55 e_NN.xx.XX.Test2.di_test 1200
setstate NN.xx.XX.Test2.di 2024-04-11 09:30:14 mode enabled
setstate NN.xx.XX.Test2.di 2024-04-11 09:30:14 state initialized
setstate NN.xx.XX.Test2.di 2024-04-11 09:32:55 test 1200

Damian

#1
Ist bisher nicht vorgesehen. Die Lösung, die du gebaut hast, finde ich ok. Du brauchst dabei nicht über eine Subroutine zu gehen.

Es reicht einfach am Anfang des Blocks einzufügen:

{
my $param=[$SELF:test];
...
}

Der Block wird ja bei set test ... automatisch aufgerufen und der Inhalt des Parameters steht in $param.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bstaeheli

Danke, Damian für deine schnelle Antwort.
Weiterhin einen tollen Tag wünsche ich dir,
Liebe Grüsse, Boris