d4e569bce6
- 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>
51 lines
1.3 KiB
C
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);
|
|
}
|