Technik |  Romanhefte |  Fotografie |  Wer? |  Wo? |  Humor |  Webcam |  Gästebuch |  Sitemap | 
 
Linke obere Ecke Rechte obere Ecke
Temperaturmessung

Steffen Barth (DG0MG) 27.3.2003

Temperaturverlauf letzte 24 Std. Temperaturverlauf letzte 10 Tage

Diagramm(e) erstellt mit JpGraph - Doku:HTML Befehlsreferenz

Aktuelle Meßdaten

stilisiertes Thermometer Innen: $Innen°C


"; echo "

Außen: $Aussen°C

"; ?>

Werte der letzten 2 Stunden:

(now() - interval 2 hour) ORDER BY time ASC"; $erg = mysql_db_query("weather",$abfrage,$verbindung); while (list($Nummer,$Aussen,$Innen,$Uhrzeit) = mysql_fetch_row($erg)) { echo "Nr.$Nummer $Uhrzeit Uhr Innen: $Innen°C Außen: $Aussen°C
\n"; } ?>

Extremwerte

  Letzte 24 Stunden Letzte 30 Tage Letztes Jahr Gesamt
Minimum:
blauer Eiskristall
(now() - interval 24 hour) ORDER BY sens7 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Innen: $erg[0]°C
um $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%H:%i') FROM temperature where time > (now() - interval 24 hour) ORDER BY sens6 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
um $erg[1] Uhr
\n"; ?>
(now() - interval 30 DAY) ORDER BY sens7 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Innen: $erg[0]°C
am $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%d.%m.%y %H:%i') FROM temperature where time > (now() - interval 30 DAY) ORDER BY sens6 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
am $erg[1] Uhr
\n"; ?>
(now() - interval 1 YEAR) ORDER BY sens7 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Innen: $erg[0]°C
am $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%d.%m.%y %H:%i') FROM temperature where time > (now() - interval 1 YEAR) ORDER BY sens6 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
am $erg[1] Uhr
\n"; ?>
$erg[0]°C
am $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%d.%m.%y %H:%i') FROM temperature ORDER BY sens6 ASC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
am $erg[1] Uhr
\n"; ?>
Maximum:
rote Flamme
(now() - interval 24 hour) ORDER BY sens7 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Innen: $erg[0]°C
um $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%H:%i') FROM temperature where time > (now() - interval 24 hour) ORDER BY sens6 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
um $erg[1] Uhr
\n"; ?>
(now() - interval 30 DAY) ORDER BY sens7 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Innen: $erg[0]°C
am $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%d.%m.%y %H:%i') FROM temperature where time > (now() - interval 30 DAY) ORDER BY sens6 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
am $erg[1] Uhr
\n"; ?>
(now() - interval 1 YEAR) ORDER BY sens7 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Innen: $erg[0]°C
am $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%d.%m.%y %H:%i') FROM temperature where time > (now() - interval 1 YEAR) ORDER BY sens6 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
am $erg[1] Uhr
\n"; ?>
$erg[0]°C
am $erg[1] Uhr
\n"; $abfrage = "SELECT sens6,date_format(time,'%d.%m.%y %H:%i') FROM temperature ORDER BY sens6 DESC LIMIT 1"; $erg = mysql_fetch_row(mysql_db_query("weather",$abfrage,$verbindung)); echo "Außen: $erg[0]°C
am $erg[1] Uhr
\n"; ?>

Wie funktionierts ?

