From 37554bf498294d0e9d85ae249f9dcc66aeb972bc Mon Sep 17 00:00:00 2001 From: borisneubert Date: Sun, 17 Feb 2013 09:59:56 +0000 Subject: [PATCH] fixed issue OWServer_Read from previous revision, fixed set ... reopen, changed CONNECTED/Initialized/DISCONNECTED handling git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@2747 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_OWServer.pm | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/fhem/FHEM/10_OWServer.pm b/fhem/FHEM/10_OWServer.pm index 780f512c5..cfd9e4a99 100644 --- a/fhem/FHEM/10_OWServer.pm +++ b/fhem/FHEM/10_OWServer.pm @@ -169,9 +169,8 @@ OWServer_CloseDev($) my $name = $hash->{NAME}; return unless(defined($hash->{fhem}{owserver})); - DoTrigger($name, "DISCONNECTED"); delete $hash->{fhem}{owserver}; - + readingsSingleUpdate($hash, "state", "DISCONNECTED", 1); } ######################## @@ -183,15 +182,13 @@ OWServer_OpenDev($) OWServer_CloseDev($hash); my $protocol= $hash->{fhem}{protocol}; - Log 4, "$name: Opening connection to OWServer $protocol..."; + Log 3, "$name: Opening connection to OWServer $protocol..."; my $owserver= OWNet->new($protocol); if($owserver) { - Log 4, "$name: Successfully connected to $protocol."; + Log 3, "$name: Successfully connected to $protocol."; $hash->{fhem}{owserver}= $owserver; - DoTrigger($name, "CONNECTED") if($owserver); - $hash->{STATE}= ""; # Allow InitDev to set the state + readingsSingleUpdate($hash, "state", "CONNECTED", 1); my $ret = OWServer_DoInit($hash); - } return $owserver } @@ -223,7 +220,6 @@ OWServer_DoInit($) { my $hash = shift; my $name = $hash->{NAME}; - $hash->{STATE} = "Initialized" if(!$hash->{STATE}); my $owserver= $hash->{fhem}{owserver}; foreach my $reading (sort keys %gets) { @@ -231,7 +227,7 @@ OWServer_DoInit($) readingsBulkUpdate($hash,"$reading",$owserver->read("$reading")); readingsEndUpdate($hash,1); } - + readingsSingleUpdate($hash, "state", "Initialized", 1); OWServer_Autocreate($hash) if($init_done); return undef; } @@ -244,6 +240,8 @@ OWServer_Read($@) return undef unless(defined($hash->{fhem}{owserver})); + my $ret= undef; + if(AttrVal($hash->{NAME},"nonblocking",undef) && $init_done) { $hash->{".path"}= $path; pipe(READER,WRITER); @@ -258,7 +256,7 @@ OWServer_Read($@) InternalTimer(gettimeofday()+20, "OWServer_TimeoutChild", $pid, 0); if($pid == 0) { close READER; - my $ret= OWNet::read($hash->{DEF},$path); + $ret= OWNet::read($hash->{DEF},$path); $ret =~ s/^\s+//g if(defined($ret)); Log 5, "OWServer child read $path: $ret"; delete $hash->{".path"}; @@ -269,17 +267,14 @@ OWServer_Read($@) Log 5, "OWServer child ID for reading '$path' is $pid"; close WRITER; - chomp(my $ret= ); + chomp($ret= ); close READER; } else { - my $ret= $hash->{fhem}{owserver}->read($path); + $ret= $hash->{fhem}{owserver}->read($path); $ret =~ s/^\s+//g if(defined($ret)); } - if(!defined($ret)) { - delete($hash->{fhem}{owserver}); - readingsSingleUpdate($hash,"state","DISCONNECTED",1); - } + if(!defined($ret)) { OWServer_CloseDev($hash); } return $ret; } @@ -466,10 +461,11 @@ OWServer_Set($@) # usage check #my $usage= "Usage: set $name classdef OR set $name reopen"; my $usage= "Unknown argument $a[1], choose one of reopen ".join(" ", sort keys %sets); - return $usage if($a[1] ne "reopen " && !defined($sets{$a[1]})); + return $usage if($a[1] ne "reopen" && !defined($sets{$a[1]})); if((@a == 2) && ($a[1] eq "reopen")) { - return OWServer_OpenDev($hash); + OWServer_OpenDev($hash); + return undef; } elsif(@a == 3) { my $cmd= $a[1]; my $value= $a[2];