Skip to content

Commit

Permalink
dynamic config
Browse files Browse the repository at this point in the history
(cherry picked from commit cbcc11c0c35236027494c85a1600ad0f6411da34)
  • Loading branch information
mathieucarbou committed Jun 21, 2024
1 parent a8dbfca commit 182f78e
Show file tree
Hide file tree
Showing 6 changed files with 134 additions and 33 deletions.
1 change: 1 addition & 0 deletions include/YaSolR.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ extern Mycila::Task displayTask;
extern Mycila::Task carouselTask;
extern Mycila::Task ds18Task;
extern Mycila::Task lightsTask;
extern Mycila::Task mqttConfigTask;
extern Mycila::Task networkManagerTask;
extern Mycila::Task networkServiceTask;
extern Mycila::Task otaTask;
Expand Down
8 changes: 4 additions & 4 deletions src/init/Boot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ Mycila::Task bootTask("Boot", [](void* params) {
config.configure(KEY_ENABLE_JSY, YASOLR_FALSE);
config.configure(KEY_ENABLE_LIGHTS, YASOLR_FALSE);
config.configure(KEY_ENABLE_MQTT, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT1_AUTO_BYPASS, YASOLR_TRUE);
config.configure(KEY_ENABLE_OUTPUT1_AUTO_DIMMER, YASOLR_TRUE);
config.configure(KEY_ENABLE_OUTPUT1_AUTO_BYPASS, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT1_AUTO_DIMMER, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT1_DS18, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT1_PZEM, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT1_RELAY, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT1_DIMMER, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT2_AUTO_BYPASS, YASOLR_TRUE);
config.configure(KEY_ENABLE_OUTPUT2_AUTO_DIMMER, YASOLR_TRUE);
config.configure(KEY_ENABLE_OUTPUT2_AUTO_BYPASS, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT2_AUTO_DIMMER, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT2_DS18, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT2_PZEM, YASOLR_FALSE);
config.configure(KEY_ENABLE_OUTPUT2_RELAY, YASOLR_FALSE);
Expand Down
6 changes: 1 addition & 5 deletions src/init/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,10 @@ Mycila::Task initConfigTask("Init Config", [](void* params) {
zcd.begin(config.get(KEY_PIN_ZCD).toInt(), config.get(KEY_GRID_FREQUENCY).toInt() == 60 ? 60 : 50);

// Electricity: Dimmers
if (zcd.isEnabled()) {
if (config.getBool(KEY_ENABLE_OUTPUT1_DIMMER))
if (config.getBool(KEY_ENABLE_OUTPUT1_DIMMER))
dimmerO1.begin(config.get(KEY_PIN_OUTPUT1_DIMMER).toInt());
if (config.getBool(KEY_ENABLE_OUTPUT2_DIMMER))
dimmerO2.begin(config.get(KEY_PIN_OUTPUT2_DIMMER).toInt());
} else {
logger.error(TAG, "Dimmers cannot be enabled because ZCD is not enabled");
}

// Electricity: Relays
if (config.getBool(KEY_ENABLE_OUTPUT1_RELAY))
Expand Down
1 change: 1 addition & 0 deletions src/init/Core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Mycila::Task initCoreTask("Init Core", [](void* params) {
displayTask.setManager(coreTaskManager);
ds18Task.setManager(coreTaskManager);
lightsTask.setManager(coreTaskManager);
mqttConfigTask.setManager(coreTaskManager);
networkManagerTask.setManager(coreTaskManager);
networkServiceTask.setManager(coreTaskManager);
otaTask.setManager(coreTaskManager);
Expand Down
98 changes: 98 additions & 0 deletions src/init/Events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,104 @@ Mycila::Task initEventsTask("Init Events", [](void* params) {

} else if (key == KEY_OUTPUT2_DAYS) {
output2.config.weekDays = config.get(KEY_OUTPUT2_DAYS);

} else if (key == KEY_NTP_TIMEZONE) {
Mycila::NTP.setTimeZone(config.get(KEY_NTP_TIMEZONE));

} else if (key == KEY_NTP_SERVER) {
if (!config.getBool(KEY_ENABLE_AP_MODE))
Mycila::NTP.sync(config.get(KEY_NTP_SERVER));

} else if (key == KEY_HA_DISCOVERY_TOPIC) {
haDiscovery.setDiscoveryTopic(config.get(KEY_HA_DISCOVERY_TOPIC));

} else if (key == KEY_ENABLE_LIGHTS) {
lights.end();
if (config.getBool(KEY_ENABLE_LIGHTS))
lights.begin(config.get(KEY_PIN_LIGHTS_GREEN).toInt(), config.get(KEY_PIN_LIGHTS_YELLOW).toInt(), config.get(KEY_PIN_LIGHTS_RED).toInt());

} else if (key == KEY_ENABLE_DS18_SYSTEM) {
ds18Sys.end();
if (config.getBool(KEY_ENABLE_DS18_SYSTEM))
ds18Sys.begin(config.get(KEY_PIN_ROUTER_DS18).toInt());

} else if (key == KEY_ENABLE_OUTPUT1_DS18) {
ds18O1.end();
if (config.getBool(KEY_ENABLE_OUTPUT1_DS18))
ds18O1.begin(config.get(KEY_PIN_OUTPUT1_DS18).toInt());

} else if (key == KEY_ENABLE_OUTPUT2_DS18) {
ds18O2.end();
if (config.getBool(KEY_ENABLE_OUTPUT2_DS18))
ds18O2.begin(config.get(KEY_PIN_OUTPUT2_DS18).toInt());

} else if (key == KEY_ENABLE_ZCD) {
zcd.end();
if (config.getBool(KEY_ENABLE_ZCD))
zcd.begin(config.get(KEY_PIN_ZCD).toInt(), config.get(KEY_GRID_FREQUENCY).toInt() == 60 ? 60 : 50);

} else if (key == KEY_ENABLE_MQTT) {
mqttConfigTask.resume();

} else if (key == KEY_ENABLE_OUTPUT1_DIMMER) {
dimmerO1.end();
if (config.getBool(KEY_ENABLE_OUTPUT1_DIMMER))
dimmerO1.begin(config.get(KEY_PIN_OUTPUT1_DIMMER).toInt());

} else if (key == KEY_ENABLE_OUTPUT2_DIMMER) {
dimmerO2.end();
if (config.getBool(KEY_ENABLE_OUTPUT2_DIMMER))
dimmerO2.begin(config.get(KEY_PIN_OUTPUT2_DIMMER).toInt());

} else if (key == KEY_ENABLE_OUTPUT1_RELAY) {
bypassRelayO1.end();
if (config.getBool(KEY_ENABLE_OUTPUT1_RELAY))
bypassRelayO1.begin(config.get(KEY_PIN_OUTPUT1_RELAY).toInt(), config.get(KEY_OUTPUT1_RELAY_TYPE) == YASOLR_RELAY_TYPE_NC ? Mycila::RelayType::NC : Mycila::RelayType::NO);

} else if (key == KEY_ENABLE_OUTPUT2_RELAY) {
bypassRelayO2.end();
if (config.getBool(KEY_ENABLE_OUTPUT2_RELAY))
bypassRelayO2.begin(config.get(KEY_PIN_OUTPUT2_RELAY).toInt(), config.get(KEY_OUTPUT2_RELAY_TYPE) == YASOLR_RELAY_TYPE_NC ? Mycila::RelayType::NC : Mycila::RelayType::NO);

} else if (key == KEY_ENABLE_RELAY1) {
relay1.end();
if (config.getBool(KEY_ENABLE_RELAY1))
relay1.begin(config.get(KEY_PIN_RELAY1).toInt(), config.get(KEY_RELAY1_TYPE) == YASOLR_RELAY_TYPE_NC ? Mycila::RelayType::NC : Mycila::RelayType::NO);

} else if (key == KEY_ENABLE_RELAY2) {
relay2.end();
if (config.getBool(KEY_ENABLE_RELAY2))
relay2.begin(config.get(KEY_PIN_RELAY2).toInt(), config.get(KEY_RELAY2_TYPE) == YASOLR_RELAY_TYPE_NC ? Mycila::RelayType::NC : Mycila::RelayType::NO);

} else if (key == KEY_ENABLE_JSY) {
jsy.end();
jsy.begin(YASOLR_JSY_SERIAL, config.get(KEY_PIN_JSY_RX).toInt(), config.get(KEY_PIN_JSY_RT).toInt());
if (jsy.isEnabled() && jsy.getBaudRate() != Mycila::JSYBaudRate::BAUD_38400)
jsy.setBaudRate(Mycila::JSYBaudRate::BAUD_38400);

} else if (key == KEY_ENABLE_OUTPUT1_PZEM) {
pzemO1.end();
if (config.getBool(KEY_ENABLE_OUTPUT1_PZEM))
pzemO1.begin(YASOLR_PZEM_SERIAL, config.get(KEY_PIN_PZEM_RX).toInt(), config.get(KEY_PIN_PZEM_TX).toInt(), YASOLR_PZEM_ADDRESS_OUTPUT1);

} else if (key == KEY_ENABLE_OUTPUT2_PZEM) {
pzemO2.end();
if (config.getBool(KEY_ENABLE_OUTPUT2_PZEM))
pzemO2.begin(YASOLR_PZEM_SERIAL, config.get(KEY_PIN_PZEM_RX).toInt(), config.get(KEY_PIN_PZEM_TX).toInt(), YASOLR_PZEM_ADDRESS_OUTPUT2);

} else if (key == KEY_ENABLE_DISPLAY) {
display.end();
if (config.getBool(KEY_ENABLE_DISPLAY)) {
const String displayType = config.get(KEY_DISPLAY_TYPE);
if (displayType == "SSD1306")
display.begin(Mycila::EasyDisplayType::SSD1306, config.get(KEY_PIN_DISPLAY_SCL).toInt(), config.get(KEY_PIN_DISPLAY_SDA).toInt(), config.get(KEY_DISPLAY_ROTATION).toInt());
else if (displayType == "SH1107")
display.begin(Mycila::EasyDisplayType::SH1107, config.get(KEY_PIN_DISPLAY_SCL).toInt(), config.get(KEY_PIN_DISPLAY_SDA).toInt(), config.get(KEY_DISPLAY_ROTATION).toInt());
else if (displayType == "SH1106")
display.begin(Mycila::EasyDisplayType::SH1106, config.get(KEY_PIN_DISPLAY_SCL).toInt(), config.get(KEY_PIN_DISPLAY_SDA).toInt(), config.get(KEY_DISPLAY_ROTATION).toInt());
display.clearDisplay();
display.setActive(true);
}
}

YaSolR::Website.initCards();
Expand Down
53 changes: 29 additions & 24 deletions src/tasks/Network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,31 +24,36 @@ Mycila::Task networkServiceTask("NetworkServices", Mycila::TaskType::ONCE, [](vo
#ifndef ESPCONNECT_NO_MDNS
MDNS.addService("http", "tcp", 80);
#endif
mqttConfigTask.resume();
}
});

Mycila::Task mqttConfigTask("MQTT Config", Mycila::TaskType::ONCE, [](void* params) {
mqtt.end();
if (!config.getBool(KEY_ENABLE_AP_MODE) && config.getBool(KEY_ENABLE_MQTT)) {
logger.info("YASOLR", "Enable MQTT...");

if (config.getBool(KEY_ENABLE_MQTT)) {
// MQTT
bool secured = config.getBool(KEY_MQTT_SECURED);
String serverCert = "";

if (secured && LittleFS.exists("/mqtt-server.crt")) {
logger.debug("YASOLR", "Loading MQTT server certificate...");
File serverCertFile = LittleFS.open("/mqtt-server.crt", "r");
serverCert = serverCertFile.readString();
serverCertFile.close();
logger.debug("YASOLR", "Loaded MQTT server certificate:\n%s", serverCert.c_str());
}

mqtt.begin({
.server = config.get(KEY_MQTT_SERVER),
.port = static_cast<uint16_t>(config.get(KEY_MQTT_PORT).toInt()),
.secured = secured,
.serverCert = serverCert,
.username = config.get(KEY_MQTT_USERNAME),
.password = config.get(KEY_MQTT_PASSWORD),
.clientId = Mycila::AppInfo.defaultMqttClientId,
.willTopic = config.get(KEY_MQTT_TOPIC) + YASOLR_MQTT_WILL_TOPIC,
.keepAlive = YASOLR_MQTT_KEEPALIVE,
});
bool secured = config.getBool(KEY_MQTT_SECURED);
String serverCert = "";

if (secured && LittleFS.exists("/mqtt-server.crt")) {
logger.debug("YASOLR", "Loading MQTT server certificate...");
File serverCertFile = LittleFS.open("/mqtt-server.crt", "r");
serverCert = serverCertFile.readString();
serverCertFile.close();
logger.debug("YASOLR", "Loaded MQTT server certificate:\n%s", serverCert.c_str());
}

mqtt.begin({
.server = config.get(KEY_MQTT_SERVER),
.port = static_cast<uint16_t>(config.get(KEY_MQTT_PORT).toInt()),
.secured = secured,
.serverCert = serverCert,
.username = config.get(KEY_MQTT_USERNAME),
.password = config.get(KEY_MQTT_PASSWORD),
.clientId = Mycila::AppInfo.defaultMqttClientId,
.willTopic = config.get(KEY_MQTT_TOPIC) + YASOLR_MQTT_WILL_TOPIC,
.keepAlive = YASOLR_MQTT_KEEPALIVE,
});
}
});

0 comments on commit 182f78e

Please sign in to comment.