Skip to content

Commit

Permalink
Split InverterSettings into multiple tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
tbnobody committed Nov 23, 2023
1 parent 80d534e commit 134fefa
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 23 deletions.
8 changes: 4 additions & 4 deletions include/InverterSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ class InverterSettingsClass {
void init(Scheduler* scheduler);

private:
void loop();
void settingsLoop();
void hoyLoop();

Task _loopTask;

uint32_t _lastUpdate = 0;
Task _settingsTask;
Task _hoyTask;
};

extern InverterSettingsClass InverterSettings;
45 changes: 26 additions & 19 deletions src/InverterSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,31 +88,38 @@ void InverterSettingsClass::init(Scheduler* scheduler)
MessageOutput.println("Invalid pin config");
}

scheduler->addTask(_loopTask);
_loopTask.setCallback(std::bind(&InverterSettingsClass::loop, this));
_loopTask.setIterations(TASK_FOREVER);
_loopTask.enable();
scheduler->addTask(_hoyTask);
_hoyTask.setCallback(std::bind(&InverterSettingsClass::hoyLoop, this));
_hoyTask.setIterations(TASK_FOREVER);
_hoyTask.enable();

scheduler->addTask(_settingsTask);
_settingsTask.setCallback(std::bind(&InverterSettingsClass::settingsLoop, this));
_settingsTask.setIterations(TASK_FOREVER);
_settingsTask.setInterval(INVERTER_UPDATE_SETTINGS_INTERVAL);
_settingsTask.enable();
}

void InverterSettingsClass::loop()
void InverterSettingsClass::settingsLoop()
{
if (millis() - _lastUpdate > INVERTER_UPDATE_SETTINGS_INTERVAL) {
const CONFIG_T& config = Configuration.get();

for (uint8_t i = 0; i < INV_MAX_COUNT; i++) {
auto const& inv_cfg = config.Inverter[i];
if (inv_cfg.Serial == 0) {
continue;
}
auto inv = Hoymiles.getInverterBySerial(inv_cfg.Serial);
if (inv == nullptr) {
continue;
}
const CONFIG_T& config = Configuration.get();

inv->setEnablePolling(inv_cfg.Poll_Enable && (SunPosition.isDayPeriod() || inv_cfg.Poll_Enable_Night));
inv->setEnableCommands(inv_cfg.Command_Enable && (SunPosition.isDayPeriod() || inv_cfg.Command_Enable_Night));
for (uint8_t i = 0; i < INV_MAX_COUNT; i++) {
auto const& inv_cfg = config.Inverter[i];
if (inv_cfg.Serial == 0) {
continue;
}
auto inv = Hoymiles.getInverterBySerial(inv_cfg.Serial);
if (inv == nullptr) {
continue;
}

inv->setEnablePolling(inv_cfg.Poll_Enable && (SunPosition.isDayPeriod() || inv_cfg.Poll_Enable_Night));
inv->setEnableCommands(inv_cfg.Command_Enable && (SunPosition.isDayPeriod() || inv_cfg.Command_Enable_Night));
}
}

void InverterSettingsClass::hoyLoop()
{
Hoymiles.loop();
}

0 comments on commit 134fefa

Please sign in to comment.