Problem att läsa temp under +1 grad, OWFS...

OWFS - One Wire File System är en Linuxmjukvara som stödjer de flesta kommersiellt tillgängliga 1wire-enheterna. OWFS saknar helt möjligheter att presentera data - detta måste göras med tex RRDTool
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
hardinth
Wannabe
Inlägg: 6
Blev medlem: 17 nov 2008, 21:29
Ort: Skutskär

Problem att läsa temp under +1 grad, OWFS...

Inlägg av hardinth »

Hej !

Total noob på både 1-wire, linux osv till för någon vecka sedan då man började hänga här :)
Jag loggar två temperaturer , Inne och ute, har fungerat perfekt flera dagar men nu när det blir kallare ute så märker jag att jag får "läsfel" på utegivaren, har testat att tagit in den och då fungerar den som den skall, hänger jag ut den igen så fungerar det ända tills givaren blir kallare än +1 grad, då får jag ett fel, jag får iofs ett värde också men det loggas inte i databasen, Jag klistrar in lite hur det ser ut nedan så kanske någon kan berätta vad jag gör fel...

Det enda jag kan tänka mig är att den den kanske behöver mer tid på sig att läsa ut temperaturen när sensorn blir kallare/har ett lägre värde, men kan det verkligen vara så? Och vad göra i så fall?

Jag börjar med att köra följande:

modprobe fuse
/opt/owfs/bin/owfs -u --usb_regulartime /var/thh
Jag har även testat det ovan UTAN --usb_regulartime, samma fel då!

rrdtempsensor.pl

Kod: Markera allt

#!/usr/bin/perl
#
# copyright Martin Pot 2006
# http://martybugs.net/electronics/tempsensor/
#
# thanks to Petr for suggestions relating to better handling of failed data reads
#
# rrd_tempsensor.pl

use lib qw(/usr/local/rrdtool-1.2.12/lib/perl);
use RRDs;

# define location of rrdtool databases
my $rrd = '/home/hardinth/RRD_DB';
# define location of images
#my $img = '/home/hardinth/public_html/temps/';
my $img = '/home/hardinth/Desktop/';

# process data for each devices (add/delete as required)
&ProcessSensor("10.87A492010800", "Temperatur Ute");
&ProcessSensor("10.E2BA94010800", "Temperatur Inne Kitchen");
#&ProcessSensor("your device id here", "temp sensor 2");

sub ProcessSensor
{
# process sensor
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
#         $_[1]: sensor description

        # get temperature from sensor
        my $temp = `grep . /var/thh/uncached/$_[0]/temperature | sed -e s/" "//g`;

        # remove eol chars
        chomp($temp);

        print "sensor $_[0]: $temp degrees C\n";

        # if rrdtool database doesn't exist, create it
	# OBS Skapa katalogen RRD_DB manuellt!
        if (! -e "$rrd/owfs-$_[0].rrd")
        {
                print "creating rrd database for temp sensor $_[0]...\n";
                RRDs::create "$rrd/owfs-$_[0].rrd",
                        "-s 300",
                        "DS:temp:GAUGE:600:U:U",
                        "RRA:AVERAGE:0.5:1:2016",
                        "RRA:AVERAGE:0.5:6:1344",
                        "RRA:AVERAGE:0.5:24:2190",
                        "RRA:AVERAGE:0.5:144:3650",
                        "RRA:AVERAGE:0.3:1440:1825";
        }
        if ($ERROR = RRDs::error) { print "$0: failed to create $_[0] database file: $ERROR\n"; }

        # check for error code from temp sensor
        if (int $temp eq 85)
        {
                print "failed to read value from sensor $_[0]\n";
        }
        elsif (int $temp eq 00)
        {
                print "failed to read value from sensor $_[0]\n";
        }
        else
        {
                # insert values into rrd
                RRDs::update "$rrd/owfs-$_[0].rrd",
                        "-t", "temp",
                        "N:$temp";
                if ($ERROR = RRDs::error) { print "$0: failed to insert $_[0] data into rrd: $ERROR\n"; }
        }


        # create graphs for current sensor
        &CreateGraph($_[0], "day", $_[1]);
        &CreateGraph($_[0], "week", $_[1]);
        &CreateGraph($_[0], "month", $_[1]);
        &CreateGraph($_[0], "year", $_[1]);
        &CreateGraph($_[0], "5year", $_[1]);
}                       
                       
