Konfigurationscode auslesen und verstehen

Bei jedem Gerät, was mit der owSlaveV2-Firmware läuft, kann ein Code abgefragt werden, der nähere Informationen über die ermittelten Werte angibt. Damit lässt sich die physikalische Messgröße (z.B. Temperatur, Druck, CO2 ...), die dazugehörige Einheit (z.B. °C, hPa, ppm ...) und sogar die Formel ermitteln, mit der die Werte berechnet werden können.

Abfrage der Config-Bytes

Der Befehl zum Abfragen der Config-Bytes (GET_CONFIG) hat den Code 0x85. Wird dieser Befehl an ein aktives Gerät (mit MATCH ROM oder SKIP ROM (0xCC) ausgwählt) gesendet, antwortet der 1-Wire-Slave mit einem 26 Byte langen Code.

Aufbau des Config-Codes

Byte 0 Messgröße Wert 1
Byte 1Berechnung Wert 1
Messgröße Wert 2
.Berechnung Wert 2
.Messgröße Wert 3
.Berechnung Wert 3
Messgröße Wert 4
Byte 7Berechnung Wert 4
Byte 8Mikrocontroller
Byte 9Sensor 1
Sensor 2
.Sensor 3
.Sensor 4
.frei
frei
frei
Byte 16frei
Byte 17OWID 2. Gerät Byte 0
Byte 18OWID 2. Gerät Byte 1
OWID 2. Gerät Byte 2
.OWID 2. Gerät Byte 3
.OWID 2. Gerät Byte 4
.OWID 2. Gerät Byte 5
OWID 2. Gerät Byte 6
Byte 24CRC
Byte 25CRC 2. Byte bei CRC16

Maximal vier Kanäle können spezifiziert werden. Das ist für alle gängigen 1-Wire-Chips ausreichend. Die Bytes 0-7 enthalten jewails abwechselnd einen Code, der den Messwert beschreibt und einen Code für eine Formel. Damit lassen sich aus den RAW-Daten die physikalischen Werte berechnen.

Es folgt ein Byte was angibt, welcher Mikroconroller verwendet wird. Vor dem 24-Byte langen Info-Code gab es bereits einen 16-Byte Info-Code. Bei diesem steht an dieser Stelle immer 0x01. Byte 9-12 geben an, mit welchen Sensoren die Werte 1-4 gemessen werden. Die Bytes 13-16 sind noch frei. Sie kommen eventuell für Statusabfragen (z.B. beim VOC Sensor) in Frage.

Byte 17-23 geben die ID des anderen 1-Wire-Devices an, wenn zwei Geräte auf einen Conroller simuliert werden. Das CRC-Byte der ID entfällt dabei. Wird nur 1-Gerät simuliert, sind diese Bytes 0x00.

Für 1-Wire-Chips, die einen 8-Bit CRC verwänden, kommt jetzt das CRC8 Byte. Für Chips mit CRC16 kommen zwei CRC-Bytes. Die CRC-Generierung erfolgt entsprechend den Regeln, die in den Datenblättern beschrieben sind.

Codierung der Messgrößen und Einheiten

CodeMessgrößeEinheit
0Nicht vorhanden-
1Temperatur°C
2LuftdruckhPa
3Beleuchtungsstärkelx
4Luftfeuchte%
5Konstante-
6SpannungV
7StrommA
8VOCppm
9Zähler-
10CO2ppm
11WiderstandkOhm
12Windgeschwindigkeitm/s
13Windgeschwindigkeit maxm/s
14Windrichtung°
15Windrichtung Varianz°
16Beleuchtungsstärke Rotlx
17Beleuchtungsstärke Grünlx
18Beleuchtungsstärke Blaulx
19Feinstaubkonzentration PM1 0.3-1.0 µmµg/m³
20Feinstaubkonzentration PM2.5 0.3-2.5 µmµg/m³
21Feinstaubkonzentration PM4 0.3-4.0 µmµg/m³
22Feinstaubkonzentration PM10 0.3-10.0 µmµg/m³
23Partikelzahl PM0.5
0.3-0.5 µm
Anzahl/cm³
24Partikelzahl PM1
0.3-1.0 µm
Anzahl/cm³
25Partikelzahl PM2.5
0.3-2.5 µm
Anzahl/cm³
26Partikelzahl PM4
0.3-4.0 µm
Anzahl/cm³
27Partikelzahl PM10
0.3-10.0 µm
Anzahl/cm³
28Durchschnittliche Partikelgrößeµm
29Gewichtg
30Gewichtkg
31magnetischen Flussdichte
z.B. 49.32 µT
µT
32magnetischen Flussdichte x
z.B. -9.22 µT
µT
33magnetischen Flussdichte y
z.B. 4.21 µT
µT
34magnetischen Flussdichte z
z.B. -70.32 µT
µT
35radioaktive DosisleistungµSv/h
36Geigerzähler Counts pro MinuteC/min
37DifferenzdruckPa
38O2%
39O3ppm
40NOxppm
41COppm
42CH4ppm
Hier sind alle Messgrößen aufgezählt, die bisher von mir verwendet wurden. Die Liste kann beliebig erweitert werden. Es sind ja noch 244 Möglichkeiten frei. Wer eigene Größen hier einpflegen möchte, kann sich einfach über das Kontaktformular bei mir melden.

Codierung der Formeln

