Skip to content

Commit

Permalink
Code cleanup
Browse files Browse the repository at this point in the history
(cherry picked from commit 0a1a8b00385eddf53ec1cb925d525e9f33b1bf9f)
  • Loading branch information
mathieucarbou committed Jul 14, 2024
1 parent 9870ef6 commit 44c8b10
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 156 deletions.
52 changes: 25 additions & 27 deletions lib/MycilaRouter/MycilaGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,47 +224,45 @@ namespace Mycila {
GridMetrics metrics;
getMeasurements(metrics);
root["online"] = isConnected();
_toJson(root["metrics"].to<JsonObject>(), metrics);
_toJson(root["source"]["jsy"].to<JsonObject>(), _meter);
_toJson(root["source"]["jsy_remote"].to<JsonObject>(), _meterRemote);
_toJson(root["source"]["mqtt"].to<JsonObject>(), _mqtt);
toJson(root["metrics"].to<JsonObject>(), metrics);
toJson(root["source"]["jsy"].to<JsonObject>(), _meter);
toJson(root["source"]["jsy_remote"].to<JsonObject>(), _meterRemote);
toJson(root["source"]["mqtt"].to<JsonObject>(), _mqtt);
}

static void toJson(const JsonObject& dest, const GridMetrics& metrics) {
dest["apparent_power"] = metrics.apparentPower;
dest["current"] = metrics.current;
dest["energy"] = metrics.energy;
dest["energy_returned"] = metrics.energyReturned;
dest["frequency"] = metrics.frequency;
dest["power"] = metrics.power;
dest["power_factor"] = metrics.powerFactor;
dest["voltage"] = metrics.voltage;
}
#endif

private:
// Local JSY
volatile GridMetrics _meter;
volatile uint32_t _meterTime = 0;
volatile bool _meterConnected = false;
GridMetrics _meter;
uint32_t _meterTime = 0;
bool _meterConnected = false;

// JSY remote data
volatile GridMetrics _meterRemote;
volatile uint32_t _meterRemoteTime = 0;
volatile bool _meterRemoteConnected = false;
GridMetrics _meterRemote;
uint32_t _meterRemoteTime = 0;
bool _meterRemoteConnected = false;

// mqtt
volatile GridMetrics _mqtt;
volatile uint32_t _mqttPowerTime = 0;
volatile uint32_t _mqttVoltageTime = 0;
volatile bool _mqttConnected = false;
GridMetrics _mqtt;
uint32_t _mqttPowerTime = 0;
uint32_t _mqttVoltageTime = 0;
bool _mqttConnected = false;

// expiration
uint32_t _expiration = 0;

// last power value
float _lastPower = 0;

#ifdef MYCILA_JSON_SUPPORT
static void _toJson(const JsonObject& dest, const volatile GridMetrics& metrics) {
dest["apparent_power"] = metrics.apparentPower;
dest["current"] = metrics.current;
dest["energy"] = metrics.energy;
dest["energy_returned"] = metrics.energyReturned;
dest["frequency"] = metrics.frequency;
dest["power"] = metrics.power;
dest["power_factor"] = metrics.powerFactor;
dest["voltage"] = metrics.voltage;
}
#endif
};
} // namespace Mycila
33 changes: 14 additions & 19 deletions lib/MycilaRouter/MycilaRouter.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,34 +67,29 @@ namespace Mycila {

RouterMetrics routerMeasurements;
getMeasurements(routerMeasurements);

JsonObject measurements = root["measurements"].to<JsonObject>();
measurements["apparent_power"] = routerMeasurements.apparentPower;
measurements["current"] = routerMeasurements.current;
measurements["power"] = routerMeasurements.power;
measurements["power_factor"] = routerMeasurements.powerFactor;
measurements["resistance"] = routerMeasurements.resistance;
measurements["thdi"] = routerMeasurements.thdi;
measurements["voltage"] = routerMeasurements.voltage;
measurements["voltage_dimmed"] = routerMeasurements.dimmedVoltage;
toJson(root["measurements"].to<JsonObject>(), routerMeasurements);

RouterMetrics routerMetrics;
getMetrics(routerMetrics, voltage);

JsonObject metrics = root["metrics"].to<JsonObject>();
metrics["apparent_power"] = routerMetrics.apparentPower;
metrics["current"] = routerMetrics.current;
metrics["energy"] = routerMetrics.energy;
metrics["power"] = routerMetrics.power;
metrics["power_factor"] = routerMetrics.powerFactor;
metrics["thdi"] = routerMetrics.thdi;
metrics["voltage"] = routerMetrics.voltage;
toJson(root["metrics"].to<JsonObject>(), routerMetrics);

for (const auto& output : _outputs)
output->toJson(root[output->getName()].to<JsonObject>(), voltage);

_pidController->toJson(root["pid"].to<JsonObject>());
}

