Files
Shinebridge/ShineLAN-X/firmware/include/config_manager.h
T
retr0 d4e569bce6 ShineLAN-X: Web-Konfigurations-UI + EEPROM-Config
- Tasmota-artiges Web-Interface auf Port 80 (DHCP/IP, MQTT, Intervall)
- NetConfig-Struct in EEPROM (Magic 0xA55A1234, Defaults bei erstem Boot)
- config.h bereinigt: keine Geheimnisse mehr, nur DEFAULT_*-Werte
- config_manager.h neu: configLoad/Save/Defaults
- USB CDC Build-Flags wiederhergestellt (-DUSBCON etc.)
- SPH 5000: power_to_grid (1021) + power_to_user (1029) ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 14:29:11 +02:00

51 lines
1.3 KiB
C

#pragma once
#include <Arduino.h>
#include <EEPROM.h>
#include "config.h"
#define CFG_MAGIC 0xA55A1234
struct NetConfig {
uint32_t magic;
bool useDhcp;
uint8_t ip[4];
uint8_t gw[4];
uint8_t sn[4];
uint8_t dns[4];
char mqttBroker[40];
uint16_t mqttPort;
char mqttUser[32];
char mqttPass[64];
uint32_t updateMs;
};
inline void configDefaults(NetConfig& c) {
c.magic = CFG_MAGIC;
c.useDhcp = DEFAULT_DHCP;
uint8_t dip[] = {DEFAULT_STATIC_IP};
uint8_t dgw[] = {DEFAULT_GW};
uint8_t dsn[] = {DEFAULT_SUBNET};
uint8_t ddn[] = {DEFAULT_DNS};
memcpy(c.ip, dip, 4);
memcpy(c.gw, dgw, 4);
memcpy(c.sn, dsn, 4);
memcpy(c.dns, ddn, 4);
strncpy(c.mqttBroker, DEFAULT_MQTT_BROKER, sizeof(c.mqttBroker) - 1);
c.mqttBroker[sizeof(c.mqttBroker) - 1] = 0;
c.mqttPort = DEFAULT_MQTT_PORT;
strncpy(c.mqttUser, DEFAULT_MQTT_USER, sizeof(c.mqttUser) - 1);
c.mqttUser[sizeof(c.mqttUser) - 1] = 0;
strncpy(c.mqttPass, DEFAULT_MQTT_PASS, sizeof(c.mqttPass) - 1);
c.mqttPass[sizeof(c.mqttPass) - 1] = 0;
c.updateMs = DEFAULT_UPDATE_MS;
}
inline void configLoad(NetConfig& c) {
EEPROM.get(0, c);
if (c.magic != CFG_MAGIC) configDefaults(c);
}
inline void configSave(const NetConfig& c) {
EEPROM.put(0, c);
}