Add FHEM modules
This commit is contained in:
parent
cfcc4a270f
commit
36c8a56ade
2 changed files with 1914 additions and 0 deletions
1738
FHEM/00_CUL.pm
Normal file
1738
FHEM/00_CUL.pm
Normal file
File diff suppressed because it is too large
Load diff
176
FHEM/10_Betty.pm
Normal file
176
FHEM/10_Betty.pm
Normal file
|
@ -0,0 +1,176 @@
|
|||
##############################################
|
||||
# $Id: $
|
||||
package main;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use SetExtensions;
|
||||
|
||||
my %sets = (
|
||||
"clear:noArg" => "",
|
||||
"time:noArg" => "",
|
||||
"raw" => "",
|
||||
);
|
||||
|
||||
sub
|
||||
Betty_Initialize($)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
|
||||
|
||||
$hash->{Match} = "^y.*";
|
||||
$hash->{SetFn} = "Betty_Set";
|
||||
$hash->{DefFn} = "Betty_Define";
|
||||
$hash->{ParseFn} = "Betty_Parse";
|
||||
$hash->{AttrList} = "IODev ". $readingFnAttributes;
|
||||
}
|
||||
|
||||
|
||||
|
||||
###################################
|
||||
sub
|
||||
Betty_Set($@) {
|
||||
my ($hash, @a) = @_;
|
||||
|
||||
return "set $hash->{NAME} needs at least one parameter" if(@a < 2);
|
||||
|
||||
my $me = shift @a;
|
||||
my $cmd = shift @a;
|
||||
my $arg = shift @a;
|
||||
my $arg2 = shift @a;
|
||||
|
||||
return join(" ", sort keys %sets) if ($cmd eq "?");
|
||||
|
||||
if ($cmd eq "clear") {
|
||||
my @cH = ($hash);
|
||||
delete $_->{READINGS} foreach (@cH);
|
||||
return undef;
|
||||
|
||||
} elsif ($cmd eq "raw") {
|
||||
my $msg = $arg;
|
||||
#IOWrite( $hash, $msg );
|
||||
IOWrite( $hash, "y", $msg );
|
||||
return undef;
|
||||
|
||||
} elsif ($cmd eq "time") {
|
||||
my $address = $hash->{ADDRESS};
|
||||
|
||||
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
|
||||
|
||||
my $m = sprintf("%02d%02d%02d%02d",$mday,$wday,$month+1, $year-100);
|
||||
my $n = sprintf("%02d%02d%02d",$sec, $min, $hour );
|
||||
|
||||
my $msg = "w".$address;
|
||||
IOWrite( $hash, "y", $msg );
|
||||
$msg = "s0a".$address."0003".$m.$n;
|
||||
IOWrite( $hash, "y", $msg );
|
||||
|
||||
return undef;
|
||||
|
||||
}
|
||||
|
||||
return "Unknown argument $cmd, choose one of ". join(" ", sort keys %sets);
|
||||
}
|
||||
|
||||
|
||||
#############################
|
||||
sub
|
||||
Betty_Define($$)
|
||||
{
|
||||
my ($hash, $def) = @_;
|
||||
my @a = split("[ \t][ \t]*", $def);
|
||||
|
||||
return "wrong syntax: define <name> Betty <address>"
|
||||
if(int(@a) < 2 || int(@a) > 4);
|
||||
|
||||
my $address = uc($a[2]);
|
||||
$hash->{ADDRESS} = $address;
|
||||
$modules{Betty}{defptr}{$address} = $hash;
|
||||
AssignIoPort($hash);
|
||||
|
||||
readingsSingleUpdate($hash, "state", "Initialized", 1);
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
sub
|
||||
Betty_Parse($$)
|
||||
{
|
||||
my ($hash,$msg) = @_;
|
||||
|
||||
my ($len,$dest,$src,$service,$data) = unpack 'x1A2A2A2A2A*',$msg;
|
||||
|
||||
my $def = $modules{Betty}{defptr}{$src};
|
||||
|
||||
if(!$def) {
|
||||
DoTrigger("global","UNDEFINED Betty_$src Betty $src");
|
||||
$def = $modules{Betty}{defptr}{$src};
|
||||
if(!$def) {
|
||||
Log3 $hash, 1, "Betty UNDEFINED, address $src";
|
||||
return "UNDEFINED Betty_$src Betty $src";
|
||||
}
|
||||
}
|
||||
|
||||
$hash = $def;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
# packet_RFenc
|
||||
if ($service eq '04') {
|
||||
my ($addr,$key) = unpack 'A2A2',$data;
|
||||
|
||||
if($hash->{helper}{lastkey } ne $key) {
|
||||
$hash->{helper}{lastkey } = $key;
|
||||
$key = sprintf "%02x", hex($key) & 0x7F;
|
||||
readingsSingleUpdate($hash, "key", $addr."_".$key , 1);
|
||||
}
|
||||
|
||||
|
||||
# packet_test
|
||||
} elsif ($service eq '01') {
|
||||
|
||||
$data = latin1ToUtf8(pack("H*",$data));
|
||||
readingsSingleUpdate($hash, "test", $data , 1);
|
||||
|
||||
# packet_time
|
||||
} elsif ($service eq '03') {
|
||||
|
||||
my ($request) = unpack 'A2',$data;
|
||||
|
||||
if($request eq "FF") {
|
||||
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
|
||||
|
||||
my $m = sprintf("%02d%02d%02d%02d",$mday,$wday,$month+1, $year-100);
|
||||
my $n = sprintf("%02d%02d%02d",$sec, $min, $hour );
|
||||
|
||||
$msg = "s0a".$src."0003".$m.$n;
|
||||
IOWrite( $hash, "y", $msg );
|
||||
}
|
||||
|
||||
} else {
|
||||
Log3 $hash, 4, "Betty UNKNOWN MESSAGE $service: $data";
|
||||
}
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
=item summary devices communicating with the Betty remote control
|
||||
=item summary_DE Anbindung der Betty Fernbedienung
|
||||
=begin html
|
||||
|
||||
<a name="Betty"></a>
|
||||
<h3>Betty</h3>
|
||||
<ul>
|
||||
Todo
|
||||
</ul>
|
||||
|
||||
=end html
|
||||
|
||||
|
||||
=cut
|
Loading…
Reference in a new issue