Makro DS1621 Im Praxisheft 9 des AATIS e.V. (Arbeitskreis Amateurfunk und Telekomunikation in Schulen) beschrieb Dr. Achim Scharfenberg, DL1MK, ein Interface, um den Temperatur-Sensor DS1621 der Firma DALLAS SUB-D-Stecker mit DS1621 an der seriellen Schnittstelle eines PC zu betreiben, genannt DALLCOM. Der DS1621 ist ein Temperatursensor im 8poligen Gehäuse, über den I2C-Bus anzusprechen. Dadurch sind durch Kaskadierung bis zu acht Sensoren am selben Bus zu betreiben, es muß nur jeder IC eine andere Adresse bekommen (Pins A0-A2, s.u.). Durch den digitalen Aufbau erübrigt sich eine Kalibrierung, aus den Registern wird unmittelbar die Temperatur mit einer Genauigkeit von 2K und einer Auflösung von 0.5K ausgelesen. Die zugehörige Software war in PASCAL geschrieben und lief unter DOS. Ich hatte das damals auch gebaut und dieser Tage fiel der Sensor mir wieder in die Hände.
Was lag also näher, als dieses Teil an meinen Linuxrechner anzuschließen und diesen den Temperaturverlauf mitprotokollieren zu lassen? Fehlte mir nur eine geeignete Software, um unter Linux die serielle Schnittstelle als I2C-Bus anzusteuern. Beim googeln stieß ich auf Claudio Lanconelli's Webtherm. Das war schon ziemlich nah an dem, was ich brauchte, aber eigentlich schon zu komfortabel. Leider hatte es erstmal das Problemchen, daß die Schaltung nicht kompatibel zu Dallcom ist, der I2C-Bus wird auf andere Pins der seriellen Schnittstelle geführt. Also mußte ich den Quellcode ändern, um mein hochintegriertes Dallcom unter Linux zu betreiben. Also der Quellcode. Ist C++. Von C hab ich keine Ahnung. Trotzdem Micro$ Visual Studio unter Windows installiert und bisschen rumprobiert, andauernd Fehlermeldungen und keine Ahnung, was sie bedeuten, geschweige denn, wie ich sie beseitige. Dann eben den Quellcode auf den Linuxrechner kopieren und mal "make" eingegeben. Siehe da, es kam ohne weiteres Zutun ein lauffähiges Progrämmchen heraus. Auch wenn man die C-Syntax nicht beherrscht, versteht man beim Anschauen der Sourcen ungefähr, was da abläuft. Ich hab also das Programm etwas zurückgebaut und verändert. Ruft man es auf, sieht die Ausgabe so aus (Es werden die Ergebnisse der 8 Sensoren ausgegeben):
router:/home/sbarth/public_html/therm # ./dallcom 1
Er-13 Er-13 Er-13 Er-13 Er-13 Er-13 Er-13 19.5
Innerhalb eines Scriptes wird DALLCOM über einen Crontab-Eintrag alle 10 Minuten aufgerufen:
*/10 * * * *    root  /home/sbarth/public_html/therm/messung
In dem Script "messung" werden dann die Messungen in eine MySQL-Datenbank geschrieben:
#!/bin/bash
werte=`/home/sbarth/public_html/therm/dallcom 1`
mysqlcmd="mysql -h localhost -u root -pgeheim weather"
# set zerlegt hier einen String und belegt $1 bis $x mit den einzelnen Worten
set -- $werte
# dann Setzen wir die wieder mit Hochkommas zusammen
werte2=`echo "'$1','$2','$3','$4','$5','$6','$7','$8'"`
echo "insert into temperature (sens0,sens1,sens2,sens3,sens4,sens5,sens6,sens7)
  values($werte2)"|$mysqlcmd
Die SQL-Datenbank sieht so aus:
router:/home/sbarth/public_html/therm # mysql -pgeheim weather
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 549 to server version: 3.23.44-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;
+-------------------+
| Tables_in_weather |
+-------------------+
| temperature       |
+-------------------+
1 row in set (0.00 sec)

mysql> show columns from temperature;
+-------+---------------+------+-----+---------+----------------+
| Field | Type          | Null | Key | Default | Extra          |
+-------+---------------+------+-----+---------+----------------+
| time  | timestamp(14) | YES  |     | NULL    |                |
| sens0 | double        | YES  |     | NULL    |                |
| sens1 | double        | YES  |     | NULL    |                |
| sens2 | double        | YES  |     | NULL    |                |
| sens3 | double        | YES  |     | NULL    |                |
| sens4 | double        | YES  |     | NULL    |                |
| sens5 | double        | YES  |     | NULL    |                |
| sens6 | double        | YES  |     | NULL    |                |
| sens7 | double        | YES  |     | NULL    |                |
| numr  | int(11)       |      | PRI | NULL    | auto_increment |
+-------+---------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)

mysql> quit
Bye
router:/home/sbarth/public_html/therm #
Eine MySQL-Abfrage per Script, die die Meßdaten der letzten Stunde ausgibt, könnte dann so aussehen:
#!/bin/bash
mysqlcmd="mysql -h localhost -u root -pgeheim weather"
echo "SELECT numr AS Nummer,sens6 AS Aussen,sens7 AS Innen,DATE_FORMAT(time,
  '%d.%m.%y %H:%i') AS Uhrzeit FROM temperature WHERE time > (NOW()-
    INTERVAL 1 HOUR)"|$mysqlcmd
Das Ergebnis der Abfrage:
router:/home/sbarth/public_html/therm # ./letzte_messungen
Nummer  Aussen  Innen   Uhrzeit
260     0       19.5    20.03.03 15:20
261     0       19.5    20.03.03 15:30
262     0       20      20.03.03 15:40
263     0       20      20.03.03 15:50
264     0       19.5    20.03.03 16:00
265     0       19.5    20.03.03 16:10

Die Schaltung

Der rot markierte Zusatz ist nicht unbedingt nötig, erhöht aber die Stabilität, wenn die Schnittstelle sehr wenig Strom liefert.
Schaltplan Dallcom

SUB-D Stecker mit den Bauteilen

Wirklich im Einsatz ist folgende Schaltung mit einem MAX232 zur Pegelanpassung:

Schaltplan Dallcom

Externe Links:



Startseite Seitenanfang Mail an Steffen schreiben Seitenstatistik Valid HTML 4.0 Transitional 865747   seit 22.9.2002  

Seite vom: 27.01.2008, 09:46 Uhr (Seite #8)

Linke untere Ecke Rechte untere Ecke