Wir wollen so ein Darstellung von 500 Messungen bei 1090 MHz mit einer Sample-Rate von 2048000 Hz erstellen (Messung 2.3.2019, 12:05 Uhr in Langenhagen):
Zuerst holen wir uns den Quellcode des rtl_map und bauen uns die Anwendung. Dann installieren wir das Programm.
Um die digitalen Werten, wie Tür auf oder zu in einem Plot mit dem Batterie Zustand auszugeben, kann wie folgt vorgegangen werden. Der HM-Sec-SC Funk-Tür-/Fensterkontakt gibt die Werte ja zurück. Die rote Linie gibt den Türzustand aus ob die Tür auf oder zu ist bzw. war.
Diese /fhem/www/gplot/myTerrassenTuer.gplot Datei speichern:
/* myTerrassenTuer.gplot Version 1.0 vom 07.09.2013
Dieses GNU-Plot Script (myTerrassenTuer.gplot) gibt zwei Zustaende des Tuerkontakt als Kurven aus und zwar den Batterie-Zustand, den Status der Tuer.
(C) 2013 Thomas Wenzlaff http://www.wenzlaff.de
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 3 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, see {http://www.gnu.org/licenses/}. */
set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title 'Terrassen Tuer'
set ytics ("Zu" 0, "Ok" 0.8, "Auf" 1) set y2tics ("Zu" 0, "Ok" 0.8, "Auf" 1) set yrange [-0.1:1.1] set y2range [-0.1:1.1] set ylabel "" set y2label ""
Kurz:
1. fhem.cfg ergänzen (siehe Kopiervorlage unten)
2. drei gnuplot Datein von Githup nach /fhem/www/gplot/ kopieren
3. fhem restarten
Zu 1.: Der Teil der in der fhem.cfg ergänzt werden muss für Langenhagen:
# Wetter von Yahoo (670178 = Langenhagen, 600=alle 600 Sekunden (10min) Yahoo abfragen, de=Sprache Deutsch)
define Wetter Weather 670178 600 de
attr Wetter event-on-update-reading temperature,humidity,pressure,wind_speed,wind_chill,wind_direction
attr Wetter group Umwelt
attr Wetter room 9.02_Steuerung
So sieht es nach den ersten Messwerten aus, ja es ist noch keine Kurve. Aber immerhin:
Das sind diese Messwerte:Und die beiden anderen Punkte mit der Steuerung und Logs:
Hohe Präzision: Low-Power-Modus, die Auflösung von 0.06 hPa (0,5 m)
Hohe linearen Modus mit einer Auflösung von 0.03 hPa (0,25 m)
Mit Temperatur-Ausgang
I2C-Schnittstelle
Temperaturkompensation
Reaktionszeit: 7,5 ms
Standby-Strom: 0.1 μA
Beseitigt die Notwendigkeit für einen externen Taktgeber
Größe: 21 x 15 x 10 mm
Die Platine mit dem BMP085 (auf GY-65) ist nur 1,5 cm x 2 cm klein.
Von oben:
Von unten:
Anschlussbelegung:
Software:
Folgende beiden Libs von Adafruit downloaden und in das Lib Verheichnis kopieren. Evl. noch die Verzeichnisnamen umbenennen, da keine Sonderzeichen vorhanden sein dürfen.
Dies Programm liest den Luftdrucksensor und den Temperatursensor endlos aus, und gibt die Werte über die Serielle-Schnittstelle mit Leerzeichen getrennt aus. Kommentare beginnen mit #.
z.B. # Luftdruck und Temperatur Messprogramm # TWDruck 1.0 vom 06.07.2013 # http://www.wenzlaff.de # Sensor: BMP085 # Treiber Version: 1 # Unique ID: 10085
# [Luftdruck in hPa] [Temperatur in Grad Celsius] [Höhe in Meter]
Das BMP085 an: SCL an A5 SDA an A4 VDD Plus 3.3V DC Masse Minus */ constlong MESSINTERVAL = 5000; // Messintervall in milli Sekunden constlong SENSOR_ID = 10085; // eindeutige Sensor ID String KOMMENTAR = "# "; // Kommentar präfix String TRENNER = " "; // Trennzeichen der Werte
if (event.pressure)
{ Serial.print(event.pressure); // Luftdruck in hPa Serial.print(TRENNER);
/* Calculating altitude with reasonable accuracy requires pressure * * sea level pressure for your position at the moment the data is * * converted, as well as the ambient temperature in degress * * celcius. If you don't have these values, a 'generic' value of * * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA * * in sensors.h), but this isn't ideal and will give variable * * results from one day to the next. * * * * You can usually find the current SLP value by looking at weather * * websites or from environmental information centers near any major * * airport. * * * * For example, for Paris, France you can check the current mean * * pressure and sea level at: http://bit.ly/16Au8ol */
Serial.print(temperature); // Temperatur in Grad Celsius Serial.print(TRENNER);
/* Then convert the atmospheric pressure, SLP and temp to altitude */ /* Update this next line with the current SLP for better results */ float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; // 1013.25F Average sea level pressure is 1013.25 hPa
Serial.print(bmp.pressureToAltitude(seaLevelPressure,
event.pressure,
temperature)); // Höhe in Meter Serial.println();
} else
{ Serial.println(KOMMENTAR +"Sensor error");
} delay(MESSINTERVAL);
}
Die gerade Linie im Diagramm, rührt daher das der PC sich automatisch in den Standby-Betrieb schaltet und damit die Serielle-Verbindung nicht mehr abgefragt wird.
Der dritte Wert der Daten ist die Höhe, die ändert sich nicht gross und wird deshalb nicht im Diagramm dargestellt. Wie wird bei gnuplot die 3. Y-Achse erzeugt? Geht das überhaupt?
Zuerst wurde der Temperatursensor in das Gefrierfach und dann in den Kühlschrank gelegt (grüne Kurve). Der zweite Sensor, wurde außerhalb des Kühlschranks platziert (die rote Kurve).
Folgende gnuplot Datei ist dafür nötig:
set title "Temperaturverlauf im Kühlschrank" font "Times,18"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt am 26.06.13"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-19:26] # die y-Achse geht von:bis
set zeroaxis # eine Null Linie
# Maximum und Minimum anzeigen
max_y = GPVAL_DATA_Y_MAX
set label 1 gprintf("Maximum = %g Grad/Celsius", max_y) at "2013.06.26_17:00:00",24 font "Times,12"
min_y = GPVAL_DATA_Y_MIN
set label 2 gprintf("Minimum = %g Grad/Celsius", min_y) at "2013.06.26_17:25:00",-15 font "Times,12"
set terminal png
set output "temperaturverlauf-kuehlschrank.png"plot "temperatur-kuehlschrank.txt" using 1:2 title "Zimmer Sensor" with lines, "" using 1:3 title "Sensor im Kühlschranki" with lines
set terminal aqua
replot
Diese Grafik liegen diese, mit dem Arduino gemessenen Werte zugrunde. Die Aussetzer in der Aufzeichnung rühren daher, das sich der MacBookAir nach einiger Zeit in den Sleep-Modus schaltet, dann kommen keine Daten aus der USB-Schnittstelle an. Da muss man sich dann noch was einfallen lassen.
Eine kurze Messung mit zwei an das Arduino-Board angeschlossene Temp.-Sensoren DS18B20 ergibt diese Daten.
Daraus läßt sich mit diesen gnuplot Befehlen
set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [26:28] # die y-Achse geht von:bis
set terminal png
set output "temperaturverlauf.png"
plot "temperatur.log" using 1:2 title "Innen Sensor" with lines, "" using 1:3 title "Aussen Sensor DS18B20" with lines
diese Grafik plotten:
Die Sensoren sind mit +-0,5 Grad Celsius bei -10 bis +85 Grad angegeben.
Die Differenz beider Werte ergibt mit diesen gnuplot Befehlen:
set title "Temperatur Differenz zweier Sensoren"
set ylabel "Temperatur Differenz in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [-1:1] # die y-Achse geht von:bis
set zeroaxis # die 0 Linie
set terminal png # erzeugt eine PNG Datei
set output "differenztemperaturverlauf.png" # Name der PNG Datei
plot "temperatur.log" using 1:($2-$3) title "Temperatur-Differenz" with lines
set terminal aqua # wieder auf Terminal
replot # nochmal in Terminal plotten
folgendes Ergebnis.
Mit welchem gnuplot Befehl bekomme ich eine horizontale Linie bei 0,5 und -0,5 Grad hin, die mit min und max Beschriftet ist? Ok, hier die Lösung.
Habe mit dem Arduino und dem Temperatursensor DS18B20 mal zwei Stunden die Temperatur mit einem Java Programm gemessen.
Die erzeugte Logdatei hat folgenden Aufbau:
[Messzeitpunkt] [Gemessener Wert in Grad/Celsius]
Z.b.:
2013.06.22_17:56:18 29.25
2013.06.22_17:56:23 29.25
2013.06.22_17:56:29 29.25
# ...
2013.06.22_20:15:00 27.56
2013.06.22_20:15:06 27.56
2013.06.22_20:15:12 27.56
Folgende gnuplot Befehle sind nötig (guter Überblick zu gnuplot):
set title "Temperaturverlauf"
set ylabel "Temperatur in Grad/Celsius"
set xlabel "Messzeitpunkt"
set xdata time # x-Achse wird im Datums/Zeitformat skaliert
set timefmt "%Y.%m.%d_%H:%M:%S" # Format Zeitangaben yyyy.mm.dd_hh:mm:ss
set format x "%H:%M" # Format für die Achsenbeschriftung
set yrange [27:30] # die y-Achse geht von:bis
set terminal png
set output "temp-verlauf.png"
plot "log-temp.txt" using 1:2 title "Sensor DS18B20" with lines
Um folgendes Ergebnis zu erhalten. Der peek am Anfang, ist entstanden, weil ich den Sensor kurz angefasst haben.