CodeFormelAnmerkungen
0Nicht vorhanden
1X1/16z.B. Temperatur von DS18B20
2X1/1.6
3X1*0.2+700Luftdruck über DS18B20
4ex1/160 e ist 2.71828
5X1*62.5 + 55000
6X1/256Temperatur von DS2438
7((X3 / X2 - 0.16) / 0.0062) / (1.0546 - 0.00216*X1/256.0)Luftfeuchte HIH4031 an DS2430
X1: Temperatur (RAW 16Bit)
X2: VDD
X3: VAD
8X1/100Spannung DS2438
9X1/65535*5.1Spannung DS2450
10X1/65535*2.55Spannung DS2450
11X1/65535*1.1Spannung DS2450 Simulation mit interner Spannungsreferenz
12X1/10DHT22 Luftfeuchte direkt
13X1Keine Berechnung
14(X1 - 32767) / 100Temperatur DS2450
15e(X1-32767)/1000Beleuchtungsstärke DS2450
16X1/32Luftdruck DS2450
17X1*0.2441/1000VSens DS2438
18X1/8VOC in ppm TGS8100
19X1/500*14VOC DS2423
20X1*0.5+700Luftdruck DS2438
21X1+1280CO2 über DS18B20
22X1*10CO2 ueber DS2438/VAD
23X1*0,025+700Luftruck DS2438 Temp
24X1*1.1/1024Attiny ADC mit Ref Spannung
25X1*3/1024Attiny ADC mit VCC=3V
26X1*5/1024Attiny ADC mit VCC=5V
27(X3+X2/1000)/8VOC für DS2438
X2: VDD
X3: VAD
28eX1/2560Helligkeit über Temperatur von DS2438
29X2*10+X3/100CO2 und Luftdruck für DS2438
X2: VDD
X3: VAD
30X1/2
31X1/4
32X1/5
33 X1|X2<<16 32bit aus 2x 16bit
34(X1-1e9)/1000032bit Festkommawert mit 4 Nachkommestellen

Die meisten Formeln sind recht einfach umzusetzen. Formel 7 ist für den Standart HIH403X Sensor. Dort muss auch die Temperatur und die Betriebsspannung mit in die Berechnung eingehen. Als Ausgangswert dient immer der RAW-Wert, der vom Gerät gelesen wird, also meist ein 16-Bit Integer-Wert.

Codierung der Sensoren und Mikrocontroller

Der hauptsächliche Grund, warum die Zahl der Configurations-Bytes auf 24 Byte (ohne CRC) erhöht wurde, ist die Codierung der verschiedenen Sensoren, die am Mikrocontroller angeschlossen sind. Das erleichtert das Finden der richtigen Firmware für ein Update und hilft beim Vergleichen der Sensoren.

CodeMikrocontroller
0Nicht Angegeben
1alter 16 Bit Info-Code
2ATtiny84AStandard Controller
3ATtiny44Kein Bootloader möglich
4ATmega328
5ATtiny1624
6ATtiny1627
7ATtiny1604
8ATtiny1607
9ATtiny1614
10ATtiny1617
11ATtiny3224
12ATtiny3227

Gleiches gilt für die Codierung der Mikrocontoller. Im Moment habe ich mich nur auf den ATtiny84A beschränkt, da er relativ klein ist und vor allem eine sehr geringe Leistungsaufnahme hat (im Vergleich zu anderen Atmel, PIC, MSP430 usw. Mikrocontrollern).

CodeSensorAnmerkungen
0Nicht angegeben
1DS18B20Temperatur Sensor
2DS2438Temperatur Sensor
3DS2438Spannung
4DS2438Spannung / Strom
5DS2450Spannung
6ThermoelementHochtemperatur Sensor
7SHT21Feuchte/Temperatur Sensor
8SHT25Feuchte/Temperatur Präzisionssensor
9DHT22Feuchte/Temperatur Sensor
10HIH9021Feuchte/Temperatur Präzisionssensor
11HDC1080Feuchte/Temperatur Sensor
12HIH4030Feuchte/Temperatur Sensor analog
13HIH5030Feuchte/Temperatur Sensor analog
14BMP280Luftdrucksensor
15MAX44009Umgebungslicht-Sensor
16CDM7160CO2-Sensor
17MAX1164/TGS8100 VOC-Sensor
18TGS8100 direktVOC-Sensor
19DS2423 Counter
20AVR A/D WandlerInterner A/D-Wandler
21SHT35Feuchte/Temperatur Präzisionssensor +-1,5%
22SHT31Feuchte/Temperatur Präzisionssensor +-2% über den gesamten Messbereich!
23APDS-9960RGB-, Umgebungslicht-, Näherungs- und Gestensensor
24BME680VOC/Luftdruck/ Feuchte/ Temperatursensor von Bosch
25SGP30VOC Sensor von Senserion (Dual)
26SGPC3VOC Sensor von Senserion
27iAQ-core CVOC Sensor von ams
28HDC2010Feuchte/Temperatur Präzisionssensor +-2% 1,8 V
29LPS225HBDrucksensor von ST
30SHTC3Feuchte/Temperatur Präzisionssensor +-2% / +-0,2%
31SPS30Sensirion Feinstaub Sensor
32DHT11Feuchte/Temperatur-Sensor
33SCD30Sensirion NDIR CO2 Sensor
34SCD40Sensirion miniatur NDIR CO2 Sensor
35HX711Wage System
36SGP40Sensirion VOC Sensor
37HTU21DTemperatur / Feuchte
38Geiger Zähler
39RM3100Magnetfeld Messsystem
40SDP810Differenzdrucksensor
41BMP390Luftdruck Sensor

Das Modul 27/28 hat als DS2450 also dann den CODE:

1 / 14 / 4 / 8 / 3 / 15 / 2 / 16 / 2 / 7 / 7 / 15 / 14 / 0 / 0 / 0....

Weiter geht es mit einigen Programmierbeispielen >>

You have no rights to post comments

Zum Seitenanfang