105 931 läst · 236 svar
106k läst
236 svar
Mätning med 1-wire
Sprang på nästa problem när man kör delta beräkningen.
Första värdet blir ju "värde - 0 = deltavärde", då första värdet som sparats från 1-wire räknaren är ganska högt så drunknar resten av delta värdena i en graf. Har först lite olika metoder att försöka ignorera den första raden, dock utan att lyckas. Sen slog det mig att om man sätter noll-värdet till att vara det första värdet så visar den iaf noll i delta (bättre än 345345). Men hur får jag till det?
Jag tänker mig nåt sånt här (men får det inte att funka):
Första värdet blir ju "värde - 0 = deltavärde", då första värdet som sparats från 1-wire räknaren är ganska högt så drunknar resten av delta värdena i en graf. Har först lite olika metoder att försöka ignorera den första raden, dock utan att lyckas. Sen slog det mig att om man sätter noll-värdet till att vara det första värdet så visar den iaf noll i delta (bättre än 345345). Men hur får jag till det?
Jag tänker mig nåt sånt här (men får det inte att funka):
kod skrev:
Medlem
· Västernorrland
· 2 053 inlägg
Du behöver inte göra en sub-select (dvs en select med en select i) för att få fram första värdet.gadu^ skrev:Sprang på nästa problem när man kör delta beräkningen.
Första värdet blir ju "värde - 0 = deltavärde", då första värdet som sparats från 1-wire räknaren är ganska högt så drunknar resten av delta värdena i en graf. Har först lite olika metoder att försöka ignorera den första raden, dock utan att lyckas. Sen slog det mig att om man sätter noll-värdet till att vara det första värdet så visar den iaf noll i delta (bättre än 345345). Men hur får jag till det?
Jag tänker mig nåt sånt här (men får det inte att funka):
Gör en SELECT INTO vilket läser ut EN rads valfria kolumner in namngivna variabler.
Eftersom det är viktigt att en SELECT INTO bara får en enda rad i sitt resultat så är "LIMIT 1" mycket bra i sammanhanget.
Lägg märke till LIMIT-delen på sista raden. Den begränsar dess resultat till 10000 rader med början från rad 2. Rad 1 tas ju om hand redan i första satsen.förslag skrev:
Medlem
· Västerbotten
· 3 321 inlägg
Skulle detta fungera?
Göra en egen RS232 > 1-wire adapter enligt denna instrunktion:
http://madmodders.se/moddningar/digitemp/index.html
För att sedan ansluta denna adaptar till datorn via en USB > RS232-omvandlare
Kommer jag att kunna läsa av värdena med t.ex. Logtemp? Eller måste den kommunicera via en "riktig" serieport?
Göra en egen RS232 > 1-wire adapter enligt denna instrunktion:
http://madmodders.se/moddningar/digitemp/index.html
För att sedan ansluta denna adaptar till datorn via en USB > RS232-omvandlare
Kommer jag att kunna läsa av värdena med t.ex. Logtemp? Eller måste den kommunicera via en "riktig" serieport?
Varför inte köpa ett USB till 1-wire interface direkt ?
Medlem
· Västerbotten
· 3 321 inlägg
Det är roligt att löda?
Rikard Ågren skrev:
Jag kör med den.
Funkar mycket bra med både temp och räknare...
Det var nån gräns på samples, översteg man den så behövde nån Sales Manager godkänna ordern. Funkade för mig med godkännandet, men jag använde min jobbmail (jobbar på ett stort svenskt företag).Patrik_N skrev:
Sent from my E15i using Tapatalk
Jo, jag gjorde samma sak. Tog jobbmailen. Jobbar visserligen på ett mindre kommunalägt företag, men 2+2 borde jag ju kunna snylta till mig tycker jaggadu^ skrev:
Jag har hört noll och inget sen jag la sample-ordern.
Nya funderingar. Tänkte lyxa till det lite o köra php, och för att kunna göra annat i php som jag är mer bekant med
.
Får följande resultat:
Array ( [xsize] => 697 [ysize] => 301 [calcpr] => Array ( ) ) Array ( [xsize] => 697 [ysize] => 301 [calcpr] => Array ( ) )
Bör väl inte vara tomt i arrayet. RRDn är ok eftersom perlscriptet jag kör på cron gör fina grafer.
Koden:
<?php
$rrd = "/home/patrik/rrddata/outside_temp.rrd"; // S�kv�gen till rrd-databasen.
$max_month = date('m'); // Max antal m�nader att r�kna upp. Nuvarande m�nad anges som max.
$year = date('Y'); // Vilket �r. Nuvarande �r anges. Om 2010 anges s� �ndras max_month till 12 f�r att f� hela �ret.
$width = "600";
$height = "200";
$now = date('Y-m-d');
for ($i = 1; $i <= $max_month; $i++) { //k�r loopen tills nuvarande m�nad har r�knats upp.
$month = $i; // Vilken m�nad. (Skapas av loopen)
$starttime1 = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year)); // datum i lite mer l�sbart format
$endtime1 = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year)); // datum i lite mer l�sbart format
$starttime = strtotime(date('Y-m-d', mktime(0, 0, 0, $month, 1, $year))); // Startdatum i Unixtid
$endtime = strtotime(date('Y-m-t', mktime(0, 0, 0, $month, 1, $year))); // Slutdatum i Unixtid
$filename = "temp_" . $starttime1 . "_" . $endtime1 . ".png";
$opts = array(
"--imgformat", "PNG",
"--start", "$starttime",
"--end", "$endtime",
"--width", "$width",
"--height", "$height",
"--slope-mode",
"--title",
"Temp $starttime1 till $endtime1",
"--vertical-label", "°C",
"--lower", "0",
"DEF:temp=$rrdutsidetemp:AVERAGE",
"LINE1:temp#000000:Ute",
"GPRINT:temp:LAST:Temperatur %0.2lf\\n",
"GPRINT:temp:MIN:Min\: %0.2lf%s",
"GPRINT:temp:AVERAGE:Medel\: %0.2lf%s",
"GPRINT:temp:MAX:Max\: %0.2lf%s\\n",
"COMMENT:Tid\: $now"
);
$ret = rrd_graph($filename, $opts, count($opts));
if ($ret === false) {
$err = rrd_error();
echo "rrd_graph() FEL: $err\n";
}
else {
print_r($ret);
}
}
?>
.
Får följande resultat:
Array ( [xsize] => 697 [ysize] => 301 [calcpr] => Array ( ) ) Array ( [xsize] => 697 [ysize] => 301 [calcpr] => Array ( ) )
Bör väl inte vara tomt i arrayet. RRDn är ok eftersom perlscriptet jag kör på cron gör fina grafer.
Koden:
<?php
$rrd = "/home/patrik/rrddata/outside_temp.rrd"; // S�kv�gen till rrd-databasen.
$max_month = date('m'); // Max antal m�nader att r�kna upp. Nuvarande m�nad anges som max.
$year = date('Y'); // Vilket �r. Nuvarande �r anges. Om 2010 anges s� �ndras max_month till 12 f�r att f� hela �ret.
$width = "600";
$height = "200";
$now = date('Y-m-d');
for ($i = 1; $i <= $max_month; $i++) { //k�r loopen tills nuvarande m�nad har r�knats upp.
$month = $i; // Vilken m�nad. (Skapas av loopen)
$starttime1 = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year)); // datum i lite mer l�sbart format
$endtime1 = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year)); // datum i lite mer l�sbart format
$starttime = strtotime(date('Y-m-d', mktime(0, 0, 0, $month, 1, $year))); // Startdatum i Unixtid
$endtime = strtotime(date('Y-m-t', mktime(0, 0, 0, $month, 1, $year))); // Slutdatum i Unixtid
$filename = "temp_" . $starttime1 . "_" . $endtime1 . ".png";
$opts = array(
"--imgformat", "PNG",
"--start", "$starttime",
"--end", "$endtime",
"--width", "$width",
"--height", "$height",
"--slope-mode",
"--title",
"Temp $starttime1 till $endtime1",
"--vertical-label", "°C",
"--lower", "0",
"DEF:temp=$rrdutsidetemp:AVERAGE",
"LINE1:temp#000000:Ute",
"GPRINT:temp:LAST:Temperatur %0.2lf\\n",
"GPRINT:temp:MIN:Min\: %0.2lf%s",
"GPRINT:temp:AVERAGE:Medel\: %0.2lf%s",
"GPRINT:temp:MAX:Max\: %0.2lf%s\\n",
"COMMENT:Tid\: $now"
);
$ret = rrd_graph($filename, $opts, count($opts));
if ($ret === false) {
$err = rrd_error();
echo "rrd_graph() FEL: $err\n";
}
else {
print_r($ret);
}
}
?>
Redigerat: