mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 19:56:30 +00:00
Fix global temperature
- Fix global temperature use of float solving intermittend power off (#8175) - Fix BL0940 power monitoring when powered on but no load present
This commit is contained in:
parent
f14057d587
commit
0abfcf1954
@ -687,9 +687,9 @@ void ResetGlobalValues(void)
|
|||||||
{
|
{
|
||||||
if ((uptime - global_update) > GLOBAL_VALUES_VALID) { // Reset after 5 minutes
|
if ((uptime - global_update) > GLOBAL_VALUES_VALID) { // Reset after 5 minutes
|
||||||
global_update = 0;
|
global_update = 0;
|
||||||
global_temperature = 9999;
|
global_temperature = NAN;
|
||||||
global_humidity = 0;
|
global_humidity = 0.0f;
|
||||||
global_pressure = 0;
|
global_pressure = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -626,7 +626,7 @@ void CmndGlobalTemp(void)
|
|||||||
if (!isnan(temperature) && Settings.flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit
|
if (!isnan(temperature) && Settings.flag.temperature_conversion) { // SetOption8 - Switch between Celsius or Fahrenheit
|
||||||
temperature = (temperature - 32) / 1.8; // Celsius
|
temperature = (temperature - 32) / 1.8; // Celsius
|
||||||
}
|
}
|
||||||
if ((temperature >= -50.0) && (temperature <= 100.0)) {
|
if ((temperature >= -50.0f) && (temperature <= 100.0f)) {
|
||||||
ConvertTemp(temperature);
|
ConvertTemp(temperature);
|
||||||
global_update = 1; // Keep global values just entered valid
|
global_update = 1; // Keep global values just entered valid
|
||||||
}
|
}
|
||||||
|
@ -111,9 +111,9 @@ uint32_t uptime = 0; // Counting every second until 42949
|
|||||||
uint32_t loop_load_avg = 0; // Indicative loop load average
|
uint32_t loop_load_avg = 0; // Indicative loop load average
|
||||||
uint32_t global_update = 0; // Timestamp of last global temperature and humidity update
|
uint32_t global_update = 0; // Timestamp of last global temperature and humidity update
|
||||||
uint32_t web_log_index = 1; // Index in Web log buffer (should never be 0)
|
uint32_t web_log_index = 1; // Index in Web log buffer (should never be 0)
|
||||||
float global_temperature = 9999; // Provide a global temperature to be used by some sensors
|
float global_temperature = NAN; // Provide a global temperature to be used by some sensors
|
||||||
float global_humidity = 0; // Provide a global humidity to be used by some sensors
|
float global_humidity = 0.0f; // Provide a global humidity to be used by some sensors
|
||||||
float global_pressure = 0; // Provide a global pressure to be used by some sensors
|
float global_pressure = 0.0f; // Provide a global pressure to be used by some sensors
|
||||||
uint16_t tele_period = 9999; // Tele period timer
|
uint16_t tele_period = 9999; // Tele period timer
|
||||||
uint16_t blink_counter = 0; // Number of blink cycles
|
uint16_t blink_counter = 0; // Number of blink cycles
|
||||||
uint16_t seriallog_timer = 0; // Timer to disable Seriallog
|
uint16_t seriallog_timer = 0; // Timer to disable Seriallog
|
||||||
|
@ -459,7 +459,12 @@ void EnergyEverySecond(void)
|
|||||||
{
|
{
|
||||||
// Overtemp check
|
// Overtemp check
|
||||||
if (global_update) {
|
if (global_update) {
|
||||||
if (power && (global_temperature != 9999) && (global_temperature > Settings.param[P_OVER_TEMP])) { // Device overtemp, turn off relays
|
if (power && !isnan(global_temperature) && (global_temperature > (float)Settings.param[P_OVER_TEMP])) { // Device overtemp, turn off relays
|
||||||
|
|
||||||
|
char temperature[33];
|
||||||
|
dtostrfd(global_temperature, 1, temperature);
|
||||||
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("NRG: GlobTemp %s"), temperature);
|
||||||
|
|
||||||
SetAllPower(POWER_ALL_OFF, SRC_OVERTEMP);
|
SetAllPower(POWER_ALL_OFF, SRC_OVERTEMP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,17 +83,20 @@ void Bl0940Received(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bl0940.voltage = Bl0940.rx_buffer[12] << 16 | Bl0940.rx_buffer[11] << 8 | Bl0940.rx_buffer[10];
|
Bl0940.voltage = Bl0940.rx_buffer[12] << 16 | Bl0940.rx_buffer[11] << 8 | Bl0940.rx_buffer[10]; // V_RMS unsigned
|
||||||
Bl0940.current = Bl0940.rx_buffer[6] << 16 | Bl0940.rx_buffer[5] << 8 | Bl0940.rx_buffer[4];
|
Bl0940.current = Bl0940.rx_buffer[6] << 16 | Bl0940.rx_buffer[5] << 8 | Bl0940.rx_buffer[4]; // I_RMS unsigned
|
||||||
Bl0940.power = Bl0940.rx_buffer[18] << 16 | Bl0940.rx_buffer[17] << 8 | Bl0940.rx_buffer[16];
|
int32_t power = Bl0940.rx_buffer[18] << 24 | Bl0940.rx_buffer[17] << 16 | Bl0940.rx_buffer[16] << 8; // WATT signed
|
||||||
// Bl0940.cf_pulses = Bl0940.rx_buffer[24] << 16 | Bl0940.rx_buffer[23] << 8 | Bl0940.rx_buffer[22];
|
Bl0940.power = abs(power) >> 8; // WATT unsigned
|
||||||
uint16_t tps1 = Bl0940.rx_buffer[29] << 8 | Bl0940.rx_buffer[28];
|
// Bl0940.cf_pulses = Bl0940.rx_buffer[24] << 16 | Bl0940.rx_buffer[23] << 8 | Bl0940.rx_buffer[22]; // CF_CNT unsigned
|
||||||
|
uint16_t tps1 = Bl0940.rx_buffer[29] << 8 | Bl0940.rx_buffer[28]; // TPS1 unsigned
|
||||||
float t = ((170.0f/448.0f)*(((float)tps1/2.0f)-32.0f))-45.0f;
|
float t = ((170.0f/448.0f)*(((float)tps1/2.0f)-32.0f))-45.0f;
|
||||||
Bl0940.temperature = ConvertTemp(t);
|
Bl0940.temperature = ConvertTemp(t);
|
||||||
|
|
||||||
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("BL9: U %d, I %d, P %d, T %d"), Bl0940.voltage, Bl0940.current, Bl0940.power, tps1);
|
||||||
|
|
||||||
if (Energy.power_on) { // Powered on
|
if (Energy.power_on) { // Powered on
|
||||||
Energy.voltage[0] = (float)Bl0940.voltage / Settings.energy_voltage_calibration;
|
Energy.voltage[0] = (float)Bl0940.voltage / Settings.energy_voltage_calibration;
|
||||||
if (power != 0) {
|
if (power && (Bl0940.power > Settings.energy_power_calibration)) { // We need at least 1W
|
||||||
Energy.active_power[0] = (float)Bl0940.power / Settings.energy_power_calibration;
|
Energy.active_power[0] = (float)Bl0940.power / Settings.energy_power_calibration;
|
||||||
Energy.current[0] = (float)Bl0940.current / (Settings.energy_current_calibration * 100);
|
Energy.current[0] = (float)Bl0940.current / (Settings.energy_current_calibration * 100);
|
||||||
} else {
|
} else {
|
||||||
|
@ -87,7 +87,7 @@ void Sgp30Update(void) // Perform every second to ensure proper operation of th
|
|||||||
if (!sgp.IAQmeasure()) {
|
if (!sgp.IAQmeasure()) {
|
||||||
return; // Measurement failed
|
return; // Measurement failed
|
||||||
}
|
}
|
||||||
if (global_update && (global_humidity > 0) && (global_temperature != 9999)) {
|
if (global_update && (global_humidity > 0) && !isnan(global_temperature)) {
|
||||||
// abs hum in mg/m3
|
// abs hum in mg/m3
|
||||||
sgp30_abshum=sgp30_AbsoluteHumidity(global_temperature,global_humidity,TempUnit());
|
sgp30_abshum=sgp30_AbsoluteHumidity(global_temperature,global_humidity,TempUnit());
|
||||||
sgp.setHumidity(sgp30_abshum*1000);
|
sgp.setHumidity(sgp30_abshum*1000);
|
||||||
@ -119,13 +119,13 @@ void Sgp30Show(bool json)
|
|||||||
if (sgp30_ready) {
|
if (sgp30_ready) {
|
||||||
char abs_hum[33];
|
char abs_hum[33];
|
||||||
|
|
||||||
if (global_update && global_humidity>0 && global_temperature!=9999) {
|
if (global_update && (global_humidity > 0) && !isnan(global_temperature)) {
|
||||||
// has humidity + temperature
|
// has humidity + temperature
|
||||||
dtostrfd(sgp30_abshum,4,abs_hum);
|
dtostrfd(sgp30_abshum,4,abs_hum);
|
||||||
}
|
}
|
||||||
if (json) {
|
if (json) {
|
||||||
ResponseAppend_P(PSTR(",\"SGP30\":{\"" D_JSON_ECO2 "\":%d,\"" D_JSON_TVOC "\":%d"), sgp.eCO2, sgp.TVOC);
|
ResponseAppend_P(PSTR(",\"SGP30\":{\"" D_JSON_ECO2 "\":%d,\"" D_JSON_TVOC "\":%d"), sgp.eCO2, sgp.TVOC);
|
||||||
if (global_update && global_humidity>0 && global_temperature!=9999) {
|
if (global_update && global_humidity>0 && !isnan(global_temperature)) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_AHUM "\":%s"),abs_hum);
|
ResponseAppend_P(PSTR(",\"" D_JSON_AHUM "\":%s"),abs_hum);
|
||||||
}
|
}
|
||||||
ResponseJsonEnd();
|
ResponseJsonEnd();
|
||||||
|
@ -65,7 +65,9 @@ void CCS811Update(void) // Perform every n second
|
|||||||
TVOC = ccs.getTVOC();
|
TVOC = ccs.getTVOC();
|
||||||
eCO2 = ccs.geteCO2();
|
eCO2 = ccs.geteCO2();
|
||||||
CCS811_ready = 1;
|
CCS811_ready = 1;
|
||||||
if (global_update && global_humidity>0 && global_temperature!=9999) { ccs.setEnvironmentalData((uint8_t)global_humidity, global_temperature); }
|
if (global_update && (global_humidity > 0) && !isnan(global_temperature)) {
|
||||||
|
ccs.setEnvironmentalData((uint8_t)global_humidity, global_temperature);
|
||||||
|
}
|
||||||
ecnt = 0;
|
ecnt = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -37,7 +37,7 @@ void HandleMetrics(void)
|
|||||||
|
|
||||||
char parameter[FLOATSZ];
|
char parameter[FLOATSZ];
|
||||||
|
|
||||||
if (global_temperature != 9999) {
|
if (!isnan(global_temperature)) {
|
||||||
dtostrfd(global_temperature, Settings.flag2.temperature_resolution, parameter);
|
dtostrfd(global_temperature, Settings.flag2.temperature_resolution, parameter);
|
||||||
WSContentSend_P(PSTR("# TYPE global_temperature gauge\nglobal_temperature %s\n"), parameter);
|
WSContentSend_P(PSTR("# TYPE global_temperature gauge\nglobal_temperature %s\n"), parameter);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user