Temperaturlogger RC-5 von Elitech
Es gibt einen kleinen preiswerten Temperaturlogger mit Batteriebetrieb
(ca. 15€) , welcher intern bis zu 32000 Temperaturpunkte mit einem
einstellbaren Intervall von 10s bis mehrere Stunden aufzeichnet. Das
Datenauslesen und die Konfiguration erfolgt über eine USB Schnittstelle.
Die dazugehörige Auswertesoftware (liegt auf Minicd bei) ist allerdings
nur unter Windows lauffähig und außerdem gewöhnungsbedürftig. Da ich den
Logger auch unter Ubuntu auslesen wollte, habe ich mir die USB
Schnittstelle und das Protokoll etwas näher angesehen.
Unter Ubuntu wie auch unter Windows meldet sich der Logger als USB
Serieller Adapter an. Es lag daher nahe, das die Kommunikation ebenfalls
einfach über ein serielles Protokoll erfolgt. Unter Windows meldete sich
bei mir der Adapter als COM13 an. Ich habe dann mit dem Programm Free
Serial Monitor die Kommunikation von dem mitgelieferten RC-5
Datenausleseprogramm angesehen und analysiert.
Zum Glück ist die Kommunikation sehr einfach gestrickt, es gibt
keinerlei Verschlüsselung, es werden einfache Checksummen zur
Fehlererkennung übertragen. Jeweils einige Bytes werden für jeden Befehl
gesendet, woraufhin der Datenlogger mit den entsprechenden Datenbytes
antwortet.
Die Kommunikation mit dem Datenlogger wird als erstes überprüft mit den
folgenden Bytes (alle im Hex Format)
CC 0A 00 D6.
CC ist hier das Startbyte, das eigentliche Kommando ist 0A 00 und D6
ist die einfache Checksumme der 3 vorhergehenden Bytes.
Nur beim ersten Aufruf antwortet der Datenlogger DL mit
55 A5 FA
Alle Antworten des DL werden mit dem Byte 55 gestartet, A5 bedeutet hier
Sucess und FA ist wieder die Checksumme.
Der wichtigste Befehl ist der Upload Befehl, mit dem die Daten des DL
ausgelesen werden.
Dieser Befehl wie auch alle weiteren zum DL gesendeten Befehle beginnen
mit 33.
Zum Upload muss erst die Anzahl der bereits gespeicherten Datenpunkte
ausgelesen werden. Dies geschieht mit
33 01 01 00 35
01 01 00 ist das Kommando für Get Numberpoints und Startzeit, 33 das
Befehlsstartbyte und 35 wieder die Checksum.
Die Antwort darauf ist dann zB.:
55 00 03 07 E0 01 0D 0E 2F 35 BC
55 das Startbyte der Antwort, 00 03 der Hexwert der Anzahl der bereits
aufgezeichneten Datenworte, also hier 3, dann der Startzeitpunkt 07 E0
das Jahr (dezimal umgerechnet 2016) 01 der Monat Januar, 0D der Tag 13.,
0E die Stunde 14, 2F die Minute 47, und 35 die Startsekunde 53, also
13. Januar 2016, 13:47:53.
Da jetzt die Anzahl der Messpunkte bekannt ist kann für den eigentlichen
Auslesevorgang ein entsprechend großes Datenfeld reserviert werden. Das
eigentliche Auslesen erfolgt dann mit
33 01 02 00 36
Die Antwort ist dann zB.:
55 00 EA 00 EB 00 EB 15
jeweils zwei Byte speichern den Temperaturwert, 00 EA entspricht dezimal
234 und damit der Temperatur 23.4 Grad Celsius! 00 EB also 23.5 Grad
Celsiu.
Da die Anzahl der Datenpunkte 3 war, wurden auch drei Werte ausgelesen.
Wenn viele Werte abgespeichert wurden, können diese auch durch
wiederholtes senden von 33 01 02 00 36 Blockweise abgerufen werden (zB.
jeweils 64 Werte je nach Größe des vorhandenen Lesepuffers)
Ich bin gerade dabei unter Ubuntu mit der Gambas3 IDE ein passendes
Konsolenprogramm zu schreiben, mit dem auch die anderen Befehle gesendet
und ausgewertet werden können. Es fehlt zB. Noch das Setzen aller
Parameter des Datenloggers.
Auszug:
1
Public Sub Main()
2
3
Dim connection_ok As Byte[] = [&CC, &h0A, &00, &D6]
4
Dim get_number_of_points As Byte[] = [&33, &01, &01, &00, &35]
5
Dim upload_data As Byte[] = [&33, &01, &02, &00, &36]
Hallo Axel
Das ist ja der Hammer! Habe mir per Zufall auch genau den Datenlogger
gekauft und die letzte halbe Stunde damit verbracht das Protokoll zu
studieren. Bin jedoch noch nicht so weit gekommen wie du!
Zum Glück habe ich doch noch schnell gegoogelt....
Ich hätte auch interesse an einem Command Line Interface, das unter
GNU/Linux läuft, also vielen Dank fürs Teilen der Infos!
Liebe Grüsse
Jonas
Ein funktionierende Software gibt es hier:
https://github.com/civic/elitech-datareader
Nur scheitere ich gerade an der Bedienung und bekomme das Ding nicht
mehr gestartet...