sub CreateGraph         
{                       
# creates graph
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
#         $_[1]: interval (ie, day, week, month, year)
#         $_[2]: sensor description
       
        RRDs::graph "$img/temp-$_[0]-$_[1].png",
                "-s -1$_[1]",
                "-t $_[2]",
                "--lazy",
		"-A",
                "-h", "150", "-w", "475",
                "-a", "PNG",
                "-v plutonium.homelinux.com",
                "--slope-mode",
                "DEF:temp=$rrd/owfs-$_[0].rrd:temp:AVERAGE",
                "LINE2:temp#0000FF::",
                "GPRINT:temp:MIN:  Min\\: %6.1lf",
                "GPRINT:temp:MAX:  Max\\: %6.1lf",
                "GPRINT:temp:AVERAGE: Snitt\\: %6.1lf",
                "GPRINT:temp:LAST: Nuvarande\\: %6.1lf grader C\\n";
        if ($ERROR = RRDs::error) { print "$0: unable to generate sensor $_[0] $_[1] graph: $ERROR\n"; }
}
OM jag kör filen ovan i consolen så ser det ut så här när temperaturen sjunker:

Kod: Markera allt

sensor 10.87A492010800: 1.1875 degrees C
sensor 10.E2BA94010800: 20.625 degrees C
root@hardinth-desktop:/home/hardinth# ./rrdtempsensor.pl
sensor 10.87A492010800: 1.0625 degrees C
sensor 10.E2BA94010800: 20.75 degrees C
root@hardinth-desktop:/home/hardinth# ./rrdtempsensor.pl
sensor 10.87A492010800: 1 degrees C
sensor 10.E2BA94010800: 20.75 degrees C

från och med här så börjar det gå fel...
root@hardinth-desktop:/home/hardinth# ./rrdtempsensor.pl
sensor 10.87A492010800: 0.9375 degrees C
failed to read value from sensor 10.87A492010800
sensor 10.E2BA94010800: 20.75 degrees C
root@hardinth-desktop:/home/hardinth# ./rrdtempsensor.pl
sensor 10.87A492010800: 0.75 degrees C
failed to read value from sensor 10.87A492010800
sensor 10.E2BA94010800: 20.75 degrees C
root@hardinth-desktop:/home/hardinth# ./rrdtempsensor.pl
sensor 10.87A492010800: 0.125 degrees C
failed to read value from sensor 10.87A492010800
sensor 10.E2BA94010800: 20.625 degrees C
root@hardinth-desktop:/home/hardinth# ./rrdtempsensor.pl
sensor 10.87A492010800: 0 degrees C
failed to read value from sensor 10.87A492010800
sensor 10.E2BA94010800: 20.6875 degrees C
root@hardinth-desktop:/home/hardinth#
Mvh
Thomas
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5419
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: Problem att läsa temp under +1 grad, OWFS...

Inlägg av elf98 »

Välkommen!

Temperaturen ser ut att kunna hämtas via owfs utan problem. Det är skriptet som sedan strular till det.

Jag är inte någon hejjare på perl men det här ser helknasigt ut:

Kod: Markera allt

elsif (int $temp eq 00)
 {
                print "failed to read value from sensor $_[0]\n";
}
int $temp borde göra om floaten $temp till en int. Troligtvis kapar den bara decimalerna och då blir det "0" kvar. Detta matchas sedan med "eq 00".

0 är inte någon felkod. Jag skulle helt enkelt ta bort koden ovan. I normal drift finns det inte någon anledning att sätta temperaturer mellan 0 och 1 grad som felaktig.

Rätta mig gärna om jag har fel!
Senast redigerad av elf98 den 17 nov 2008, 22:34, redigerad totalt 1 gånger.
Anledning: Förtydligade
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: Problem att läsa temp under +1 grad, OWFS...

Inlägg av Niklas »

Det ska vara:

Kod: Markera allt

elsif (int $temp eq 85)
{
                print "failed to read value from sensor $_[0]\n";
}
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5419
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: Problem att läsa temp under +1 grad, OWFS...

Inlägg av elf98 »

Nej, det står ju på raderna ovanför i skriptet?
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
Niklas
Moderator
Inlägg: 1019
Blev medlem: 22 mar 2008, 21:13
Ort: Stockholm
Kontakt:

Re: Problem att läsa temp under +1 grad, OWFS...

Inlägg av Niklas »

elf98 skrev:Nej, det står ju på raderna ovanför i skriptet?
Se där! Du har helt rätt. Bara ta bort den elseif-delen.
hardinth
Wannabe
Inlägg: 6
Blev medlem: 17 nov 2008, 21:29
Ort: Skutskär

Re: Problem att läsa temp under +1 grad, OWFS...

Inlägg av hardinth »

Japp, att ta bort dom raderna löste ju mina problem, Nu fungerar loggningen även när det är minusgrader =)

//Thomas
Skriv svar