added buslocation for id devices, error in OWServer_Autocreate fixed
git-svn-id: https://fhem.svn.sourceforge.net/svnroot/fhem/trunk/fhem@2507 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -40,23 +40,23 @@ use vars qw(%owfamily);
|
|||||||
# 1-Wire devices (order by family code)
|
# 1-Wire devices (order by family code)
|
||||||
# http://owfs.sourceforge.net/family.html
|
# http://owfs.sourceforge.net/family.html
|
||||||
%owfamily = (
|
%owfamily = (
|
||||||
"01" => qw(DS2401 DS1990A),
|
"01" => "DS2401 DS1990A",
|
||||||
"05" => qw(DS2405),
|
"05" => "DS2405",
|
||||||
"10" => qw(DS18S20 DS1920),
|
"10" => "DS18S20 DS1920",
|
||||||
"12" => qw(DS2406 DS2507),
|
"12" => "DS2406 DS2507",
|
||||||
"1B" => qw(DS2436),
|
"1B" => "DS2436",
|
||||||
"1D" => qw(DS2436),
|
"1D" => "DS2436",
|
||||||
"20" => qw(DS2450),
|
"20" => "DS2450",
|
||||||
"22" => qw(DS1822),
|
"22" => "DS1822",
|
||||||
"24" => qw(DS2415 DS1904),
|
"24" => "DS2415 DS1904",
|
||||||
"26" => qw(DS2438),
|
"26" => "DS2438",
|
||||||
"27" => qw(DS2417),
|
"27" => "DS2417",
|
||||||
"28" => qw(DS18B20),
|
"28" => "DS18B20",
|
||||||
"29" => qw(DS2408),
|
"29" => "DS2408",
|
||||||
"3A" => qw(DS2413),
|
"3A" => "DS2413",
|
||||||
"3B" => qw(DS1825),
|
"3B" => "DS1825",
|
||||||
"81" => qw(DS1420),
|
"81" => "DS1420",
|
||||||
"FF" => qw(LCD),
|
"FF" => "LCD",
|
||||||
);
|
);
|
||||||
|
|
||||||
use vars qw(%gets %sets);
|
use vars qw(%gets %sets);
|
||||||
@@ -104,6 +104,7 @@ OWServer_Initialize($)
|
|||||||
$hash->{WriteFn} = "OWServer_Write";
|
$hash->{WriteFn} = "OWServer_Write";
|
||||||
$hash->{ReadFn} = "OWServer_Read";
|
$hash->{ReadFn} = "OWServer_Read";
|
||||||
$hash->{DirFn} = "OWServer_Dir";
|
$hash->{DirFn} = "OWServer_Dir";
|
||||||
|
$hash->{FindFn} = "OWServer_Find";
|
||||||
$hash->{Clients} = ":OWDevice:";
|
$hash->{Clients} = ":OWDevice:";
|
||||||
|
|
||||||
# Consumer
|
# Consumer
|
||||||
@@ -268,6 +269,25 @@ OWServer_Dir($@)
|
|||||||
return $hash->{fhem}{owserver}->dir($path);
|
return $hash->{fhem}{owserver}->dir($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
sub
|
||||||
|
OWServer_Find($@)
|
||||||
|
{
|
||||||
|
my ($hash,$slave)= @_;
|
||||||
|
my $owserver= $hash->{fhem}{owserver};
|
||||||
|
|
||||||
|
my @dir= split(",",$owserver->dir("/"));
|
||||||
|
my $path= undef;
|
||||||
|
for my $entry (@dir) {
|
||||||
|
$entry = substr($entry,1);
|
||||||
|
next if($entry !~ m/^bus.\d+/m);
|
||||||
|
my @busdir= split(",",$owserver->dir("/$entry"));
|
||||||
|
$path= (grep { m/$slave/i } @busdir) ? $entry : undef;
|
||||||
|
last if($path)
|
||||||
|
}
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
sub
|
sub
|
||||||
OWServer_Autocreate($)
|
OWServer_Autocreate($)
|
||||||
@@ -296,12 +316,13 @@ OWServer_Autocreate($)
|
|||||||
for my $device (@devices) {
|
for my $device (@devices) {
|
||||||
my $address= substr($device,1);
|
my $address= substr($device,1);
|
||||||
my $family= substr($address,0,2);
|
my $family= substr($address,0,2);
|
||||||
if(!defined($owfamily{$family})) {
|
if(!exists $owfamily{$family}) {
|
||||||
Log 2, "$name: Autocreate: unknown familycode '$family' found. Please report this!";
|
Log 2, "$name: Autocreate: unknown familycode '$family' found. Please report this!";
|
||||||
next;
|
next;
|
||||||
} else {
|
} else {
|
||||||
my $type= $owserver->read($device . "/type");
|
my $type= $owserver->read($device . "/type");
|
||||||
if($type !~ m/$owfamily{$family}/) {
|
my $owtype= $owfamily{$family};
|
||||||
|
if($owtype !~ m/$type/) {
|
||||||
Log 2, "$name: Autocreate: type '$type' not defined in familycode '$family'. Please report this!";
|
Log 2, "$name: Autocreate: type '$type' not defined in familycode '$family'. Please report this!";
|
||||||
next;
|
next;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -406,6 +406,9 @@ OWDevice_ReadFromServer($$@)
|
|||||||
if($cmd eq "dir") {
|
if($cmd eq "dir") {
|
||||||
$ret = &{$modules{$iohash->{TYPE}}{DirFn}}($iohash, @a);
|
$ret = &{$modules{$iohash->{TYPE}}{DirFn}}($iohash, @a);
|
||||||
}
|
}
|
||||||
|
if($cmd eq "find") {
|
||||||
|
$ret = &{$modules{$iohash->{TYPE}}{FindFn}}($iohash, @a);
|
||||||
|
}
|
||||||
use strict "refs";
|
use strict "refs";
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
@@ -475,15 +478,18 @@ OWDevice_UpdateValues($) {
|
|||||||
}
|
}
|
||||||
if($alerting) {
|
if($alerting) {
|
||||||
my $dir= OWDevice_ReadFromServer($hash,"dir","/alarm/");
|
my $dir= OWDevice_ReadFromServer($hash,"dir","/alarm/");
|
||||||
my $alarm= ($dir =~ m/$address/) ? 1 :0;
|
my $alarm= (defined($dir) && $dir =~ m/$address/) ? 1 :0;
|
||||||
readingsBulkUpdate($hash,"alarm",$alarm);
|
readingsBulkUpdate($hash,"alarm",$alarm);
|
||||||
$state .= "alarm: $alarm";
|
$state .= "alarm: $alarm";
|
||||||
}
|
}
|
||||||
if($interface eq "id") {
|
if($interface eq "id") {
|
||||||
my $dir= OWDevice_ReadFromServer($hash,"dir","/");
|
my $dir= OWDevice_ReadFromServer($hash,"dir","/");
|
||||||
my $present= ($dir =~ m/$address/) ? 1 :0;
|
my $present= (defined($dir) && $dir =~ m/$address/) ? 1 :0;
|
||||||
readingsBulkUpdate($hash,"present",$present);
|
readingsBulkUpdate($hash,"present",$present);
|
||||||
$state .= "present: $present";
|
$state .= "present: $present";
|
||||||
|
my $bus= OWDevice_ReadFromServer($hash,"find",$address);
|
||||||
|
my $location= (defined($bus)) ? $bus :"absent";
|
||||||
|
readingsBulkUpdate($hash,"location",$location);
|
||||||
}
|
}
|
||||||
$state =~ s/\s+$//;
|
$state =~ s/\s+$//;
|
||||||
readingsBulkUpdate($hash,"state",$state);
|
readingsBulkUpdate($hash,"state",$state);
|
||||||
@@ -622,6 +628,7 @@ OWDevice_Define($$)
|
|||||||
$hash->{fhem}{alerting}= $alerting;
|
$hash->{fhem}{alerting}= $alerting;
|
||||||
Log 5, "$name: alerting: $alerting";
|
Log 5, "$name: alerting: $alerting";
|
||||||
|
|
||||||
|
$hash->{fhem}{bus}= OWDevice_ReadFromServer($hash,"find",$hash->{fhem}{address});
|
||||||
$attr{$name}{model}= OWDevice_ReadValue($hash, "type");
|
$attr{$name}{model}= OWDevice_ReadValue($hash, "type");
|
||||||
if($interface eq "id" && !defined($hash->{fhem}{interval})) {
|
if($interface eq "id" && !defined($hash->{fhem}{interval})) {
|
||||||
my $value= OWDevice_Get($hash, "address");
|
my $value= OWDevice_Get($hash, "address");
|
||||||
|
|||||||
Reference in New Issue
Block a user