Aktuelles Repository für den Heizungssensor der via LoraWAN angebunden ist
Go to file
2025-11-03 13:38:12 +01:00
.vscode add gpio handling; add downlink handling 2025-05-28 11:22:54 +02:00
boards initial commit 2025-05-22 12:46:26 +02:00
include initial commit 2025-05-22 12:46:26 +02:00
lib initial commit 2025-05-22 12:46:26 +02:00
src various implementations to increase measurement precision and lorawan performance 2025-11-03 13:38:12 +01:00
test initial commit 2025-05-22 12:46:26 +02:00
zephyr Switch to ABP activation and add temperature-based relay control 2025-10-07 17:40:57 +02:00
.gitignore initial commit 2025-05-22 12:46:26 +02:00
LoRaWAN_Payload_Description.md Add payload description 2025-10-15 11:11:49 +02:00
LoRaWAN_Payload_Description.pdf Add payload description 2025-10-15 11:11:49 +02:00
platformio.ini initial commit 2025-05-22 12:46:26 +02:00
README.md Add comprehensive setup guide and remove temperature validation 2025-10-07 19:34:56 +02:00
setup_framework.bat Fix Windows batch script - remove PowerShell dependency 2025-10-07 18:55:13 +02:00
setup_framework.ps1 Fix Windows package.json error in setup scripts 2025-10-07 17:55:25 +02:00
setup_framework.sh various implementations to increase measurement precision and lorawan performance 2025-11-03 13:38:12 +01:00

G2H LoRaWAN Heat Control

Intelligente Heizungssteuerung für STM32WL basierte LoRaWAN-Geräte mit dualer Temperaturüberwachung.

Funktionsübersicht

Sensoren

  • SHT4X: Raumtemperatur und Luftfeuchtigkeit
  • MLX90614: IR-Bodentemperatur (optional)
  • Relais: Heizungssteuerung (Ein/Aus)

Automatische Heizungsregelung

Das System schaltet die Heizung automatisch basierend auf zwei Temperaturschwellwerten:

  1. Raumtemperatur (Standard: 21°C)
  2. Bodentemperatur (Standard: 22°C, nur wenn Sensor verfügbar)

Regel: Heizung ist AN wenn beide Bedingungen erfüllt sind:

  • Raumtemperatur < Schwellwert UND
  • Bodentemperatur < Schwellwert (falls Sensor verfügbar)

Fallback: Wenn MLX90614-Sensor nicht verfügbar → nur Raumtemperatur wird überwacht.

LoRaWAN-Konfiguration

Netzwerk

  • Aktivierung: ABP (Activation by Personalization)
  • Region: EU868
  • Port: 2
  • Sendeintervall: 5 Minuten

Alle Befehle als Base64 in ChirpStack eingeben:

Relais-Steuerung

Befehl Base64 Funktion
r1:0 cjE6AA== Relais AUS + Automatik deaktiviert
r1:1 cjE6AQ== Automatik aktiviert

Temperatur-Schwellwerte

Befehl Beispiel Base64 Funktion
t1 + Wert dDESOQ== (18°C) Raumtemperatur-Schwellwert setzen
t1 + Wert dDFVUQ== (21°C) Raumtemperatur-Schwellwert setzen
t1 + Wert dDFZWQ== (25°C) Raumtemperatur-Schwellwert setzen
t2 + Wert dDIUFQ== (20°C) Bodentemperatur-Schwellwert setzen
t2 + Wert dDIWFg== (22°C) Bodentemperatur-Schwellwert setzen
t2 + Wert dDIZGQ== (25°C) Bodentemperatur-Schwellwert setzen

Hinweis: Alle Temperaturwerte von 0-255°C sind möglich.

Alle 5 Minuten wird ein 7-Byte Datenpaket gesendet:

Byte Inhalt Format
0-1 Raumtemperatur int16 × 100 (z.B. 2134 = 21.34°C)
2-3 Bodentemperatur int16 × 100
4-5 Luftfeuchtigkeit int16 × 100 (z.B. 4520 = 45.20%)
6 Relais-Status 0 = AUS, 1 = AN

Betriebsmodi

1. Automatik-Modus (Standard)

  • Heizung wird automatisch basierend auf Temperaturschwellwerten gesteuert
  • Beide Temperaturen werden überwacht (falls MLX-Sensor verfügbar)

2. Manueller Override

  • Aktiviert durch r1:0 → Heizung permanent AUS
  • Deaktiviert durch r1:1 oder neue Schwellwert-Befehle

3. Sensor-Fallback

  • Wenn MLX90614 nicht verfügbar → nur Raumtemperatur wird überwacht
  • Automatische Erkennung bei jedem Lesezyklus

Status-Ausgabe

Über serielle Konsole (115200 baud):

hum: 45.20%
temp: 21.34 °C
floor_temp: 19.87 °C
relais: 1 (manual: 0, temp_th: 21°C, floor_th: 22°C)
  • relais: 0=AUS, 1=AN
  • manual: 0=Automatik, 1=Manueller Override
  • temp_th: Raumtemperatur-Schwellwert
  • floor_th: Bodentemperatur-Schwellwert

Fehlerbehandlung

MLX90614-Sensor nicht verfügbar

[ERR] MLX90614 reading sensor values failed 5 times with error 251!

→ System wechselt automatisch zu Raumtemperatur-only Modus

LoRaWAN-Verbindungsfehler

[WRN] LoRaWAN busy (duty cycle), retrying in 1s...

→ Automatische Wiederholung nach 1 Sekunde

Beispiel-Szenarien

