mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 02:10:32 +00:00
98_MSwitch.pm:change rename/copy/regex for conditions
git-svn-id: https://svn.fhem.de/fhem/trunk@17458 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
710c1a85d4
commit
87f0674999
@ -37,7 +37,7 @@ use POSIX;
|
|||||||
|
|
||||||
# Version #######################################################
|
# Version #######################################################
|
||||||
my $autoupdate = 'on'; #off/on
|
my $autoupdate = 'on'; #off/on
|
||||||
my $version = 'V2.00';
|
my $version = 'V2.01';
|
||||||
my $vupdate = 'V2.00';
|
my $vupdate = 'V2.00';
|
||||||
my $savecount = 30;
|
my $savecount = 30;
|
||||||
my $standartstartdelay =60;
|
my $standartstartdelay =60;
|
||||||
@ -131,6 +131,8 @@ sub MSwitch_Initialize($) {
|
|||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
$hash->{SetFn} = "MSwitch_Set";
|
$hash->{SetFn} = "MSwitch_Set";
|
||||||
$hash->{AsyncOutput} = "MSwitch_AsyncOutput";
|
$hash->{AsyncOutput} = "MSwitch_AsyncOutput";
|
||||||
|
$hash->{RenameFn} = "MSwitch_Rename";
|
||||||
|
$hash->{CopyFn} = "MSwitch_Copy";
|
||||||
$hash->{GetFn} = "MSwitch_Get";
|
$hash->{GetFn} = "MSwitch_Get";
|
||||||
$hash->{DefFn} = "MSwitch_Define";
|
$hash->{DefFn} = "MSwitch_Define";
|
||||||
$hash->{UndefFn} = "MSwitch_Undef";
|
$hash->{UndefFn} = "MSwitch_Undef";
|
||||||
@ -167,6 +169,50 @@ sub MSwitch_Initialize($) {
|
|||||||
. " MSwitch_Wait";
|
. " MSwitch_Wait";
|
||||||
$hash->{FW_addDetailToSummary} = 0;
|
$hash->{FW_addDetailToSummary} = 0;
|
||||||
}
|
}
|
||||||
|
####################
|
||||||
|
sub MSwitch_Rename ($)
|
||||||
|
{
|
||||||
|
my ( $new_name, $old_name ) = @_;
|
||||||
|
my $hash_new = $defs{$new_name};
|
||||||
|
|
||||||
|
#Log3( $new_name, 0,"new_name " .$new_name );
|
||||||
|
#Log3( $new_name, 0,"old_name " .$old_name );
|
||||||
|
|
||||||
|
$modules{MSwitch}{defptr}{$new_name} = $hash_new;
|
||||||
|
|
||||||
|
#foreach my $testdevice ( keys %{ $modules{MSwitch}{defptr} } ) #
|
||||||
|
# {
|
||||||
|
# Log3( $new_name, 0,"dev " .$testdevice );
|
||||||
|
# Log3( $new_name, 0,"devnhash " .$defs{$testdevice} );
|
||||||
|
#}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
####################
|
||||||
|
sub MSwitch_Copy ($)
|
||||||
|
{
|
||||||
|
my ( $old_name, $new_name ) = @_;
|
||||||
|
my $hash = $defs{$new_name};
|
||||||
|
my @areadings =
|
||||||
|
qw(.Device_Affected .Device_Affected_Details .Device_Events .First_init .Trigger_Whitelist .Trigger_cmd_off .Trigger_cmd_on .Trigger_condition .Trigger_off .Trigger_on .Trigger_time .V_Check Exec_cmd Trigger_device Trigger_log last_event state .sysconf Sys_Extension) ; #alle readings
|
||||||
|
|
||||||
|
my $cs = "attr $new_name disable 1";
|
||||||
|
my $errors = AnalyzeCommandChain( undef, $cs );
|
||||||
|
if ( defined($errors) )
|
||||||
|
{
|
||||||
|
Log3( $new_name, 1, "ERROR $cs" );
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $key (@areadings)
|
||||||
|
{
|
||||||
|
my $tmp = ReadingsVal( $old_name, $key, 'undef' );
|
||||||
|
fhem("setreading ".$new_name." ".$key." ".$tmp);
|
||||||
|
}
|
||||||
|
MSwitch_LoadHelper($hash);
|
||||||
|
}
|
||||||
|
|
||||||
####################
|
####################
|
||||||
sub MSwitch_summary($) {
|
sub MSwitch_summary($) {
|
||||||
my ( $wname, $name, $room ) = @_;
|
my ( $wname, $name, $room ) = @_;
|
||||||
@ -524,7 +570,7 @@ sub MSwitch_Get($$@) {
|
|||||||
}
|
}
|
||||||
####################
|
####################
|
||||||
if ( $opt eq 'restore_MSwitch_Data' && $args[0] eq "all_Devices" ) {
|
if ( $opt eq 'restore_MSwitch_Data' && $args[0] eq "all_Devices" ) {
|
||||||
open( BACKUPDATEI, "<MSwitch_backup.cfg" )
|
open( BACKUPDATEI, "<MSwitch_backup_$vupdate.cfg" )
|
||||||
|| return "no Backupfile found\n";
|
|| return "no Backupfile found\n";
|
||||||
close(BACKUPDATEI);
|
close(BACKUPDATEI);
|
||||||
$hash->{helper}{RESTORE_ANSWER} = $hash->{CL};
|
$hash->{helper}{RESTORE_ANSWER} = $hash->{CL};
|
||||||
@ -1361,14 +1407,43 @@ sub MSwitch_Set($@) {
|
|||||||
# teste auf delayinhalt
|
# teste auf delayinhalt
|
||||||
MSwitch_LOG( $name, 5, "$name: teste auf timerstatus -> $testtstate" );
|
MSwitch_LOG( $name, 5, "$name: teste auf timerstatus -> $testtstate" );
|
||||||
$testtstate =~ s/[A-Za-z0-9#\.\-_]//g;
|
$testtstate =~ s/[A-Za-z0-9#\.\-_]//g;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ( $testtstate eq "[:]" || $testtstate eq "[\$:]")
|
if ( $testtstate eq "[:]" || $testtstate eq "[\$:]")
|
||||||
{
|
{
|
||||||
$devicedetails{$timerkey} =eval MSwitch_Checkcond_state( $devicedetails{$timerkey}, $name );
|
|
||||||
|
$devicedetails{$timerkey} =
|
||||||
|
eval MSwitch_Checkcond_state( $devicedetails{$timerkey}, $name );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($devicedetails{$timerkey} =~ m/[0-9]\d:[0-9]\d:[0-9]\d/)
|
||||||
|
{
|
||||||
|
MSwitch_LOG( $name, 5,"$name: format ok ");
|
||||||
|
|
||||||
my $hdel = ( substr( $devicedetails{$timerkey}, 0, 2 ) ) * 3600;
|
my $hdel = ( substr( $devicedetails{$timerkey}, 0, 2 ) ) * 3600;
|
||||||
my $mdel = ( substr( $devicedetails{$timerkey}, 3, 2 ) ) * 60;
|
my $mdel = ( substr( $devicedetails{$timerkey}, 3, 2 ) ) * 60;
|
||||||
my $sdel = ( substr( $devicedetails{$timerkey}, 6, 2 ) ) * 1;
|
my $sdel = ( substr( $devicedetails{$timerkey}, 6, 2 ) ) * 1;
|
||||||
$devicedetails{$timerkey} = $hdel + $mdel + $sdel;
|
$devicedetails{$timerkey} = $hdel + $mdel + $sdel;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MSwitch_LOG( $name, 1,"$name: ERROR Timerformat ".$devicedetails{$timerkey}." fehlerhaf ");
|
||||||
|
$devicedetails{$timerkey} = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MSwitch_LOG( $name, 5, "$name: timerstatus nach test -> ".$devicedetails{$timerkey} );
|
MSwitch_LOG( $name, 5, "$name: timerstatus nach test -> ".$devicedetails{$timerkey} );
|
||||||
|
|
||||||
# suche befehl
|
# suche befehl
|
||||||
@ -2132,9 +2207,9 @@ sub MSwitch_Notify($$) {
|
|||||||
if ( $ar2 eq '' ) { next LOOP31; }
|
if ( $ar2 eq '' ) { next LOOP31; }
|
||||||
my $returncmd = 'undef';
|
my $returncmd = 'undef';
|
||||||
|
|
||||||
MSwitch_LOG( $ownName, 5,"$ownName: aufruf execnotif $_ $ar2, $ar3, $ar4 ");
|
#MSwitch_LOG( $ownName, 0,"$ownName: aufruf execnotif $_ $ar2, $ar3, $ar4 ");
|
||||||
$returncmd = MSwitch_Exec_Notif( $own_hash, $ar2, $ar3, $ar4,$execids );
|
$returncmd = MSwitch_Exec_Notif( $own_hash, $ar2, $ar3, $ar4,$execids );
|
||||||
MSwitch_LOG( $ownName, 5,"$ownName: ergebniss execnotif -> ".$returncmd);
|
#MSwitch_LOG( $ownName, 0,"$ownName: ergebniss execnotif -> ".$returncmd);
|
||||||
|
|
||||||
if ( defined $returncmd && $returncmd ne 'undef' )
|
if ( defined $returncmd && $returncmd ne 'undef' )
|
||||||
{
|
{
|
||||||
@ -2272,6 +2347,11 @@ sub MSwitch_fhemwebFn($$$$) {
|
|||||||
my $j1 = '';
|
my $j1 = '';
|
||||||
my $border =0;
|
my $border =0;
|
||||||
|
|
||||||
|
|
||||||
|
#Log3( $Name, 0,"hash ---> $hash " . __LINE__ );
|
||||||
|
#Log3( $Name, 0,"name ---> $Name " . __LINE__ );
|
||||||
|
|
||||||
|
|
||||||
if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '4' )
|
if ( AttrVal( $Name, 'MSwitch_Debug', "0" ) eq '4' )
|
||||||
{
|
{
|
||||||
$border =1;
|
$border =1;
|
||||||
@ -3529,7 +3609,7 @@ if ( ReadingsVal( $Name, '.change', 'undef') ne "undef")
|
|||||||
foreach my $changes (@change)
|
foreach my $changes (@change)
|
||||||
{
|
{
|
||||||
my @set = split( "#", $changes );
|
my @set = split( "#", $changes );
|
||||||
$out ."<tr class='even'>";
|
$out .="<tr class='even'>";
|
||||||
$out .="<td>";
|
$out .="<td>";
|
||||||
$out .= $set[1];
|
$out .= $set[1];
|
||||||
$out .="</td>";
|
$out .="</td>";
|
||||||
@ -4784,6 +4864,8 @@ sub MSwitch_makeCmdHash($) {
|
|||||||
{
|
{
|
||||||
my $hdel = substr( $detailarray[8], 0, 2 ) * 3600;
|
my $hdel = substr( $detailarray[8], 0, 2 ) * 3600;
|
||||||
my $mdel = substr( $detailarray[8], 3, 2 ) * 60;
|
my $mdel = substr( $detailarray[8], 3, 2 ) * 60;
|
||||||
|
|
||||||
|
|
||||||
my $sdel = substr( $detailarray[8], 6, 2 ) * 1;
|
my $sdel = substr( $detailarray[8], 6, 2 ) * 1;
|
||||||
|
|
||||||
$detailarray[8] = $hdel + $mdel + $sdel;
|
$detailarray[8] = $hdel + $mdel + $sdel;
|
||||||
@ -4989,17 +5071,41 @@ sub MSwitch_Exec_Notif($$$$$) {
|
|||||||
my $key = $device . "_" . $comand;
|
my $key = $device . "_" . $comand;
|
||||||
my $timerkey = $device . "_time" . $comand;
|
my $timerkey = $device . "_time" . $comand;
|
||||||
my $testtstate = $devicedetails{$timerkey};
|
my $testtstate = $devicedetails{$timerkey};
|
||||||
|
|
||||||
|
#MSwitch_LOG( $name, 0,"$name: testtstat1e -> ".$testtstate);
|
||||||
$testtstate =~ s/[A-Za-z0-9#\.\-_]//g;
|
$testtstate =~ s/[A-Za-z0-9#\.\-_]//g;
|
||||||
|
#MSwitch_LOG( $name, 0,"$name:testtstate2 -> ".$testtstate);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ( $testtstate eq "[:]" || $testtstate eq "[\$:]")
|
if ( $testtstate eq "[:]" || $testtstate eq "[\$:]")
|
||||||
{
|
{
|
||||||
|
|
||||||
$devicedetails{$timerkey} =
|
$devicedetails{$timerkey} =
|
||||||
eval MSwitch_Checkcond_state( $devicedetails{$timerkey}, $name );
|
eval MSwitch_Checkcond_state( $devicedetails{$timerkey}, $name );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($devicedetails{$timerkey} =~ m/[0-9]\d:[0-9]\d:[0-9]\d/)
|
||||||
|
{
|
||||||
|
MSwitch_LOG( $name, 5,"$name: format ok ");
|
||||||
|
|
||||||
my $hdel = ( substr( $devicedetails{$timerkey}, 0, 2 ) ) * 3600;
|
my $hdel = ( substr( $devicedetails{$timerkey}, 0, 2 ) ) * 3600;
|
||||||
my $mdel = ( substr( $devicedetails{$timerkey}, 3, 2 ) ) * 60;
|
my $mdel = ( substr( $devicedetails{$timerkey}, 3, 2 ) ) * 60;
|
||||||
my $sdel = ( substr( $devicedetails{$timerkey}, 6, 2 ) ) * 1;
|
my $sdel = ( substr( $devicedetails{$timerkey}, 6, 2 ) ) * 1;
|
||||||
$devicedetails{$timerkey} = $hdel + $mdel + $sdel;
|
$devicedetails{$timerkey} = $hdel + $mdel + $sdel;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MSwitch_LOG( $name, 1,"$name: ERROR Timerformat ".$devicedetails{$timerkey}." fehlerhaf ");
|
||||||
|
$devicedetails{$timerkey} = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
MSwitch_LOG( $name, 5,"$name: timer des devices -> ".$devicedetails{$timerkey});
|
MSwitch_LOG( $name, 5,"$name: timer des devices -> ".$devicedetails{$timerkey});
|
||||||
# teste auf condition
|
# teste auf condition
|
||||||
@ -5316,13 +5422,13 @@ sub MSwitch_Restartcmd($) {
|
|||||||
|
|
||||||
my $hash = $modules{MSwitch}{defptr}{$name};
|
my $hash = $modules{MSwitch}{defptr}{$name};
|
||||||
|
|
||||||
MSwitch_LOG( $name, 5, "$name: msga4 -> ".$msgarray[4]);
|
#MSwitch_LOG( $name, 5, "$name: msga4 -> ".$msgarray[4]);
|
||||||
MSwitch_LOG( $name, 5, "$name: msga5 -> ".$msgarray[5]);
|
#MSwitch_LOG( $name, 5, "$name: msga5 -> ".$msgarray[5]);
|
||||||
MSwitch_LOG( $name, 5, "$name: msga6 -> ".$msgarray[6]);
|
#MSwitch_LOG( $name, 5, "$name: msga6 -> ".$msgarray[6]);
|
||||||
|
|
||||||
MSwitch_LOG( $name, 5, "$name: befehl -> ".$cs);
|
#MSwitch_LOG( $name, 5, "$name: befehl -> ".$cs);
|
||||||
MSwitch_LOG( $name, 5, "$name: event -> ".$event);
|
#MSwitch_LOG( $name, 5, "$name: event -> ".$event);
|
||||||
MSwitch_LOG( $name, 5, "$name: device -> ".$device);
|
#MSwitch_LOG( $name, 5, "$name: device -> ".$device);
|
||||||
#MSwitch_LOG( $name, 5, "$name: befehl -> ".$cs);
|
#MSwitch_LOG( $name, 5, "$name: befehl -> ".$cs);
|
||||||
|
|
||||||
MSwitch_LOG( $name, 5, "$name: erstelle cmdhash -> ".$name);
|
MSwitch_LOG( $name, 5, "$name: erstelle cmdhash -> ".$name);
|
||||||
@ -5723,7 +5829,7 @@ 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]', 'undef')";
|
my $return = "ReadingsVal('$reading[0]', '$reading[1]', '00:00:00')";
|
||||||
my $test = ReadingsVal( $reading[0], $reading[1], 'undef' );
|
my $test = ReadingsVal( $reading[0], $reading[1], 'undef' );
|
||||||
|
|
||||||
MSwitch_LOG( $name, 5, "$name: MSwitch_Checkcond_state OUT -> ".$return );
|
MSwitch_LOG( $name, 5, "$name: MSwitch_Checkcond_state OUT -> ".$return );
|
||||||
@ -5855,7 +5961,7 @@ sub MSwitch_Createtimer($) {
|
|||||||
my $Name = $hash->{NAME};
|
my $Name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
MSwitch_LOG( $Name, 5,"crete timer");
|
MSwitch_LOG( $Name, 5,"create timer");
|
||||||
|
|
||||||
|
|
||||||
# keine timer vorhenden
|
# keine timer vorhenden
|
||||||
@ -5865,7 +5971,9 @@ sub MSwitch_Createtimer($) {
|
|||||||
$condition =~ s/#\[dp\]/:/g;
|
$condition =~ s/#\[dp\]/:/g;
|
||||||
|
|
||||||
my $x =0;
|
my $x =0;
|
||||||
while ( $condition =~ m/(.*)\[(.*[^0-9]{2})\:(.*[^0-9]{2})\](.*)/ )
|
# (.*)\[(.*[a-zA-Z].*)\:(.*)\](.*)
|
||||||
|
#while ( $condition =~ m/(.*)\[(.*[^0-9]{2})\:(.*[^0-9]{2})\](.*)/ )
|
||||||
|
while ( $condition =~ m/(.*)\[(.*[a-zA-Z].*)\:(.*)\](.*)/ )
|
||||||
{
|
{
|
||||||
$x++; # notausstieg notausstieg
|
$x++; # notausstieg notausstieg
|
||||||
last if $x > 20; # notausstieg notausstieg
|
last if $x > 20; # notausstieg notausstieg
|
||||||
@ -5891,7 +5999,7 @@ sub MSwitch_Createtimer($) {
|
|||||||
$key = 'ly';
|
$key = 'ly';
|
||||||
$condition =~ s/$key//ig;
|
$condition =~ s/$key//ig;
|
||||||
|
|
||||||
my $x =0;
|
$x =0;
|
||||||
# achtung perl 5.30
|
# achtung perl 5.30
|
||||||
while ($condition =~ m/(.*).\{(.*)\}.(.*)/ )
|
while ($condition =~ m/(.*).\{(.*)\}.(.*)/ )
|
||||||
{
|
{
|
||||||
@ -6595,7 +6703,7 @@ sub MSwitch_backup_this($) {
|
|||||||
my $Name = $hash->{NAME};
|
my $Name = $hash->{NAME};
|
||||||
my $Zeilen = ("");
|
my $Zeilen = ("");
|
||||||
my $Zeilen1 ="";
|
my $Zeilen1 ="";
|
||||||
open( BACKUPDATEI, "<MSwitch_backup_$vupdate.cfg" ) || return "no Backupfile found\n";
|
open( BACKUPDATEI, "<MSwitch_backup_$vupdate.cfg" ) || return "no Backupfile found!\n";
|
||||||
while (<BACKUPDATEI>)
|
while (<BACKUPDATEI>)
|
||||||
{
|
{
|
||||||
$Zeilen = $Zeilen . $_;
|
$Zeilen = $Zeilen . $_;
|
||||||
@ -6756,7 +6864,7 @@ sub MSwitch_backup_all($) {
|
|||||||
my $Name = $hash->{NAME};
|
my $Name = $hash->{NAME};
|
||||||
my $answer = '';
|
my $answer = '';
|
||||||
my $Zeilen = ("");
|
my $Zeilen = ("");
|
||||||
open( BACKUPDATEI, "<MSwitch_backup_$vupdate.cfg" )|| return "$Name|no Backupfile found\n";
|
open( BACKUPDATEI, "<MSwitch_backup_$vupdate.cfg" )|| return "$Name|no Backupfile MSwitch_backup_$vupdate.cfg found\n";
|
||||||
while (<BACKUPDATEI>)
|
while (<BACKUPDATEI>)
|
||||||
{
|
{
|
||||||
$Zeilen = $Zeilen . $_;
|
$Zeilen = $Zeilen . $_;
|
||||||
@ -6764,6 +6872,8 @@ sub MSwitch_backup_all($) {
|
|||||||
close(BACKUPDATEI);
|
close(BACKUPDATEI);
|
||||||
foreach my $testdevice ( keys %{ $modules{MSwitch}{defptr} } ) #
|
foreach my $testdevice ( keys %{ $modules{MSwitch}{defptr} } ) #
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Log3( $testdevice, 0, "MSWITCH-RESTORE: ".$testdevice );
|
||||||
my $devhash = $defs{$testdevice};
|
my $devhash = $defs{$testdevice};
|
||||||
$Zeilen =~ s/\n/[NL]/g;
|
$Zeilen =~ s/\n/[NL]/g;
|
||||||
|
|
||||||
@ -6803,6 +6913,7 @@ sub MSwitch_backup_all($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MSwitch_LoadHelper($devhash);
|
MSwitch_LoadHelper($devhash);
|
||||||
|
Log3( $testdevice, 0, "MSWITCH-RESTORE ready -> ".$testdevice );
|
||||||
$answer = $answer . "MSwitch $testdevice restored.\n";
|
$answer = $answer . "MSwitch $testdevice restored.\n";
|
||||||
}
|
}
|
||||||
return $answer;
|
return $answer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user