Based on Pflichtenheft v2.2, documents the full system design including daemon, API, frontend, and infrastructure with agreed deviations (Axum 0.8, SQLx 0.8, Vite 6, Tailwind 4). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7.6 KiB
LoRaWAN Keys Konfiguration
Dieses Dokument zeigt dir, wie die LoRaWAN Keys in ChirpStack und in der main.cpp eingetragen werden müssen.
Generierte Keys für dieses Projekt
Option 1: Zufällige Keys
In ChirpStack / TTN eintragen (MSB Format):
DevEUI: 70B3D57ED005A1B2
AppEUI: 70B3D57ED0000001
AppKey: A1B2C3D4E5F6071829384756ABCDEF12
In main.cpp eintragen (LSB Format):
// LoRaWAN Keys - WICHTIG: DevEUI und AppEUI in LSB Format!
static const u1_t PROGMEM APPEUI[8] = { 0x01, 0x00, 0x00, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 };
static const u1_t PROGMEM DEVEUI[8] = { 0xB2, 0xA1, 0x05, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 };
static const u1_t PROGMEM APPKEY[16] = { 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6, 0x07, 0x18, 0x29, 0x38, 0x47, 0x56, 0xAB, 0xCD, 0xEF, 0x12 };
Option 2: Einfache Keys (für Testing)
In ChirpStack / TTN eintragen (MSB Format):
DevEUI: 0000000000000001
AppEUI: 0000000000000001
AppKey: 00112233445566778899AABBCCDDEEFF
In main.cpp eintragen (LSB Format):
// LoRaWAN Keys - WICHTIG: DevEUI und AppEUI in LSB Format!
static const u1_t PROGMEM APPEUI[8] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static const u1_t PROGMEM DEVEUI[8] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static const u1_t PROGMEM APPKEY[16] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
Wichtige Hinweise zur Konvertierung
DevEUI und AppEUI: LSB (Least Significant Byte First)
Die Byte-Reihenfolge muss umgedreht werden!
ChirpStack/TTN zeigt: 70B3D57ED005A1B2
- Teile in Bytes:
70 B3 D5 7E D0 05 A1 B2 - Umdrehen:
B2 A1 05 D0 7E D5 B3 70 - In main.cpp:
{ 0xB2, 0xA1, 0x05, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 }
AppKey: MSB (Most Significant Byte First)
Die Byte-Reihenfolge bleibt gleich!
ChirpStack/TTN zeigt: A1B2C3D4E5F6071829384756ABCDEF12
- Teile in Bytes:
A1 B2 C3 D4 E5 F6 07 18 29 38 47 56 AB CD EF 12 - Nicht umdrehen!
- In main.cpp:
{ 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6, 0x07, 0x18, 0x29, 0x38, 0x47, 0x56, 0xAB, 0xCD, 0xEF, 0x12 }
Schritt-für-Schritt Anleitung
1. ChirpStack Konfiguration
Device Profile erstellen (falls noch nicht vorhanden)
- Gehe zu Device Profiles → Create
- Einstellungen:
- Name:
OTAA-EU868 - Region:
EU868(oder deine Region) - MAC Version:
1.0.3 - Regional Parameters Revision:
A - Supports OTAA: ✅ aktiviert
- Supports Class B: ❌
- Supports Class C: ❌
- Name:
Application erstellen
- Gehe zu Applications → Create
- Name:
HC-SR04-Sensors(oder einen anderen Namen)
Device hinzufügen
-
Öffne deine Application
-
Klicke auf Create Device
-
Fülle aus:
- Device name:
HC-SR04-Sensor-01 - Device description:
Ultraschallsensor HC-SR04 mit TTGO LoRa32 - Device EUI:
70B3D57ED005A1B2(oder eine eigene) - Device profile: Wähle dein OTAA Profil
- Device name:
-
Nach dem Erstellen → Gehe zu Keys (OTAA)
-
Trage ein:
- Application key:
A1B2C3D4E5F6071829384756ABCDEF12 - Network key: (leer lassen oder gleicher Wert für LoRaWAN 1.0.x)
- Application key:
-
Application EUI wird automatisch von der Application übernommen oder kann manuell gesetzt werden:
- Nutze:
70B3D57ED0000001
- Nutze:
2. The Things Network (TTN) Konfiguration
Application erstellen
- Gehe zu console.thethingsnetwork.org
- Applications → Add application
- Application ID:
hc-sr04-sensors
Device registrieren
-
Öffne deine Application
-
Register end device
-
Einstellungen:
- Activation mode: Over the air activation (OTAA)
- LoRaWAN version: MAC V1.0.3
- Frequency plan: Europe 863-870 MHz (SF9 for RX2)
-
Provisioning information:
- JoinEUI (AppEUI):
70B3D57ED0000001 - DevEUI:
70B3D57ED005A1B2(oder generieren lassen) - AppKey:
A1B2C3D4E5F6071829384756ABCDEF12(oder generieren lassen)
- JoinEUI (AppEUI):
-
End device ID:
hc-sr04-sensor-01 -
Register end device
3. main.cpp anpassen
Öffne src/main.cpp und ersetze die Keys in Zeile 22-24:
// LoRaWAN Keys - Kopiere die umgewandelten Werte hier ein
static const u1_t PROGMEM APPEUI[8] = { 0x01, 0x00, 0x00, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 }; // LSB!
static const u1_t PROGMEM DEVEUI[8] = { 0xB2, 0xA1, 0x05, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 }; // LSB!
static const u1_t PROGMEM APPKEY[16] = { 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6, 0x07, 0x18, 0x29, 0x38, 0x47, 0x56, 0xAB, 0xCD, 0xEF, 0x12 }; // MSB
Wichtig: Achte darauf, dass DevEUI und AppEUI in LSB (umgedreht) sind!
Konvertierungs-Tool
Online-Konverter
Du kannst auch einen Hex-String online umkehren:
- Hex String Reverser
- Oder nutze Python:
def convert_to_lsb(hex_string):
# Entferne Leerzeichen und teile in Bytes
hex_clean = hex_string.replace(" ", "")
bytes_list = [hex_clean[i:i+2] for i in range(0, len(hex_clean), 2)]
# Umdrehen
bytes_reversed = bytes_list[::-1]
# Als C-Array formatieren
c_array = "{ " + ", ".join([f"0x{b}" for b in bytes_reversed]) + " }"
return c_array
# Beispiel
deveui_msb = "70B3D57ED005A1B2"
print("DevEUI LSB:", convert_to_lsb(deveui_msb))
# Ausgabe: { 0xB2, 0xA1, 0x05, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 }
Überprüfung
Im Serial Monitor
Nach dem Upload solltest du sehen:
Starte HC-SR04 + OLED + LoRa
Beitritt läuft...
EV_JOINING
Nach 1-10 Sekunden (wenn das Gateway erreichbar ist):
EV_JOINED
Netzwerkbeitritt erfolgreich
Distanz gesendet:
Distanz: 123.4 cm
In ChirpStack / TTN
- Gehe zu deinem Device
- Öffne LoRaWAN frames oder Live data
- Du solltest Join Request und Join Accept sehen
- Danach sollten Uplink Nachrichten mit den Sensordaten ankommen
Troubleshooting
"EV_JOINING" wiederholt sich, aber kein "EV_JOINED"
Mögliche Ursachen:
- ❌ Keys falsch - Überprüfe LSB/MSB Format
- ❌ Kein Gateway in Reichweite
- ❌ Falsche Frequenz - EU868 vs. US915 etc.
- ❌ Device nicht in ChirpStack/TTN registriert
Lösung:
- Überprüfe die Keys noch einmal
- Stelle sicher, dass DevEUI und AppEUI umgedreht sind (LSB)
- Prüfe, ob ein Gateway in der Nähe ist (ChirpStack → Gateways)
"EV_JOIN_FAILED" oder "EV_REJOIN_FAILED"
Ursache:
- AppKey stimmt nicht überein
Lösung:
- Überprüfe den AppKey in ChirpStack und main.cpp
- AppKey wird nicht umgedreht (MSB Format)
Zusammenfassung der Keys
| Key | Format in ChirpStack/TTN | Format in main.cpp | Umdrehen? |
|---|---|---|---|
| DevEUI | 70B3D57ED005A1B2 |
{ 0xB2, 0xA1, 0x05, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 } |
✅ Ja (LSB) |
| AppEUI | 70B3D57ED0000001 |
{ 0x01, 0x00, 0x00, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 } |
✅ Ja (LSB) |
| AppKey | A1B2C3D4E5F6071829384756ABCDEF12 |
{ 0xA1, 0xB2, 0xC3, 0xD4, ..., 0x12 } |
❌ Nein (MSB) |
Eigene Keys generieren
Mit OpenSSL (Linux/Mac):
# AppKey (16 Bytes = 128 Bit)
openssl rand -hex 16
Mit Python:
import secrets
# AppKey (16 Bytes)
appkey = secrets.token_hex(16)
print(f"AppKey: {appkey.upper()}")
# DevEUI (8 Bytes) - optional mit Prefix
deveui = "70B3D57E" + secrets.token_hex(4)
print(f"DevEUI: {deveui.upper()}")
Online:
- Random Hex Generator
- Wähle 16 Bytes für AppKey
- Wähle 8 Bytes für DevEUI/AppEUI
Tipp: Speichere deine Keys sicher ab! Du brauchst sie, wenn du das Device neu flashen musst oder ein zweites Device hinzufügen möchtest.