Skip to content

Commit

Permalink
lib updates
Browse files Browse the repository at this point in the history
(cherry picked from commit 47d43f2f7b32d419f7f779cf55f877ddd2f12a21)
  • Loading branch information
mathieucarbou committed Jul 17, 2024
1 parent 06253d6 commit afaabf4
Show file tree
Hide file tree
Showing 11 changed files with 45 additions and 49 deletions.
1 change: 1 addition & 0 deletions include/YaSolRDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
#define YASOLR_PID_IC_MODE_0 "0: Off"
#define YASOLR_PID_IC_MODE_1 "1: Clamp"
#define YASOLR_PID_IC_MODE_2 "2: Advanced"
#define YASOLR_VALUE_EXPIRATION 60

// UDP communication

Expand Down
10 changes: 5 additions & 5 deletions lib/MycilaRouter/MycilaRouterOutput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,8 @@ void Mycila::RouterOutput::applyAutoBypass() {

// temperature checks

const float temp = getValidTemperature();

if (isTemperatureEnabled()) {
if (!isTemperatureValid()) {
if (!_temperature.neverUpdated()) {
if (!_temperature) {
if (_autoBypassEnabled) {
LOGW(TAG, "Invalid temperature sensor value: stopping Auto Bypass '%s'...", _name);
_autoBypassEnabled = false;
Expand All @@ -159,6 +157,8 @@ void Mycila::RouterOutput::applyAutoBypass() {
return;
}

const float temp = _temperature.get();

if (temp >= config.autoStopTemperature) {
if (_autoBypassEnabled) {
LOGI(TAG, "Temperature reached %.02f °C: stopping Auto Bypass '%s'...", temp, _name);
Expand Down Expand Up @@ -201,7 +201,7 @@ void Mycila::RouterOutput::applyAutoBypass() {
}
const char* wday = DaysOfWeek[timeInfo.tm_wday];
if (config.weekDays.indexOf(wday) >= 0) {
LOGI(TAG, "Time within %s-%s on %s: starting Auto Bypass '%s' at %.02f °C...", config.autoStartTime.c_str(), config.autoStopTime.c_str(), wday, _name, temp);
LOGI(TAG, "Time within %s-%s on %s: starting Auto Bypass '%s' at %.02f °C...", config.autoStartTime.c_str(), config.autoStopTime.c_str(), wday, _name, _temperature.orElse(0));
_setBypass(true);
_autoBypassEnabled = _bypassEnabled;
}
Expand Down
16 changes: 5 additions & 11 deletions lib/MycilaRouter/MycilaRouterOutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#pragma once

#include <MycilaDimmer.h>
#include <MycilaExpiringValue.h>
#include <MycilaPZEM004Tv3.h>
#include <MycilaRelay.h>

Expand Down Expand Up @@ -86,7 +87,7 @@ namespace Mycila {
root["bypass"] = isBypassOn() ? "on" : "off";
root["enabled"] = isDimmerEnabled();
root["state"] = getStateName();
root["temperature"] = getValidTemperature();
root["temperature"] = _temperature.orElse(0);

_dimmer->toJson(root["dimmer"].to<JsonObject>());

Expand Down Expand Up @@ -119,7 +120,7 @@ namespace Mycila {

bool isDimmerEnabled() const { return _dimmer->isEnabled(); }
bool isAutoDimmerEnabled() const { return _dimmer->isEnabled() && config.autoDimmer && config.calibratedResistance > 0; }
bool isDimmerTemperatureLimitReached() const { return config.dimmerTempLimit > 0 && isTemperatureValid() && getValidTemperature() >= config.dimmerTempLimit; }
bool isDimmerTemperatureLimitReached() const { return config.dimmerTempLimit > 0 && _temperature.orElse(0) >= config.dimmerTempLimit; }
uint16_t getDimmerDuty() const { return _dimmer->getDuty(); }
float getDimmerDutyCycle() const { return _dimmer->getDutyCycle(); }
// Power Duty Cycle [0, MYCILA_DIMMER_MAX_DUTY]
Expand Down Expand Up @@ -197,13 +198,7 @@ namespace Mycila {

// temperature

float getValidTemperature() const { return isTemperatureValid() ? _temperature : 0; }
bool isTemperatureEnabled() const { return _temperatureTime > 0; }
bool isTemperatureValid() const { return isTemperatureEnabled() && millis() - _temperatureTime < 60000; }
void updateTemperature(float temperature) {
_temperature = temperature;
_temperatureTime = millis();
}
ExpiringValue<float>& temperature() { return _temperature; }

public:
Config config;
Expand All @@ -216,8 +211,7 @@ namespace Mycila {
bool _autoBypassEnabled = false;
bool _bypassEnabled = false;
RouterOutputStateCallback _callback = nullptr;
float _temperature = 0;
uint32_t _temperatureTime = 0;
ExpiringValue<float> _temperature;

private:
void _setBypass(bool state, bool log = true);
Expand Down
27 changes: 13 additions & 14 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
[platformio]
name = YaSolR
extra_configs = platformio_override.ini
default_envs = oss-esp32, pro-esp32, trial-esp32
default_envs = pro-esp32, pro-esp32s3, pro-lilygo_eth_lite_s3, pro-wt32_eth01

[env]
framework = arduino
Expand Down Expand Up @@ -48,11 +48,11 @@ lib_deps =
bblanchon/ArduinoJson @ 7.1.0
olikraus/U8g2 @ 2.35.19
robtillaart/CRC @ 1.0.3
mathieucarbou/Async TCP @ 3.1.4
mathieucarbou/ESP Async WebServer @ 3.0.6
mathieucarbou/AsyncTCP @ 3.2.1
mathieucarbou/ESPAsyncWebServer @ 3.1.0
mathieucarbou/MycilaConfig @ 3.0.1
mathieucarbou/MycilaDS18 @ 3.0.4
mathieucarbou/MycilaESPConnect @ 4.4.0
mathieucarbou/MycilaDS18 @ 4.0.0
mathieucarbou/MycilaESPConnect @ 4.5.0
mathieucarbou/MycilaEasyDisplay @ 3.0.1
mathieucarbou/MycilaHADiscovery @ 2.2.1
mathieucarbou/MycilaJSY @ 9.1.0
Expand All @@ -65,7 +65,7 @@ lib_deps =
mathieucarbou/MycilaTaskManager @ 3.1.2
mathieucarbou/MycilaTaskMonitor @ 3.0.1
mathieucarbou/MycilaTrafficLight @ 1.0.0
mathieucarbou/MycilaUtilities @ 1.2.0
mathieucarbou/MycilaUtilities @ 1.3.0
build_flags =
-D ARDUINO_LOOP_STACK_SIZE=4096
-D CONFIG_ASYNC_TCP_MAX_ACK_TIME=3000
Expand Down Expand Up @@ -116,14 +116,14 @@ board_build.embed_files =
; https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html#config-compiler-optimization-assertion-level
# https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/performance/size.html
build_flags =
-Os
-O3
; -Os
-D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO
-D NDEBUG
-D RELEASE=1

[debug]
build_flags =
-Og
-O0
; -Og
-ggdb -ggdb3 -g3
-D CONFIG_ARDUHAL_LOG_COLORS
-D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
Expand All @@ -136,10 +136,9 @@ build_flags =
[oss]
build_flags = -D APP_MODEL_OSS
lib_deps =
; mathieucarbou/WebSerialLite @ 6.1.1
ayushsharma82/WebSerial @ 2.0.4
ayushsharma82/ElegantOTA @ 3.1.2
; ayushsharma82/ESP-DASH @ 4.0.5
; mathieucarbou/WebSerialLite @ 6.2.0
https://github.com/mathieucarbou/ayushsharma82-WebSerial#dev
https://github.com/mathieucarbou/ayushsharma82-ElegantOTA#dev
https://github.com/mathieucarbou/ayushsharma82-ESP-DASH#dev
lib_ignore =
ElegantOTAPro
Expand Down
8 changes: 4 additions & 4 deletions src/Website.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -964,17 +964,17 @@ void YaSolR::WebsiteClass::_temperature(Card& card, Mycila::DS18& sensor) {
} else if (!sensor.isValid()) {
card.update(YASOLR_LBL_123, "");
} else {
card.update(sensor.getValidTemperature(), "°C");
card.update(sensor.getTemperature().value_or(0), "°C");
}
}

void YaSolR::WebsiteClass::_temperature(Card& card, Mycila::RouterOutput& output) {
if (!output.isTemperatureEnabled()) {
if (output.temperature().neverUpdated()) {
card.update(YASOLR_LBL_115, "");
} else if (!output.isTemperatureValid()) {
} else if (!output.temperature()) {
card.update(YASOLR_LBL_123, "");
} else {
card.update(output.getValidTemperature(), "°C");
card.update(output.temperature().get(), "°C");
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/init/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Mycila::Task initConfigTask("Init Config", [](void* params) {
#endif

// Grid
grid.setExpiration(45);
grid.setExpiration(YASOLR_VALUE_EXPIRATION);

// Relays
routerRelay1.setLoad(config.get(KEY_RELAY1_LOAD).toInt());
Expand All @@ -51,6 +51,7 @@ Mycila::Task initConfigTask("Init Config", [](void* params) {
output1.config.autoStopTime = config.get(KEY_OUTPUT1_TIME_STOP);
output1.config.weekDays = config.get(KEY_OUTPUT1_DAYS);
output1.config.reservedExcessPowerRatio = constrain(config.get(KEY_OUTPUT1_RESERVED_EXCESS).toFloat(), 0.0f, 100.0f) / 100;
output1.temperature().setExpiration(YASOLR_VALUE_EXPIRATION);

// output2
output2.config.calibratedResistance = config.get(KEY_OUTPUT2_RESISTANCE).toFloat();
Expand All @@ -64,6 +65,7 @@ Mycila::Task initConfigTask("Init Config", [](void* params) {
output2.config.autoStopTime = config.get(KEY_OUTPUT2_TIME_STOP);
output2.config.weekDays = config.get(KEY_OUTPUT2_DAYS);
output2.config.reservedExcessPowerRatio = constrain(config.get(KEY_OUTPUT2_RESERVED_EXCESS).toFloat(), 0.0f, 100.0f) / 100;
output2.temperature().setExpiration(YASOLR_VALUE_EXPIRATION);

// PID Controller

Expand Down
4 changes: 2 additions & 2 deletions src/init/Events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,12 @@ Mycila::Task initEventsTask("Init Events", [](void* params) {
});
ds18O1.listen([](float temperature) {
logger.info(TAG, "Output 1 Temperature changed to %.02f °C", temperature);
output1.updateTemperature(temperature);
output1.temperature().update(temperature);
mqttPublishTask.requestEarlyRun();
});
ds18O2.listen([](float temperature) {
logger.info(TAG, "Output 2 Temperature changed to %.02f °C", temperature);
output2.updateTemperature(temperature);
output2.temperature().update(temperature);
mqttPublishTask.requestEarlyRun();
});

Expand Down
4 changes: 2 additions & 2 deletions src/init/MQTT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Mycila::Task initMqttSubscribersTask("Init MQTT Subscribers", [](void* params) {
mqtt.subscribe(output1TemperatureMQTTTopic.c_str(), [](const String& topic, const String& payload) {
float t = payload.toFloat();
logger.info(TAG, "Output 1 Temperature from MQTT: %f", t);
output1.updateTemperature(t);
output1.temperature().update(t);
});
}

Expand All @@ -132,7 +132,7 @@ Mycila::Task initMqttSubscribersTask("Init MQTT Subscribers", [](void* params) {
mqtt.subscribe(output2TemperatureMQTTTopic.c_str(), [](const String& topic, const String& payload) {
float t = payload.toFloat();
logger.info(TAG, "Output 2 Temperature from MQTT: %f", t);
output2.updateTemperature(t);
output2.temperature().update(t);
});
}
});
4 changes: 2 additions & 2 deletions src/init/REST.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {
router.getMeasurements(routerMeasurements);

root["lights"] = lights.toString();
root["temperature"] = ds18Sys.getValidTemperature();
root["temperature"] = ds18Sys.getTemperature().value_or(0);
root["virtual_grid_power"] = gridMetrics.power - routerMeasurements.power;

Mycila::Router::toJson(root["measurements"].to<JsonObject>(), routerMeasurements);
Expand All @@ -362,7 +362,7 @@ Mycila::Task initRestApiTask("Init REST API", [](void* params) {
JsonObject json = root[output->getName()].to<JsonObject>();
json["bypass"] = YASOLR_STATE(output->isBypassOn());
json["state"] = output->getStateName();
json["temperature"] = output->getValidTemperature();
json["temperature"] = output->temperature().orElse(0);

json["dimmer"]["duty"] = dimmerO1.getDuty();
json["dimmer"]["duty_cycle"] = dimmerO1.getDutyCycle();
Expand Down
10 changes: 5 additions & 5 deletions src/tasks/Display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ Mycila::Task displayTask("Display", [](void* params) {
display.home.printf("Output 1: %11.11s\n", output1.getStateName());
display.home.printf("Resistance: %4d Ohms\n", static_cast<int>(round(outputMetrics.resistance)));
display.home.printf("Dimmer: %5d %5d W\n", dimmerO1.getDuty(), static_cast<int>(round(outputMetrics.power)));
if (output1.isTemperatureValid())
display.home.printf("Temperature: %4.1f ", output1.getValidTemperature());
if (output1.temperature())
display.home.printf("Temperature: %4.1f ", output1.temperature().get());
else
display.home.printf("Temperature: --.- ");
display.home.printf("\xb0");
Expand All @@ -140,8 +140,8 @@ Mycila::Task displayTask("Display", [](void* params) {
display.home.printf("Output 2: %11.11s\n", output2.getStateName());
display.home.printf("Resistance: %4d Ohms\n", static_cast<int>(round(outputMetrics.resistance)));
display.home.printf("Dimmer: %5d %5d W\n", dimmerO2.getDuty(), static_cast<int>(round(outputMetrics.power)));
if (output2.isTemperatureValid())
display.home.printf("Temperature: %4.1f ", output2.getValidTemperature());
if (output2.temperature())
display.home.printf("Temperature: %4.1f ", output2.temperature().get());
else
display.home.printf("Temperature: --.- ");
display.home.printf("\xb0");
Expand All @@ -158,7 +158,7 @@ Mycila::Task displayTask("Display", [](void* params) {
else
display.home.printf("NTP Time: --:--\n");
if (ds18Sys.isEnabled())
display.home.printf("Temperature: %4.1f ", ds18Sys.getValidTemperature());
display.home.printf("Temperature: %4.1f ", ds18Sys.getTemperature().value_or(0));
else
display.home.printf("Temperature: --.- ");
display.home.printf("\xb0");
Expand Down
6 changes: 3 additions & 3 deletions src/tasks/MQTT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,22 +134,22 @@ Mycila::Task mqttPublishTask("MQTT", [](void* params) {
mqtt.publish(baseTopic + "/router/lights", lights.toString());
mqtt.publish(baseTopic + "/router/power", String(routerMeasurements.power, 3));
mqtt.publish(baseTopic + "/router/power_factor", String(routerMeasurements.powerFactor, 3));
mqtt.publish(baseTopic + "/router/temperature", String(ds18Sys.getValidTemperature()));
mqtt.publish(baseTopic + "/router/temperature", String(ds18Sys.getTemperature().value_or(0)));
mqtt.publish(baseTopic + "/router/thdi", String(routerMeasurements.thdi, 3));
mqtt.publish(baseTopic + "/router/virtual_grid_power", String(gridMetrics.power - routerMeasurements.power, 3));
yield();

mqtt.publish(baseTopic + "/router/output1/bypass", YASOLR_STATE(output1.isBypassOn()));
mqtt.publish(baseTopic + "/router/output1/state", output1.getStateName());
mqtt.publish(baseTopic + "/router/output1/temperature", String(output1.getValidTemperature(), 1));
mqtt.publish(baseTopic + "/router/output1/temperature", String(output1.temperature().orElse(0), 1));
mqtt.publish(baseTopic + "/router/output1/dimmer/duty", String(dimmerO1.getDuty()));
mqtt.publish(baseTopic + "/router/output1/dimmer/duty_cycle", String(dimmerO1.getDutyCycle()));
mqtt.publish(baseTopic + "/router/output1/dimmer/state", YASOLR_STATE(dimmerO1.isOn()));
yield();

mqtt.publish(baseTopic + "/router/output2/bypass", YASOLR_STATE(output2.isBypassOn()));
mqtt.publish(baseTopic + "/router/output2/state", output2.getStateName());
mqtt.publish(baseTopic + "/router/output2/temperature", String(output2.getValidTemperature(), 1));
mqtt.publish(baseTopic + "/router/output2/temperature", String(output2.temperature().orElse(0), 1));
mqtt.publish(baseTopic + "/router/output2/dimmer/duty", String(dimmerO2.getDuty()));
mqtt.publish(baseTopic + "/router/output2/dimmer/duty_cycle", String(dimmerO2.getDutyCycle()));
mqtt.publish(baseTopic + "/router/output2/dimmer/state", YASOLR_STATE(dimmerO2.isOn()));
Expand Down

0 comments on commit afaabf4

Please sign in to comment.