2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 12:49:34 +00:00
fhem-mirror/fhem/contrib/betateilchen/98_btdummy.pm
betateilchen a78f078535 :for private debug
git-svn-id: https://svn.fhem.de/fhem/trunk@27350 2b470e98-0d58-463d-a4d8-8e2adae1ed80
2023-03-23 19:41:15 +00:00

120 lines
2.5 KiB
Perl

##############################################
# $Id$
# forked from 98_dummy.pm
#
package FHEM::Automation::btdummy; ##no critic qw(Package)
use strict;
use warnings;
use SetExtensions;
use GPUtils qw(GP_Import);
sub ::btdummy_Initialize { goto &Initialize }
BEGIN {
GP_Import( qw(
attr
AttrVal
InternalTimer
IsDisabled
Log3
readingFnAttributes
readingsSingleUpdate
) )
};
sub Initialize {
my $hash = shift // return;
$hash->{DefFn} = \&Define;
$hash->{SetFn} = \&Set;
$hash->{AttrFn} = \&Attr;
$hash->{AttrList} =
"disable:1,0 ".
"disabledForIntervals:textField-long ".
"onDefineFn:textField-long ".
"readingList:textField-long ".
"setExtensionsEvent:1,0 ".
"setList:textField-long ".
"useSetExtensions:1,0 ".
$readingFnAttributes;
return;
}
sub Set {
my ($hash, @a) = @_;
my $name = shift @a;
return "no set value specified" if(int(@a) < 1);
my $setList = AttrVal($name, "setList", " ");
$setList =~ s/\n/ /g;
if(AttrVal($name,"useSetExtensions",undef)) {
my $a0 = $a[0]; $a0 =~ s/([.?*])/\\$1/g;
if($setList !~ m/\b$a0\b/) {
unshift @a, $name;
return SetExtensions($hash, $setList, @a)
}
SetExtensionsCancel($hash);
} else {
return "Unknown argument ?, choose one of $setList" if($a[0] eq "?");
}
return undef
if($attr{$name} && # Avoid checking it if only STATE is inactive
($attr{$name}{disable} || $attr{$name}{disabledForIntervals}) &&
IsDisabled($name));
my @rl = split(" ", AttrVal($name, "readingList", ""));
my $doRet;
eval {
if(@rl && grep /^$a[0]$/, @rl) {
my $v = shift @a;
readingsSingleUpdate($hash, $v, join(" ",@a), 1);
$doRet = 1;
}
};
return if($doRet);
my $v = join(" ", @a);
Log3 $name, 4, "dummy set $name $v";
$v = $hash->{SetExtensionsCommand}
if($hash->{SetExtensionsCommand} &&
AttrVal($name, "setExtensionsEvent", undef));
readingsSingleUpdate($hash,"state",$v,1);
return undef;
}
sub Define {
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
return "Wrong syntax: use btdefine <name> dummy" if(int(@a) != 2);
return undef;
}
sub Attr {
my @a = @_;
$a[2] = "" if(!defined($a[2]));
$a[3] = "" if(!defined($a[3]));
if($a[2] eq "onDefineFn") {
if($a[0] eq "set"){
$a[3] = "main::$a[3]" if $a[3] !~ m/::/;
return "Please define function $a[3] first!" if !defined &{$a[3]};
InternalTimer(0,$a[3],$a[1],1);
}
return;
}
}
1;