From c374ccec9c51525c969fd5b8f61a8da4b5aeb9df Mon Sep 17 00:00:00 2001 From: neubert Date: Mon, 11 Dec 2017 11:58:29 +0000 Subject: [PATCH] 10_OWServer: get /uncached/alarm, update docs git-svn-id: https://svn.fhem.de/fhem/trunk@15589 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_OWServer.pm | 44 ++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/fhem/FHEM/10_OWServer.pm b/fhem/FHEM/10_OWServer.pm index befee6ee2..921219235 100644 --- a/fhem/FHEM/10_OWServer.pm +++ b/fhem/FHEM/10_OWServer.pm @@ -75,6 +75,7 @@ use vars qw(%gets %sets); "/settings/timeout/w1" => "", "/settings/units/pressure_scale" => "", "/settings/units/temperature_scale" => "", + "/uncached/alarm" => "", ); %sets = ( @@ -135,9 +136,9 @@ OWServer_Define($$) my $protocol = $a[2]; $hash->{fhem}{protocol}= $protocol; - + $hash->{NOTIFYDEV} = "global"; - + if( $init_done ) { OWServer_OpenDev($hash); @@ -267,7 +268,7 @@ OWServer_Read($@) my $r= defined($ret) ? $ret : ""; Log3 $hash, 5, "OWServer child read $path: $r"; delete $hash->{".path"}; - print WRITER $ret if(defined($ret)); + print WRITER $ret if(defined($ret)); close WRITER; # see http://forum.fhem.de/index.php?t=tree&goto=94670 # changed from @@ -388,7 +389,7 @@ OWServer_Autocreate($) return undef if(AttrVal($acdname,"disable",undef)); } return undef unless($acdname ne ""); - + my $owserver= $hash->{fhem}{owserver}; my @dir= split(",", $owserver->dir("/")); @@ -398,7 +399,7 @@ OWServer_Autocreate($) foreach my $d (keys %defs) { next if($defs{$d}{TYPE} !~ /^OW(Device|AD|ID|MULTI|COUNT|LCD|SWITCH|THERM)$/); if(defined($defs{$d}{fhem}) && defined($defs{$d}{fhem}{address})) { - $defined{$defs{$d}{fhem}{address}} = $d; + $defined{$defs{$d}{fhem}{address}} = $d; } elsif(defined($defs{$d}{OW_ID}) and defined($defs{$d}{OW_FAMILY})) { $defined{"$defs{$d}{OW_FAMILY}.$defs{$d}{OW_ID}"} = $d; } @@ -486,6 +487,21 @@ OWServer_Get($@) $ret .= sprintf("%-*s %d\n",$wide,$str,($stat) ? $stat : 0); } return $ret; + } elsif($cmd eq "/uncached/alarm") { + # Oliver Vallant, 2017-04-17 + my $path= $cmd; + my @devices= split(",", $owserver->dir($path)); + my $ret; + for my $device (@devices) { + my $name= ""; + my $address= substr($device, rindex($device, "/")+1); + my $type= $owserver->read($device . "/type"); + foreach my $p (keys %defs) { + $name= concatc(", ", $name, $p) if($defs{$p}{TYPE} eq "OWDevice" and $defs{$p}{fhem}{address} eq $address); + } + $ret .= sprintf("%s %10s %s\n", $address, $type, $name); + } + return $ret; } elsif(defined($gets{$cmd})) { my $ret; my $value= $owserver->read($cmd); @@ -555,10 +571,12 @@ OWServer_Set($@) You need OWNet.pm from owfs.org on Sourceforge, which is normally deployed with FHEM. As at 2012-12-23 the OWNet module on CPAN has an issue which renders it useless for remote connections.

- The ow* version 2.9 packages provided with Debian Jessie in combination with OWNet.pm as deployed with FHEM have issues. - For Debian Jessie please either unzip + The ow* version 2.9 packages provided with Debian Jessie in combination with OWNet.pm as deployed with FHEM have issues. + For Debian Jessie please either unzip owfs_2.8p17-1_all.zip and install - owserver, dependencies and what else you require with dpkg -i <package>.deb or use the latest OWNet.pm from Sourceforge. + owserver, dependencies and what else you require with dpkg -i <package>.deb or use the latest OWNet.pm from Sourceforge. +

+ The ow* version 3.1 packages provided with Debian Stretch are fine.

A typical working configuration file /etc/owfs.conf looks as follows:

@@ -654,6 +672,7 @@ OWServer_Set($@)

  • /settings/timeout/w1
  • /settings/units/pressure_scale
  • /settings/units/temperature_scale
  • +
  • /uncached/alarm
  • For further informations have look on owserver manual). @@ -693,11 +712,11 @@ OWServer_Set($@)

    Definiert eine logische OWServer- Instanz. OWServer ist die Serverkomponente des - 1-Wire Dateisystems. Sie ermöglicht den Zugriff auf + 1-Wire Dateisystems. Sie ermöglicht den Zugriff auf alle 1-Wire- Busteilnehmer eines Systems.

    <protocol> hat das Format <hostname>:<port> Nähere Informationen dazu gibt es in der owserver Dokumentation.

    - Voraussetzung innerhalb von FHEM ist das Modul OWNet.pm von owfs.org, welches bereits mit FHEM ausgeliefert wird. + Voraussetzung innerhalb von FHEM ist das Modul OWNet.pm von owfs.org, 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.

    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. Einen WIKI- Artikel dazu gibt es hier.

    @@ -705,6 +724,8 @@ OWServer_Set($@) owfs_2.8p17-1_all.zip und installiere owserver, Abhängigkeiten und was Du sonst noch brauchst mit dpkg -i <package>.deb, oder benutze die neueste Version von OWNet.pm von Sourceforge.

    + Die ow*-Pakete in der Version 3.1 von Debian Stretch sind in Ordnung. +

    Eine typische funktionierende Konfigurationsdatei /etc/owfs.conf sieht so aus:

    # server uses device /dev/onewire
    @@ -798,6 +819,7 @@ OWServer_Set($@)

  • /settings/timeout/w1
  • /settings/units/pressure_scale
  • /settings/units/temperature_scale
  • +
  • /uncached/alarm
  • Nähere Informationen zu diesen Einstellungen gibt es im owserver- Manual. @@ -818,7 +840,7 @@ OWServer_Set($@)
  • readingFnAttributes

  • - Hinweis: Falls in FHEM trotzdem ungewöhnliche Stillstände auftreten, sollte das Attribut nonblocking wieder deaktiviert werden.
    + Hinweis: Falls in FHEM trotzdem ungewöhnliche Stillstände auftreten, sollte das Attribut nonblocking wieder deaktiviert werden.