###########################################
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;
