From 76a5b4f2e079e9f4258e080e081ce636e915c788 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Mon, 10 Feb 2014 19:59:14 +0000 Subject: [PATCH] autocreate/usb: check for symlinks, change DevIo message git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@4876 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_autocreate.pm | 19 ++++++++++++++----- fhem/FHEM/DevIo.pm | 11 +++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/fhem/FHEM/98_autocreate.pm b/fhem/FHEM/98_autocreate.pm index 2bef60a7b..9c7fe2d75 100644 --- a/fhem/FHEM/98_autocreate.pm +++ b/fhem/FHEM/98_autocreate.pm @@ -408,18 +408,27 @@ CommandUsb($$) # Check if it already used foreach my $d (keys %defs) { if($defs{$d}{DeviceName} && - $defs{$d}{DeviceName} =~ m/$dev/ && $defs{$d}{FD}) { - $msg = "already used by the fhem device $d"; - Log3 undef, 4, $msg; $ret .= $msg . "\n"; - goto NEXTDEVICE; + + my $dn = $defs{$d}{DeviceName}; + my $match = ($dn =~ m/$dev/); + if(!$match) { + $dn =~ s/@.*//; + $match = (readlink($dn) =~ m/$dev/) if(-l $dn); + } + + if($match) { + $msg = "already used by the fhem device $d"; + Log3 undef, 4, $msg; $ret .= $msg . "\n"; + goto NEXTDEVICE; + } } } # Open the device my $dname = $thash->{DeviceName}; $dname =~ s,DEVICE,$dir/$dev,g; - my $hash = { NAME=>$name, DeviceName=>$dname }; + my $hash = { NAME=>$name, DeviceName=>$dname, DevioText=>"Probing" }; DevIo_OpenDev($hash, 0, 0); if(!defined($hash->{USBDev})) { DevIo_CloseDev($hash); # remove the ReadyFn loop diff --git a/fhem/FHEM/DevIo.pm b/fhem/FHEM/DevIo.pm index 62e1fabbd..a7f8c5369 100644 --- a/fhem/FHEM/DevIo.pm +++ b/fhem/FHEM/DevIo.pm @@ -104,8 +104,8 @@ DevIo_OpenDev($$$) ($dev, $baudrate) = split("@", $dev); $hash->{PARTIAL} = ""; - Log3 $name, 3, "Opening $name device $dev" - if(!$reopen); + Log3 $name, 3, ($hash->{DevioText} ? $hash->{DevioText} : "Opening"). + " $name device $dev" if(!$reopen); if($dev =~ m/^UNIX:(SEQPACKET|STREAM):(.*)$/) { # FBAHA my ($type, $fname) = ($1, $2); @@ -216,7 +216,8 @@ DevIo_OpenDev($$$) if($baudrate) { $po->reset_error(); - Log3 $name, 3, "Setting $name baudrate to $baudrate"; + Log3 $name, 3, "Setting $name baudrate to $baudrate" + if(!$hash->{DevioText}); $po->baudrate($baudrate); $po->databits(8); $po->parity('none'); @@ -243,14 +244,12 @@ DevIo_OpenDev($$$) } $po->write_settings; - - } if($reopen) { Log3 $name, 1, "$dev reappeared ($name)"; } else { - Log3 $name, 3, "$name device opened"; + Log3 $name, 3, "$name device opened" if(!$hash->{DevioText}); } $hash->{STATE}="opened";