mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 08:19:52 +03:00
publish energy in api/mqtt with 2 digits
This commit is contained in:
@@ -854,16 +854,16 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
|
|||||||
if (model() != EMS_DEVICE_FLAG_HEATPUMP) {
|
if (model() != EMS_DEVICE_FLAG_HEATPUMP) {
|
||||||
register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory));
|
register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory));
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nomPower_, DeviceValueType::UINT, FL_(nomPower), DeviceValueUOM::KW, MAKE_CF_CB(set_nomPower));
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nomPower_, DeviceValueType::UINT, FL_(nomPower), DeviceValueUOM::KW, MAKE_CF_CB(set_nomPower));
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgHeat_, DeviceValueType::ULONG, FL_(nrgHeat), DeviceValueUOM::KWH, MAKE_CF_CB(set_nrgHeat));
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgHeat_, DeviceValueType::ULONG, DeviceValueNumOp::DV_NUMOP_DIV100, FL_(nrgHeat), DeviceValueUOM::KWH, MAKE_CF_CB(set_nrgHeat), 0, 10000000UL);
|
||||||
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgWw_, DeviceValueType::ULONG, FL_(nrgWw), DeviceValueUOM::KWH, MAKE_CF_CB(set_nrgWw));
|
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgWw_, DeviceValueType::ULONG, DeviceValueNumOp::DV_NUMOP_DIV100, FL_(nrgWw), DeviceValueUOM::KWH, MAKE_CF_CB(set_nrgWw), 0, 10000000UL);
|
||||||
|
|
||||||
nrgHeatF_ = EMSESP::nvs_.getDouble(FL_(nrgHeat)[0], 0);
|
nrgHeatF_ = EMSESP::nvs_.getDouble(FL_(nrgHeat)[0], 0);
|
||||||
nrgWwF_ = EMSESP::nvs_.getDouble(FL_(nrgWw)[0], 0);
|
nrgWwF_ = EMSESP::nvs_.getDouble(FL_(nrgWw)[0], 0);
|
||||||
nomPower_ = EMSESP::nvs_.getUChar(FL_(nomPower)[0], 0);
|
nomPower_ = EMSESP::nvs_.getUChar(FL_(nomPower)[0], 0);
|
||||||
if (nrgHeatF_ < 0 || nrgHeatF_ >= EMS_VALUE_ULONG_NOTSET) {
|
if (nrgHeatF_ < 0 || nrgHeatF_ >= EMS_VALUE_ULLONG_NOTSET) {
|
||||||
nrgHeatF_ = 0;
|
nrgHeatF_ = 0;
|
||||||
}
|
}
|
||||||
if (nrgWwF_ < 0 || nrgWwF_ >= EMS_VALUE_ULONG_NOTSET) {
|
if (nrgWwF_ < 0 || nrgWwF_ >= EMS_VALUE_ULLONG_NOTSET) {
|
||||||
nrgWwF_ = 0;
|
nrgWwF_ = 0;
|
||||||
}
|
}
|
||||||
if (nomPower_ == EMS_VALUE_UINT_NOTSET) {
|
if (nomPower_ == EMS_VALUE_UINT_NOTSET) {
|
||||||
@@ -939,9 +939,9 @@ void Boiler::check_active() {
|
|||||||
static uint8_t heatBurnPow = 0;
|
static uint8_t heatBurnPow = 0;
|
||||||
static uint8_t wwBurnPow = 0;
|
static uint8_t wwBurnPow = 0;
|
||||||
static uint8_t lastSaveHour = 0;
|
static uint8_t lastSaveHour = 0;
|
||||||
// resolution needed: 0.01 Wh = 0.01 Ws / 3600 = (% * kW * ms) / 3600
|
// store in units of 0.01 kWh, resolution needed: 0.01 Wh = 0.01 Ws / 3600 = (% * kW * ms) / 3600
|
||||||
nrgHeatF_ += (double_t)(((uint32_t)heatBurnPow * nomPower_ * (uuid::get_uptime() - powLastReadTime_)) / 3600) / 100000UL;
|
nrgHeatF_ += ((double)((uint32_t)heatBurnPow * nomPower_ * (uuid::get_uptime() - powLastReadTime_)) / 3600) / 1000UL;
|
||||||
nrgWwF_ += (double_t)(((uint32_t)wwBurnPow * nomPower_ * (uuid::get_uptime() - powLastReadTime_)) / 3600) / 100000UL;
|
nrgWwF_ += ((double)((uint32_t)wwBurnPow * nomPower_ * (uuid::get_uptime() - powLastReadTime_)) / 3600) / 1000UL;
|
||||||
has_update(nrgHeat_, (uint32_t)(nrgHeatF_ + 0.5));
|
has_update(nrgHeat_, (uint32_t)(nrgHeatF_ + 0.5));
|
||||||
has_update(nrgWw_, (uint32_t)(nrgWwF_ + 0.5));
|
has_update(nrgWw_, (uint32_t)(nrgWwF_ + 0.5));
|
||||||
// check for store values
|
// check for store values
|
||||||
@@ -1014,7 +1014,9 @@ void Boiler::process_UBAMonitorFast(std::shared_ptr<const Telegram> telegram) {
|
|||||||
|
|
||||||
has_update(telegram, serviceCodeNumber_, 20);
|
has_update(telegram, serviceCodeNumber_, 20);
|
||||||
|
|
||||||
check_active(); // do a quick check to see if the hot water or heating is active
|
if (telegram->offset <= 4 && telegram->offset + telegram->message_length > 5) {
|
||||||
|
check_active(); // do a quick check to see if the hot water or heating is active
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1153,7 +1155,9 @@ void Boiler::process_UBAMonitorFastPlus(std::shared_ptr<const Telegram> telegram
|
|||||||
boilerState_ |= state & 0x04 ? 0x02 : 0;
|
boilerState_ |= state & 0x04 ? 0x02 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_active(); // do a quick check to see if the hot water or heating is active
|
if (telegram->offset <= 10 && telegram->offset + telegram->message_length > 11) {
|
||||||
|
check_active(); // do a quick check to see if the hot water or heating is active
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2722,26 +2726,26 @@ bool Boiler::set_wwAltOpPrio(const char * value, const int8_t id) {
|
|||||||
|
|
||||||
// energy counters. Setting an invalid value does not update, but trigger a store.
|
// energy counters. Setting an invalid value does not update, but trigger a store.
|
||||||
bool Boiler::set_nrgHeat(const char * value, const int8_t id) {
|
bool Boiler::set_nrgHeat(const char * value, const int8_t id) {
|
||||||
int v;
|
float v;
|
||||||
if (!Helpers::value2number(value, v)) {
|
if (!Helpers::value2float(value, v)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (v >= 0 && v < EMS_VALUE_ULONG_NOTSET) {
|
if (v >= 0) {
|
||||||
nrgHeatF_ = v;
|
nrgHeatF_ = v * 100;
|
||||||
has_update(nrgHeat_, (uint32_t)nrgHeatF_);
|
has_update(nrgHeat_, (uint32_t)(nrgHeatF_ + 0.5));
|
||||||
}
|
}
|
||||||
store_energy();
|
store_energy();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Boiler::set_nrgWw(const char * value, const int8_t id) {
|
bool Boiler::set_nrgWw(const char * value, const int8_t id) {
|
||||||
int v;
|
float v;
|
||||||
if (!Helpers::value2number(value, v)) {
|
if (!Helpers::value2float(value, v)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (v >= 0 && v < EMS_VALUE_ULONG_NOTSET) {
|
if (v >= 0) {
|
||||||
nrgWwF_ = v;
|
nrgWwF_ = v * 100;
|
||||||
has_update(nrgWw_, (uint32_t)nrgWwF_);
|
has_update(nrgWw_, (uint32_t)(nrgWwF_ + 0.5));
|
||||||
}
|
}
|
||||||
store_energy();
|
store_energy();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -260,8 +260,8 @@ class Boiler : public EMSdevice {
|
|||||||
uint8_t setReturnTemp_;
|
uint8_t setReturnTemp_;
|
||||||
|
|
||||||
// special
|
// special
|
||||||
double_t nrgHeatF_;
|
double nrgHeatF_;
|
||||||
double_t nrgWwF_;
|
double nrgWwF_;
|
||||||
uint32_t nrgHeat_;
|
uint32_t nrgHeat_;
|
||||||
uint32_t nrgWw_;
|
uint32_t nrgWw_;
|
||||||
uint8_t nomPower_;
|
uint8_t nomPower_;
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ char * Helpers::render_value(char * result, const uint32_t value, const int8_t f
|
|||||||
}
|
}
|
||||||
result[0] = '\0';
|
result[0] = '\0';
|
||||||
uint32_t new_value = fahrenheit ? format ? value * 1.8 + 32 * format * (fahrenheit - 1) : value * 1.8 + 32 * (fahrenheit - 1) : value;
|
uint32_t new_value = fahrenheit ? format ? value * 1.8 + 32 * format * (fahrenheit - 1) : value * 1.8 + 32 * (fahrenheit - 1) : value;
|
||||||
char s[10] = {0};
|
char s[14] = {0};
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
if (!format) {
|
if (!format) {
|
||||||
@@ -354,6 +354,9 @@ char * Helpers::render_value(char * result, const uint32_t value, const int8_t f
|
|||||||
strlcpy(result, ltoa(new_value / format, s, 10), sizeof(s));
|
strlcpy(result, ltoa(new_value / format, s, 10), sizeof(s));
|
||||||
strlcat(result, ".", sizeof(s));
|
strlcat(result, ".", sizeof(s));
|
||||||
strlcat(result, itoa(((new_value % format) * 10) / format, s, 10), sizeof(s));
|
strlcat(result, itoa(((new_value % format) * 10) / format, s, 10), sizeof(s));
|
||||||
|
if (format == 100) {
|
||||||
|
strlcat(result, itoa(new_value % 10, s, 10), sizeof(s));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
strlcpy(result, ltoa(new_value * format * -1, s, 10), sizeof(s));
|
strlcpy(result, ltoa(new_value * format * -1, s, 10), sizeof(s));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define EMSESP_APP_VERSION "3.6.1-dev.0e"
|
#define EMSESP_APP_VERSION "3.6.1-dev.0f"
|
||||||
|
|||||||
Reference in New Issue
Block a user