mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-08 01:14:19 +00:00
improvements for OWServer:
- autocreate improvements for OWDevice: - internal timer remove from define to avoid multiple timers in case of modify - first call of OWDevice_UpdateValues occurs after global:INITIALIZED to assure polls is set git-svn-id: https://svn.fhem.de/fhem/trunk@4279 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
35a533ed98
commit
0e00872603
@ -1,6 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
- SVN
|
- SVN
|
||||||
|
- change: improvements for OWDevice and OWServer (justme1968)
|
||||||
- feature: new attribute resolution for 1-wire temperature readings
|
- feature: new attribute resolution for 1-wire temperature readings
|
||||||
(justme1968 & Boris)
|
(justme1968 & Boris)
|
||||||
- feature: new layout commands moveto, moveby and relative positioning
|
- feature: new layout commands moveto, moveby and relative positioning
|
||||||
|
@ -130,11 +130,13 @@ OWServer_Define($$)
|
|||||||
|
|
||||||
my $protocol = $a[2];
|
my $protocol = $a[2];
|
||||||
|
|
||||||
OWServer_CloseDev($hash);
|
|
||||||
|
|
||||||
$hash->{fhem}{protocol}= $protocol;
|
$hash->{fhem}{protocol}= $protocol;
|
||||||
|
|
||||||
OWServer_OpenDev($hash);
|
if( $init_done ) {
|
||||||
|
delete $modules{OWServer}{NotifyFn};
|
||||||
|
OWServer_OpenDev($hash);
|
||||||
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +211,10 @@ OWServer_Notify($$)
|
|||||||
delete $modules{OWServer}{NotifyFn};
|
delete $modules{OWServer}{NotifyFn};
|
||||||
delete $hash->{NTFY_ORDER} if($hash->{NTFY_ORDER});
|
delete $hash->{NTFY_ORDER} if($hash->{NTFY_ORDER});
|
||||||
|
|
||||||
OWServer_DoInit($hash);
|
foreach my $d (keys %defs) {
|
||||||
|
next if($defs{$d}{TYPE} ne "OWServer");
|
||||||
|
OWServer_OpenDev($hash);
|
||||||
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
@ -228,7 +233,7 @@ OWServer_DoInit($)
|
|||||||
readingsEndUpdate($hash,1);
|
readingsEndUpdate($hash,1);
|
||||||
}
|
}
|
||||||
readingsSingleUpdate($hash, "state", "Initialized", 1);
|
readingsSingleUpdate($hash, "state", "Initialized", 1);
|
||||||
OWServer_Autocreate($hash) if($init_done);
|
OWServer_Autocreate($hash);
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,11 +357,11 @@ OWServer_Autocreate($)
|
|||||||
my @dir= split(",", $owserver->dir("/"));
|
my @dir= split(",", $owserver->dir("/"));
|
||||||
my @devices= grep { m/^\/[0-9a-f]{2}.[0-9a-f]{12}$/i } @dir;
|
my @devices= grep { m/^\/[0-9a-f]{2}.[0-9a-f]{12}$/i } @dir;
|
||||||
|
|
||||||
my @defined = ();
|
my %defined = ();
|
||||||
foreach my $d (keys %defs) {
|
foreach my $d (keys %defs) {
|
||||||
next if($defs{$d}{TYPE} ne "OWDevice");
|
next if($defs{$d}{TYPE} ne "OWDevice");
|
||||||
if(defined($defs{$d}{fhem}) && defined($defs{$d}{fhem}{address})) {
|
if(defined($defs{$d}{fhem}) && defined($defs{$d}{fhem}{address})) {
|
||||||
push(@defined,$defs{$d}{fhem}{address});
|
$defined{$defs{$d}{fhem}{address}} = $d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -372,31 +377,21 @@ OWServer_Autocreate($)
|
|||||||
if($owtype !~ m/$type/) {
|
if($owtype !~ m/$type/) {
|
||||||
Log3 $name, 2, "$name: Autocreate: type '$type' not defined in familycode '$family'. Please report this!";
|
Log3 $name, 2, "$name: Autocreate: type '$type' not defined in familycode '$family'. Please report this!";
|
||||||
next;
|
next;
|
||||||
|
} elsif( defined($defined{$address}) ) {
|
||||||
|
Log3 $name, 5, "$name address '$address' already defined as '$defined{$address}'";
|
||||||
|
next;
|
||||||
} else {
|
} else {
|
||||||
foreach my $d (keys %defs) {
|
my $id= substr($address,3);
|
||||||
next if($defs{$d}{TYPE} ne "OWDevice");
|
my $devname= $type . "_" . $id;
|
||||||
if(defined($defs{$d}{fhem}) &&
|
Log3 $name, 5, "$name create new device '$devname' for address '$address'";
|
||||||
defined($defs{$d}{fhem}{address}) && $defs{$d}{fhem}{address} eq $address) {
|
my $interval= ($family eq "81") ? "" : " 60";
|
||||||
Log3 $name, 5, "$name address '$address' already defined as '$defs{$d}{NAME}'";
|
my $define= "$devname OWDevice $address" . $interval;
|
||||||
next;
|
my $cmdret;
|
||||||
} else {
|
$cmdret= CommandDefine(undef,$define);
|
||||||
my $id= substr($address,3);
|
if($cmdret) {
|
||||||
my $devname= $type . "_" . $id;
|
Log3 $name, 1, "$name: Autocreate: An error occurred while creating device for address '$address': $cmdret";
|
||||||
if(defined($defs{$devname}) || grep {$_ eq $address} @defined) {
|
} else {
|
||||||
next;
|
$cmdret= CommandAttr(undef,"$devname room OWDevice");
|
||||||
} else {
|
|
||||||
Log3 $name, 5, "$name create new device '$devname' for address '$address'";
|
|
||||||
my $interval= ($family eq "81") ? "" : " 60";
|
|
||||||
my $define= "$devname OWDevice $address" . $interval;
|
|
||||||
my $cmdret;
|
|
||||||
$cmdret= CommandDefine(undef,$define);
|
|
||||||
if($cmdret) {
|
|
||||||
Log3 $name, 1, "$name: Autocreate: An error occurred while creating device for address '$address': $cmdret";
|
|
||||||
} else {
|
|
||||||
$cmdret= CommandAttr(undef,"$devname room OWDevice");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -349,6 +349,7 @@ OWDevice_Initialize($)
|
|||||||
$hash->{GetFn} = "OWDevice_Get";
|
$hash->{GetFn} = "OWDevice_Get";
|
||||||
$hash->{SetFn} = "OWDevice_Set";
|
$hash->{SetFn} = "OWDevice_Set";
|
||||||
$hash->{DefFn} = "OWDevice_Define";
|
$hash->{DefFn} = "OWDevice_Define";
|
||||||
|
$hash->{NotifyFn} = "OWDevice_Notify";
|
||||||
$hash->{UndefFn} = "OWDevice_Undef";
|
$hash->{UndefFn} = "OWDevice_Undef";
|
||||||
$hash->{AttrFn} = "OWDevice_Attr";
|
$hash->{AttrFn} = "OWDevice_Attr";
|
||||||
|
|
||||||
@ -505,6 +506,7 @@ OWDevice_UpdateValues($) {
|
|||||||
readingsBulkUpdate($hash,"state",$state,0);
|
readingsBulkUpdate($hash,"state",$state,0);
|
||||||
readingsEndUpdate($hash,1);
|
readingsEndUpdate($hash,1);
|
||||||
}
|
}
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
InternalTimer(int(gettimeofday())+$hash->{fhem}{interval}, "OWDevice_UpdateValues", $hash, 0)
|
InternalTimer(int(gettimeofday())+$hash->{fhem}{interval}, "OWDevice_UpdateValues", $hash, 0)
|
||||||
if(defined($hash->{fhem}{interval}));
|
if(defined($hash->{fhem}{interval}));
|
||||||
|
|
||||||
@ -664,10 +666,36 @@ OWDevice_Define($$)
|
|||||||
readingsBulkUpdate($hash,"location",$location);
|
readingsBulkUpdate($hash,"location",$location);
|
||||||
readingsEndUpdate($hash,1);
|
readingsEndUpdate($hash,1);
|
||||||
}
|
}
|
||||||
OWDevice_UpdateValues($hash) if(defined($hash->{fhem}{interval}));
|
|
||||||
|
if( $init_done ) {
|
||||||
|
delete $modules{OWDevice}{NotifyFn};
|
||||||
|
OWDevice_UpdateValues($hash) if(defined($hash->{fhem}{interval}));
|
||||||
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
OWDevice_Notify($$)
|
||||||
|
{
|
||||||
|
my ($hash,$dev) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
my $type = $hash->{TYPE};
|
||||||
|
|
||||||
|
return if($dev->{NAME} ne "global" ||
|
||||||
|
!grep(m/^INITIALIZED$/, @{$dev->{CHANGED}}));
|
||||||
|
|
||||||
|
return if($attr{$name} && $attr{$name}{disable});
|
||||||
|
|
||||||
|
delete $modules{OWDevice}{NotifyFn};
|
||||||
|
|
||||||
|
foreach my $d (keys %defs) {
|
||||||
|
next if($defs{$d}{TYPE} ne "OWDevice");
|
||||||
|
OWDevice_UpdateValues($defs{$d}) if(defined($defs{$d}->{fhem}{interval}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
###################################
|
###################################
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user