From 007f413cda1372eef0db141decc6b2caedb5246c Mon Sep 17 00:00:00 2001 From: pahenning Date: Tue, 6 Mar 2012 16:30:04 +0000 Subject: [PATCH] Some fixes git-svn-id: https://fhem.svn.sourceforge.net/svnroot/fhem/trunk/fhem@1322 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- contrib/1-Wire/00_OWX.pm | 14 +++++++----- contrib/1-Wire/21_OWAD.pm | 20 ++++++++++++----- contrib/1-Wire/21_OWID.pm | 13 ++++++----- contrib/1-Wire/21_OWTEMP.pm | 45 +++++++++++++++++++++++++------------ 4 files changed, 63 insertions(+), 29 deletions(-) diff --git a/contrib/1-Wire/00_OWX.pm b/contrib/1-Wire/00_OWX.pm index 0bc1e040f..eec1118f5 100644 --- a/contrib/1-Wire/00_OWX.pm +++ b/contrib/1-Wire/00_OWX.pm @@ -6,20 +6,21 @@ # via an active DS2480/DS2490/DS9097U bus master interface or # via a passive DS9097 interface # -# Version 1.04 - March, 2012 +# Version 1.05 - March, 2012 # # Prof. Dr. Peter A. Henning, 2012 # # Setup interface as: +# # define OWX # # where may be replaced by any name string # is a serial (USB) device # -# get alarms => find alarmed 1-Wire devices -# get devices => find all 1-Wire devices +# get alarms => find alarmed 1-Wire devices +# get devices => find all 1-Wire devices # -# set interval => set period for temperature conversion and alarm testing +# set interval => set period for temperature conversion and alarm testing # # attr buspower real/parasitic - whether the 1-Wire bus is really powered or # the 1-Wire devices take their power from the data wire (parasitic is default !) @@ -496,7 +497,10 @@ sub OWX_Discover ($) { CommandDefine(undef,"$name OWTEMP DS1820 $owx_rnf"); #-- Family 20 = A/D converter, assume DS2450 as default } elsif( $owx_f eq "20" ){ - CommandDefine(undef,"$name OWAD DS2450 $owx_rnf"); + CommandDefine(undef,"$name OWAD DS2450 $owx_rnf"); + #-- Family 10 = Temperature sensor, assume DS1820 as default + }elsif( $owx_f eq "22" ){ + CommandDefine(undef,"$name OWTEMP DS1822 $owx_rnf"); #-- All unknown families are ID only } else { CommandDefine(undef,"$name OWID $owx_f $owx_rnf"); diff --git a/contrib/1-Wire/21_OWAD.pm b/contrib/1-Wire/21_OWAD.pm index 46dbbd36a..1b52697f5 100644 --- a/contrib/1-Wire/21_OWAD.pm +++ b/contrib/1-Wire/21_OWAD.pm @@ -14,9 +14,10 @@ # # Prof. Dr. Peter A. Henning, 2012 # -# Version 1.04 - March, 2012 +# Version 1.05 - March, 2012 # # Setup bus device in fhem.cfg as +# # define OWAD [] [interval] # # where may be replaced by any name string @@ -27,6 +28,15 @@ # without Family ID, e.g. A2D90D000800 # [interval] is an optional query interval in seconds # +# get id => FAM_ID.ROM_ID.CRC +# get present => 1 if device present, 0 if not +# get interval => query interval +# get reading => measurement for all channels +# get alarm => alarm measurement settings for all channels +# get status => alarm and i/o status for all channels +# +# set interval => set period for measurement +# # Additional attributes are defined in fhem.cfg per channel, where =A,B,C,D # # attr Name = a name for the channel @@ -152,7 +162,7 @@ sub OWAD_Define ($$) { # e.g.: define flow OWAD 525715020000 300 my @a = split("[ \t][ \t]*", $def); - my ($name,$model,$id,$interval,$scale,$ret); + my ($name,$model,$fam,$id,$crc,$interval,$scale,$ret); #-- default $name = $a[0]; @@ -182,7 +192,7 @@ sub OWAD_Define ($$) { #-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY" # YY must be determined from id - my $crc = sprintf("%02x",OWX_CRC("20.".$id."00")); + $crc = sprintf("%02x",OWX_CRC("20.".$id."00")); #-- Define device internals $hash->{INTERVAL} = $interval; @@ -589,8 +599,8 @@ sub OWAD_Set($@) { #-- set new timer interval if($key eq "interval") { # check value - return "OWAD: Set with short interval, must be > 10" - if(int($value) < 10); + return "OWAD: Set with short interval, must be > 1" + if(int($value) < 1); # update timer $hash->{INTERVAL} = $value; RemoveInternalTimer($hash); diff --git a/contrib/1-Wire/21_OWID.pm b/contrib/1-Wire/21_OWID.pm index 7f1ce5594..fdd2354df 100644 --- a/contrib/1-Wire/21_OWID.pm +++ b/contrib/1-Wire/21_OWID.pm @@ -12,9 +12,10 @@ # # Prof. Dr. Peter A. Henning, 2012 # -# Version 1.04 - March, 2012 +# Version 1.05 - March, 2012 # # Setup bus device in fhem.cfg as +# # define OWID # # where may be replaced by any name string @@ -24,7 +25,9 @@ # is a 12 character (6 byte) 1-Wire ROM ID # without Family ID, e.g. A2D90D000800 # -# Additional attributes are defined in fhem.cfg as +# get id => FAM_ID.ROM_ID.CRC +# get present => 1 if device present, 0 if not +# # ######################################################################################## # @@ -55,7 +58,7 @@ sub Log($$); #-- declare variables my %gets = ( "present" => "", - "id" => "" + "id" => "" ); my %sets = (); my %updates = (); @@ -99,7 +102,7 @@ sub OWID_Define ($$) { #-- define OWID my @a = split("[ \t][ \t]*", $def); - my ($name,$fam,$id,$ret); + my ($name,$fam,$id,$crc,$ret); #-- default $name = $a[0]; @@ -123,7 +126,7 @@ sub OWID_Define ($$) { #-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY" # YY must be determined from id - my $crc = sprintf("%02x",OWX_CRC($fam.".".$id."00")); + $crc = sprintf("%02x",OWX_CRC($fam.".".$id."00")); #-- Define device internals $hash->{ROM_ID} = $fam.".".$id.$crc; diff --git a/contrib/1-Wire/21_OWTEMP.pm b/contrib/1-Wire/21_OWTEMP.pm index 279f04c30..295eca97a 100644 --- a/contrib/1-Wire/21_OWTEMP.pm +++ b/contrib/1-Wire/21_OWTEMP.pm @@ -16,19 +16,31 @@ # Martin Fischer, 2011 # Prof. Dr. Peter A. Henning, 2012 # -# Version 1.04 - March, 2012 +# Version 1.05 - March, 2012 # # Setup bus device in fhem.cfg as +# # define OWTEMP [] [interval] # # where may be replaced by any name string # # is a 1-Wire device type. If omitted, we assume this to be an # DS1820 temperature sensor +# Currently allowed values are DS1820, DS1822 # is a 12 character (6 byte) 1-Wire ROM ID # without Family ID, e.g. A2D90D000800 # [interval] is an optional query interval in seconds # +# get id => FAM_ID.ROM_ID.CRC +# get present => 1 if device present, 0 if not +# get interval => query interval +# get temperature => temperature measurement +# get alarm => alarm temperature settings +# +# set interval => set period for measurement +# set tempLow => lower alarm temperature setting +# set tempHigh => higher alarm temperature setting +# # Additional attributes are defined in fhem.cfg as # # attr tempOffset = a temperature offset added to the temperature reading @@ -130,7 +142,7 @@ sub OWTEMP_Define ($$) { # e.g.: define flow OWTEMP 525715020000 300 my @a = split("[ \t][ \t]*", $def); - my ($name,$model,$id,$interval,$ret); + my ($name,$model,$fam,$id,$crc,$interval,$ret); my $tn = TimeNow(); #-- default @@ -155,8 +167,6 @@ sub OWTEMP_Define ($$) { if(int(@a) == 5); } elsif( $a3 =~ m/^[0-9|a-f]{12}$/ ) { $model = $a[2]; - return "OWTEMP: Wrong 1-Wire device model $model" - if( $model ne "DS1820"); $id = $a[3]; if(int(@a)>=5) { $interval = $a[4]; } Log 1, "OWTEMP: Parameter [alarminterval] is obsolete now - must be set with I/O-Device" @@ -166,15 +176,23 @@ sub OWTEMP_Define ($$) { } #-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY" + # FF = family id follows from the model # YY must be determined from id - my $crc = sprintf("%02x",OWX_CRC("10.".$id."00")); + if( $model eq "DS1820" ){ + $fam = 20; + }elsif( $model eq "DS1822" ){ + $fam = 22; + }else{ + return "OWTEMP: Wrong 1-Wire device model $model"; + } + $crc = sprintf("%02x",OWX_CRC($fam.".".$id."00")); #-- define device internals $hash->{ALARM} = 0; $hash->{INTERVAL} = $interval; - $hash->{ROM_ID} = "10.".$id.$crc; + $hash->{ROM_ID} = $fam.".".$id.$crc; $hash->{OW_ID} = $id; - $hash->{OW_FAMILY} = 10; + $hash->{OW_FAMILY} = $fam; $hash->{PRESENT} = 0; #-- Couple to I/O device @@ -407,7 +425,6 @@ sub OWTEMP_Set($@) { my $ret = undef; my $name = $hash->{NAME}; my $model = $hash->{OW_MODEL}; - my $path = "10.".$hash->{OW_ID}; #-- set warnings if($key eq "tempLow" || $key eq "tempHigh") { @@ -419,8 +436,8 @@ sub OWTEMP_Set($@) { #-- set new timer interval if($key eq "interval") { # check value - return "OWTEMP: Set with short interval, must be > 10" - if(int($value) < 10); + return "OWTEMP: Set with short interval, must be > 1" + if(int($value) < 1); # update timer $hash->{INTERVAL} = $value; RemoveInternalTimer($hash); @@ -516,12 +533,12 @@ sub OWFSTEMP_GetValues($) { my ($hash) = @_; - my $ret = OW::get("/uncached/10.".$hash->{OW_ID}."/temperature"); + my $ret = OW::get("/uncached/".$hash->{OW_ID}.".".$hash->{OW_ID}."/temperature"); if( defined($ret) ) { $hash->{PRESENT} = 1; $owg_temp = $ret; - $owg_th = OW::get("/uncached/10.".$hash->{OW_ID}."/temphigh"); - $owg_tl = OW::get("/uncached/10.".$hash->{OW_ID}."/templow"); + $owg_th = OW::get("/uncached/".$hash->{OW_ID}.".".$hash->{OW_ID}."/temphigh"); + $owg_tl = OW::get("/uncached/".$hash->{OW_ID}.".".$hash->{OW_ID}."/templow"); } else { $hash->{PRESENT} = 0; $owg_temp = 0.0; @@ -548,7 +565,7 @@ sub OWFSTEMP_SetValues($@) { my $key = $a[1]; my $value = $a[2]; - return OW::put("10.".$hash->{OW_ID}."/$key",$value); + return OW::put($hash->{OW_ID}.".".$hash->{OW_ID}."/$key",$value); } ########################################################################################