WeekDayTimer mit device.* und perl-sub

Begonnen von spi3845, 11 April 2017, 22:27:07

Vorheriges Thema - Nächstes Thema

spi3845

Hallo,

ein WDT der folgenden Form funktioniert:
test_dev_.* 22:08|on 22:09|off
Dabei sind test_dev_01 und test_dev_02 zwei Dummys.

Das folgende funktioniert nicht - die Funktion perl_sub ist eine perl-Routine in 99_xxxUtils.pm:
test_dev_.* 22:08|on 22:09|off { perl_sub($NAME,$EVENT); }
Auch wenn command in commandTemplate definiert und in DEF wieder entfernt wird, funktionieren Regex in dem Funktionsaufruf nicht.

Definiere ich zwei WDT für die einzelnen Devices dann fkt. es wieder.

Wie kann man Device-Regex zusammen mit perl-subs nutzen? Muss ich z.B. zusätzliche notifys oder eine structure nutzen oder geht das irgendwie direkt?

Grüße,
spi

Dietmar63

setze mal verbose 5 , dann kannst du vielleicht schon erkennen warum.
Ob ich leicht Abhilfe schaffen kann, kann ich aus dem Stand nicht sagen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

spi3845

Zitat von: Dietmar63 am 12 April 2017, 02:20:30
setze mal verbose 5 , dann kannst du vielleicht schon erkennen warum.
Ob ich leicht Abhilfe schaffen kann, kann ich aus dem Stand nicht sagen.
Hatte ich gestern Abend mitlaufen lassen.
2017.04.11 22:04:58 3: [t.r.sp.wdt_test] device <t.r.sp.test_.*> in fhem not defined, but accepted
2017.04.11 22:07:15 3: [t.r.sp.wdt_test] device <t.r.sp.test_.*> in fhem not defined, but accepted
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] time=22:08/1491941280 delay=0, nextDelay=60, nextRetry=1491941340
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] delayedExecutionCond:0
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] result of delayedExecutionCond:0
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] list of window sensors found: 't.r.sp.wdt_test'
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] condition: - Tage:0,1,2,3,4,5,6
2017.04.11 22:08:00 5: [t.r.sp.wdt_test] condition: {my $days={};;map{$days->{$_}=1}(0,1,2,3,4,5,6);;;;( 1 && (defined $days->{$wday}))}
2017.04.11 22:08:00 5: [t.r.sp.wdt_test] result of condition:1
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] Update   - timer seems to be active today: 0123456|22:08|on
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] aktParam: newParam:on - is  not disabled
2017.04.11 22:08:00 4: [t.r.sp.wdt_test] command: 'set $NAME  $EVENT' executed with %NAME=>t.r.sp.test_.*,%EVENT=>on
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] time=22:09/1491941340 delay=0, nextDelay=60, nextRetry=1491941400
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] delayedExecutionCond:0
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] result of delayedExecutionCond:0
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] list of window sensors found: 't.r.sp.wdt_test'
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] condition: - Tage:0,1,2,3,4,5,6
2017.04.11 22:09:00 5: [t.r.sp.wdt_test] condition: {my $days={};;map{$days->{$_}=1}(0,1,2,3,4,5,6);;;;( 1 && (defined $days->{$wday}))}
2017.04.11 22:09:00 5: [t.r.sp.wdt_test] result of condition:1
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] Update   - timer seems to be active today: 0123456|22:09|off
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] aktParam: newParam:off - is  not disabled
2017.04.11 22:09:00 4: [t.r.sp.wdt_test] command: 'set $NAME  $EVENT' executed with %EVENT=>off,%NAME=>t.r.sp.test_.*


2017.04.11 22:10:18 3: [t.r.sp.wdt_timer] device <t.r.sp.rollo_.*> in fhem not defined, but accepted
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] time=22:11/1491941460 delay=0, nextDelay=60, nextRetry=1491941520
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] delayedExecutionCond:0
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] result of delayedExecutionCond:0
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] list of window sensors found: 't.r.sp.wdt_timer'
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] condition: - Tage:0,1,2,3,4,5,6
2017.04.11 22:11:00 5: [t.r.sp.wdt_timer] condition: {my $days={};;map{$days->{$_}=1}(0,1,2,3,4,5,6);;;;( 1 && (defined $days->{$wday}))}
2017.04.11 22:11:00 5: [t.r.sp.wdt_timer] result of condition:1
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] Update   - timer seems to be active today: 0123456|22:11|Timer_up
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] aktParam: newParam:Timer_up - is  not disabled
2017.04.11 22:11:00 4: [t.r.sp.wdt_timer] command: '{ WinShutterTester($NAME,$EVENT);; }' executed with %NAME=>t.r.sp.rollo_.*,%EVENT=>Timer_up


Sieht ähnlich aus für die beiden Fälle.

Im ersten Fall werden beide Dummys erfolgreich geschaltet.

Im zweiten Fall nicht, d.h. es sieht so aus, dass die regex t.r.sp.rollo_.* nicht vor Übergabe an die Funktion WinShutterTester expandiert wird. Und eine Auswertung der regex in der Funktion würde ich gerne bleiben lassen..., d.h. ich suche das gleiche Verhalten wie im ersten Fall, dass die regex aufgelöst wird und die Funktion dann für jedes einzelne Device aufgerufen wird.

Grüße,
spi

Dietmar63

Im ersten Kommando wird ein fhem-Befehle Set ausgeführt.
Der Modulautor von set hat das expandieren vorgesehen.

Im zweiten Fall wird einfach ein Perl-Befehl aufgerufen. Hier wird nicht expandiert.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

spi3845

Zitat von: Dietmar63 am 12 April 2017, 13:30:02
Im ersten Kommando wird ein fhem-Befehle Set ausgeführt.
Der Modulautor von set hat das expandieren vorgesehen.

Im zweiten Fall wird einfach ein Perl-Befehl aufgerufen. Hier wird nicht expandiert.
Alles klar, danke. Das hatte ich befürchtet. Ich helfe mir aktuell mit einem WDT auf device.*, der einen trigger $NAME $EVENT auslöst, den wieder ein notify abfängt. Das notify selbst ruft dann die Funktion auf. Mit dieser Kette funktioniert das Expandieren.

Gibt es noch einen einfacheren, nicht so um die Ecke gedachten Weg?

Grüße,
spi

Dietmar63

Mir fallen nur Gruppen von Devices ein. Damit könnte es klappen
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

spi3845

Zitat von: Dietmar63 am 12 April 2017, 15:49:15
Mir fallen nur Gruppen von Devices ein. Damit könnte es klappen
Danke!