2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

98_MSwitch.pm:Update -> V2.3

git-svn-id: https://svn.fhem.de/fhem/trunk@19411 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Byte09 2019-05-20 03:24:23 +00:00
parent e46bb6abf9
commit 357279f888

View File

@ -82,7 +82,7 @@ if ( $preconf && $preconf ne "" ) {
} }
my $autoupdate = 'off'; #off/on my $autoupdate = 'off'; #off/on
my $version = '2.20'; my $version = '2.30';
my $vupdate = 'V2.00' my $vupdate = 'V2.00'
; # versionsnummer der datenstruktur . änderung der nummer löst MSwitch_VUpdate aus . ; # versionsnummer der datenstruktur . änderung der nummer löst MSwitch_VUpdate aus .
my $savecount = 30 my $savecount = 30
@ -91,6 +91,13 @@ my $standartstartdelay = 60
; # zeitraum nach fhemstart , in dem alle aktionen geblockt werden. kann durch attribut überschrieben werden . ; # zeitraum nach fhemstart , in dem alle aktionen geblockt werden. kann durch attribut überschrieben werden .
my $eventset = '0'; my $eventset = '0';
my $deletesavedcmds = 1800
; # zeitraum nachdem gespeicherte devicecmds gelöscht werden ( beschleunugung des webinterfaces )
my $deletesavedcmdsstandart = "automatic"
; # standartverhalten des attributes "MSwitch_DeleteCMDs" <manually,nosave,automatic>
# standartlist ignorierter Devices . kann durch attribut überschrieben werden . # standartlist ignorierter Devices . kann durch attribut überschrieben werden .
my @doignore = my @doignore =
qw(notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul); qw(notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul);
@ -145,6 +152,7 @@ sub MSwitch_confchange($$);
sub MSwitch_setconfig($$); sub MSwitch_setconfig($$);
sub MSwitch_check_setmagic_i($$); sub MSwitch_check_setmagic_i($$);
##############################
my %sets = ( my %sets = (
"on" => "noArg", "on" => "noArg",
"off" => "noArg", "off" => "noArg",
@ -175,6 +183,7 @@ my %sets = (
"clearlog" => "noArg", "clearlog" => "noArg",
"set_trigger" => "noArg", "set_trigger" => "noArg",
"reset_cmd_count" => "", "reset_cmd_count" => "",
"delcmds" => "",
"change_renamed" => "" "change_renamed" => ""
); );
@ -226,6 +235,7 @@ sub MSwitch_Initialize($) {
. " MSwitch_Trigger_Filter" . " MSwitch_Trigger_Filter"
. " MSwitch_Extensions:0,1" . " MSwitch_Extensions:0,1"
. " MSwitch_Inforoom" . " MSwitch_Inforoom"
. " MSwitch_DeleteCMDs:manually,automatic,nosave"
. " MSwitch_Mode:Full,Notify,Toggle,Dummy" . " MSwitch_Mode:Full,Notify,Toggle,Dummy"
. " MSwitch_Condition_Time:0,1" . " MSwitch_Condition_Time:0,1"
. " MSwitch_RandomTime" . " MSwitch_RandomTime"
@ -265,6 +275,11 @@ sub MSwitch_Shutdown($) {
readingsSingleUpdate( $hash, "SaveDelay_$x", $seq, 1 ); readingsSingleUpdate( $hash, "SaveDelay_$x", $seq, 1 );
$x++; $x++;
} }
delete( $hash->{helper}{devicecmds1} );
delete( $hash->{helper}{last_devicecmd_save} );
return undef; return undef;
} }
#################### ####################
@ -707,6 +722,9 @@ sub MSwitch_Get($$@) {
#################### ####################
if ( $opt eq 'checkcondition' ) { if ( $opt eq 'checkcondition' ) {
my ( $condstring, $eventstring ) = split( /\|/, $args[0] ); my ( $condstring, $eventstring ) = split( /\|/, $args[0] );
$condstring =~ s/#\[dp\]/:/g; $condstring =~ s/#\[dp\]/:/g;
$condstring =~ s/#\[pt\]/./g; $condstring =~ s/#\[pt\]/./g;
@ -766,16 +784,38 @@ sub MSwitch_Get($$@) {
my $reads = '<br><br>States der geprüften Readings:<br>'; my $reads = '<br><br>States der geprüften Readings:<br>';
$x = 0; # exit $x = 0; # exit
while ( $condsplit =~ m/(.*')(.*)',\s'(.*)',\s(.*)/ ) {
while ( $condsplit =~ m/(if \()(.*)(\()(.*')(.*)',\s'(.*)',\s(.*)/ ) {
$x++; # exit $x++; # exit
# MSwitch_LOG( $name, 0, "$condsplit" . __LINE__ );
# MSwitch_LOG( $name, 0, "1 $1 " . __LINE__ );
# MSwitch_LOG( $name, 0, "2 $2 " . __LINE__ );
# MSwitch_LOG( $name, 0, "3 $3 " . __LINE__ );
# MSwitch_LOG( $name, 0, "5 $4 " . __LINE__ );
# MSwitch_LOG( $name, 0, "6 $5 " . __LINE__ );
# MSwitch_LOG( $name, 0, "7 $6 " . __LINE__ );
# MSwitch_LOG( $name, 0, "8 $7 " . __LINE__ );
# MSwitch_LOG( $name, 0, "---------------" . __LINE__ );
last if $x > 20; # exit last if $x > 20; # exit
$reads .= "Reading: [$2:$3] - Inhalt: " $reads .= "ReadingVal: [$5:$6] - Inhalt: "
. ReadingsVal( $2, $3, 'undef' ); . ReadingsVal( $5, $6, 'undef' )."<br>";
$reads .= "ReadingNum: [$5:$6] - Inhalt: "
. ReadingsNum( $5, $6, 'undef' );
$reads .= $reads .=
"<div style=\"color: #FF0000\">Reading nicht vorhanden !</div>" "<div style=\"color: #FF0000\">Reading nicht vorhanden !</div>"
if ( ReadingsVal( $2, $3, 'undef' ) ) eq "undef"; if ( ReadingsVal( $5, $6, 'undef' ) ) eq "undef";
$reads .= "<br>"; $reads .= "<br>";
$condsplit = $1 . $4; $condsplit = $1 . $2 . $3 . $4. $7;
} }
$ret .= $reads if $x > 0; $ret .= $reads if $x > 0;
my $err1; my $err1;
@ -937,6 +977,12 @@ sub MSwitch_AsyncOutput ($) {
sub MSwitch_Set($@) { sub MSwitch_Set($@) {
my ( $hash, $name, $cmd, @args ) = @_; my ( $hash, $name, $cmd, @args ) = @_;
MSwitch_LOG( $name, 5, "$name Set $cmd, @args " . __LINE__ ); MSwitch_LOG( $name, 5, "$name Set $cmd, @args " . __LINE__ );
#lösche saveddevicecmd #
MSwitch_del_savedcmds( $hash );
################### ###################
return "" return ""
if ( IsDisabled($name) && ( $cmd eq 'on' || $cmd eq 'off' ) ) if ( IsDisabled($name) && ( $cmd eq 'on' || $cmd eq 'off' ) )
@ -1077,7 +1123,14 @@ sub MSwitch_Set($@) {
} }
############################## ##############################
if ( $cmd eq 'del_delays' ) {
# löschen aller delays
MSwitch_Delete_Delay( $hash, $name );
MSwitch_Createtimer($hash);
return;
}
##############################
if ( $cmd eq 'del_repeats' ) { if ( $cmd eq 'del_repeats' ) {
my $inhalt = $hash->{helper}{repeats}; my $inhalt = $hash->{helper}{repeats};
foreach my $a ( sort keys %{$inhalt} ) { foreach my $a ( sort keys %{$inhalt} ) {
@ -1224,14 +1277,7 @@ sub MSwitch_Set($@) {
############################## ##############################
if ( $cmd eq 'del_delays' ) {
# löschen aller delays
MSwitch_Delete_Delay( $hash, $name );
MSwitch_Createtimer($hash);
return;
}
##############################
if ( $cmd eq 'saveconfig' ) { if ( $cmd eq 'saveconfig' ) {
# configfile speichern # configfile speichern
@ -1247,7 +1293,15 @@ sub MSwitch_Set($@) {
return; return;
} }
############################## ##############################
if ( $cmd eq "delcmds" ) {
delete( $hash->{helper}{devicecmds1} );
delete( $hash->{helper}{last_devicecmd_save} );
return;
}
##############################
if ( $cmd eq "addevent" ) { if ( $cmd eq "addevent" ) {
# event manuell zufügen # event manuell zufügen
@ -2347,8 +2401,30 @@ sub MSwitch_Notify($$) {
my $devName; my $devName;
$devName = $dev_hash->{NAME}; $devName = $dev_hash->{NAME};
# lösche saveddevicecmd #
MSwitch_del_savedcmds( $own_hash );
# if (exists $hash->{helper}{last_devicecmd_save} && $hash->{helper}{last_devicecmd_save} < time-10))
# {
# delete( $hash->{helper}{devicecmds1} );
# delete( $hash->{helper}{last_devicecmd_save} );
# }
if ( $own_hash->{helper}{testevent_device} if ( $own_hash->{helper}{testevent_device}
&& $own_hash->{helper}{testevent_device} eq 'Logfile' ) && $own_hash->{helper}{testevent_device} eq 'Logfile' )
{ {
@ -2588,16 +2664,20 @@ sub MSwitch_Notify($$) {
EVENT: foreach my $event (@eventscopy) { EVENT: foreach my $event (@eventscopy) {
################################## ##################################
MSwitch_LOG( $ownName, 5, "$ownName: event -> $event " ); MSwitch_LOG( $ownName, 6, "$ownName: event -> $event " );
if ( $event =~ m/(.*)(\{.*\})(.*)/ ) { if ( $event =~ m/^.*:.\{.*\}?/ ) {
# $event =~ s/:/[dp]/g;
# $event =~ s/\"/[dst]/g;
MSwitch_LOG( $ownName, 5, "$ownName: found and ignored jasonformated event -> $event " );
next EVENT;
}
if( $event =~ m/(.*)(\{.*\})(.*)/ ) {
MSwitch_LOG( $ownName, 5,
"$ownName: changedevent1 -> $1 " );
MSwitch_LOG( $ownName, 5,
"$ownName: changedevent2 -> $2 " );
MSwitch_LOG( $ownName, 5,
"$ownName: changedevent3 -> $3 " );
my $p1 = $1; my $p1 = $1;
my $json = $2; my $json = $2;
my $p3 = $3; my $p3 = $3;
@ -2611,6 +2691,9 @@ sub MSwitch_Notify($$) {
#next EVENT; #next EVENT;
} }
$own_hash->{eventsave} = 'unsaved'; $own_hash->{eventsave} = 'unsaved';
MSwitch_LOG( $ownName, 5, MSwitch_LOG( $ownName, 5,
"$ownName: eingehendes Event -> " "$ownName: eingehendes Event -> "
@ -2635,13 +2718,18 @@ sub MSwitch_Notify($$) {
$triggercondition =~ s/#\[sp\]/ /g; $triggercondition =~ s/#\[sp\]/ /g;
if ( $triggercondition ne '' ) { if ( $triggercondition ne '' ) {
MSwitch_LOG( $ownName, 6, MSwitch_LOG( $ownName, 5,
"$ownName: teste Triggercondition -> " "$ownName: teste die Triggercondition -> "
. $triggercondition ); . $triggercondition );
MSwitch_LOG( $ownName, 5,
"$ownName: teste die eventcopy -> "
. $eventcopy );
my $ret = MSwitch_checkcondition( $triggercondition, $ownName, my $ret = MSwitch_checkcondition( $triggercondition, $ownName,
$eventcopy ); $eventcopy );
MSwitch_LOG( $ownName, 6, MSwitch_LOG( $ownName, 5,
"$ownName: ergebniss Triggercondition -> " . $ret ); "$ownName: ergebniss der Triggercondition -> " . $ret );
if ( $ret eq 'false' ) { if ( $ret eq 'false' ) {
MSwitch_LOG( $ownName, 6, MSwitch_LOG( $ownName, 6,
"$ownName: ergebniss Triggercondition false-> abbruch" "$ownName: ergebniss Triggercondition false-> abbruch"
@ -3123,14 +3211,20 @@ sub MSwitch_checkbridge($$$) {
sub MSwitch_fhemwebFn($$$$) { sub MSwitch_fhemwebFn($$$$) {
# my $loglevel = 5; # my $loglevel = 5;
my ( $FW_wname, $d, $room, $pageHash ) = my ( $FW_wname, $d, $room, $pageHash ) =@_; # pageHash is set for summaryFn.
@_; # pageHash is set for summaryFn.
my $hash = $defs{$d}; my $hash = $defs{$d};
my $Name = $hash->{NAME}; my $Name = $hash->{NAME};
my $jsvarset = ''; my $jsvarset = '';
my $j1 = ''; my $j1 = '';
my $border = 0; my $border = 0;
# lösche saveddevicecmd #
my $cmdfrombase ="0";
MSwitch_del_savedcmds( $hash );
return if ( AttrVal( $Name, 'MSwitch_Mode', "Full" ) eq 'Dummy' ); return if ( AttrVal( $Name, 'MSwitch_Mode', "Full" ) eq 'Dummy' );
if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '4' ) { if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '4' ) {
@ -3551,23 +3645,35 @@ sub MSwitch_fhemwebFn($$$$) {
push @found_devices, $Name; push @found_devices, $Name;
} }
LOOP9: for my $name ( sort @found_devices ) { my $includewebcmd = AttrVal( $Name, 'MSwitch_Include_Webcmds', "1" );
my $extensions = AttrVal( $Name, 'MSwitch_Extensions', "0" );
my $MSwitchIncludeMSwitchcmds = AttrVal( $Name, 'MSwitch_Include_MSwitchcmds', "1" );
my $MSwitchIncludeDevicecmds =AttrVal( $Name, 'MSwitch_Include_Devicecmds', "1" );
my $Triggerdevicetmp = ReadingsVal( $Name, 'Trigger_device', '' );
my $savecmds = AttrVal( $Name, 'MSwitch_DeleteCMDs', $deletesavedcmdsstandart );
LOOP9: for my $name ( sort @found_devices )
{
my $selectedtrigger = ''; my $selectedtrigger = '';
my $devicealias = AttrVal( $name, 'alias', "" ); my $devicealias = AttrVal( $name, 'alias', "" );
my $devicewebcmd = my $devicewebcmd = AttrVal( $name, 'webCmd', "noArg" ); # webcmd des devices
AttrVal( $name, 'webCmd', "noArg" ); # webcmd des devices
my $devicehash = $defs{$name}; #devicehash my $devicehash = $defs{$name}; #devicehash
my $deviceTYPE = $devicehash->{TYPE}; my $deviceTYPE = $devicehash->{TYPE};
# triggerfile erzeugen # triggerfile erzeugen
if ( ReadingsVal( $Name, 'Trigger_device', '' ) eq $name ) { #if ( ReadingsVal( $Name, 'Trigger_device', '' ) eq $name )
if ($Triggerdevicetmp eq $name )
{
$selectedtrigger = 'selected=\"selected\"'; $selectedtrigger = 'selected=\"selected\"';
if ( $name eq 'all_events' ) { $globalon = 'on' } if ( $name eq 'all_events' ) { $globalon = 'on' }
} }
$triggerdevices .= $triggerdevices .="<option $selectedtrigger value=\"$name\">$name (a:$devicealias t:$deviceTYPE)</option>";
"<option $selectedtrigger value=\"$name\">$name (a:$devicealias t:$deviceTYPE)</option>";
# filter auf argumente on oder off ; # filter auf argumente on oder off ;
if ( $name eq '' ) { next LOOP9; } if ( $name eq '' ) { next LOOP9; }
@ -3575,11 +3681,26 @@ sub MSwitch_fhemwebFn($$$$) {
my $cs = "set $name ?"; my $cs = "set $name ?";
# abfrage und auswertung befehlssatz # abfrage und auswertung befehlssatz
if ( AttrVal( $Name, 'MSwitch_Include_Devicecmds', "1" ) eq '1' ) { if ($MSwitchIncludeDevicecmds eq '1' )
{
if (exists $hash->{helper}{devicecmds1}{$name} && $savecmds ne "nosave")
{
$cmdfrombase = "1";
$errors = $hash->{helper}{devicecmds1}{$name};
}
else{
$errors = AnalyzeCommandChain( undef, $cs ); $errors = AnalyzeCommandChain( undef, $cs );
if ($errors) { } if ( $savecmds ne "nosave")
{
$hash->{helper}{devicecmds1}{$name}=$errors;
$hash->{helper}{last_devicecmd_save}=time;
}
}
} }
else { else
{
$errors = ''; $errors = '';
} }
@ -3589,7 +3710,8 @@ sub MSwitch_fhemwebFn($$$$) {
if ( !defined $tmparg[1] ) { $tmparg[1] = "" } if ( !defined $tmparg[1] ) { $tmparg[1] = "" }
if ( $tmparg[1] ne '' ) { if ( $tmparg[1] ne '' )
{
$errors = $tmparg[1]; $errors = $tmparg[1];
} }
else { else {
@ -3600,46 +3722,52 @@ sub MSwitch_fhemwebFn($$$$) {
$errors =~ s/\| //g; $errors =~ s/\| //g;
$errors =~ s/\|//g; $errors =~ s/\|//g;
# if ( $errors eq '' && AttrVal( $Name, 'MSwitch_Include_Webcmds', "1" ) eq '1' )
if ( AttrVal( $Name, 'MSwitch_Include_Webcmds', "1" ) eq '1' )
if ($includewebcmd eq '1' && $devicewebcmd ne "noArg" )
{ {
if ( $devicewebcmd ne "noArg" ) {
my $device = ''; my $device = '';
my @webcmd = split( /:/, $devicewebcmd ); my @webcmd = split( /:/, $devicewebcmd );
foreach (@webcmd) { foreach (@webcmd)
{
$_ =~ tr/ /:/; $_ =~ tr/ /:/;
my @parts = split( /:/, $_ ); my @parts = split( /:/, $_ );
if ( !defined $parts[1] || $parts[1] eq '' ) { if ( !defined $parts[1] || $parts[1] eq '' )
{
$device .= $parts[0] . ':noArg '; $device .= $parts[0] . ':noArg ';
} }
else { else
{
$device .= $parts[0] . ':' . $parts[1] . ' '; $device .= $parts[0] . ':' . $parts[1] . ' ';
} }
} }
chop $device; chop $device;
$devicewebcmd = $device; $devicewebcmd = $device;
$errors .= ' ' . $devicewebcmd; $errors .= ' ' . $devicewebcmd;
}
} }
if ( $MSwitchIncludeMSwitchcmds eq '1' )
{
my $usercmds = AttrVal( $name, 'MSwitchcmd', '' ); my $usercmds = AttrVal( $name, 'MSwitchcmd', '' );
if ( $usercmds ne '' if ( $usercmds ne '' )
&& AttrVal( $Name, 'MSwitch_Include_MSwitchcmds', "1" ) eq '1' )
{ {
$usercmds =~ tr/:/ /; $usercmds =~ tr/:/ /;
$errors .= ' ' . $usercmds; $errors .= ' ' . $usercmds;
} }
}
my $extensions = AttrVal( $Name, 'MSwitch_Extensions', "0" );
if ( $extensions eq '1' ) { if ( $extensions eq '1' )
{
$errors .= ' ' . 'MSwitchtoggle'; $errors .= ' ' . 'MSwitchtoggle';
} }
if ( $errors ne '' ) {
if ( $errors ne '' )
{
$selected = ""; $selected = "";
if ( exists $usedevices{$name} && $usedevices{$name} eq 'on' ) { if ( exists $usedevices{$name} && $usedevices{$name} eq 'on' )
{
$selected = "selected=\"selected\" "; $selected = "selected=\"selected\" ";
} }
$deviceoption = $deviceoption =
@ -3658,6 +3786,7 @@ sub MSwitch_fhemwebFn($$$$) {
else { } else { }
} }
my $select = index( $affecteddevices, 'FreeCmd', 0 ); my $select = index( $affecteddevices, 'FreeCmd', 0 );
$selected = ""; $selected = "";
if ( $select > -1 ) { $selected = "selected=\"selected\" " } if ( $select > -1 ) { $selected = "selected=\"selected\" " }
@ -3684,8 +3813,7 @@ sub MSwitch_fhemwebFn($$$$) {
# #devices details # #devices details
# detailsatz in scalar laden # detailsatz in scalar laden
# my @devicedatails = split(/:/,ReadingsVal($Name, '.Device_Affected_Details', '')); #inhalt decice und cmds # durch komma getrennt # my @devicedatails = split(/:/,ReadingsVal($Name, '.Device_Affected_Details', '')); #inhalt decice und cmds # durch komma getrennt
my %savedetails = MSwitch_makeCmdHash($Name);
my %savedetails = MSwitch_makeCmdHash($Name);
my $detailhtml = ""; my $detailhtml = "";
my @affecteddevices = my @affecteddevices =
split( /,/, ReadingsVal( $Name, '.Device_Affected', 'no_device' ) ); split( /,/, ReadingsVal( $Name, '.Device_Affected', 'no_device' ) );
@ -5205,7 +5333,17 @@ sub MSwitch_fhemwebFn($$$$) {
$ret .= $ret .=
"<table border='$border' class='block wide' id='MSwitchWebAF' nm='$hash->{NAME}'> "<table border='$border' class='block wide' id='MSwitchWebAF' nm='$hash->{NAME}'>
<tr class=\"even\"> <tr class=\"even\">
<td>affected devices :</td> <td>affected devices :
";
#my $savecmds = AttrVal( $Name, 'MSwitch_DeleteCMDs', $deletesavedcmdsstandart );
if ($savecmds ne "nosave" && $cmdfrombase eq "1")
{
$ret .="<br>(all devicecomands saved <input type=\"button\" id=\"del_savecmd\" value=\"reload\">)";
}
$ret .="
</td>
<td></td> <td></td>
<td></td> <td></td>
</tr> </tr>
@ -5898,6 +6036,20 @@ und \"execute \\'cmd1+cmd2\\' only at:\" möglich. <br /><br>Die Variable \$we i
location = location.pathname+\"?detail=" . $Name . "&cmd=set \"+addcsrf(def); location = location.pathname+\"?detail=" . $Name . "&cmd=set \"+addcsrf(def);
}); });
//DELETE CAVECMDS
\$(\"#del_savecmd\").click(function(){
var nm = \$(t).attr(\"nm\");
var def = nm+\" delcmds \";
location = location.pathname+\"?detail=" . $Name . "&cmd=set \"+addcsrf(def);
});
//aplly filter to trigger //aplly filter to trigger
\$(\"#aw_md1\").click(function(){ \$(\"#aw_md1\").click(function(){
var nm = \$(t).attr(\"nm\"); var nm = \$(t).attr(\"nm\");
@ -6060,6 +6212,7 @@ und \"execute \\'cmd1+cmd2\\' only at:\" möglich. <br /><br>Die Variable \$we i
} }
</script>"; </script>";
return "$ret<br>$detailhtml<br>$j1"; return "$ret<br>$detailhtml<br>$j1";
} }
@ -6904,9 +7057,9 @@ sub MSwitch_checkcondition($$$) {
$condition =~ s/\[\$EVT_CMD1_COUNT\]/"\$EVT_CMD1_COUNT"/g; $condition =~ s/\[\$EVT_CMD1_COUNT\]/"\$EVT_CMD1_COUNT"/g;
$condition =~ s/\[\$EVT_CMD2_COUNT\]/"\$EVT_CMD2_COUNT"/g; $condition =~ s/\[\$EVT_CMD2_COUNT\]/"\$EVT_CMD2_COUNT"/g;
MSwitch_LOG( $name, 6, MSwitch_LOG( $name, 5,
"$name: Checkcondition - Parameter condition -> " . $condition ); "$name: Checkcondition - Parameter condition -> " . $condition );
MSwitch_LOG( $name, 6, MSwitch_LOG( $name, 5,
"$name: Checkcondition - Parameter event -> " . $event ); "$name: Checkcondition - Parameter event -> " . $event );
if ( !defined($condition) ) { return 'true'; } if ( !defined($condition) ) { return 'true'; }
@ -7198,13 +7351,13 @@ m/(.*?)(\[\[[a-zA-Z][a-zA-Z0-9_]{0,30}:[a-zA-Z0-9_]{0,30}\]-\[[a-zA-Z][a-zA-Z0-9
$finalstring = $finalstring =
"if (" . $condition . "){\$answer = 'true';} else {\$answer = 'false';} "; "if (" . $condition . "){\$answer = 'true';} else {\$answer = 'false';} ";
MSwitch_LOG( $name, 6, MSwitch_LOG( $name, 5,
"$name: Checkcondition - finalstring -> " . $finalstring ); "$name: Checkcondition - finalstring -> " . $finalstring );
#MSwitch_LOG( $name, 0,"name $name "); #MSwitch_LOG( $name, 0,"name $name ");
my $ret = eval $finalstring; my $ret = eval $finalstring;
MSwitch_LOG( $name, 6, "$name: Checkcondition - return -> " . $ret );
if ($@) { if ($@) {
MSwitch_LOG( $name, 1, "$name ERROR: $@ " . __LINE__ ); MSwitch_LOG( $name, 1, "$name ERROR: $@ " . __LINE__ );
MSwitch_LOG( $name, 1, "$name $finalstring " . __LINE__ ); MSwitch_LOG( $name, 1, "$name $finalstring " . __LINE__ );
@ -7212,7 +7365,7 @@ m/(.*?)(\[\[[a-zA-Z][a-zA-Z0-9_]{0,30}:[a-zA-Z0-9_]{0,30}\]-\[[a-zA-Z][a-zA-Z0-9
return 'false'; return 'false';
} }
MSwitch_LOG( $name, 6, "$name: Checkcondition - return -> " . $ret );
my $test = ReadingsVal( $name, 'last_event', 'undef' ); my $test = ReadingsVal( $name, 'last_event', 'undef' );
$hash->{helper}{conditioncheck} = $finalstring; $hash->{helper}{conditioncheck} = $finalstring;
@ -7241,9 +7394,21 @@ sub MSwitch_Checkcond_state($$) {
$condition =~ s/\[//; $condition =~ s/\[//;
$condition =~ s/\]//; $condition =~ s/\]//;
my @reading = split( /:/, $condition ); my @reading = split( /:/, $condition );
my $return = "ReadingsVal('$reading[0]', '$reading[1]', '00:00:00')";
my $test = ReadingsVal( $reading[0], $reading[1], 'undef' );
my $return;
my $test;
if ($reading[2] eq "d") {
$test = ReadingsNum( $reading[0], $reading[1], 'undef' );
$return = "ReadingsNum('$reading[0]', '$reading[1]', 'undef')"; #00:00:00
}
else
{
$test = ReadingsVal( $reading[0], $reading[1], 'undef' );
$return = "ReadingsVal('$reading[0]', '$reading[1]', 'undef')"; #00:00:00
}
MSwitch_LOG( $name, 6, "$name: MSwitch_Checkcond_state OUT -> " . $return ); MSwitch_LOG( $name, 6, "$name: MSwitch_Checkcond_state OUT -> " . $return );
return $return; return $return;
@ -9286,7 +9451,7 @@ sub MSwitch_check_setmagic_i($$) {
my ( $hash, $msg ) = @_; my ( $hash, $msg ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
# setmagic ersetzun # setmagic ersetzung
MSwitch_LOG( $name, 5, "vor freecmd: " . $msg ); MSwitch_LOG( $name, 5, "vor freecmd: " . $msg );
my $x = 0; my $x = 0;
while ( $msg =~ m/(.*)\[(.*)\:(.*)\:i\](.*)/ ) { while ( $msg =~ m/(.*)\[(.*)\:(.*)\:i\](.*)/ ) {
@ -9296,6 +9461,17 @@ sub MSwitch_check_setmagic_i($$) {
$msg = $1 . $setmagic . $4; $msg = $1 . $setmagic . $4;
} }
$x = 0;
while ( $msg =~ m/(.*)\[(.*)\:(.*)\:d\:i\](.*)/ ) {
$x++; # notausstieg notausstieg
last if $x > 20; # notausstieg notausstieg
my $setmagic = ReadingsNum( $2, $3, 0 );
$msg = $1 . $setmagic . $4;
}
MSwitch_LOG( $name, 5, "nach freecmd: " . $msg ); MSwitch_LOG( $name, 5, "nach freecmd: " . $msg );
return $msg; return $msg;
} }
@ -9334,6 +9510,27 @@ sub MSwitch_setconfig($$) {
} }
#####################################
sub MSwitch_del_savedcmds($) {
my ($hash) = @_;
my $name = $hash->{NAME};
my $savecmds = AttrVal( $name, 'MSwitch_DeleteCMDs', $deletesavedcmdsstandart );
if (exists $hash->{helper}{last_devicecmd_save} && $hash->{helper}{last_devicecmd_save} < (time-$deletesavedcmds) && $savecmds ne "manually" )
{
delete( $hash->{helper}{devicecmds1} );
delete( $hash->{helper}{last_devicecmd_save} );
}
}
################################# #################################
1; 1;