From e973713a8d7e762e162618b657eee45915e810be Mon Sep 17 00:00:00 2001 From: phenning Date: Sat, 4 Nov 2017 20:39:32 +0000 Subject: [PATCH] 00_OWX.pm: Neue Version, bereinigt 11_OWX_SER.pm: Neue Version, bereinigt 11_OWX_TCP.pm: Neue Version, bereinigt 11_OWX_FRM.pm: Neue Version, bereinigt 11_OWX_CCC.pm: Neue Version, bereinigt git-svn-id: https://svn.fhem.de/fhem/trunk@15390 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_OWX.pm | 147 +++++++--------------------------------- fhem/FHEM/11_OWX_CCC.pm | 9 ++- fhem/FHEM/11_OWX_FRM.pm | 18 +++-- fhem/FHEM/11_OWX_SER.pm | 9 ++- fhem/FHEM/11_OWX_TCP.pm | 14 ++-- 5 files changed, 59 insertions(+), 138 deletions(-) diff --git a/fhem/FHEM/00_OWX.pm b/fhem/FHEM/00_OWX.pm index 4b325d0cc..d9d0f293c 100644 --- a/fhem/FHEM/00_OWX.pm +++ b/fhem/FHEM/00_OWX.pm @@ -5,7 +5,7 @@ # * via an active DS2480 bus master interface attached to a TCP/IP-UART device # * via a network-attached CUNO # * via a COC attached to a Raspberry Pi -# * via an Arduino running OneWireFirmata attached to USB +# * via an Arduino running OneWireFirmata # # Prof. Dr. Peter A. Henning # @@ -54,7 +54,7 @@ use vars qw{%owg_family %gets %sets $owx_version $owx_debug}; # 1-Wire devices # http://owfs.sourceforge.net/family.html %owg_family = ( - "01" => ["DS2401/DS1990A","OWID DS2401"], + "01" => ["DS2401/DS2411/DS1990A","OWID DS2401"], "05" => ["DS2405","OWID DS2405"], "09" => ["DS2502","OWID DS2502"], "10" => ["DS18S20/DS1920","OWTHERM DS1820"], @@ -81,21 +81,16 @@ use vars qw{%owg_family %gets %sets $owx_version $owx_debug}; %gets = ( "alarms" => "A", "devices" => "D", - "qstatus" => "Q", "version" => "V" ); #-- These occur in a pulldown menu as settable values for the bus master %sets = ( - "close" => "c", "open" => "o", "closeopen" => "co" ,"reopen" => "R", - "discover" => "C", - "detect" => "T", - "disconnected" => "D", - "process" => "P" + "reopen" => "R" ); #-- some globals needed for the 1-Wire module -$owx_version="7.03"; +$owx_version="7.04"; #-- debugging now verbosity, this is just for backward compatibility $owx_debug=0; @@ -115,13 +110,11 @@ $owx_debug=0; sub OWX_Initialize ($) { my ($hash) = @_; - #-- Provider $hash->{Clients} = ":OWAD:OWCOUNT:OWID:OWLCD:OWMULTI:OWSWITCH:OWTHERM:OWVAR:"; $hash->{WriteFn} = "OWX_Write"; $hash->{ReadFn} = "OWX_Read"; $hash->{ReadyFn} = "OWX_Ready"; - #-- Consumer $hash->{DefFn} = "OWX_Define"; $hash->{UndefFn} = "OWX_Undef"; $hash->{GetFn} = "OWX_Get"; @@ -183,7 +176,7 @@ sub OWX_Define ($$) { $hwdevice = OWX_TCP->new($hash); #-- check if we have an i2c interface attached - }elsif( $dev =~ m|\d\:\d\d| ){ + }elsif( $dev =~ m|^\d\:\d\d| ){ require "$attr{global}{modpath}/FHEM/11_OWX_I2C.pm"; $hwdevice = OWX_I2C->new($hash); @@ -693,24 +686,6 @@ sub OWX_Get($@) { my $res = OWX_Discover($hash); #-- process result return $res - - } elsif( $a[1] eq "qstatus") { - my $qlen = ($hash->{QUEUE} ? scalar(@{$hash->{QUEUE}}) : 0); - my $state = $hash->{STATE}; - my $dev = $hash->{DeviceName}; - my $busy = ($hash->{BUSY})? "BUSY" : "NOT BUSY"; - my $block = ($hash->{BLOCK})? "BLOCKED" : "NOT BLOCKED"; - $hash->{BUSY} = 1; - - - my $rout=''; - my $hash2 = $selectlist{'OWX_WIFI.192.168.0.97:23'}; - my $vc = vec($rout, $hash2->{FD}, 1); - my $res = "OWX: Queue $name: => dev=$dev vc=$vc length=$qlen, state=$state, $busy, $block\n"; - foreach my $diapoint (@{$hash->{QUEUE}}) { - $res .= " => ".$diapoint->{owx_dev}." context ".$diapoint->{context}." expecting ".$diapoint->{numread}." bytes, ".$diapoint->{status}."\n"; - } - return $res; } elsif( $a[1] eq "version") { return $owx_version; @@ -1008,17 +983,10 @@ sub OWX_Ready($) { } return undef; } - - #-- If we are here, we are disconnected - #return DevIo_OpenDev($hash, 1, undef ) if ( $hash->{STATE} eq "disconnected" ); - #return DevIo_OpenDev($hash,1,"main::OWX_Init") if ( $hash->{STATE} eq "disconnected" ); #-- get the interface my $owx = $hash->{OWX}; my $name = $hash->{NAME}; - - #Log3 $name,1,"OWX_Ready called for $name"; - my $time = time(); #-- skip this if delay time is not yet over @@ -1056,60 +1024,15 @@ sub OWX_Set($@) { #-- for the selector: which values are possible return join(" ", sort keys %sets) if(!defined($sets{$a[0]})); - #return "OWX_Set: With unknown argument $a[0], choose one of " . join(" ", sort keys %sets) - # if(!defined($sets{$a[0]})); - - #-- Set closedev - if( $a[0] eq "close" ){ - OWX_WDBGL($name,1,"====> CLOSING DEVICE",main::DevIo_CloseDev($hash)); - $res = 0; - } - - #-- Set opendev - if( $a[0] eq "open" ){ - OWX_WDBGL($name,1,"====> OPENING DEVICE",main::DevIo_OpenDev($hash,0,undef)); - $res = 0; - } - - #-- Set closeopendev - if( $a[0] eq "closeopen" ){ - OWX_WDBGL($name,1,"====> CLOSING DEVICE",main::DevIo_CloseDev($hash)); - OWX_WDBGL($name,1," OPENING DEVICE",main::DevIo_OpenDev($hash, 0, undef)); - } + return "OWX_Set: With unknown argument $a[0], choose one of " . join(" ", sort keys %sets) + if(!defined($sets{$a[0]})); #-- Set reopen if( $a[0] eq "reopen" ){ - OWX_WDBGL($name,1,"====> REOPENING DEVICE",main::DevIo_OpenDev($hash, 1, undef)); + DevIo_OpenDev($hash, 1, undef); $res = 0; } - - #-- Set discover - if( $a[0] eq "discover" ){ - OWX_Discover($hash); - $res = 0; - } - - #-- Set detect - if( $a[0] eq "detect" ){ - my $owx = $hash->{OWX}; - $owx->Detect(); - $res = 0; - } - - if( $a[0] eq "process") { - my $res = OWX_PrQueue("queue:$name"); - #-- process result - return $res - } - - #-- Set reopen - if( $a[0] eq "disconnected" ){ - main::DevIo_Disconnected($hash); - $res = 0; - } - Log3 $name, 3, "OWX_Set $name ".join(" ",@a)." => $res"; - # DoTrigger($name, undef) if($init_done); } ######################################################################################## @@ -1669,7 +1592,7 @@ sub OWX_WDBGL($$$$) { =pod =item helper =item summary to commmunicate with 1-Wire bus devices -=item summary_DE zur Kommunikationm mit 1-Wire Geräten +=item summary_DE zur Kommunikation mit 1-Wire Geräten =begin html @@ -1680,44 +1603,24 @@ sub OWX_WDBGL($$$$) { port or
  • via an active DS2480 bus master interface attached to a TCP/IP-UART interface
  • via a network-attached CUNO or through a COC on the RaspBerry Pi
  • -
  • via an Arduino running OneWireFirmata attached to USB
  • +
  • via an Arduino running OneWireFirmata
  • Internally these interfaces are vastly different, read the corresponding Wiki pages . The passive DS9097 interface is no longer suppoorted.

    -

    Example


    -

    - define OWio1 OWX /dev/ttyUSB1 -
    - define OWio2 OWX COC -
    - define OWio3 OWX FIRMATA:10 -
    -

    -

    Define

    -

    - define <name> OWX <serial-device> or
    - define <name> OWX <tcpip>[:<port>] or
    - # define OWX for TCP/IP-UART interfaces or - define <name> OWX <cuno/coc-device> or
    - define <name> OWX <firmata-device>:<firmata-pin> -

    Define a 1-Wire interface to communicate with a 1-Wire bus.
    -
    -

    +

    To define a 1-Wire interface to communicate with a 1-Wire bus, several possibilities exist:


    @@ -1726,7 +1629,7 @@ sub OWX_WDBGL($$$$) {
  • set <name> reopen -
    re-initializes the 1-Wire bus. +
    re-opens the interface ans re-initializes the 1-Wire bus.

  • @@ -1735,14 +1638,17 @@ sub OWX_WDBGL($$$$) {
    @@ -1759,9 +1665,6 @@ sub OWX_WDBGL($$$$) { and to make an alarm check; if 0 (default) then not
  • attr <name> interval <number>
    time interval in seconds for kicking temperature sensors and checking for alarms, default 300 s
  • -
  • attr <name> IODev -
    assignes a specific FRM-device to OWX when working through an Arduino. - Required only if there is more than one FRM defined.
  • readingFnAttributes
  • =end html diff --git a/fhem/FHEM/11_OWX_CCC.pm b/fhem/FHEM/11_OWX_CCC.pm index b51b5e279..be31d98ba 100644 --- a/fhem/FHEM/11_OWX_CCC.pm +++ b/fhem/FHEM/11_OWX_CCC.pm @@ -26,6 +26,13 @@ # Write # ######################################################################################## +# +# $hash->{DeviceName} = +# $hash->{INTERFACE} = "COC/CUNO"; +# $hash->{HWDEVICE} = +# $hash->{TYPE} = "OWX"; +# +######################################################################################## package OWX_CCC; @@ -44,7 +51,7 @@ sub new($) { return bless { hash => $hash, #-- module version - version => "7.01" + version => "7.04" }, $class; } diff --git a/fhem/FHEM/11_OWX_FRM.pm b/fhem/FHEM/11_OWX_FRM.pm index d30521dc6..4767f3de8 100644 --- a/fhem/FHEM/11_OWX_FRM.pm +++ b/fhem/FHEM/11_OWX_FRM.pm @@ -26,14 +26,20 @@ # firmata_to_device # ######################################################################################## +# +# $hash->{DeviceName} = : +# $hash->{INTERFACE} = "firmata"; +# $hash->{HWDEVICE} = +# $hash->{PIN} = +# $hash->{TYPE} = "OWX"; +# +######################################################################################## package OWX_FRM; use strict; use warnings; -use Data::Dumper; - use Device::Firmata::Constants qw/ :all /; ######################################################################################## @@ -85,21 +91,20 @@ sub Define($) { #main::AssignIoPort($hash); #-- store with OWX device - #$hash->{DeviceName} = $dev; + $hash->{DeviceName} = $a[2]; $hash->{INTERFACE} = "firmata"; $hash->{HWDEVICE} = $fdev; $hash->{PIN} = $pin; $hash->{ASYNCHRONOUS} = 0; #-- module version - $hash->{version} = "7.03"; + $hash->{version} = "7.04"; main::Log3 $hash->{NAME},1,"OWX_FRM::Define warning: version ".$hash->{version}." not identical to OWX version ".$main::owx_version if( $hash->{version} ne $main::owx_version); #-- call low level init function for the device main::InternalTimer(time()+55, "OWX_FRM::Init", $self,0); return undef; - } ######################################################################################## @@ -183,7 +188,8 @@ sub Init() { my $pin = $hash->{PIN}; my $msg; - main::Log 1,"==================> STARTING INIT of 11_OWX_FRM"; + #main::Log 1,"==================> STARTING INIT of 11_OWX_FRM"; + select(undef,undef,undef,0.01); my @args = ($pin); $hash->{IODev} = $main::defs{$hash->{HWDEVICE}}; diff --git a/fhem/FHEM/11_OWX_SER.pm b/fhem/FHEM/11_OWX_SER.pm index 749ebbb3e..d8876c2b4 100644 --- a/fhem/FHEM/11_OWX_SER.pm +++ b/fhem/FHEM/11_OWX_SER.pm @@ -30,6 +30,12 @@ # SearchLow # ######################################################################################## +# +# $hash->{DeviceName} = USB-Device +# $hash->{INTERFACE} = "DS2480"; +# $hash->{TYPE} = "OWX"; +# +######################################################################################## package OWX_SER; @@ -83,11 +89,10 @@ sub Define ($) { #-- store with OWX device $hash->{DeviceName} = $dev; - $hash->{INTERFACE} = "serial"; $hash->{ASYNCHRONOUS} = 0; #-- module version - $hash->{version} = "7.01"; + $hash->{version} = "7.04"; main::Log3 $hash->{NAME},1,"OWX_SER::Define warning: version ".$hash->{version}." not identical to OWX version ".$main::owx_version if( $hash->{version} ne $main::owx_version); diff --git a/fhem/FHEM/11_OWX_TCP.pm b/fhem/FHEM/11_OWX_TCP.pm index 73c5a2976..7842b505c 100644 --- a/fhem/FHEM/11_OWX_TCP.pm +++ b/fhem/FHEM/11_OWX_TCP.pm @@ -31,6 +31,12 @@ # SearchLow # ######################################################################################## +# +# $hash->{DeviceName} = :port +# $hash->{INTERFACE} = "DS2480"; +# $hash->{TYPE} = "OWX"; +# +######################################################################################## package OWX_TCP; @@ -86,7 +92,7 @@ sub Define ($) { $hash->{ASYNCHRONOUS} = 0; #-- module version - $hash->{version} = "7.01"; + $hash->{version} = "7.04"; main::Log3 $hash->{NAME},1,"OWX_TCP::Define warning: version ".$hash->{version}." not identical to OWX version "..$main::owx_version if( $hash->{version} ne $main::owx_version ); @@ -201,10 +207,6 @@ sub Complex ($$$$) { my $select; my $res; - #-- get the interface - my $interface = $hash->{INTERFACE}; - my $hwdevice = $hash->{HWDEVICE}; - #-- has match ROM part if( $dev ){ #-- ID of the device @@ -634,8 +636,6 @@ sub Search ($) { my ($self,$mode)=@_; my $hash = $self->{hash}; my $name = $hash->{NAME}; - my $interface = $hash->{INTERFACE}; - my $hwdevice = $hash->{HWDEVICE}; my @owx_fams=();