Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: hss-kobolt - 06.05.09 - klo:22.18
-
Olen rakentanut ubuntu 8.04 (hardy) palvelimen, joka mittaa maidontuottajalle maitosäiliön lämpötilaa tunnin välein, lokitiedostoihin vuorokausittain ja kuukausittain sekä MYSQL tietokantaan 10 min välein, joita voi tutkia palvelimessa olevalla DTGRAPH sovellutuksella.
Palvelin toimii suht. moitteettomasti. Ongelma on eniten se, ettei kone käynnisty täysin takuuvarmasti kuukausien kuluessa ilman tarkkailua. Nähtävästi kiintolevyn tarkistus jää kysymään käyttäjältä mitä tehdään, eikä se käy palvelimessa johon ei olla yhteydessä kuin tiedon tulostuksen yhteydessä. Toinen ongelma on anturin
DS18S20+ erottelukyky.
http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf (http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf) Sen pienin mahdollinen esitystarkkuus on käytännössä 0,5 astetta.
Parannusehdotuksia kaipaan.
Ensinnäkin kelpaako anturi DS18B20 ilman mitään muutoksia kunhan vain vaihdetaan? TODNÄK käy.
datasivu:
http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf (http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf)
Tämän erottelukyky on kuitenkin binäärinä 0.0625 astetta (oletusresoluutio on 12 bittiä virran kytkeytyessä), kun aiemmassa se on 0,5 astetta (9 bittiä).
Ero on varsin merkittävä.
Pastaan tähän skriptit + infoa. Skriptien ajastus on asetettu webminin osiossa "System" --> "Scheduled Cron Jobs".
konfiguraatiot lokeja varten:
digitemp-kk-lokiin.conf:
TTY /dev/ttyS0
LOG_TYPE 1
LOG_FILE /var/www/LOKI/kuluva-kk/data.txt
LOG_FORMAT "<CENTER>%d.%m.%Y klo: %H:%M -- <B> %.1C </B> astetta.</CENTER>"
SENSORS 1
ROM 0 0x10 0xBA 0x4D 0x83 0x01 0x08 0x00 0xBA
digitemp-pvm-lokiin.conf
TTY /dev/ttyS0
LOG_TYPE 1
LOG_FILE /var/www/LOKI/kuluva-pv/data.txt
LOG_FORMAT "<CENTER>%d.%m.%Y klo: %H:%M -- <B> %.1C </B> astetta.</CENTER>"
SENSORS 1
ROM 0 0x10 0xBA 0x4D 0x83 0x01 0x08 0x00 0xBA
Siirtoskriptit:
kuukausilokille:
#!/bin/bash
perushakemisto=/var/www/LOKI/HISTORIA/
mkdir $perushakemisto
ToinenOsa=$(date +kuukausi-lokit-%Y)/
mkdir $perushakemisto$ToinenOsa
loppuosa=$perushakemisto$ToinenOsa$(date +%m)$(date +-%Y)/
mkdir $loppuosa
cp /var/www/LOKI/kuluva-pv/index.php /var/www/LOKI/kuluva-kk/
mv /var/www/LOKI/kuluva-kk/data.txt $loppuosa
cp /var/www/LOKI/kuluva-kk/index.php $loppuosa
exit 0
päiväkohtaiselle lokille:
#!/bin/bash
perushakemisto=/var/www/LOKI/HISTORIA/
mkdir $perushakemisto
vuosihakemisto=$perushakemisto$(date +pvm-lokit-%Y)/
mkdir $vuosihakemisto
KKhakemisto=$vuosihakemisto$(date +%m-%Y)/
mkdir $KKhakemisto
PVhakemisto=$KKhakemisto$(date +%d-%m-%Y)/
mkdir $PVhakemisto
mv /var/www/LOKI/kuluva-pv/data.txt $PVhakemisto
cp /var/www/LOKI/kuluva-pv/index.php $PVhakemisto
exit 0
Konfiguraatio MYSQL tietokannalle:
digitemp-mysql.conf
TTY /dev/ttyS0
LOG_TYPE 1
SENSORS 1
ROM 0 0x10 0xBA 0x4D 0x83 0x01 0x08 0x00 0xBA
Tietokannan kirjausskripti:
digitemp_mysql.pl
#!/usr/bin/perl -W
# DigiTemp MySQL logging script
# Copyright 2002 by Brian C. Lane <bcl@brianlane.com>
# All Rights Reserved
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
#
# -------------------------[ HISTORY ]-------------------------------------
# 08/18/2002 Putting together this MySQL logging script for the new
# bcl release of DigiTemp.
#
# -------------------------------------------------------------------------
#CREATE table digitemp (
# dtKey int(11) NOT NULL auto_increment,
# time timestamp NOT NULL,
# SerialNumber varchar(17) NOT NULL,
# Fahrenheit decimal(3,2) NOT NULL,
# PRIMARY KEY (dtKey),
# KEY serial_key (SerialNumber),
# KEY time_key (time)
# );
# GRANT SELECT,INSERT ON digitemp.* TO dt_logger@localhost;
# IDENTIFIED BY '';
#
# -------------------------------------------------------------------------
use DBI;
# Database info
my $db_name = "stats";
my $db_user = "dtgraph";
my $db_pass = "";
# The DigiTemp Configuration file to use
my $digitemp_rcfile = "/usr/digitemp-mysql.conf";
my $digitemp_binary = "/usr/bin/digitemp";
# EDELLINEN OLI /usr/local/bin/digitemp JA ON NYT MUUTETTU!
my $debug = 0;
my $var1 = shift;
if (defined($var1) && $var1 eq 'debug') {
$debug = 1;
print "Debug moodi on nyt päällä\n";
}
# Connect to the database
my $dbh = DBI->connect("dbi:mysql:$db_name","$db_user","$db_pass")
or die "I cannot connect to dbi:mysql:$db_name as $db_user - $DBI::errstr\n";
# Gather information from DigiTemp
# Read the output from digitemp
# Output in form SerialNumber<SPACE>Temperature in Fahrenheit
# -------------------------------------------------------------------------------------------------------
#print "Starttaan digitemp -ohjelman...\n";
open( DIGITEMP, "$digitemp_binary -q -a -o\"%R %.2F\" -c $digitemp_rcfile |" );
#print "Alan lukea asteet portista\n";
while( <DIGITEMP> )
{
print "$_\n" if($debug);
chomp;
($serialnumber,$temperature) = split(/ /);
#Safety limits: erroneous data tends to be very high or very low
#This usually happens when the sensor is having trouble (water, bad connection)
if ($temperature < -80 || $temperature > 180) {
print "Erroneous data for $serialnumber: $temperature ... Skipping";
#continue;
} else {
$sql="INSERT INTO digitemp SET SerialNumber='$serialnumber',Fahrenheit=$temperature";
print "SQL: $sql\n" if($debug);
$dbh->do($sql) or die "Can't execute statement $sql because: $DBI::errstr";
}
}
close( DIGITEMP );
$dbh->disconnect;
Ehdollinen uudelleenkäynnistys koko koneelle:
(uudelleenkäynnistys toteutuu mikäli kumpaa tahansa lokitiedostoa on muokattu viimeksi yli 3 tuntia sitten)
#!/bin/bash
if [ -f /var/www/LOKI/kuluva-pv/data.txt ] && [ -f /var/www/LOKI/kuluva-kk/data.txt ];
then
# molemmat ovat olemassa ja ovat tiedostoina.
pvlokiviive=$(stat -c %Y /var/www/LOKI/kuluva-pv/data.txt)
kklokiviive=$(stat -c %Y /var/www/LOKI/kuluva-kk/data.txt)
nyt=$(date +%s)
pverotus=$(($nyt - $pvlokiviive))
kkerotus=$(($nyt - $kklokiviive))
# sekunteina kolme tuntia on 10800
max=10800
function uusitarttaus {
echo Kirjaan vikalokiin ja käynnistän koko koneen uudelleen nyt.
vikalokiwriter.cgi
kirjaa-loki.sh
echo odotan 10 sekuntia ja sit reboot
sleep 10
reboot
}
if [ $pverotus -gt $max ];
then
echo
echo Päiväloki on $pverotus sekuntia vanha. maksimi on $max
echo
echo kk-loki kirjattu $kkerotus sekuntia sitten.
echo pv-loki kirjattu $pverotus sekuntia sitten.
uusitarttaus
elif [ $kkerotus -gt $max ];
then
echo
echo Kuukausiloki on $kkerotus sekuntia vanha. maksimi on $max
echo
echo kk-loki kirjattu $kkerotus sekuntia sitten.
echo pv-loki kirjattu $pverotus sekuntia sitten.
uusitarttaus
else
echo
echo kk-loki kirjattu $kkerotus sekuntia sitten.
echo pv-loki kirjattu $pverotus sekuntia sitten.
echo Jos $max sekuntia ylittyy, palvelin käynnistyy uudelleen.
echo
#digitemp -a -q -o"pvm: %d.%m.%Y ---- klo: %H:%M ----- %.1C astetta "
echo
fi
else
echo AINAKIN TOINEN KIRJAUSLOKI PUUTTUU. SUORITAN YLIMÄÄRÄISEN MITTAUKSEN KUMPAANKIN LOKIIN.
kirjaa-loki.sh
fi
Seuraava skripti sattuu olemaan PHP toteutus, koska en viitsinyt alkaa rakentamaan samasta bash versiota.
vikalokiwriter.cgi
#!/usr/bin/php
<?php
$pvdata = "/var/www/LOKI/kuluva-pv/data.txt"; // esittely
//jatketaan tiedon keruuta, jos tiedosto on olemassa
if (file_exists($pvdata)) {
//luetaan tiedoston muokkausaika, sekä lasketaan sen ja nykyhetken erotus
$muokkausaika = filemtime($pvdata);
$nyt_aika = date("U");
$erotus = ("$nyt_aika" - "$muokkausaika");
// luodaan kokonaislukumuuttujat aikaa varten
$vuorokausina = (integer) ("$erotus" / 86400); // valmis kokonaisluku
$tunteina = (integer) (("$erotus" % 86400) / 3600); // valmis kokonaisluku
$minuutteina = (integer) (("$erotus" % 3600) / 60); // valmis kokonaisluku
$sekunteina = (integer) (("$erotus" % 60) / 1); // valmis kokonaisluku
// tämän tiedoston suoritusta ei ole ajastettu.
// tämän tiedoston suorittaa vain /usr/bin/ehdollinen-reboot.sh
// seuraava ehto on poistettu siksi, että tämä tiedosto lisää vikalokiin tekstiä
// aina, kun tämä suoritetaan.
// if (($erotus) > 10800) { // onko muokattu yli kolme tuntia sitten (= 10800 sekuntia)
{
//jatketaan, jos vikaloki.txt on olemassa
if (file_exists("/var/www/vikaloki/vikaloki.txt")) {
//avataan vikaloki kirjoitustilassa ja kirjoitus aloitetaan tiedoston lopusta.
$vikalokifile = fopen("/var/www/vikaloki/vikaloki.txt", "a");
//kirjoitetaan tiedostoon tietorivi; \n tarkoittaa rivinvaihtoa
fwrite($vikalokifile, "Aika: ".date("d.m.Y H:i:s")." - Vian kesto: $vuorokausina vrk $tunteina h $minuutteina min $sekunteina s.\n Palvelin käynnistetty uudelleen.\n\n");
//suljetaan tiedosto
fclose($vikalokifile);
}
}}
?>
kirjaa-loki.sh
digitemp -a -q -c /etc/digitemp-pvm-lokiin.conf -o"%d.%m.%Y klo: %H:%M %.1C "
digitemp -a -q -c /etc/digitemp-kk-lokiin.conf -o"%d.%m.%Y klo: %H:%M %.1C "
Lokitiedoston muotoileva PHP-sivu (kopioidaan lokisiirtojen yhteydessä kohdehakemistoihin):
index.php
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
<TITLE>Tilatankin Lämpötila</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER><TT>
<B><FONT style="color: #000000;background: #BFBFFF;">0,5 °C ja alle</FONT></NOBRT></B>
<B><FONT style="color: #000000;background: #BFFFBF;">0,5 ... 1,9 °C</FONT></NOBRT></B>
<B><FONT style="color: #000000;background: #FFFFBF;">2,0 ... 3,4 °C</FONT></NOBRT></B>
<B><FONT style="color: #000000;background: #FFBFBF;">3,5 °C ja yli</FONT></NOBRT></B>
</CENTER></TT>
<BR>
<CENTER>
<H5>Tilatankin Lämpötilat:<BR>
<BR>
Matti Meikäläinen<BR></H5>
</CENTER>
<?php
//käsiteltävä tiedosto
$tiedosto = "data.txt";
//jatketaan, jos tiedosto on olemassa
if (file_exists($tiedosto)) {
//luetaan tiedoston muokkausaika muuttujaan
$kirjoitusaika = filemtime($tiedosto);
//avataan tiedosto lukutilassa
$tekstirivi = fopen($tiedosto, "r");
//nollataan rivinumerolaskuri
$i = 0;
echo "<TT><CENTER>\n";
//luetaan rivejä, kunnes tiedosto loppuu
while (!feof($tekstirivi)) {
//luetaan rivin teksti muuttujaan $rivi
$rivi = fgets($tekstirivi, 100);
// luetaan rivistä tiedot lämpötilasta ja ajasta omiin muuttujiin
$lampotila = substr("$rivi", 24, 4); // Antaa rivin alusta lukien merkit 24, 25, 26 ja 27.
$aika = substr("$rivi", 0, 21); // Antaa riviltä merkit rivin alusta aina 21:een.
//rivin tulostus alkaa
// tarkistan lämpötilan olemassaolon eka
if ($lampotila) { // vasta nyt tulostan
if ($lampotila >= 3.5) { // punaisella
echo "<NOBRT><BR>$aika - <B>",'<FONT style="color: #000000;background: #FFBFBF;">',"$lampotila &#176;C</FONT></NOBRT></B>\n";
} // punainen loppuu
if (($lampotila >= 2.0) and ($lampotila < 3.5)) { // keltaisella
echo "<NOBRT><BR>$aika - <B>",'<FONT style="color: #000000;background: #FFFFBF;">',"$lampotila &#176;C</FONT></NOBRT></B>\n";
} // keltaisen loppu
if (($lampotila >= 0.5) and ($lampotila < 2.0)) { // vihrealla
echo "<NOBRT><BR>$aika - <B>",'<FONT style="color: #000000;background: #BFFFBF;">',"$lampotila &#176;C</FONT></NOBRT></B>\n";
} // vihrean loppu
if ($lampotila < 0.5) { // sininen
echo "<NOBRT><BR>$aika - <B>",'<FONT style="color: #000000;background: #BFBFFF;">',"$lampotila &#176;C</FONT></NOBRT></B>\n";
} // sininen
} // lämpötilan olemassaolon tarkistuksen päättyminen
//kasvatetaan laskuria
$i++;
}
echo "</TT></CENTER>\n\n";
//tulostetaan viimeinen tallennushetki
// echo "<CENTER><H6>Tuorein lokimuutos: " . date("d.m.Y H:i:s", $kirjoitusaika). ".<BR></H6></CENTER>";
// echo "<CENTER><TT>muotoilu p&#228;ivitetty ".date("d.m.Y H:i:s", (filemtime("index.php")))."</TT></CENTER>";
// ei tiedä toimiiko edellinen kun tätä sivua kopioidaan lokiin.
//suljetaan tiedosto
fclose($tekstirivi);
} else {
echo "<TT><CENTER>Tiedostoa data.txt ei ole olemassa t&#228;ss&#228; hakemistossa.</CENTER></TT>";
echo "<TT><CENTER>T&#228;h&#228;n hakemistoon ei ole tallennettu l&#228;mp&#246;tilatietoja.</CENTER></TT>";
}
?>
<CENTER><H5><TT>
<a href="data.txt" title="Tästä linkistä muotoilematon raakaloki" onmouseover="self.status='Tästä linkistä muotoilematon raakaloki'; return true">data.txt</a>
</TT></H5></CENTER><BR>
</BODY>
</HTML>
lokilähde, jota muotoillaan:
data.txt
03.04.2009 klo: 17:00 -1.2
03.04.2009 klo: 18:00 0.0
03.04.2009 klo: 19:00 0.1
03.04.2009 klo: 00:00 0.7
03.04.2009 klo: 01:00 0.8
03.04.2009 klo: 02:00 1.2
03.04.2009 klo: 12:00 2.0
03.04.2009 klo: 13:00 3.4
03.04.2009 klo: 14:00 4.8
03.04.2009 klo: 15:00 1.0
03.04.2009 klo: 16:00 6.2
03.04.2009 klo: 00:00 0.7
-
Alkuperäinen idea lähti liikkeelle maidon vastaanottajan toiveista nähdä tarkempaa tietoa kuormaan poimittavasta tilaerästä.
Olen asettanut nyt koko palvelimen käynnistymään uudelleen kerran viikossa, koska aiemmin kone oli yli kuukauden tallentamatta mitään.
Palvelimessa on siis (jos ei huomattu) apache2 + php5 +mysql, sekä verkolle dhcp palvelin + proxy. Riittää pelkän ristikytketyn kaapelin kytkentä kotikoneen ja tämän väliin. Tästä ei ole verkkoyhteyksiä normaalisti mihinkään.
Kysymyksinä on mm.
1. Kuinka asettaa oletusvastaus levyntarkistukselle kun se tapahtuu, ettei siinä vaiheessa jäädä odottamaan käyttäjän toimia?
2. Ehdotuksia paremmista / varmemmista tavoista hoitaa hommat palvelimessa.
Tämän rustasin viikon aikana. Varmasti virheitäkin on. Jatkuvasti tuli uusia ideoita joita piti listata paperille muistin tueksi. Aiemmasta toteutuksesta poiketen on ainakin erikoismerkit ja skandit kunnossa. Silti tässä on nyt muille yksi köyhä tapa tallennella seurantalämpötiloja.
-
Ei kai levyntarkistus vaadi mitään käyttäjän toimia? Eikös se vain pyydä painamaan esciä, jos haluaa skipata tarkistuksen. Jos siis puhutaan siitä fsck-tarkituksesta, joka tapahtuu oletuksena tietyllä käynnistysvälillä, olikohan jotain 30 käynnistystä. Ja voihan tuon tarkistuksen ottaa pois päältäkin, jos haluaa.
-
Palvelin toimii suht. moitteettomasti. Ongelma on eniten se, ettei kone käynnisty täysin takuuvarmasti kuukausien kuluessa ilman tarkkailua. Nähtävästi kiintolevyn tarkistus jää kysymään käyttäjältä mitä tehdään, eikä se käy palvelimessa johon ei olla yhteydessä kuin tiedon tulostuksen yhteydessä.
Toi kysely levyntarkistuksen yhteydessä on todennäköisesti vakava merkki kiintolevyn leviämisestä, mikäli kone on kiinni upsissa, ja kaikki sammutukset ovat normaaleja. Oletko tutkinut kiintolevyn toimivuutta lokeista. Foorumin haulla todennäköisesti löydät oikeat lokit, mitä tutkiskella.
Toinen ongelma on anturin
DS18S20+ erottelukyky.
http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf (http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf) Sen pienin mahdollinen esitystarkkuus on käytännössä 0,5 astetta.
Parannusehdotuksia kaipaan.
Ensinnäkin kelpaako anturi DS18B20 ilman mitään muutoksia kunhan vain vaihdetaan? TODNÄK käy.
Yritin vähän tavailla speksejä, ja ehkä uskaltaisin sitäkin kokeilla, mikäli laite olisi oma tekemäni, ja osaisin itse tehdä toisen samanlaisen laitteen. Tosin ohjelmaasi pitää tehdä muutoksia: jakaa nykyinen arvo 8:lla, jotta arvo olisi oikea. Ainakin niin päättelisin spekseista. Huomioitavaa lieneen myös se, että jotta lukunopeus pysyisi samana kuin nykyisinkin, niin laitteen tulee olla 12 bittisessä moodissa. Muut moodit ovat huomattavasti nopeampia.
Tosin rehellisyyden nimissä tunnustan, etten aivan ymmärtänyt kuinka data liikkuu ko. anturin ja 1 johto väylän välillä, vaikka yritinkin sitä hoksata. Kytkennät tosin oli esimerkillisesti laitettu, ja kytkennöissä ei noissa näyttänyt olevan mitään eroja, niin sen puolesta. Ei myöskään merkkien määrässä jne.
datasivu:
http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf (http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf)
Tämän erottelukyky on kuitenkin binäärinä 0.0625 astetta (oletusresoluutio on 12 bittiä virran kytkeytyessä), kun aiemmassa se on 0,5 astetta (9 bittiä).
Ero on varsin merkittävä.
Olethan huomannut. Vaikka näyttötarkkuus on 12 bittiä, niin merkitseviä bittejä on vain 9. Eli molemmat näyttävät 0,5 asteen tarkkuudella. Se mistä toi voi johtua on ehkä kohinasta, tai jostain muusta.
Jos se johtuu kohinasta, niin silloin saatetaan päästä melko tarkkoihinkin tuloksiin ottamalla otoksia kerralla monta ja ottamalla niistä keskiarvo tai mediaani (Huom. keskiarvo suppenee nopeammin, ja antaa tuloksia myös mittaustulosten välistä). Jos joudut tarkemipia tuloksia metsästäessäsi ottamaan useampia mittauksia, niin kannattaneen ottaa pienemmällä resoluutiolla, koska mittaus on silloin nopeampaa. Tarkkuuden kustannuksella tietenkin. Sopivalla kompromissilla.
Pastaan tähän skriptit + infoa. Skriptien ajastus on asetettu webminin osiossa "System" --> "Scheduled Cron Jobs".
konfiguraatiot lokeja varten:
digitemp-kk-lokiin.conf:
TTY /dev/ttyS0
LOG_TYPE 1
LOG_FILE /var/www/LOKI/kuluva-kk/data.txt
LOG_FORMAT "<CENTER>%d.%m.%Y klo: %H:%M -- <B> %.1C </B> astetta.</CENTER>"
SENSORS 1
ROM 0 0x10 0xBA 0x4D 0x83 0x01 0x08 0x00 0xBA
digitemp-pvm-lokiin.conf
TTY /dev/ttyS0
LOG_TYPE 1
LOG_FILE /var/www/LOKI/kuluva-pv/data.txt
LOG_FORMAT "<CENTER>%d.%m.%Y klo: %H:%M -- <B> %.1C </B> astetta.</CENTER>"
SENSORS 1
ROM 0 0x10 0xBA 0x4D 0x83 0x01 0x08 0x00 0xBA
Tästä en ymmärrä ROM-kohtaa, jotain sensorin ID:tä vai mitä?
Sitten paha sanoa toisen anturin toimivuudesta suoraan, kun puuttuu Sensorin takana olevan laitteen piirikuva ja firmis. Firmikseen saattaa joutua tekemään jotain pientä muutosta, mutta en ole ihan 100 varma, kun ei valjennut kuinka anturilta luetaan tietoa ja kuinka sinne kirjoitetaan tietoa. Samaa johtoa pitkin kuitenkin, mutta missään en huomannut kuinka määritelään sisääntuleva ja ulosmenevä. Todennäköisesti aluksi kirjoitetaan oikealla nopeudella kutsu, johon kirjoitetaan myös sisään menevä data, ja sitten hetken päästä laite vastaa. Mutta siis tämä ei minulle valjennut, joten ei siitä sen enempää. Ehkä pitäisi myös lukea speksejä, eikä vain katsella hienoja kaavioita ja yrittää päätellä niistä.
-
kyllä ne kaikki ds18*** anturit käy sekaisin samaan linjaan pitää vaan ajaa se asetus komento aina uuden anturin lisäämisen jälkeen.
"digitemp_DS9097 -i -s/dev/ttyS0 -c digitemp.conf "
ilman -c digitemp.conf tekee ajettavaan hakemistoon .digitemprc tiedoston
tuo rom kohta on anturin 64bittinen sarjanumero joka löytyy jokaisesta anturista ja tallentuu siihen .digitemprc tiedostoon, ei tarvitse eriksen mitään firmiksiä säätä.
itselläni on pyörinyt lämpötila mittaus 4 eri pisteestä 5vuotta 10min välein phplla luku mysql kantaan ja jpgraphilla käppyrät.
maaliskuussa lisäsin sähkömittarin luvun 2min välein ja autotallin lämpötilamittauksen nslu2:lla jossa on DS9490R usb lukija sekä DS2423P dual counter joka lukee sähkömittarin ledin vilkkumista, mittaukset menee tietysti samaan kantaan eri tauluun.
yksi antureista saunassa, ilmoittelee yli 55 asteen tilasta olohuoneen dreamboxille ja lukema saadaan telkkariin, aikasemmin oli tuli myös txt viestinä puhelimeen jätin pois liittymän irtisanomisen yhteydessä. :-)
1-wire osia halvalla ja aika nopeasti saa:
http://www.hobby-boards.com/
-
Tiedon lukemiseen käytän digitemp -ohjelmaa:
INFO: http://linux.fi/index.php/Digitemp (http://linux.fi/index.php/Digitemp)
1-wire liitännän olen toteuttanut RS-232 portissa seuraavalla adapterilla sen toimintavarmuuden vuoksi:
http://tietomyrsky.fi/tuotteet/1-wirebus/ (http://tietomyrsky.fi/tuotteet/1-wirebus/)
Niille, jotka eivät tunne 1-wire väylää, linkki wikipediaan (englanniksi):
http://en.wikipedia.org/wiki/1-Wire (http://en.wikipedia.org/wiki/1-Wire)
-------------------------------------------------------------------------------------------------------
Ei kai levyntarkistus vaadi mitään käyttäjän toimia? Eikös se vain pyydä painamaan esciä, jos haluaa skipata tarkistuksen. Jos siis puhutaan siitä fsck-tarkituksesta, joka tapahtuu oletuksena tietyllä käynnistysvälillä, olikohan jotain 30 käynnistystä. Ja voihan tuon tarkistuksen ottaa pois päältäkin, jos haluaa.
fsck:sta on kyse, mutta palvelimessa EI OLE näyttöä eikä näppäimistöä palvelimen hoitaessa tehtävää.
Toi kysely levyntarkistuksen yhteydessä on todennäköisesti vakava merkki kiintolevyn leviämisestä, mikäli kone on kiinni upsissa, ja kaikki sammutukset ovat normaaleja. Oletko tutkinut kiintolevyn toimivuutta lokeista.
Kiintolevyn virheille on looginen syy koska palvelin sammutetaan toistaiseksi raa-asti virrat katkaisemalla.
Olen muuttanut webminillä kiintolevystä välimuistin pois käytöstä palvelimen nopeuden kustannuksella.
Palvelimen virransyöttöä ei toistaiseksi ole UPS-varmennettu. Tätä olen harkinnut.
Kaipaa hiomista.
Esim sammutus atx-virtakytkimestä hallitusti. Tähän lienee ohjeita foorumilla (muistan lukeneeni joskus)
Yritin vähän tavailla speksejä, ja ehkä uskaltaisin sitäkin kokeilla, mikäli laite olisi oma tekemäni, ja osaisin itse tehdä toisen samanlaisen laitteen.
Mulla on tarkoitus rakentaa kotona olevaan palvelimeen täsmälleen samat ominaisuudet testaukseen ja näiden skriptien kehittelyyn. Tuo toinen anturi, siis DS18B20 (B-anturi) poikkeaa aiemmasta sen ohjelmallisen muokattavuuden vuoksi.
Ensinnäkin tehon syöttö ns "Parasite-Power" -moodissa ei toimine B-anturin suurimmalla resoluutiolla vaan on kytkettävä +5v syöttö mukaan.
Tosin ohjelmaasi pitää tehdä muutoksia: jakaa nykyinen arvo 8:lla, jotta arvo olisi oikea. Ainakin niin päättelisin spekseista.
Näin voisi ajatella. Toisaalta itse digitemp asetuksiin en ole tehnyt mitään muuta kuin lokiin liittyvää muotoilua sekä ihan alussa
HUOMATKAA: komentoa "digitemp" ei ole olemassa, vaan olen tehnyt itselleni symbolisen linkin "digitemp" hakemistoon: /usr/bin/
ja tämän kohteena on (muistaakseni tämä näistä kolmesta) /usr/bin/digitemp_DS2490
seuraavat kolme komentoa toimivat suoraan mm -h parametrilla:
/usr/bin/digitemp_DS2490
/usr/bin/digitemp_DS9097
/usr/bin/digitemp_DS9097U
Anturin ensiasennuksen tein seuraavalla komennolla:
sudo digitemp -i -s/dev/ttyS1
Lukunopeudella ei ole tässä merkitystä, koska tiedon luku anturilta ( joita voi olla kymmeniä) ei kestä muutamaa sekuntia kauempaa yhdelle anturille. Mittausväli on käytännössä ainakin 10 min.
Tosin rehellisyyden nimissä tunnustan, etten aivan ymmärtänyt kuinka data liikkuu ko. anturin ja 1 johto väylän välillä, vaikka yritinkin sitä hoksata.
Tähän vastasinkin jo linkkien avulla.
Olethan huomannut. Vaikka näyttötarkkuus on 12 bittiä, niin merkitseviä bittejä on vain 9. Eli molemmat näyttävät 0,5 asteen tarkkuudella. Se mistä toi voi johtua on ehkä kohinasta, tai jostain muusta.
Tarkoitatko anturin lämpökohinasta? Itse data on ykköstä ja nollaa, eli sitä kone tuskin väärin ymmärtää..
ästä en ymmärrä ROM-kohtaa, jotain sensorin ID:tä vai mitä?
Kyllä. Jokaisella anturilla on oma yksilöllinen sarjanumero / "identiteettitieto", jolla erotetaan väylälle liitetyt laitteet, mikä niistä halutaan lukea. Koska anturit ovat rinnankytkettyjä eli toisinsanoen väylällä vaikuttava jännite vaikuttaa kaikissa antureissa samanaikaisesti. Tämä "ROM koodi" haetaan antureiden asennuksen yhteydessä .digitemprc -tiedostoon, josta olen kopioinut tiedot asetustiedostoihin.
lisätietoa:
man digitemp
Sitten paha sanoa toisen anturin toimivuudesta suoraan, kun puuttuu Sensorin takana olevan laitteen piirikuva ja firmis. Firmikseen saattaa joutua tekemään jotain pientä muutosta, mutta en ole ihan 100 varma, kun ei valjennut kuinka anturilta luetaan tietoa ja kuinka sinne kirjoitetaan tietoa. Samaa johtoa pitkin kuitenkin, mutta missään en huomannut kuinka määritelään sisääntuleva ja ulosmenevä. Todennäköisesti aluksi kirjoitetaan oikealla nopeudella kutsu, johon kirjoitetaan myös sisään menevä data, ja sitten hetken päästä laite vastaa.
Tekninen määrittely löytyy 1-wire väylän kuvauksesta. Väylä on ennalta määritelty kuinka tietoa käsitellään.
pump:
kyllä ne kaikki ds18*** anturit käy sekaisin samaan linjaan pitää vaan ajaa se asetus komento aina uuden anturin lisäämisen jälkeen.
"digitemp_DS9097 -i -s/dev/ttyS0 -c digitemp.conf "
ilman -c digitemp.conf tekee ajettavaan hakemistoon .digitemprc tiedoston
Tämä oli tärkeä tieto. Tuota en itsekään hoksannut, kuinka ulostulon voi syöttää suoraan konfiguraatioon (esim digitemp.conf)
Konfiguraatiot olen rakentanut toistaseks käsityönä copypaste tyyliin. Vaikka joutuuhan nää lokitiedostot kertomaan konfiguraatioissa.
Pump, kiitokset.
-
Olethan huomannut. Vaikka näyttötarkkuus on 12 bittiä, niin merkitseviä bittejä on vain 9. Eli molemmat näyttävät 0,5 asteen tarkkuudella. Se mistä toi voi johtua on ehkä kohinasta, tai jostain muusta.
Tarkoitatko anturin lämpökohinasta? Itse data on ykköstä ja nollaa, eli sitä kone tuskin väärin ymmärtää..
No voihan sen lämpökohinaksikin nimetä. Tarkoitan sitä, että välttämättä arvo ei ole vakaa, vaan heti perään otettu uusi arvo saattaa heittää suuntaan tai toiseen 0,25-astetta, vaikka olosuhteet olisivatkin identtiset, sillä spekseissä sanotaan anturin mittaavan 0,5 asteen tarkkuudella. En tiedä, miksi näin on, mutta ehkä toi arvo on epävakaa. Parhaassa tapauksessa kyseinen anturi on kalibroitu anturilla, jonka virallinen oikea näyttö on 0,5 asteen tarkkuudella, jolloin anturi on vakaa, ja näyttää 0.1 asteen tarkkuudella, mutta ei ole kalibroitu kuin 0,5 asteen tarkkuuteen. Silloin siis maidon lämpötila/laatu olisi suhteessa näyttöön, mutta tuloksia ei täysin (täydellä tarkkuudella) pystyisi soveltamaan toisiin saman järjestelmän eri antureihin, kun antureissa olisi yksilöllisiä heittoja.
Vaikea siis päätellä, mistä johtuu toi puolen asteen tarkkuus, mutta joku syy siihen varmaankin on, kun on spekseihin niin kirjoitettu. Tuskin niin tärkeä tieto on siihen unohtunutkaan.
Siis molempien antureiden spekseissä seisoo...
±0.5°C Accuracy from -10°C to +85°C
Siis suomeksi, arvo voi olla puoli astetta eri, mitä anturi antaa kyselyssä, joten ko. muut arvot ovat 'aku ankka'-tarkkuutta.
Jos arvo on vakaa, niin se siitä huolimatta antaa paremman kuvan lämmön vaikutuksesta maidon laatuun kuin toi nykyinen anturi, vaikka tarkkuus on molemmissa samat.
Edit - siis kyseinen tieto on hyvä tietää, mutta tuskin häiritsee itse toimivuutta.
-
1. Kuinka asettaa oletusvastaus levyntarkistukselle kun se tapahtuu, ettei siinä vaiheessa jäädä odottamaan käyttäjän toimia?
Auttaisiko /etc/default/rcS tiedostossa FSCKFIX=yes ?
-
Onkohan sinulla käytössä ext2 -tiedostojärjestelmä? Ext3 toipuu sujuvammin myös tuosta virrat-pois -tilanteesta. Ext2 -tiedostojärjestelmän voi muuttaa ext3-muotoon ilman uudelleenformatointia:
tune2fs -j /dev/sdaX
Jos tuon teet, niin muista editoida uusi tiedostotyyppi tiedostoon /etc/fstab. Uskoisin, että grub käynnistylatain ei tuosta muunnoksesta hätkähdä, mutta se kannattaa vielä varmistaa. Tietääkö kukaan, uskaltaako tuon tehdä turvallisesti boottilevylle?
-
Tiedostojärjestelmä on jo ext3. tuon "FSCKFIX=yes" muutankin heti.
sit tuo puolen asteen tarkkuus.
tuon ds18b20 -anturin tiedoissa mainostetaan kyllä tiedon lukemisen tarkempaan olevan mahdollista:
The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively. The default resolution at power-up is 12-bit.
Vaatinee varmaan muutoksia joko lukukomentoihin tai anturin EEPROM muistiin ennen käyttöä.
Jos kohinasta on kyse, pitänee siirtyä useisiin lukukertoihin ja järjestää talteen vain keskiarvo tms.
pieni huomio:
digitemp voidaan kuitenkin säätää antamaan tulos useamman desimaalin tarkkuudella, joita oletuksella tulee 3. Voisi ainakin kuvitella, että digitemp olisi rakennettu myös lukemaan anturia useammallakin kuin yhdeksällä bitillä. Eli ettei pelkkää tulostetta luotaisi epäuskottavan tarkaksi. Kommentoikaa.
Tuon anturin PDF dokumentissa (DS18B20) sivulta 3/22 (219kt) http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf (http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf)
kerrotaan edelläoleva lainattu teksti.