Drucken

Die im EnergyCounter erfassten Messwerte werden über ein RFM12B-Funkprotokoll auf 868MHz an die BaseStation übertragen. Die BaseStation dient als Gateway und reicht die Messwerte per LAN/WLAN an OpenHAB weiter. Der EnergyCounter kann unterschiedlich konfiguriert werden:

Wurden im Sketch beide Messfunktionen ausgewählt, erfolgt die Übertragung der beiden Funktionen in getrennten Funkpaketen. Dies ist darin begründet, dass ein Funkpaket maximal 66 Byte Nutzdaten transportieren kann!

 

Paketrahmen Funk

Zum Einsatz kommt die Arduino-Library von JeeLabs, welche für die RFM12B-Funkmodulegeschrieben wurde. Die Struktur der Funkpakete muss exakt definiert sein, damit die Basisstation aus der per Funk übertragenen Byte-Folge die einzelnen Messwerte identifizieren und in einen URL-Aufruf für den OpenHAB-Server transferieren kann.

0xAA 0xAA 0xAA 0x2D Group HDR LEN DATA CRC CRC

Die Bedeutung der Paketbestandteile:

0xAA Preamble [3 Byte]
0xAA
0xAA
0x2D Sync [1 Byte]
Group NetGroup [1 Byte]
HDR Header [1 Byte]
LEN Länge Nutzlast [1 Byte]
DATA Nutzlast [0..66 Bytes]
CRC CRC [2 Bytes]
CRC

Header

Der Header eines Pakets besteht aus einem Byte:

CTL DST ACK          Node ID       

dies bedeutet

CTL Control Bit: Steuert, ob ein Paket als normales Daten- oder Acknowledge-Paket interpretiert wird
DST Destination Bit: 0=Broadcast, 1=Daten an einen definierten Knoten senden
ACK Acknowledge Bit: 0=Kein Ack., 1=Ack.
Node ID 5 Bit: ID = 0...31

Zusammenfassend werden folgende Kombinationen verwendet:

  

Nutzlast

Jedes Datenpaket kann eine maximale Nutzlast von 66 Byte befördern. In diesen 66 Byte sind alle Messdaten, Status- und Fehlermeldungen unterzubringen. Die Kopplung zwischen Sensor und Basistation ist bidirektional und beinhaltet unterschiedliche Telegramme.

 

S0-Zählimpulse

Wenn der SerialMonitor der IDE geöffnet ist, werden die Daten im Klartext angezeigt. Die "Variable" wird mit ausgegeben, um die Identifizierung zu vereinfachen.

Variable Typ Werte Bedeutung
P Byte 1 Package Type: 1=S0-Werte
Byte 0...255 Paket-Sequenz: fotlaufendes Hochzählen des Pakets
C0  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 0 
C1  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 1
C2  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 2
C3  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 3
C4  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 4
C5  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 5
C6  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 6
C7  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 7
C8  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 8
C9  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 9
C10  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 10
C11  Unsigned Integer 0...65535 S0-Impulse innerhalb Sample Interval Channel 11
SI Unsigned Integer 0...65535 Sample Interval in Sekunden. Default=60

Die Übertragung per Funkpaket erfolgt binär, wobei der Typ "Byte" ein Byte belegt und der Typ "Integer" zwei Byte. Dadurch wird das Funkpaket kurz gehalten.

 

Solarthermie-Werte

Wenn der SerialMonitor der Arduino-IDE geöffnet ist, werden die Daten im Klartext angezeigt. Die "Variable" wird mit ausgegeben, um die Identifizierung zu vereinfachen.

Variable Typ Werte Bedeutung
P Byte 2 Package Type: 2=Solarthermie-Werte
S Byte 0...255 Paket-Sequenz: fotlaufendes Hochzählen des Pakets
T0 Integer -32767...32767 Temperatur in 0,01°C: Vorlauf Solar
T1 Integer -32767...32767 Temperatur in 0,01°C: Rücklauf Solar
T2 Integer -32767...32767 Temperatur in 0,01°C: Schichtspeicher oben
T3 Integer -32767...32767 Temperatur in 0,01°C: Schichtspeicher mitte
T4 Integer -32767...32767 Temperatur in 0,01°C: Schichtspeicher unten
IMP Unsigned Integer 0...65535 Solarpumpen-Impulse
FR Unsigned Integer 0...65535 Solar Flow in 0,1 L
HP Unsigned Integer 0...65535 Heat Power in 0,1 W (Leistung)
HQ Unsigned Integer 0...65535 Heat Quantity in 0,1 Wh (Energie)
PU Unsigned Integer 0...65535 Laufzeit in Sekunden: Solarpumpe
BU Unsigned Integer 0...65535 Laufzeit in Sekunden: Gasbrenner
WW Unsigned Integer 0...65535 Laufzeit in Sekunden: Warmwasser-Anforderung 
HTG Unsigned Integer 0...65535 Laufzeit in Sekunden: Heizungs-Anforderung 

Die Übertragung per Funkpaket erfolgt binär, wobei der Typ "Byte" ein Byte belegt und der Typ "Integer" zwei Byte. Dadurch wird das Funkpaket kurz gehalten.

 

Hinweis Änderungen am Funkprotokoll des EnergyCounter führen zwangsläufig zu Änderungen am Sketch der BaseStation und sind schwierig zu debuggen.