diff --git a/fhem/FHEM/98_MSwitch.pm b/fhem/FHEM/98_MSwitch.pm
index e2f9fa5e3..dba334d02 100644
--- a/fhem/FHEM/98_MSwitch.pm
+++ b/fhem/FHEM/98_MSwitch.pm
@@ -62,7 +62,7 @@ use LWP::Simple;
my $preconffile="https://raw.githubusercontent.com/Byte009/MSwitch_Addons/master/MSwitch_Preconf.conf";
my $autoupdate = 'off'; #off/on
-my $version = '3.01';
+my $version = '3.02';
my $vupdate = 'V2.00'; # versionsnummer der datenstruktur . änderung der nummer löst MSwitch_VUpdate aus .
my $savecount = 50; # anzahl der zugriff im zeitraum zur auslösung des safemodes. kann durch attribut überschrieben werden .
my $savemodetime = 10000000; # Zeit für Zugriffe im Safemode
@@ -241,6 +241,7 @@ sub MSwitch_Initialize($) {
. " MSwitch_Event_Id_Distributor:textField-long "
. " MSwitch_Sequenz:textField-long "
. " MSwitch_Sequenz_time"
+ . " MSwitch_setList:textField-long "
. " setList:textField-long "
. " readingList:textField-long "
. " MSwitch_Eventhistory:0,1,2,3,4,5,10,20,30,40,50,60,70,80,90,100,150,200"
@@ -1138,13 +1139,13 @@ sub MSwitch_Set($@) {
my ( $hash, $name, $cmd, @args ) = @_;
#MSwitch_LOG( $name, 6, "$name Set $cmd, @args " . __LINE__ );
+ my $dynlist ="";
if ($cmd ne "?"){
MSwitch_LOG( $name, 6, "########## Ausführung Routine SET " . __LINE__ );
MSwitch_LOG( $name, 6, "Befehl: Set $cmd, @args " . __LINE__ );
}
-
#lösche saveddevicecmd
MSwitch_del_savedcmds($hash);
return "" if ( IsDisabled($name) && ( $cmd eq 'on' || $cmd eq 'off' ) );# Return without any further action if the module is disabled
@@ -1205,6 +1206,55 @@ sub MSwitch_Set($@) {
MSwitch_Check_Event( $hash, "MSwitch_self:".$cmd.":".$args[0] ) if defined $setlist{$cmd};
}
+##########################
+
+
+ # mswitch dyn setlist
+ my $mswitchsetlist = AttrVal( $name, 'MSwitch_setList', "undef" );
+ my @arraydynsetlist;
+ my @arraydynreadinglist;
+
+ my $dynsetlist ;
+ if ($mswitchsetlist ne "undef")
+ {
+ my @dynsetlist = split( / /,$mswitchsetlist);
+
+ foreach my $test (@dynsetlist)
+ {
+ if ( $test =~ m/(.*)\[(.*)\]:?(.*)/ )
+ {
+
+ my @found_devices = devspec2array($2);
+
+ if ($1 ne "")
+ {
+ my $reading = $1;
+ chop ($reading);
+ push @arraydynsetlist, $reading;
+ $dynlist =join( ',', @found_devices );
+ $dynsetlist=$dynsetlist.$reading.":".$dynlist." ";
+ }
+
+ if ($3 ne "")
+ {
+ my $sets = $3;
+ foreach my $test1 (@found_devices)
+ {
+ push @arraydynsetlist, $test1;
+ $dynsetlist=$dynsetlist.$test1.":".$sets." ";
+ }
+ @arraydynreadinglist=@found_devices;
+ }
+ }
+ else
+ {
+ $dynsetlist=$dynsetlist.$test;
+ }
+ }
+
+ }
+###########################
+
my %setlist;
if ( !defined $args[0] ) { $args[0] = ''; }
@@ -1224,8 +1274,11 @@ my %setlist;
my ($arg1,$arg2) = split( ":", $_ );
if (!defined $arg2 or $arg2 eq "") {$arg2 = "noArg"}
$setlist{$arg1} = $arg2;
+
}
+ ##########################
+
foreach my $k ( sort keys %sets )
{
my $opts = undef;
@@ -1266,7 +1319,23 @@ my %setlist;
}
return;
}
+
+ @gefischt = grep( /$re/, @arraydynsetlist );
+ if ( @arraydynsetlist && grep /$re/, @arraydynsetlist )
+ {
+ my @rl = split( " ", AttrVal( $name, "readingList", "" ) );
+ if (( @rl && grep /$re/, @rl ) || ( @arraydynreadinglist && grep /$re/, @arraydynreadinglist ))
+ {
+ readingsSingleUpdate( $hash, $cmd, "@args", 1 );
+ }
+ else
+ {
+ readingsSingleUpdate( $hash, "state", $cmd . " @args", 1 );
+ }
+ return;
+ }
+
##############################
# dummy state setzen und exit
if ( $devicemode eq "Dummy" )
@@ -1299,8 +1368,6 @@ my %setlist;
}
############################################
-
-
if (exists $hash->{helper}{config} && $hash->{helper}{config} eq "no_config")
{
return "Unknown argument $cmd, choose one of wizard:noArg"
@@ -1309,11 +1376,11 @@ my %setlist;
if ( $devicemode eq "Notify" )
{
- return "Unknown argument $cmd, choose one of reset_device:noArg active:noArg inactive:noArg del_function_data:noArg del_delays:noArg backup_MSwitch:all_devices fakeevent exec_cmd_1 exec_cmd_2 wait reload_timer:noArg del_repeats:noArg change_renamed reset_cmd_count:1,2,all $setList $special";
+ return "Unknown argument $cmd, choose one of $dynsetlist reset_device:noArg active:noArg inactive:noArg del_function_data:noArg del_delays:noArg backup_MSwitch:all_devices fakeevent exec_cmd_1 exec_cmd_2 wait reload_timer:noArg del_repeats:noArg change_renamed reset_cmd_count:1,2,all $setList $special";
}
elsif ( $devicemode eq "Toggle" )
{
- return "Unknown argument $cmd, choose one of reset_device:noArg active:noArg del_function_data:noArg inactive:noArg on off del_delays:noArg backup_MSwitch:all_devices fakeevent wait reload_timer:noArg del_repeats:noArg change_renamed $setList $special";
+ return "Unknown argument $cmd, choose one of $dynsetlist reset_device:noArg active:noArg del_function_data:noArg inactive:noArg on off del_delays:noArg backup_MSwitch:all_devices fakeevent wait reload_timer:noArg del_repeats:noArg change_renamed $setList $special";
}
elsif ( $devicemode eq "Dummy" )
{
@@ -1324,14 +1391,14 @@ my %setlist;
}
else
{
- return "Unknown argument $cmd, choose one of del_repeats:noArg del_delays:noArg exec_cmd_1 exec_cmd_2 reset_device:noArg state backup_MSwitch:all_devices $setList $special";
+ return "Unknown argument $cmd, choose one of $dynsetlist del_repeats:noArg del_delays:noArg exec_cmd_1 exec_cmd_2 reset_device:noArg state backup_MSwitch:all_devices $setList $special";
}
}
else
{
#full
- return "Unknown argument $cmd, choose one of del_repeats:noArg reset_device:noArg active:noArg del_function_data:noArg inactive:noArg on off del_delays:noArg backup_MSwitch:all_devices fakeevent exec_cmd_1 exec_cmd_2 wait del_repeats:noArg reload_timer:noArg change_renamed reset_cmd_count:1,2,all $setList $special";
+ return "Unknown argument $cmd, choose one of $dynsetlist del_repeats:noArg reset_device:noArg active:noArg del_function_data:noArg inactive:noArg on off del_delays:noArg backup_MSwitch:all_devices fakeevent exec_cmd_1 exec_cmd_2 wait del_repeats:noArg reload_timer:noArg change_renamed reset_cmd_count:1,2,all $setList $special";
}
}
@@ -1457,6 +1524,7 @@ $hash->{helper}{modesince} =time;
. " MSwitch_Event_Id_Distributor:textField-long "
. " MSwitch_Sequenz:textField-long "
. " MSwitch_Sequenz_time"
+ . " MSwitch_setList:textField-long "
. " setList:textField-long "
. " readingList:textField-long "
. " MSwitch_Eventhistory:0,1,2,3,4,5,10,20,30,40,50,60,70,80,90,100,150,200"
@@ -1507,7 +1575,6 @@ $hash->{helper}{modesince} =time;
return;
# MSwitch_Delete_Delay( $hash, $name );
}
- #MSwitch_LOG( $name, 5,"BEFEHL. $cmd ");
##############################
if ( $cmd eq 'inactive' )
{
@@ -2861,6 +2928,7 @@ sub MSwitch_Attr(@) {
. " MSwitch_Mode:Full,Notify,Toggle,Dummy"
. " MSwitch_Selftrigger_always:0,1"
. " useSetExtensions:0,1"
+ . " MSwitch_setList:textField-long "
. " MSwitch_Event_Id_Distributor:textField-long "
. " setList:textField-long "
. " readingList:textField-long "
@@ -5413,7 +5481,7 @@ $controlhtml=~ s/#/\n/g;
";
- if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' )
+ if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' || AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '3' )
{
$MSTEST1=" ";
}
- if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' )
+ if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' || AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '3' )
{
$COND1check1=" ";
}
- if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' )
+ if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' || AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '3' )
{
$COND2check2="";
}
@@ -6626,7 +6694,7 @@ $triggerdetailhtml=~ s/#/\n/g;
";
- if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' && $optiongeneral ne '' )
+ if ( (AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '1' || AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '3' ) && $optiongeneral ne '' )
{
$MSTESTEVENT="