Aktuelles Repository für den Heizungssensor der via LoraWAN angebunden ist
Go to file
xlemmingx f1108e678a fix heating control logic: relais now turns off when any threshold reached
Previously relais would stay on if only one threshold was exceeded.
Now relais turns off correctly when room temp OR floor temp reaches threshold.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 17:31:00 +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 fix heating control logic: relais now turns off when any threshold reached 2025-11-11 17:31:00 +01:00
test initial commit 2025-05-22 12:46:26 +02:00
zephyr disable retries 2025-11-05 12:39:21 +01:00
.gitignore initial commit 2025-05-22 12:46:26 +02:00
chirpstack3_encoder.js downlink changes 2025-11-05 16:37:08 +01:00
LoRaWAN_Payload_Description.md LoRaWAN_Payload_Description.md aktualisiert 2025-11-06 11:33:33 +01:00
LoRaWAN_Payload_Description.pdf downlink changes 2025-11-05 16:37:08 +01:00
platformio.ini initial commit 2025-05-22 12:46:26 +02:00
README_DEV.MD downlink changes 2025-11-05 16:37:08 +01:00
README.md downlink changes 2025-11-05 16:37:08 +01: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: Standard 10 Minuten (konfigurierbar 1-255 min)

Alle Befehle als Base64 in ChirpStack eingeben:

Kombinierte Konfiguration (3 Bytes)

Format: [heating_enable][room_temp][floor_temp]

Beschreibung Hex Base64 Funktion
Heizung AN, 22°C Raum, 25°C Boden 01 16 19 ARYa Automatik aktiviert mit neuen Schwellwerten
Heizung AUS 00 14 18 ABQa Heizung komplett deaktiviert
Heizung AN, 20°C Raum, 24°C Boden 01 14 18 ARQa Automatik mit niedrigeren Schwellwerten

Sendeintervall ändern (2 Bytes)

Format: 'i'[minuten]

Beschreibung Hex Base64 Funktion
5 Minuten Intervall 69 05 aQU= Häufigere Übertragung
15 Minuten Intervall 69 0F aQ8= Normale Übertragung
60 Minuten Intervall 69 3C aTw= Seltene Übertragung

Hinweis:

  • Temperaturwerte: 0-255°C möglich
  • Sendeintervall: 1-255 Minuten möglich
  • Heating Enable: 0=AUS (Relais bleibt aus), 1=AN (automatische Regelung)

Alle 10 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 Heizung AUS Befehl (Byte 0 = 0) → Heizung permanent AUS
  • Deaktiviert durch Heizung AN Befehl (Byte 0 = 1)

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 10 Minuten
    • Payload: 7 Bytes Sensordaten
  3. Test Downlink:

    • In ChirpStack: Queue Downlink
    • Payload: ARYa (Base64) - Heizung AN, 22°C Raum, 25°C Boden
    • 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