########################################### package OWTemp; # Mike Schilli, 2005 (m@perlmeister.com) ########################################### use Log::Log4perl qw(:easy); use OW; ########################################### sub new { ########################################### my($class, @options) = @_; my $self = { type => "DS18S20", }; bless $self, $class; OW::init('u'); $self->{devices} = [$self->discover()]; return $self; } ########################################### sub temperatures { ########################################### my($self) = @_; my @temperatures = (); for my $dev ( @{ $self->{devices} } ) { my($val) = owread("$dev/temperature"); $val =~ s/\s//g; push @temperatures, [$dev, $val]; } return @temperatures; } ########################################### sub DESTROY { ########################################### OW::finish(); } ########################################### sub discover { ########################################### my($self) = @_; my @found = (); for my $entry (owread("")) { DEBUG "Found top entry '$entry'"; next if $entry !~ /^\d/; my($type) = owread("$entry/type"); DEBUG "Found type '$type'"; next if defined $type and $type ne $self->{type}; push @found, $entry; } return @found; } ########################################### sub owread { ########################################### my($entry) = @_; my @found = (); my $result = OW::get($entry) or LOGDIE "Failed to read $entry"; DEBUG "owread result='$result'"; for my $entry (split /,/, $result) { $entry =~ s#/$##; push @found, $entry; } return @found; } 1;