#include "myconfig.h" // esp-idf includes #include #include using namespace std::chrono_literals; namespace deckenlampe { nvs_handle_t nvsHandle; namespace config { ConfigWrapper hostname{"hostname", "deckenlampe1"}; ConfigWrapper sta_ssid{"sta_ssid", "ScheissAP"}; ConfigWrapper sta_key{"sta_key", "Passwort_123"}; ConfigWrapper ap_ssid{"ap_ssid", "deckenlampe1"}; ConfigWrapper ap_key{"ap_key", "Passwort_123"}; ConfigWrapper enable_webserver{"enable_webserver", true}; ConfigWrapper enable_mdns{"enable_mdns", true}; ConfigWrapper enable_mqtt{"enable_mqtt", true}; ConfigWrapper broker_url{"broker_url", "mqtt://192.168.0.2/"}; ConfigWrapper enable_lamp{"enable_lamp", true}; ConfigWrapper pins_lamp{"pins_lamp", GPIO_NUM_4}; ConfigWrapper invertLamp{"invertLamp", true}; ConfigWrapper topic_lamp_availability{"topic_lamp_availability", "dahoam/wohnzimmer/deckenlicht1/available"}; ConfigWrapper topic_lamp_status{"topic_lamp_status", "dahoam/wohnzimmer/deckenlicht1/status"}; ConfigWrapper topic_lamp_set{"topic_lamp_set", "dahoam/wohnzimmer/deckenlicht1/set"}; ConfigWrapper enable_switch{"enable_switch", true}; ConfigWrapper pins_switch{"pins_switch", GPIO_NUM_35}; ConfigWrapper invert_switch{"invert_switch", true}; ConfigWrapper topic_switch_availability{"topic_switch_availability", "dahoam/wohnzimmer/schalter1/available"}; ConfigWrapper topic_switch_status{"topic_switch_status", "dahoam/wohnzimmer/schalter1/status"}; ConfigWrapper enable_dht{"enable_dht", true}; ConfigWrapper pins_dht{"pins_dht", GPIO_NUM_33}; ConfigWrapper topic_dht11_availability{"topic_dht11_availability", "dahoam/wohnzimmer/dht11_1/available"}; ConfigWrapper topic_dht11_temperature{"topic_dht11_temperature", "dahoam/wohnzimmer/dht11_1/temperature"}; ConfigWrapper topic_dht11_humidity{"topic_dht11_humidity", "dahoam/wohnzimmer/dht11_1/humidity"}; ConfigWrapper enable_i2c{"enable_i2c", true}; ConfigWrapper pins_sda{"pins_sda", GPIO_NUM_16}; ConfigWrapper pins_scl{"pins_scl", GPIO_NUM_17}; ConfigWrapper enable_tsl{"enable_tsl", true}; ConfigWrapper topic_tsl2561_availability{"topic_tsl2561_availability", "dahoam/wohnzimmer/tsl2561_1/available"}; ConfigWrapper topic_tsl2561_lux{"topic_tsl2561_lux", "dahoam/wohnzimmer/tsl2561_1/lux"}; ConfigWrapper enable_bmp{"enable_bmp", true}; ConfigWrapper topic_bmp085_availability{"topic_bmp085_availability", "dahoam/wohnzimmer/bmp085_1/available"}; ConfigWrapper topic_bmp085_pressure{"topic_bmp085_pressure", "dahoam/wohnzimmer/bmp085_1/pressure"}; ConfigWrapper topic_bmp085_temperature{"topic_bmp085_temperature", "dahoam/wohnzimmer/bmp085_1/temperature"}; ConfigWrapper topic_bmp085_altitude{"topic_bmp085_altitude", "dahoam/wohnzimmer/bmp085_1/altitude"}; ConfigWrapper availableTimeoutTime{"availableTimeoutTime", 1min}; ConfigWrapper valueUpdateInterval{"valueUpdateInterval", 15s}; } // namespace config namespace { constexpr const char * const TAG = "CONFIG"; template void loadParam(ConfigWrapper &config); } // namespace void init_config() { { const auto result = nvs_flash_init(); ESP_LOG_LEVEL_LOCAL((result == ESP_OK ? ESP_LOG_INFO : ESP_LOG_ERROR), TAG, "nvs_flash_init(): %s", esp_err_to_name(result)); if (result != ESP_OK) return; } { constexpr const char* name = "deckenlampe"; const auto result = nvs_open(name, NVS_READWRITE, &nvsHandle); ESP_LOG_LEVEL_LOCAL((result == ESP_OK ? ESP_LOG_INFO : ESP_LOG_ERROR), TAG, "nvs_open() %s: %s", name, esp_err_to_name(result)); if (result != ESP_OK) return; } loadParam(config::hostname); loadParam(config::sta_ssid); loadParam(config::sta_key); loadParam(config::ap_ssid); loadParam(config::ap_key); loadParam(config::enable_webserver); loadParam(config::enable_mdns); loadParam(config::enable_mqtt); loadParam(config::broker_url); loadParam(config::enable_lamp); loadParam(config::pins_lamp); loadParam(config::invertLamp); loadParam(config::topic_lamp_availability); loadParam(config::topic_lamp_status); loadParam(config::topic_lamp_set); loadParam(config::enable_switch); loadParam(config::pins_switch); loadParam(config::invert_switch); loadParam(config::topic_switch_availability); loadParam(config::topic_switch_status); loadParam(config::enable_dht); loadParam(config::pins_dht); loadParam(config::topic_dht11_availability); loadParam(config::topic_dht11_temperature); loadParam(config::topic_dht11_humidity); loadParam(config::enable_i2c); loadParam(config::pins_sda); loadParam(config::pins_scl); loadParam(config::enable_tsl); loadParam(config::topic_tsl2561_availability); loadParam(config::topic_tsl2561_lux); loadParam(config::enable_bmp); loadParam(config::topic_bmp085_availability); loadParam(config::topic_bmp085_pressure); loadParam(config::topic_bmp085_temperature); loadParam(config::topic_bmp085_altitude); loadParam(config::availableTimeoutTime); loadParam(config::valueUpdateInterval); } void update_config() { } namespace { template void loadParam(ConfigWrapper &config) { if (const auto value = config.readFromFlash()) config.setValue(*value); else ESP_LOGE(TAG, "error loading param %s: %.*s", config.key(), value.error().size(), value.error().data()); } } // namespace } // namespace deckenlamp