mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
10_OWServer: added OWNet module version suggestion to define
git-svn-id: https://svn.fhem.de/fhem/trunk@16462 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
2b20235e5b
commit
071c2e7235
@ -1,5 +1,6 @@
|
||||
# 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.
|
||||
- feature: 10_OWServer: added OWNet module version suggestion to define
|
||||
- feature: 49_SSCam: V3.4.0, new commands startTracking, stopTracking for
|
||||
PTZ-Cams with object tracking capability
|
||||
- added: 74_HOMBOT: add commandref summary, code design
|
||||
|
@ -128,18 +128,33 @@ OWServer_Define($$)
|
||||
{
|
||||
my ($hash, $def) = @_;
|
||||
|
||||
my @a = split("[ \t]+", $def, 3);
|
||||
my @a = split("[ \t]+", $def, 4);
|
||||
my $name = $a[0];
|
||||
if(@a < 3) {
|
||||
my $msg = "wrong syntax for $name: define <name> OWServer <protocol>";
|
||||
my $msg = "wrong syntax for $name: define <name> OWServer <protocol> [<version>]";
|
||||
Log 2, $msg;
|
||||
return $msg;
|
||||
}
|
||||
|
||||
my $protocol = $a[2];
|
||||
|
||||
$hash->{fhem}{protocol}= $protocol;
|
||||
|
||||
my $version;
|
||||
if(@a==4) {
|
||||
$version= $a[3];
|
||||
Log3 $hash, 5, "$name: Suggesting OWNet version $version";
|
||||
if(!OWServer_hasOWNet($version)) {
|
||||
Log3 $hash, 2, "$name: Suggested OWNet version $version not available, falling back to default version "
|
||||
. OWNet_version_default;
|
||||
$version= OWNet_version_default;
|
||||
}
|
||||
} else {
|
||||
$version= OWNet_version_default;
|
||||
Log3 $hash, 5, "$name: Tentatively assuming OWNet version $version";
|
||||
}
|
||||
$hash->{OWNET_VERSION}= $version;
|
||||
|
||||
|
||||
$hash->{NOTIFYDEV} = "global";
|
||||
|
||||
$hash->{OWNET_VERSION}= OWServer_loadOWNet($hash);
|
||||
@ -175,8 +190,20 @@ OWServer_Undef($$)
|
||||
}
|
||||
|
||||
#####################################
|
||||
sub OWServer_getOWNetfilename($) {
|
||||
my ($v)= @_;
|
||||
return "lib/OWNet-$v.pm";
|
||||
}
|
||||
|
||||
sub OWServer_hasOWNet($) {
|
||||
my ($v)= @_;
|
||||
my $filename= $attr{global}{modpath}."/FHEM/lib/OWNet-$v.pm";
|
||||
return -r $filename;
|
||||
}
|
||||
|
||||
sub OWServer_loadOWNet($) {
|
||||
|
||||
|
||||
my ($hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
@ -185,9 +212,9 @@ sub OWServer_loadOWNet($) {
|
||||
return $OWNet_version;
|
||||
}
|
||||
|
||||
$OWNet_version= OWNet_version_default;
|
||||
my $libfilename= "lib/OWNet-" . $OWNet_version . "/OWNet.pm";
|
||||
Log3 $name, 5, "$name: loading OWNet version $OWNet_version...";
|
||||
$OWNet_version= $hash->{OWNET_VERSION};
|
||||
my $libfilename= OWServer_getOWNetfilename($OWNet_version);
|
||||
Log3 $name, 5, "$name: Loading OWNet version $OWNet_version...";
|
||||
require $libfilename;
|
||||
Log3 $name, 3, "$name: OWNet version $OWNet_version loaded.";
|
||||
|
||||
@ -197,29 +224,29 @@ sub OWServer_loadOWNet($) {
|
||||
Log3 $name, 3, "$name: owserver version $version found.";
|
||||
$hash->{OWSERVER_VERSION}= $version;
|
||||
if($OWNet_version eq $version) {
|
||||
Log3 $name, 3, "$name: matching OWNet version already loaded.";
|
||||
Log3 $name, 3, "$name: Matching OWNet version already loaded.";
|
||||
return $OWNet_version;
|
||||
}
|
||||
my $libfilename= "lib/OWNet-" . $version . "/OWNet.pm";
|
||||
Log3 $name, 5, "$name: looking for OWNet version $version in $libfilename...";
|
||||
if(-r $attr{global}{modpath}."/FHEM/$libfilename") {
|
||||
my $libfilename= OWServer_getOWNetfilename($version);
|
||||
Log3 $name, 5, "$name: Looking for OWNet version $version in $libfilename...";
|
||||
if(OWServer_hasOWNet($version)) {
|
||||
# we temporarily disable the subroutine warning
|
||||
my $handler= $SIG{__WARN__};
|
||||
$SIG{__WARN__} = sub {
|
||||
my $warning= shift;
|
||||
warn $warning unless $warning =~ /Subroutine .* redefined at/;
|
||||
};
|
||||
Log3 $name, 5, "$name: loading OWNet version $version...";
|
||||
Log3 $name, 5, "$name: Loading OWNet version $version...";
|
||||
require $libfilename;
|
||||
$SIG{__WARN__}= $handler;
|
||||
$OWNet_version= $version;
|
||||
Log3 $name, 3, "$name: OWNet version $OWNet_version loaded.";
|
||||
return $OWNet_version;
|
||||
} else {
|
||||
Log3 $name, 3, "$name: no matching OWNet version found, using default OWNet version $OWNet_version.";
|
||||
Log3 $name, 3, "$name: No matching OWNet version found, using OWNet version $OWNet_version.";
|
||||
}
|
||||
} else {
|
||||
Log3 $name, 2, "$name: could not connect to owserver, using default OWNet version $OWNet_version";
|
||||
Log3 $name, 2, "$name: Could not connect to owserver, using OWNet version $OWNet_version";
|
||||
return $OWNet_version;
|
||||
}
|
||||
# we should not get here
|
||||
@ -616,7 +643,7 @@ OWServer_Set($@)
|
||||
<a name="OWServerdefine"></a>
|
||||
<b>Define</b>
|
||||
<ul>
|
||||
<code>define <name> OWServer <protocol></code>
|
||||
<code>define <name> OWServer <protocol> [<version>]</code>
|
||||
<br><br>
|
||||
|
||||
Defines a logical OWServer device which connects to an owserver.
|
||||
@ -631,9 +658,21 @@ OWServer_Set($@)
|
||||
<a href="http://owfs.cvs.sourceforge.net/viewvc/owfs/owfs/module/ownet/perl5/OWNet/lib/OWNet.pm">OWNet.pm from Sourceforge</a>
|
||||
to connect to the owserver.
|
||||
Currently, OWNet modules for versions 2.8p17 and 3.1p5 are deployed with FHEM.
|
||||
You can manually add more versions by extracting OWNet.pm from
|
||||
<a href="https://sourceforge.net/projects/owfs/files/owfs/">one of the
|
||||
available versions</a> and saving it as as
|
||||
<code>FHEM/lib/OWNet-<version>.pm</code> in the FHEM directory
|
||||
structure.
|
||||
<p>
|
||||
The first connection to the owserver is made using version 3.1p5 unless
|
||||
you explicitely suggest another version using the optional
|
||||
<code><version></code> parameter. You should suggest a OWNet module
|
||||
version matching your actual owserver version if FHEM hangs after
|
||||
connecting to the owserver.
|
||||
<p>
|
||||
The OWServer device autodetects the owserver version and chooses a matching
|
||||
OWNet module from this list. If no matching OWNet module is found,
|
||||
the default version 3.1p5 is used. The nightmare situation of two
|
||||
OWNet module from the list of available OWNet modules. If no matching OWNet
|
||||
module is found, the initially suggested version is used. The nightmare situation of two
|
||||
OWServer devices connecting to owserver instances with different versions is
|
||||
not handled correctly. The server and module versions are stored in the
|
||||
internals of the OWServer device for your reference.
|
||||
@ -641,12 +680,12 @@ OWServer_Set($@)
|
||||
The ow* version 3.1p5 packages provided with Debian Stretch and
|
||||
the ow* version 2.8p17 packages provided with Debian Jessie are fine.
|
||||
The ow* version 2.9 packages provided with Debian Jessie in combination with OWNet.pm as
|
||||
deployed with FHEM might have issues.
|
||||
deployed with FHEM might have issues (feedback welcome).
|
||||
For Debian Jessie you could unzip
|
||||
<a href="http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463">owfs_2.8p17-1_all.zip</a> and install
|
||||
owserver, dependencies and what else you require with <code>dpkg -i <package>.deb</code>.
|
||||
<p>
|
||||
Please report issues related to versions in the
|
||||
Please report issues and successes related to versions in the
|
||||
<a href="https://forum.fhem.de/index.php/board,26.0.html">1Wire board of the FHEM Forum</a>.
|
||||
<p>
|
||||
A typical working configuration file <code>/etc/owfs.conf</code> looks as follows:<p>
|
||||
@ -672,7 +711,7 @@ OWServer_Set($@)
|
||||
Examples:
|
||||
<ul>
|
||||
<code>define myLocalOWServer OWServer localhost:4304</code><br>
|
||||
<code>define myRemoteOWServer OWServer raspi:4304</code><br>
|
||||
<code>define myRemoteOWServer OWServer raspi:4304 2.8p17</code><br>
|
||||
</ul>
|
||||
<br><br>
|
||||
Notice: if you get no devices add both <code>localhost</code> and the FQDN of your owserver as server directives
|
||||
@ -779,23 +818,57 @@ OWServer_Set($@)
|
||||
<a name="OWServerdefine"></a>
|
||||
<b>Definition</b>
|
||||
<ul>
|
||||
<code>define <name> OWServer <protocol></code>
|
||||
<code>define <name> OWServer <protocol> [<version>]</code>
|
||||
<br><br>
|
||||
|
||||
Definiert eine logische OWServer- Instanz. OWServer ist die Serverkomponente des
|
||||
Definiert eine logische OWServer-Instanz, die sich mit einem owserver
|
||||
verbindet. owserver ist die Serverkomponente des
|
||||
<a href="http://owfs.org">1-Wire Dateisystems</a>. Sie ermöglicht den Zugriff auf
|
||||
alle 1-Wire- Busteilnehmer eines Systems.<br><br>
|
||||
<protocol> hat das Format <hostname>:<port> Nähere Informationen dazu gibt es in der <a href="http://owfs.org/index.php?page=owserver_protocol">owserver Dokumentation</a>.
|
||||
<br><br>
|
||||
Voraussetzung innerhalb von FHEM ist das Modul <a href="http://owfs.cvs.sourceforge.net/viewvc/owfs/owfs/module/ownet/perl5/OWNet/lib/OWNet.pm">OWNet.pm von owfs.org</a>, welches bereits mit FHEM ausgeliefert wird.
|
||||
Das auf CPAN erhältliche OWNet- Modul beinhaltet seit dem 23.12.2012 einen Fehler, der es für Fernzugriffe unbrauchbar macht.<p>
|
||||
Auf dem Computer, an dem der 1-Wire- Bus angeschlossen ist, muss die Software "owserver" installiert sein. Zusätzlich sollte auf diesem Rechner die Konfigurationsdatei "owfs.conf" eingesehen bzw. angepasst werden. <a href="http://www.fhemwiki.de/wiki/OWServer_%26_OWDevice#Tipps_und_Tricks"> Einen WIKI- Artikel dazu gibt es hier.</a>
|
||||
<br><br>
|
||||
Die ow*-Pakete in der Version 2.9 von Debian Jessie haben Probleme. Bitte entpacke für Debian Jessie entweder
|
||||
<a href="http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463">owfs_2.8p17-1_all.zip</a> und installiere
|
||||
owserver, Abhängigkeiten und was Du sonst noch brauchst mit <code>dpkg -i <package>.deb</code>, oder benutze die neueste Version von OWNet.pm von Sourceforge.
|
||||
alle 1-Wire-Busteilnehmer eines Systems.
|
||||
<protocol> hat das Format <hostname>:<port>.
|
||||
Nähere Informationen dazu gibt es in
|
||||
der <a href="http://owfs.org/index.php?page=owserver_protocol">owserver Dokumentation</a>.
|
||||
<p>
|
||||
Die ow*-Pakete in der Version 3.1 von Debian Stretch sind in Ordnung.
|
||||
Die OWServer-Instanz verwendet
|
||||
<a href="http://owfs.cvs.sourceforge.net/viewvc/owfs/owfs/module/ownet/perl5/OWNet/lib/OWNet.pm">OWNet.pm von Sourceforge</a>,
|
||||
um sich mit dem owserver zu verbinden.
|
||||
Gegenwärtig werden OWNet-Module für die Versionen 2.8p17 and 3.1p5
|
||||
mit FHEM verteilt. Man kann manuell weitere Versionen hinzufügen,
|
||||
indem man OWNet.pm aus
|
||||
<a href="https://sourceforge.net/projects/owfs/files/owfs/">einer der
|
||||
verfügbaren Versionen</a> extrahiert und als
|
||||
<code>FHEM/lib/OWNet-<version>.pm</code> in der FHEM-Verzeichnisstruktur
|
||||
speichert.
|
||||
<p>
|
||||
Die erste Verbindung mit dem owserver wird mit der Version 3.1p5 aufgebaut,
|
||||
es sei denn, dass man ausdrücklich eine andere Version mit dem
|
||||
optionalen Parameter
|
||||
<code><version></code> vorschlägt. Man sollte eine
|
||||
OWNet-Modulversion vorschlagen, die der tatsächlichen Version von
|
||||
owserver entspricht, falls FHEM nach dem Verbindungsaufbau zum owserver
|
||||
hängt.
|
||||
<p>
|
||||
Die OWServer-Instanz erkennt die Version von owserver automatisch und
|
||||
wählt das passende OWNet-Modul aus der Liste der verfügbaren
|
||||
OWNet-Module aus. Wenn kein passendes OWNet-Modul gefunden wird, wird die
|
||||
ursprünglich vorgeschlagene Version verwendet. Die alptraumhafte Situation
|
||||
mit zwei OWServer-Instanzen, die sich mit owserver-Instanzen in
|
||||
unterschiedlichen Versionen verbinden, wird nicht korrekt gehandhabt.
|
||||
Die Versionen von Server und Modul werden zum Nachschauen in den Internals der
|
||||
OWServer-Instanz gespeichert.
|
||||
<p>
|
||||
Die ow*-Pakete in der Version 3.1p5 bei Debian Stretch und
|
||||
die ow*-Pakete in der Version 2.8p17 bei Debian Jessie sind gut.
|
||||
Die ow*-Pakete in der Version 2.9 bei Debian Jessie in Kombination mit den
|
||||
OWNet-Modulen bei FHEM können Auffälligkeiten zeigen (Rückmeldung
|
||||
willkommen). Für
|
||||
Debian Jessie kann man
|
||||
<a href="http://forum.fhem.de/index.php?action=dlattach;topic=12219.0;attach=2463">owfs_2.8p17-1_all.zip</a>
|
||||
auspacken und owserver, Abhängigkeiten und was man sonst so braucht
|
||||
mittels <code>dpkg -i <package>.deb</code> installieren.
|
||||
<p>
|
||||
Bitte Auffälligkeiten und Erfolgsmeldungen zu Versionen im
|
||||
<a href="https://forum.fhem.de/index.php/board,26.0.html">1Wire-Board des FHEM-Forums</a> berichten.
|
||||
<p>
|
||||
Eine typische funktionierende Konfigurationsdatei <code>/etc/owfs.conf</code> sieht so aus:<p>
|
||||
<code>
|
||||
|
Loading…
x
Reference in New Issue
Block a user