mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 18:56:38 +00:00
Add command SetOption24
Add command SetOption24 0/1 to select pressure unit as hPa or mmHg (#4241)
This commit is contained in:
parent
9fc701b649
commit
14a7424e9b
@ -1,5 +1,6 @@
|
||||
/* 6.3.0.2 20181101
|
||||
* Add minutes to commands Timezone to allow all possible world timezones
|
||||
* Add command SetOption24 0/1 to select pressure unit as hPa or mmHg (#4241)
|
||||
*
|
||||
* 6.3.0.1 20181031
|
||||
* Add wifi status to Tuya (#4221)
|
||||
|
@ -99,6 +99,7 @@
|
||||
#define D_JSON_REACTIVE_POWERUSAGE "ReactivePower"
|
||||
#define D_JSON_PRESSURE "Pressure"
|
||||
#define D_JSON_PRESSUREATSEALEVEL "SeaPressure"
|
||||
#define D_JSON_PRESSURE_UNIT "PressureUnit"
|
||||
#define D_JSON_PROGRAMFLASHSIZE "ProgramFlashSize"
|
||||
#define D_JSON_PROGRAMSIZE "ProgramSize"
|
||||
#define D_JSON_RESET "Reset"
|
||||
@ -529,13 +530,8 @@ const char kOptionBlinkOff[] PROGMEM = "BLINKOFF|" D_BLINKOFF ;
|
||||
#ifdef USE_WEBSERVER
|
||||
const char HTTP_SNS_TEMP[] PROGMEM = "%s{s}%s " D_TEMPERATURE "{m}%s°%c{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
const char HTTP_SNS_HUM[] PROGMEM = "%s{s}%s " D_HUMIDITY "{m}%s%%{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
#ifndef USE_MMHG
|
||||
const char HTTP_SNS_PRESSURE[] PROGMEM = "%s{s}%s " D_PRESSURE "{m}%s " D_UNIT_PRESSURE "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
const char HTTP_SNS_SEAPRESSURE[] PROGMEM = "%s{s}%s " D_PRESSUREATSEALEVEL "{m}%s " D_UNIT_PRESSURE "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
#else
|
||||
const char HTTP_SNS_PRESSURE[] PROGMEM = "%s{s}%s " D_PRESSURE "{m}%s " D_UNIT_MILLIMETER_MERCURY "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
const char HTTP_SNS_SEAPRESSURE[] PROGMEM = "%s{s}%s " D_PRESSUREATSEALEVEL "{m}%s " D_UNIT_MILLIMETER_MERCURY "{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
#endif
|
||||
const char HTTP_SNS_PRESSURE[] PROGMEM = "%s{s}%s " D_PRESSURE "{m}%s %s{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
const char HTTP_SNS_SEAPRESSURE[] PROGMEM = "%s{s}%s " D_PRESSUREATSEALEVEL "{m}%s %s{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
const char HTTP_SNS_ANALOG[] PROGMEM = "%s{s}%s " D_ANALOG_INPUT "%d{m}%d{e}"; // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
|
||||
|
||||
#if defined(USE_MHZ19) || defined(USE_SENSEAIR)
|
||||
|
@ -174,11 +174,11 @@
|
||||
#define WS2812_LEDS 30 // [Pixels] Number of WS2812 LEDs to start with (max is 512)
|
||||
|
||||
#define TEMP_CONVERSION 0 // [SetOption8] Return temperature in (0 = Celsius or 1 = Fahrenheit)
|
||||
#define PRESSURE_CONVERSION 0 // [SetOption24] Return pressure in (0 = hPa or 1 = mmHg)
|
||||
#define TEMP_RESOLUTION 1 // [TempRes] Maximum number of decimals (0 - 3) showing sensor Temperature
|
||||
#define HUMIDITY_RESOLUTION 1 // [HumRes] Maximum number of decimals (0 - 3) showing sensor Humidity
|
||||
#define PRESSURE_RESOLUTION 1 // [PressRes] Maximum number of decimals (0 - 3) showing sensor Pressure
|
||||
#define ENERGY_RESOLUTION 3 // [EnergyRes] Maximum number of decimals (0 - 5) showing energy usage in kWh
|
||||
//#define USE_MMHG // Use mmHg instead of hPa
|
||||
|
||||
/*********************************************************************************************\
|
||||
* END OF SECTION 1
|
||||
|
@ -48,8 +48,8 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
||||
uint32_t not_power_linked : 1; // bit 20 (v5.11.1f)
|
||||
uint32_t no_power_on_check : 1; // bit 21 (v5.11.1i)
|
||||
uint32_t mqtt_serial : 1; // bit 22 (v5.12.0f)
|
||||
uint32_t mqtt_serial_raw : 1; // bit 23 (v6.1.1c)
|
||||
uint32_t rules_once : 1; // bit 24 (v5.12.0k) - free since v5.14.0b
|
||||
uint32_t mqtt_serial_raw : 1; // bit 23 (v6.1.1c) // Was rules_enabled until 5.14.0b
|
||||
uint32_t pressure_conversion : 1; // bit 24 (v6.3.0.2) // Was rules_once until 5.14.0b
|
||||
uint32_t knx_enabled : 1; // bit 25 (v5.12.0l) KNX
|
||||
uint32_t device_index_enable : 1; // bit 26 (v5.13.1a)
|
||||
uint32_t knx_enable_enhancement : 1; // bit 27 (v5.14.0a) KNX
|
||||
|
@ -563,14 +563,15 @@ void SettingsDefaultSet2()
|
||||
|
||||
// Sensor
|
||||
Settings.flag.temperature_conversion = TEMP_CONVERSION;
|
||||
Settings.flag.pressure_conversion = PRESSURE_CONVERSION;
|
||||
Settings.flag2.pressure_resolution = PRESSURE_RESOLUTION;
|
||||
Settings.flag2.humidity_resolution = HUMIDITY_RESOLUTION;
|
||||
Settings.flag2.temperature_resolution = TEMP_RESOLUTION;
|
||||
// Settings.altitude = 0;
|
||||
|
||||
// Rules
|
||||
// Settings.flag.rules_enabled = 0;
|
||||
// Settings.flag.rules_once = 0;
|
||||
// Settings.rule_enabled = 0;
|
||||
// Settings.rule_once = 0;
|
||||
// for (byte i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
|
||||
|
||||
// Home Assistant
|
||||
@ -804,8 +805,8 @@ void SettingsDelta()
|
||||
}
|
||||
if (Settings.version < 0x050E0002) {
|
||||
for (byte i = 1; i < MAX_RULE_SETS; i++) { Settings.rules[i][0] = '\0'; }
|
||||
Settings.rule_enabled = Settings.flag.mqtt_serial_raw;
|
||||
Settings.rule_once = Settings.flag.rules_once;
|
||||
Settings.rule_enabled = Settings.flag.mqtt_serial_raw; // Was rules_enabled until 5.14.0b
|
||||
Settings.rule_once = Settings.flag.pressure_conversion; // Was rules_once until 5.14.0b
|
||||
}
|
||||
if (Settings.version < 0x06000000) {
|
||||
Settings.cfg_size = sizeof(SYSCFG);
|
||||
@ -826,8 +827,8 @@ void SettingsDelta()
|
||||
}
|
||||
}
|
||||
if (Settings.version < 0x06000003) {
|
||||
Settings.flag.mqtt_serial_raw = 0;
|
||||
Settings.flag.rules_once = 0;
|
||||
Settings.flag.mqtt_serial_raw = 0; // Was rules_enabled until 5.14.0b
|
||||
Settings.flag.pressure_conversion = 0; // Was rules_once until 5.14.0b
|
||||
Settings.flag3.data = 0;
|
||||
}
|
||||
if (Settings.version < 0x06010103) {
|
||||
|
@ -1613,6 +1613,9 @@ boolean MqttShowSensor()
|
||||
}
|
||||
XsnsCall(FUNC_JSON_APPEND);
|
||||
boolean json_data_available = (strlen(mqtt_data) - json_data_start);
|
||||
if (strstr_P(mqtt_data, PSTR(D_JSON_PRESSURE))) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_PRESSURE_UNIT "\":\"%s\""), mqtt_data, PressureUnit().c_str());
|
||||
}
|
||||
if (strstr_P(mqtt_data, PSTR(D_JSON_TEMPERATURE))) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_JSON_TEMPERATURE_UNIT "\":\"%c\""), mqtt_data, TempUnit());
|
||||
}
|
||||
|
@ -475,16 +475,21 @@ char TempUnit()
|
||||
return (Settings.flag.temperature_conversion) ? 'F' : 'C';
|
||||
}
|
||||
|
||||
float ConvertPress(float p)
|
||||
float ConvertPressure(float p)
|
||||
{
|
||||
float result = p;
|
||||
|
||||
if (!isnan(p)) {
|
||||
if (!isnan(p) && Settings.flag.pressure_conversion) {
|
||||
result = p * 0.75006375541921; // mmHg
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
String PressureUnit()
|
||||
{
|
||||
return (Settings.flag.pressure_conversion) ? String(D_UNIT_MILLIMETER_MERCURY) : String(D_UNIT_PRESSURE);
|
||||
}
|
||||
|
||||
void SetGlobalValues(float temperature, float humidity)
|
||||
{
|
||||
global_update = uptime;
|
||||
|
@ -49,8 +49,6 @@ struct BMPSTRUCT {
|
||||
char bmp_name[7]; // Sensor name - "BMPXXX"
|
||||
uint8_t bmp_type = 0;
|
||||
uint8_t bmp_model = 0;
|
||||
|
||||
uint8_t bmp_valid = 0;
|
||||
#ifdef USE_BME680
|
||||
uint8_t bme680_state = 0;
|
||||
float bmp_gas_resistance = 0.0;
|
||||
@ -473,17 +471,8 @@ void BmpRead()
|
||||
break;
|
||||
#endif // USE_BME680
|
||||
}
|
||||
if (bmp_sensors[bmp_idx].bmp_temperature != 0.0) {
|
||||
bmp_sensors[bmp_idx].bmp_temperature = ConvertTemp(bmp_sensors[bmp_idx].bmp_temperature);
|
||||
}
|
||||
#ifdef USE_MMHG
|
||||
if (bmp_sensors[bmp_idx].bmp_pressure != 0.0) {
|
||||
bmp_sensors[bmp_idx].bmp_pressure = ConvertPress(bmp_sensors[bmp_idx].bmp_pressure);
|
||||
}
|
||||
#endif // USE_MMHG
|
||||
}
|
||||
|
||||
SetGlobalValues(bmp_sensors[0].bmp_temperature, bmp_sensors[0].bmp_humidity);
|
||||
SetGlobalValues(ConvertTemp(bmp_sensors[0].bmp_temperature), bmp_sensors[0].bmp_humidity);
|
||||
}
|
||||
|
||||
void BmpEverySecond()
|
||||
@ -511,15 +500,18 @@ void BmpShow(boolean json)
|
||||
|
||||
if (bmp_sensors[bmp_idx].bmp_pressure != 0.0) {
|
||||
bmp_sealevel = (bmp_sensors[bmp_idx].bmp_pressure / FastPrecisePow(1.0 - ((float)Settings.altitude / 44330.0), 5.255)) - 21.6;
|
||||
bmp_sealevel = ConvertPressure(bmp_sealevel);
|
||||
}
|
||||
float bmp_temperature = ConvertTemp(bmp_sensors[bmp_idx].bmp_temperature);
|
||||
float bmp_pressure = ConvertPressure(bmp_sensors[bmp_idx].bmp_pressure);
|
||||
|
||||
snprintf(name, sizeof(name), bmp_sensors[bmp_idx].bmp_name);
|
||||
if (bmp_count > 1) {
|
||||
snprintf_P(name, sizeof(name), PSTR("%s-%02X"), name, bmp_sensors[bmp_idx].bmp_address); // BMXXXX-XX
|
||||
}
|
||||
|
||||
dtostrfd(bmp_sensors[bmp_idx].bmp_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
dtostrfd(bmp_sensors[bmp_idx].bmp_pressure, Settings.flag2.pressure_resolution, pressure);
|
||||
dtostrfd(bmp_temperature, Settings.flag2.temperature_resolution, temperature);
|
||||
dtostrfd(bmp_pressure, Settings.flag2.pressure_resolution, pressure);
|
||||
dtostrfd(bmp_sealevel, Settings.flag2.pressure_resolution, sea_pressure);
|
||||
dtostrfd(bmp_sensors[bmp_idx].bmp_humidity, Settings.flag2.humidity_resolution, humidity);
|
||||
#ifdef USE_BME680
|
||||
@ -563,7 +555,7 @@ void BmpShow(boolean json)
|
||||
|
||||
#ifdef USE_KNX
|
||||
if (0 == tele_period) {
|
||||
KnxSensor(KNX_TEMPERATURE, bmp_sensors[bmp_idx].bmp_temperature);
|
||||
KnxSensor(KNX_TEMPERATURE, bmp_temperature);
|
||||
KnxSensor(KNX_HUMIDITY, bmp_sensors[bmp_idx].bmp_humidity);
|
||||
}
|
||||
#endif // USE_KNX
|
||||
@ -574,9 +566,9 @@ void BmpShow(boolean json)
|
||||
if (bmp_sensors[bmp_idx].bmp_model >= 2) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_HUM, mqtt_data, name, humidity);
|
||||
}
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_PRESSURE, mqtt_data, name, pressure);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_PRESSURE, mqtt_data, name, pressure, PressureUnit().c_str());
|
||||
if (Settings.altitude != 0) {
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_SEAPRESSURE, mqtt_data, name, sea_pressure);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_SEAPRESSURE, mqtt_data, name, sea_pressure, PressureUnit().c_str());
|
||||
}
|
||||
#ifdef USE_BME680
|
||||
if (bmp_sensors[bmp_idx].bmp_model >= 3) {
|
||||
|
@ -75,7 +75,7 @@ a_setoption = [[
|
||||
"Energy monitoring while powered off",
|
||||
"MQTT serial",
|
||||
"MQTT serial binary",
|
||||
"Rules once mode until 5.14.0b",
|
||||
"Convert pressure to mmHg",
|
||||
"KNX enabled",
|
||||
"Use Power device index on single relay devices",
|
||||
"KNX enhancement",
|
||||
@ -87,7 +87,7 @@ a_setoption = [[
|
||||
"Timers enabled",
|
||||
"Generic ESP8285 GPIO enabled",
|
||||
"Add UTC time offset to JSON message",
|
||||
"",
|
||||
"Show hostname and IP address in GUI",
|
||||
"","","","",
|
||||
"","","","",
|
||||
"","","","",
|
||||
|
Loading…
x
Reference in New Issue
Block a user