2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-13 03:05:34 +00:00

feature: get time, fwrev, set reopen for CM11 (Boris 2009-09-12)

git-svn-id: https://svn.fhem.de/fhem/trunk@436 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
borisneubert 2009-09-12 18:57:18 +00:00
parent 191afd3861
commit 66f1ff3f22
3 changed files with 105 additions and 6 deletions

View File

@ -524,6 +524,7 @@
- bugfix: Another "rereadcfg" bugfix
- feature: Update to the current (1.27) CUL FHT interface
- feature: suppress inplausible readings from USF1000
- feature: get time, fwrev, set reopen for CM11 (Boris 2009-09-12)
- bugfix: FHZ_ReadAnswer bugfix for Windows (Klaus, 20.8.2009)
- feature: CUL: device acces code reorganized, TCP/IP support added
- feature: Pachube module from Axel

View File

@ -71,11 +71,12 @@ my %functions_rcv = qw(0000 ALL_UNITS_OFF
my %gets = (
"test" => "xxx",
"fwrev" => "xxx",
"time" => "xxx",
);
my %sets = (
"test" => "xxx",
"reopen" => "xxx",
);
@ -92,11 +93,11 @@ CM11_Initialize($)
$hash->{Clients} = ":X10:";
$hash->{ReadyFn} = "CM11_Ready";
# Normal Devices
# Normal Device
$hash->{DefFn} = "CM11_Define";
$hash->{UndefFn} = "CM11_Undef";
# $hash->{GetFn} = "CM11_Get";
# $hash->{SetFn} = "CM11_Set";
$hash->{GetFn} = "CM11_Get";
$hash->{SetFn} = "CM11_Set";
$hash->{StateFn} = "CM11_SetState";
$hash->{AttrList}= "do_not_notify:1,0 dummy:1,0 " .
"model:CM11 loglevel:0,1,2,3,4,5,6";
@ -141,6 +142,31 @@ CM11_DoInit($$$)
}
#####################################
sub
CM11_Reopen($)
{
my ($hash) = @_;
my $dev = $hash->{DeviceName};
$hash->{PortObj}->close();
Log 1, "Device $dev closed";
for(;;) {
sleep(5);
if($^O =~ m/Win/) {
$hash->{PortObj} = new Win32::SerialPort($dev);
}else{
$hash->{PortObj} = new Device::SerialPort($dev);
}
if($hash->{PortObj}) {
Log 1, "Device $dev reopened";
$hash->{FD} = $hash->{PortObj}->FILENO if($^O !~ m/Win/);
CM11_DoInit($hash->{NAME}, $hash->{ttytype}, $hash->{PortObj});
return;
}
}
}
#####################################
sub
CM11_Define($$)
@ -149,7 +175,7 @@ CM11_Define($$)
my @a = split("[ \t][ \t]*", $def);
my $po;
return "wrong syntax: define <name> FHZ devicename ".
return "wrong syntax: define <name> CM11 devicename ".
"[normal|strangetty] [mobile]" if(@a < 3 || @a > 5);
@ -385,6 +411,75 @@ CM11_GetInterfaceStatus($)
return if(!defined($buf)); # read error
$statusmsg.= $buf;
}
return $statusmsg;
}
#####################################
sub CM11_Get($@)
{
my ($hash, @a) = @_;
return "CM11: get needs only one parameter" if(@a != 2);
return "Unknown argument $a[1], choose one of " . join(",", sort keys %gets)
if(!defined($gets{$a[1]}));
my ($fn, $arg) = split(" ", $gets{$a[1]});
my $v = join(" ", @a);
my $name = $hash->{NAME};
Log GetLogLevel($name,2), "CM11 get $v";
my $statusmsg= CM11_GetInterfaceStatus($hash);
if(!defined($statusmsg)) {
$v= "error";
Log 2, "CM11 error, device is irresponsive."
} else {
my $msg= unpack("H*", $statusmsg);
Log 5, "CM11 got ". $msg;
if($a[1] eq "fwrev") {
$v = hex(substr($msg, 14, 1));
} elsif($a[1] eq "time") {
my $sec= hex(substr($msg, 4, 2));
my $hour= hex(substr($msg, 8, 2))*2;
my $min= hex(substr($msg, 6, 2));
if($min>59) {
$min-= 60;
$hour++;
}
my $day= hex(substr($msg, 10, 2));
$day+= 256 if(hex(substr($msg, 12, 1)) & 0xf);
$v= sprintf("%d.%02d:%02d:%02d", $day,$hour,$min,$sec);
}
}
$hash->{READINGS}{$a[1]}{VAL} = $v;
$hash->{READINGS}{$a[1]}{TIME} = TimeNow();
return "$a[0] $a[1] => $v";
}
#####################################
sub
CM11_Set($@)
{
my ($hash, @a) = @_;
return "CM11: set needs one parameter" if(@a != 2);
return "Unknown argument $a[1], choose one of " . join(" ", sort keys %sets)
if(!defined($sets{$a[1]}));
my ($fn, $arg) = split(" ", $sets{$a[1]});
my $v = join(" ", @a);
my $name = $hash->{NAME};
Log GetLogLevel($name,2), "CM11 set $v";
if($a[1] eq "reopen") {
CM11_Reopen($hash);
}
return undef;
}
#####################################

View File

@ -420,3 +420,6 @@
- Fri Aug 08 2009 (Boris)
- 09_USF1000.pm: suppress inplausible readings from USF1000
- Sat Sep 12 2009 (Boris)
- 00_CM11.pm: feature: get time, fwrev, set reopen for CM11 (Boris 2009-09-12)