2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 23:09:26 +00:00

Some fixes

git-svn-id: https://svn.fhem.de/fhem/trunk@1322 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
pahenning 2012-03-06 16:30:04 +00:00
parent 24837aac87
commit c79682e4f9
4 changed files with 63 additions and 29 deletions

View File

@ -6,20 +6,21 @@
# via an active DS2480/DS2490/DS9097U bus master interface or # via an active DS2480/DS2490/DS9097U bus master interface or
# via a passive DS9097 interface # via a passive DS9097 interface
# #
# Version 1.04 - March, 2012 # Version 1.05 - March, 2012
# #
# Prof. Dr. Peter A. Henning, 2012 # Prof. Dr. Peter A. Henning, 2012
# #
# Setup interface as: # Setup interface as:
#
# define <name> OWX <device> # define <name> OWX <device>
# #
# where <name> may be replaced by any name string # where <name> may be replaced by any name string
# <device> is a serial (USB) device # <device> is a serial (USB) device
# #
# get alarms => find alarmed 1-Wire devices # get <name> alarms => find alarmed 1-Wire devices
# get devices => find all 1-Wire devices # get <name> devices => find all 1-Wire devices
# #
# set interval => set period for temperature conversion and alarm testing # set <name> interval => set period for temperature conversion and alarm testing
# #
# attr <name> buspower real/parasitic - whether the 1-Wire bus is really powered or # attr <name> 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 !) # 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"); CommandDefine(undef,"$name OWTEMP DS1820 $owx_rnf");
#-- Family 20 = A/D converter, assume DS2450 as default #-- Family 20 = A/D converter, assume DS2450 as default
} elsif( $owx_f eq "20" ){ } 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 #-- All unknown families are ID only
} else { } else {
CommandDefine(undef,"$name OWID $owx_f $owx_rnf"); CommandDefine(undef,"$name OWID $owx_f $owx_rnf");

View File

@ -14,9 +14,10 @@
# #
# Prof. Dr. Peter A. Henning, 2012 # Prof. Dr. Peter A. Henning, 2012
# #
# Version 1.04 - March, 2012 # Version 1.05 - March, 2012
# #
# Setup bus device in fhem.cfg as # Setup bus device in fhem.cfg as
#
# define <name> OWAD [<model>] <ROM_ID> [interval] # define <name> OWAD [<model>] <ROM_ID> [interval]
# #
# where <name> may be replaced by any name string # where <name> may be replaced by any name string
@ -27,6 +28,15 @@
# without Family ID, e.g. A2D90D000800 # without Family ID, e.g. A2D90D000800
# [interval] is an optional query interval in seconds # [interval] is an optional query interval in seconds
# #
# get <name> id => FAM_ID.ROM_ID.CRC
# get <name> present => 1 if device present, 0 if not
# get <name> interval => query interval
# get <name> reading => measurement for all channels
# get <name> alarm => alarm measurement settings for all channels
# get <name> status => alarm and i/o status for all channels
#
# set <name> interval => set period for measurement
#
# Additional attributes are defined in fhem.cfg per channel, where <channel>=A,B,C,D # Additional attributes are defined in fhem.cfg per channel, where <channel>=A,B,C,D
# #
# attr <name> <channel>Name <string> = a name for the channel # attr <name> <channel>Name <string> = a name for the channel
@ -152,7 +162,7 @@ sub OWAD_Define ($$) {
# e.g.: define flow OWAD 525715020000 300 # e.g.: define flow OWAD 525715020000 300
my @a = split("[ \t][ \t]*", $def); my @a = split("[ \t][ \t]*", $def);
my ($name,$model,$id,$interval,$scale,$ret); my ($name,$model,$fam,$id,$crc,$interval,$scale,$ret);
#-- default #-- default
$name = $a[0]; $name = $a[0];
@ -182,7 +192,7 @@ sub OWAD_Define ($$) {
#-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY" #-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY"
# YY must be determined from id # 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 #-- Define device internals
$hash->{INTERVAL} = $interval; $hash->{INTERVAL} = $interval;
@ -589,8 +599,8 @@ sub OWAD_Set($@) {
#-- set new timer interval #-- set new timer interval
if($key eq "interval") { if($key eq "interval") {
# check value # check value
return "OWAD: Set with short interval, must be > 10" return "OWAD: Set with short interval, must be > 1"
if(int($value) < 10); if(int($value) < 1);
# update timer # update timer
$hash->{INTERVAL} = $value; $hash->{INTERVAL} = $value;
RemoveInternalTimer($hash); RemoveInternalTimer($hash);

View File

@ -12,9 +12,10 @@
# #
# Prof. Dr. Peter A. Henning, 2012 # Prof. Dr. Peter A. Henning, 2012
# #
# Version 1.04 - March, 2012 # Version 1.05 - March, 2012
# #
# Setup bus device in fhem.cfg as # Setup bus device in fhem.cfg as
#
# define <name> OWID <FAM_ID> <ROM_ID> # define <name> OWID <FAM_ID> <ROM_ID>
# #
# where <name> may be replaced by any name string # where <name> may be replaced by any name string
@ -24,7 +25,9 @@
# <ROM_ID> is a 12 character (6 byte) 1-Wire ROM ID # <ROM_ID> is a 12 character (6 byte) 1-Wire ROM ID
# without Family ID, e.g. A2D90D000800 # without Family ID, e.g. A2D90D000800
# #
# Additional attributes are defined in fhem.cfg as # get <name> id => FAM_ID.ROM_ID.CRC
# get <name> present => 1 if device present, 0 if not
#
# #
######################################################################################## ########################################################################################
# #
@ -55,7 +58,7 @@ sub Log($$);
#-- declare variables #-- declare variables
my %gets = ( my %gets = (
"present" => "", "present" => "",
"id" => "" "id" => ""
); );
my %sets = (); my %sets = ();
my %updates = (); my %updates = ();
@ -99,7 +102,7 @@ sub OWID_Define ($$) {
#-- define <name> OWID <id> #-- define <name> OWID <id>
my @a = split("[ \t][ \t]*", $def); my @a = split("[ \t][ \t]*", $def);
my ($name,$fam,$id,$ret); my ($name,$fam,$id,$crc,$ret);
#-- default #-- default
$name = $a[0]; $name = $a[0];
@ -123,7 +126,7 @@ sub OWID_Define ($$) {
#-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY" #-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY"
# YY must be determined from id # 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 #-- Define device internals
$hash->{ROM_ID} = $fam.".".$id.$crc; $hash->{ROM_ID} = $fam.".".$id.$crc;

View File

@ -16,19 +16,31 @@
# Martin Fischer, 2011 # Martin Fischer, 2011
# Prof. Dr. Peter A. Henning, 2012 # Prof. Dr. Peter A. Henning, 2012
# #
# Version 1.04 - March, 2012 # Version 1.05 - March, 2012
# #
# Setup bus device in fhem.cfg as # Setup bus device in fhem.cfg as
#
# define <name> OWTEMP [<model>] <ROM_ID> [interval] # define <name> OWTEMP [<model>] <ROM_ID> [interval]
# #
# where <name> may be replaced by any name string # where <name> may be replaced by any name string
# #
# <model> is a 1-Wire device type. If omitted, we assume this to be an # <model> is a 1-Wire device type. If omitted, we assume this to be an
# DS1820 temperature sensor # DS1820 temperature sensor
# Currently allowed values are DS1820, DS1822
# <ROM_ID> is a 12 character (6 byte) 1-Wire ROM ID # <ROM_ID> is a 12 character (6 byte) 1-Wire ROM ID
# without Family ID, e.g. A2D90D000800 # without Family ID, e.g. A2D90D000800
# [interval] is an optional query interval in seconds # [interval] is an optional query interval in seconds
# #
# get <name> id => FAM_ID.ROM_ID.CRC
# get <name> present => 1 if device present, 0 if not
# get <name> interval => query interval
# get <name> temperature => temperature measurement
# get <name> alarm => alarm temperature settings
#
# set <name> interval => set period for measurement
# set <name> tempLow => lower alarm temperature setting
# set <name> tempHigh => higher alarm temperature setting
#
# Additional attributes are defined in fhem.cfg as # Additional attributes are defined in fhem.cfg as
# #
# attr <name> tempOffset <float> = a temperature offset added to the temperature reading # attr <name> tempOffset <float> = a temperature offset added to the temperature reading
@ -130,7 +142,7 @@ sub OWTEMP_Define ($$) {
# e.g.: define flow OWTEMP 525715020000 300 # e.g.: define flow OWTEMP 525715020000 300
my @a = split("[ \t][ \t]*", $def); my @a = split("[ \t][ \t]*", $def);
my ($name,$model,$id,$interval,$ret); my ($name,$model,$fam,$id,$crc,$interval,$ret);
my $tn = TimeNow(); my $tn = TimeNow();
#-- default #-- default
@ -155,8 +167,6 @@ sub OWTEMP_Define ($$) {
if(int(@a) == 5); if(int(@a) == 5);
} elsif( $a3 =~ m/^[0-9|a-f]{12}$/ ) { } elsif( $a3 =~ m/^[0-9|a-f]{12}$/ ) {
$model = $a[2]; $model = $a[2];
return "OWTEMP: Wrong 1-Wire device model $model"
if( $model ne "DS1820");
$id = $a[3]; $id = $a[3];
if(int(@a)>=5) { $interval = $a[4]; } if(int(@a)>=5) { $interval = $a[4]; }
Log 1, "OWTEMP: Parameter [alarminterval] is obsolete now - must be set with I/O-Device" 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" #-- 1-Wire ROM identifier in the form "FF.XXXXXXXXXXXX.YY"
# FF = family id follows from the model
# YY must be determined from id # 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 #-- define device internals
$hash->{ALARM} = 0; $hash->{ALARM} = 0;
$hash->{INTERVAL} = $interval; $hash->{INTERVAL} = $interval;
$hash->{ROM_ID} = "10.".$id.$crc; $hash->{ROM_ID} = $fam.".".$id.$crc;
$hash->{OW_ID} = $id; $hash->{OW_ID} = $id;
$hash->{OW_FAMILY} = 10; $hash->{OW_FAMILY} = $fam;
$hash->{PRESENT} = 0; $hash->{PRESENT} = 0;
#-- Couple to I/O device #-- Couple to I/O device
@ -407,7 +425,6 @@ sub OWTEMP_Set($@) {
my $ret = undef; my $ret = undef;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $model = $hash->{OW_MODEL}; my $model = $hash->{OW_MODEL};
my $path = "10.".$hash->{OW_ID};
#-- set warnings #-- set warnings
if($key eq "tempLow" || $key eq "tempHigh") { if($key eq "tempLow" || $key eq "tempHigh") {
@ -419,8 +436,8 @@ sub OWTEMP_Set($@) {
#-- set new timer interval #-- set new timer interval
if($key eq "interval") { if($key eq "interval") {
# check value # check value
return "OWTEMP: Set with short interval, must be > 10" return "OWTEMP: Set with short interval, must be > 1"
if(int($value) < 10); if(int($value) < 1);
# update timer # update timer
$hash->{INTERVAL} = $value; $hash->{INTERVAL} = $value;
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
@ -516,12 +533,12 @@ sub OWFSTEMP_GetValues($)
{ {
my ($hash) = @_; 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) ) { if( defined($ret) ) {
$hash->{PRESENT} = 1; $hash->{PRESENT} = 1;
$owg_temp = $ret; $owg_temp = $ret;
$owg_th = OW::get("/uncached/10.".$hash->{OW_ID}."/temphigh"); $owg_th = OW::get("/uncached/".$hash->{OW_ID}.".".$hash->{OW_ID}."/temphigh");
$owg_tl = OW::get("/uncached/10.".$hash->{OW_ID}."/templow"); $owg_tl = OW::get("/uncached/".$hash->{OW_ID}.".".$hash->{OW_ID}."/templow");
} else { } else {
$hash->{PRESENT} = 0; $hash->{PRESENT} = 0;
$owg_temp = 0.0; $owg_temp = 0.0;
@ -548,7 +565,7 @@ sub OWFSTEMP_SetValues($@) {
my $key = $a[1]; my $key = $a[1];
my $value = $a[2]; my $value = $a[2];
return OW::put("10.".$hash->{OW_ID}."/$key",$value); return OW::put($hash->{OW_ID}.".".$hash->{OW_ID}."/$key",$value);
} }
######################################################################################## ########################################################################################