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="