Forum: Mikrocontroller und Digitale Elektronik Temperatur Datenlogger RC-5


von Axel S. (axelac)


Angehängte Dateien:

Lesenswert?

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]
6
  Dim abyte As Byte
7
  Dim anzahl As Integer
8
  Dim i, j As Integer
9
  Dim zeit As Date
10
11
  usb_open()
12
  
13
  usb_write(connection_ok)
14
  usb_read()
15
  
16
  usb_write(get_number_of_points)
17
  usb_read()
18
  anzahl = ((256 * Asc(Mid$(rx, 2, 1)) + Asc(Mid$(rx, 3, 1))))
19
  Print "Anzahl :";; anzahl,
20
  zeit = Date((256 * Asc(Mid$(rx, 4, 1)) + Asc(Mid$(rx, 5, 1))), Asc(Mid$(rx, 6, 1)), Asc(Mid$(rx, 7, 1)), Asc(Mid$(rx, 8, 1)), Asc(Mid$(rx, 9, 1)), Asc(Mid$(rx, 10, 1)))
21
  Print "Startzeit :";; zeit
22
  
23
  usb_write(upload_data)
24
….
Mit den bisher bekannten Infos sollte es aber leicht sein, für jede 
Systemumgebung passende Ausleseprogramme zu entwickeln.

von Jonas H. (hagis)


Lesenswert?

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

: Bearbeitet durch User
von Bernd (Gast)


Lesenswert?

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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.