static void toJson(const JsonObject& dest, const RouterMetrics& metrics) {
dest["apparent_power"] = metrics.apparentPower;
dest["current"] = metrics.current;
dest["energy"] = metrics.energy;
dest["power"] = metrics.power;
dest["power_factor"] = metrics.powerFactor;
dest["resistance"] = metrics.resistance;
dest["thdi"] = metrics.thdi;
dest["voltage"] = metrics.voltage;
dest["voltage_dimmed"] = metrics.dimmedVoltage;
}
#endif

void getMetrics(RouterMetrics& metrics, float voltage) const {
Expand Down
34 changes: 14 additions & 20 deletions lib/MycilaRouter/MycilaRouterOutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,33 +95,27 @@ namespace Mycila {

RouterOutputMetrics outputMeasurements;
getMeasurements(outputMeasurements);

JsonObject measurements = root["measurements"].to<JsonObject>();
measurements["apparent_power"] = outputMeasurements.apparentPower;
measurements["current"] = outputMeasurements.current;
measurements["power"] = outputMeasurements.power;
measurements["power_factor"] = outputMeasurements.powerFactor;
measurements["resistance"] = outputMeasurements.resistance;
measurements["thdi"] = outputMeasurements.thdi;
measurements["voltage"] = outputMeasurements.voltage;
measurements["voltage_dimmed"] = outputMeasurements.dimmedVoltage;
toJson(root["measurements"].to<JsonObject>(), outputMeasurements);

RouterOutputMetrics dimmerMetrics;
getDimmerMetrics(dimmerMetrics, gridVoltage);

JsonObject metrics = root["metrics"].to<JsonObject>();
metrics["apparent_power"] = dimmerMetrics.apparentPower;
metrics["current"] = dimmerMetrics.current;
metrics["power"] = dimmerMetrics.power;
metrics["power_factor"] = dimmerMetrics.powerFactor;
metrics["resistance"] = dimmerMetrics.resistance;
metrics["thdi"] = dimmerMetrics.thdi;
metrics["voltage"] = dimmerMetrics.voltage;
metrics["voltage_dimmed"] = dimmerMetrics.dimmedVoltage;
toJson(root["metrics"].to<JsonObject>(), dimmerMetrics);

_pzem->toJson(root["pzem"].to<JsonObject>());
_relay->toJson(root["relay"].to<JsonObject>());
}

static void toJson(const JsonObject& dest, const RouterOutputMetrics& metrics) {
dest["apparent_power"] = metrics.apparentPower;
dest["current"] = metrics.current;
dest["energy"] = metrics.energy;
dest["power"] = metrics.power;
dest["power_factor"] = metrics.powerFactor;
dest["resistance"] = metrics.resistance;
dest["thdi"] = metrics.thdi;
dest["voltage"] = metrics.voltage;
dest["voltage_dimmed"] = metrics.dimmedVoltage;
}
#endif

// dimmer
Expand Down
2 changes: 1 addition & 1 deletion src/init/Debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <YaSolR.h>

static const Mycila::TaskDoneCallback LOG_EXEC_TIME = [](const Mycila::Task& me, const uint32_t elapsed) {
logger.debug(TAG, "Task %s finished in %" PRIu32 " us", me.getName(), elapsed);
logger.debug(TAG, "Task '%s' finished in %" PRIu32 " us", me.getName(), elapsed);
};

Mycila::Task initLoggingTask("Init Logging", [](void* params) {
Expand Down
64 changes: 22 additions & 42 deletions src/init/REST.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {

webServer
.on("/api/debug/router", HTTP_GET, [](AsyncWebServerRequest* request) {
if (!config.getBool(KEY_ENABLE_DEBUG)) {
return request->send(404);
}

AsyncJsonResponse* response = new AsyncJsonResponse();
JsonObject root = response->getRoot();

Expand All @@ -30,6 +34,10 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {

webServer
.on("/api/debug/system", HTTP_GET, [](AsyncWebServerRequest* request) {
if (!config.getBool(KEY_ENABLE_DEBUG)) {
return request->send(404);
}

AsyncJsonResponse* response = new AsyncJsonResponse();
JsonObject root = response->getRoot();

Expand All @@ -51,6 +59,10 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {

webServer
.on("/api/debug", HTTP_GET, [](AsyncWebServerRequest* request) {
if (!config.getBool(KEY_ENABLE_DEBUG)) {
return request->send(404);
}

AsyncJsonResponse* response = new AsyncJsonResponse();
JsonObject root = response->getRoot();

Expand Down Expand Up @@ -240,15 +252,7 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {
JsonObject root = response->getRoot();
Mycila::GridMetrics metrics;
grid.getMeasurements(metrics);
root["apparent_power"] = metrics.apparentPower;
root["current"] = metrics.current;
root["energy"] = metrics.energy;
root["energy_returned"] = metrics.energyReturned;
root["frequency"] = metrics.frequency;
root["online"] = grid.isConnected();
root["power"] = metrics.power;
root["power_factor"] = metrics.powerFactor;
root["voltage"] = metrics.voltage;
Mycila::Grid::toJson(root, metrics);
response->setLength();
request->send(response);
})
Expand Down Expand Up @@ -342,16 +346,14 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {
Mycila::GridMetrics gridMetrics;
grid.getMeasurements(gridMetrics);

Mycila::RouterMetrics routerMetrics;
router.getMeasurements(routerMetrics);
Mycila::RouterMetrics routerMeasurements;
router.getMeasurements(routerMeasurements);

root["energy"] = routerMetrics.energy;
root["lights"] = lights.toString();
root["power"] = routerMetrics.power;
root["power_factor"] = routerMetrics.powerFactor;
root["temperature"] = ds18Sys.getValidTemperature();
root["thdi"] = routerMetrics.thdi;
root["virtual_grid_power"] = gridMetrics.power - routerMetrics.power;
root["virtual_grid_power"] = gridMetrics.power - routerMeasurements.power;

Mycila::Router::toJson(root["measurements"].to<JsonObject>(), routerMeasurements);

size_t idx = 0;
for (const auto& output : router.getOutputs()) {
Expand All @@ -364,31 +366,9 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {
json["dimmer"]["duty_cycle"] = dimmerO1.getDutyCycle();
json["dimmer"]["state"] = YASOLR_STATE(dimmerO1.isOn());

Mycila::RouterOutputMetrics dimmerMetrics;
output->getDimmerMetrics(dimmerMetrics, gridMetrics.voltage);

JsonObject metrics = json["metrics"].to<JsonObject>();
metrics["apparent_power"] = dimmerMetrics.apparentPower;
metrics["current"] = dimmerMetrics.current;
metrics["power"] = dimmerMetrics.power;
metrics["power_factor"] = dimmerMetrics.powerFactor;
metrics["resistance"] = dimmerMetrics.resistance;
metrics["thdi"] = dimmerMetrics.thdi;
metrics["voltage"] = dimmerMetrics.voltage;
metrics["voltage_dimmed"] = dimmerMetrics.dimmedVoltage;

Mycila::RouterOutputMetrics outputMeasurements;
output->getMeasurements(outputMeasurements);

JsonObject measurements = json["measurements"].to<JsonObject>();
measurements["apparent_power"] = outputMeasurements.apparentPower;
measurements["current"] = outputMeasurements.current;
measurements["power"] = outputMeasurements.power;
measurements["power_factor"] = outputMeasurements.powerFactor;
measurements["resistance"] = outputMeasurements.resistance;
measurements["thdi"] = outputMeasurements.thdi;
measurements["voltage"] = outputMeasurements.voltage;
measurements["voltage_dimmed"] = outputMeasurements.dimmedVoltage;
Mycila::RouterOutput::toJson(json["measurements"].to<JsonObject>(), outputMeasurements);

json["relay"]["state"] = YASOLR_STATE(bypassRelayO1.isOn());
json["relay"]["switch_count"] = bypassRelayO1.getSwitchCount();
Expand Down Expand Up @@ -418,12 +398,12 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {

root["config"] = base + "/config";
root["config/backup"] = base + "/config/backup";
root["debug"] = base + "/debug";
if (config.getBool(KEY_ENABLE_DEBUG)) {
root["debug"] = base + "/debug";
}
root["grid"] = base + "/grid";
root["router"] = base + "/router";
root["system"] = base + "/system";
root["system/reset"] = base + "/system/reset";
root["system/restart"] = base + "/system/restart";

response->setLength();
request->send(response);
Expand Down
4 changes: 0 additions & 4 deletions src/tasks/HADiscovery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,23 +63,19 @@ Mycila::Task haDiscoveryTask("HADiscovery", Mycila::TaskType::ONCE, [](void* par
haDiscovery.publish(Mycila::HAGauge("router_temperature", "Router Temperature", "/router/temperature", "temperature", "mdi:thermometer", "°C"));
haDiscovery.publish(Mycila::HAText("router_lights", "Router Lights", "/router/lights", nullptr, "mdi:cards-heart"));

haDiscovery.publish(Mycila::HACounter("relay1_switch_count", "Relay 1 Switch Count", "/router/relay1/switch_count", nullptr, "mdi:counter"));
haDiscovery.publish(Mycila::HAOutlet("relay1", "Relay 1", "/router/relay1/state/set", "/router/relay1/state", YASOLR_ON, YASOLR_OFF));

haDiscovery.publish(Mycila::HACounter("relay2_switch_count", "Relay 2 Switch Count", "/router/relay2/switch_count", nullptr, "mdi:counter"));
haDiscovery.publish(Mycila::HAOutlet("relay2", "Relay 2", "/router/relay2/state/set", "/router/relay2/state", YASOLR_ON, YASOLR_OFF));

haDiscovery.publish(Mycila::HAText("output1_state", "Output 1", "/router/output1/state"));
haDiscovery.publish(Mycila::HAState("output1_bypass", "Output 1 Bypass", "/router/output1/bypass", YASOLR_ON, YASOLR_OFF, "running"));
haDiscovery.publish(Mycila::HANumber("output1_dimmer_duty", "Output 1 Dimmer Duty", "/router/output1/dimmer/duty/set", "/router/output1/dimmer/duty", Mycila::HANumberMode::SLIDER, 0, YASOLR_DIMMER_MAX_LEVEL, 1, "mdi:water-boiler"));
haDiscovery.publish(Mycila::HACounter("output1_relay_switch_count", "Output 1 Bypass Relay Switch Count", "/router/output1/relay/switch_count", nullptr, "mdi:counter"));
haDiscovery.publish(Mycila::HAOutlet("output1_relay", "Output 1 Bypass", "/router/output1/bypass/set", "/router/output1/bypass", YASOLR_ON, YASOLR_OFF));
haDiscovery.publish(Mycila::HAGauge("output1_temperature", "Output 1 Temperature", "/router/output1/temperature", "temperature", "mdi:thermometer", "°C"));

haDiscovery.publish(Mycila::HAText("output2_state", "Output 2", "/router/output2/state"));
haDiscovery.publish(Mycila::HAState("output2_bypass", "Output 2 Bypass", "/router/output2/bypass", YASOLR_ON, YASOLR_OFF, "running"));
haDiscovery.publish(Mycila::HANumber("output2_dimmer_duty", "Output 2 Dimmer Duty", "/router/output2/dimmer/duty/set", "/router/output2/dimmer/duty", Mycila::HANumberMode::SLIDER, 0, YASOLR_DIMMER_MAX_LEVEL, 1, "mdi:water-boiler"));
haDiscovery.publish(Mycila::HACounter("output2_relay_switch_count", "Output 2 Bypass Relay Switch Count", "/router/output2/relay/switch_count", nullptr, "mdi:counter"));
haDiscovery.publish(Mycila::HAOutlet("output2_relay", "Output 2 Bypass", "/router/output2/bypass/set", "/router/output2/bypass", YASOLR_ON, YASOLR_OFF));
haDiscovery.publish(Mycila::HAGauge("output2_temperature", "Output 2 Temperature", "/router/output2/temperature", "temperature", "mdi:thermometer", "°C"));

Expand Down
Loading

0 comments on commit 44c8b10

Please sign in to comment.