Szenario 1: Normale Heizung

  • Raumtemp: 19°C (< 21°C) ✓
  • Bodentemp: 20°C (< 22°C) ✓
  • Resultat: Heizung AN

Szenario 2: Überhitzungsschutz

  • Raumtemp: 23°C (≥ 21°C) ✗
  • Bodentemp: 20°C (< 22°C) ✓
  • Resultat: Heizung AUS

Szenario 3: Bodentemperaturschutz

  • Raumtemp: 19°C (< 21°C) ✓
  • Bodentemp: 25°C (≥ 22°C) ✗
  • Resultat: Heizung AUS

Szenario 4: Sensor-Ausfall

  • Raumtemp: 19°C (< 21°C) ✓
  • MLX-Sensor: Nicht verfügbar
  • Resultat: Heizung AN (nur Raumtemp wird geprüft)

Setup & Installation

1. Framework Setup (Windows)

# Automatische PlatformIO-Konfiguration
setup_framework.bat

2. Neues Gerät einrichten

2.1 ChirpStack Konfiguration

  1. Application erstellen (falls nicht vorhanden):

    • Name: G2H-Heat-Control
    • Description: LoRaWAN Heizungssteuerung
  2. Device Profile erstellen (falls nicht vorhanden):

    • Name: STM32WL-ABP
    • Region: EU868
    • MAC Version: 1.0.4
    • Regional Parameters Revision: RP002-1.0.3
    • Activation: ABP
    • Class: A
    • Supports OTAA:
    • ADR Algorithm: Default
  3. Device erstellen:

    • General Tab:

      • Device name: Heat-Controller-001 (eindeutig wählen)
      • Device description: Heizungssteuerung Raum XY
      • Device EUI: Neue eindeutige EUI generieren (z.B. 4633500400ABCD01)
      • Device Profile: STM32WL-ABP
      • Skip FCnt check: (für Entwicklung/Test)
    • Activation Tab (ABP):

      • Device address: Neue Adresse generieren (z.B. 01234567)
      • Network session key: 32 Zeichen Hex (z.B. 268FDA933F4CAEBF96A30FE76027A41E)
      • Application session key: 32 Zeichen Hex (z.B. 408009CA1D9FE2B822F4684D76331300)

2.2 Firmware-Konfiguration

Öffne src/lora/lorawan.h und trage die ChirpStack-Werte ein:

/* ABP Configuration */
#define LORAWAN_DEV_ADDR {0x01, 0x23, 0x45, 0x67}  // Device Address (Big Endian!)
#define LORAWAN_NWKS_KEY {0x26, 0x8F, 0xDA, 0x93, \  // Network Session Key
                          0x3F, 0x4C, 0xAE, 0xBF, \
                          0x96, 0xA3, 0x0F, 0xE7, \
                          0x60, 0x27, 0xA4, 0x1E}
#define LORAWAN_APPS_KEY {0x40, 0x80, 0x09, 0xCA, \  // Application Session Key
                          0x1D, 0x9F, 0xE2, 0xB8, \
                          0x22, 0xF4, 0x68, 0x4D, \
                          0x76, 0x33, 0x13, 0x00}

Wichtig: DevEUI wird in src/lora/lorawan.c gesetzt:

// Zeile ~113-120: Eindeutige DevEUI eintragen
dev_eui[0] = 0x46;  // Entspricht ChirpStack DevEUI
dev_eui[1] = 0x33;  // 4633500400ABCD01 wird zu:
dev_eui[2] = 0x50;  // {0x46, 0x33, 0x50, 0x04,
dev_eui[3] = 0x04;  //  0x00, 0xAB, 0xCD, 0x01}
dev_eui[4] = 0x00;
dev_eui[5] = 0xAB;
dev_eui[6] = 0xCD;
dev_eui[7] = 0x01; // Letztes Byte für Gerät eindeutig machen

2.3 Format-Konvertierung ChirpStack → Code

ChirpStack Code Format Beispiel
Device Address: 01234567 {0x01, 0x23, 0x45, 0x67} Big Endian Bytes
DevEUI: 4633500400ABCD01 dev_eui[0] = 0x46; ... dev_eui[7] = 0x01; Byte Array
Session Keys: 268F...A41E {0x26, 0x8F, ..., 0x1E} 16 Byte Array

3. Build & Flash

# Projekt kompilieren
pio run

# Firmware flashen (Device per USB verbinden)
pio run -t upload

4. Verification

  1. Serielle Konsole öffnen (115200 baud):

    === Device starting ===
    DevEUI: 46:33:50:04:00:AB:CD:01
    DevAddr: 0x67452301
    ✓ Successfully activated LoRaWAN network via ABP
    
  2. ChirpStack Monitoring:

    • Device sollte nach ~30 Sekunden erste Uplinks senden
    • LoRaWAN Frames Tab: Uplinks alle 5 Minuten
    • Payload: 7 Bytes Sensordaten
  3. Test Downlink:

    • In ChirpStack: Queue Downlink
    • Payload: cjE6AA== (Base64)
    • Port: 2
    • Confirmed:

5. Troubleshooting

  • DevEUI in Code korrekt gesetzt?
  • DevAddr Big Endian konvertiert?
  • Session Keys richtig formatiert?
  • Gateway in Reichweite und online?

ABP Activation Failed

  • Device Profile auf ABP konfiguriert?
  • Skip FCnt Check aktiviert?
  • Korrekte Region (EU868)?

Sensor Fehler

[ERR] MLX90614 reading sensor values failed 5 times

→ Normal wenn kein Bodensensor angeschlossen, System läuft trotzdem