mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-07 19:04:20 +00:00
36_LaCrosseGateway: changed init to get disabled working
git-svn-id: https://svn.fhem.de/fhem/trunk@15461 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
68ec2f09ac
commit
fcd37afd9d
@ -26,6 +26,7 @@ sub LaCrosseGateway_Initialize($) {
|
||||
$hash->{ReadFn} = "LaCrosseGateway_Read";
|
||||
$hash->{WriteFn} = "LaCrosseGateway_Write";
|
||||
$hash->{ReadyFn} = "LaCrosseGateway_Ready";
|
||||
$hash->{NotifyFn} = "LaCrosseGateway_Notify";
|
||||
$hash->{DefFn} = "LaCrosseGateway_Define";
|
||||
$hash->{FingerprintFn} = "LaCrosseGateway_Fingerprint";
|
||||
$hash->{UndefFn} = "LaCrosseGateway_Undef";
|
||||
@ -53,10 +54,24 @@ sub LaCrosseGateway_Initialize($) {
|
||||
sub LaCrosseGateway_Fingerprint($$) {
|
||||
}
|
||||
|
||||
#=======================================================================================
|
||||
sub LaCrosseGateway_Notify($$) {
|
||||
my ($hash, $source_hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
my $sourceName = $source_hash->{NAME};
|
||||
my $events = deviceEvents($source_hash, 1);
|
||||
|
||||
if($sourceName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events})) {
|
||||
LaCrosseGateway_Connect($hash)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#=======================================================================================
|
||||
sub LaCrosseGateway_Define($$) {my ($hash, $def) = @_;
|
||||
my @a = split("[ \t][ \t]*", $def);
|
||||
|
||||
|
||||
if(@a != 3) {
|
||||
my $msg = "wrong syntax: define <name> LaCrosseGateway {none | devicename[\@baudrate] | devicename\@directio | hostname:port}";
|
||||
Log3 undef, 2, $msg;
|
||||
@ -83,9 +98,9 @@ sub LaCrosseGateway_Define($$) {my ($hash, $def) = @_;
|
||||
$dev .= "\@57600" if( $dev !~ m/\@/ && $def !~ m/:/ );
|
||||
$hash->{DeviceName} = $dev;
|
||||
|
||||
my $ret = LaCrosseGateway_Connect($hash);
|
||||
LaCrosseGateway_Connect($hash) if($init_done);
|
||||
|
||||
return $ret;
|
||||
return undef;
|
||||
}
|
||||
|
||||
#=======================================================================================
|
||||
@ -94,16 +109,10 @@ sub LaCrosseGateway_Undef($$) {
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID}));
|
||||
|
||||
foreach my $d (sort keys %defs) {
|
||||
if(defined($defs{$d}) && defined($defs{$d}{IODev}) && $defs{$d}{IODev} == $hash) {
|
||||
my $lev = ($reread_active ? 4 : 2);
|
||||
Log3 $name, $lev, "deleting port for $d";
|
||||
delete $defs{$d}{IODev};
|
||||
}
|
||||
|
||||
if($hash->{STATE} ne "disconnected") {
|
||||
DevIo_CloseDev($hash);
|
||||
}
|
||||
|
||||
DevIo_CloseDev($hash);
|
||||
|
||||
return undef;
|
||||
}
|
||||
@ -523,6 +532,8 @@ sub LaCrosseGateway_DeleteOwnSensorsReadings($) {
|
||||
delete $hash->{READINGS}{"humidity"};
|
||||
delete $hash->{READINGS}{"pressure"};
|
||||
delete $hash->{READINGS}{"gas"};
|
||||
delete $hash->{READINGS}{"debug"};
|
||||
|
||||
}
|
||||
|
||||
#=======================================================================================
|
||||
@ -538,6 +549,7 @@ sub LaCrosseGateway_HandleOwnSensors($$) {
|
||||
my $humidity = undef;
|
||||
my $pressure = undef;
|
||||
my $gas = undef;
|
||||
my $debug = undef;
|
||||
|
||||
if($bytes[2] != 0xFF) {
|
||||
$temperature = ($bytes[2]*256 + $bytes[3] - 1000)/10;
|
||||
@ -548,24 +560,30 @@ sub LaCrosseGateway_HandleOwnSensors($$) {
|
||||
$humidity = $bytes[4];
|
||||
readingsBulkUpdate($hash, "humidity", $humidity);
|
||||
}
|
||||
|
||||
if(@bytes > 15 && $bytes[14] != 0xFF) {
|
||||
|
||||
if(@bytes >= 16 && $bytes[14] != 0xFF) {
|
||||
$pressure = $bytes[14] * 256 + $bytes[15];
|
||||
$pressure /= 10.0 if $pressure > 5000;
|
||||
readingsBulkUpdate($hash, "pressure", $pressure);
|
||||
}
|
||||
|
||||
if(@bytes > 18 && $bytes[16] != 0xFF) {
|
||||
if(@bytes >= 19 && $bytes[16] != 0xFF) {
|
||||
$gas = $bytes[16] * 65536 + $bytes[17] * 256 + $bytes[18];
|
||||
readingsBulkUpdate($hash, "gas", $gas);
|
||||
}
|
||||
|
||||
if(@bytes >= 22 && $bytes[19] != 0xFF) {
|
||||
$debug = $bytes[19] * 65536 + $bytes[20] * 256 + $bytes[21];
|
||||
readingsBulkUpdate($hash, "debug", $debug);
|
||||
}
|
||||
|
||||
readingsEndUpdate($hash, 1);
|
||||
|
||||
delete $hash->{READINGS}{"temperature"} if !$temperature;
|
||||
delete $hash->{READINGS}{"humidity"} if !$humidity;
|
||||
delete $hash->{READINGS}{"pressure"} if !$pressure;
|
||||
|
||||
delete $hash->{READINGS}{"gas"} if !$gas;
|
||||
delete $hash->{READINGS}{"debug"} if !$debug;
|
||||
}
|
||||
|
||||
#=======================================================================================
|
||||
@ -589,7 +607,7 @@ sub LaCrosseGateway_HandleAnalogData($$) {
|
||||
#=======================================================================================
|
||||
sub LaCrosseGateway_Parse($$$$) {
|
||||
my ($hash, $iohash, $name, $msg) = @_;
|
||||
|
||||
|
||||
next if (!$msg || length($msg) < 1);
|
||||
return if ($msg =~ m/^\*\*\*CLEARLOG/);
|
||||
return if ($msg =~ m/[^\x20-\x7E]/);
|
||||
@ -708,9 +726,12 @@ sub LaCrosseGateway_Connect($;$) {
|
||||
my ($hash, $mode) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
DevIo_CloseDev($hash);
|
||||
|
||||
$mode = 0 if!($mode);
|
||||
my $enabled = AttrVal($name, "disable", "0") != "1" && !defined($hash->{helper}{FLASHING});
|
||||
if($enabled) {
|
||||
$hash->{nextOpenDelay} = 2;
|
||||
my $ret = DevIo_OpenDev($hash, $mode, "LaCrosseGateway_DoInit");
|
||||
return $ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user