Christian Mueller e706b22f31 Add design specification for LoRaWAN Web Portal
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>
2026-03-19 22:27:49 +01:00

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)

  1. Gehe zu Device ProfilesCreate
  2. 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:

Application erstellen

  1. Gehe zu ApplicationsCreate
  2. Name: HC-SR04-Sensors (oder einen anderen Namen)

Device hinzufügen

  1. Öffne deine Application

  2. Klicke auf Create Device

  3. 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
  4. Nach dem Erstellen → Gehe zu Keys (OTAA)

  5. Trage ein:

    • Application key: A1B2C3D4E5F6071829384756ABCDEF12
    • Network key: (leer lassen oder gleicher Wert für LoRaWAN 1.0.x)
  6. Application EUI wird automatisch von der Application übernommen oder kann manuell gesetzt werden:

    • Nutze: 70B3D57ED0000001

2. The Things Network (TTN) Konfiguration

Application erstellen

  1. Gehe zu console.thethingsnetwork.org
  2. ApplicationsAdd application
  3. Application ID: hc-sr04-sensors

Device registrieren

  1. Öffne deine Application

  2. Register end device

  3. Einstellungen:

    • Activation mode: Over the air activation (OTAA)
    • LoRaWAN version: MAC V1.0.3
    • Frequency plan: Europe 863-870 MHz (SF9 for RX2)
  4. Provisioning information:

    • JoinEUI (AppEUI): 70B3D57ED0000001
    • DevEUI: 70B3D57ED005A1B2 (oder generieren lassen)
    • AppKey: A1B2C3D4E5F6071829384756ABCDEF12 (oder generieren lassen)
  5. End device ID: hc-sr04-sensor-01

  6. 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:

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

  1. Gehe zu deinem Device
  2. Öffne LoRaWAN frames oder Live data
  3. Du solltest Join Request und Join Accept sehen
  4. Danach sollten Uplink Nachrichten mit den Sensordaten ankommen

Troubleshooting

"EV_JOINING" wiederholt sich, aber kein "EV_JOINED"

Mögliche Ursachen:

  1. Keys falsch - Überprüfe LSB/MSB Format
  2. Kein Gateway in Reichweite
  3. Falsche Frequenz - EU868 vs. US915 etc.
  4. 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:


Tipp: Speichere deine Keys sicher ab! Du brauchst sie, wenn du das Device neu flashen musst oder ein zweites Device hinzufügen möchtest.