add ha number mode selection #2900

This commit is contained in:
MichaelDvP
2026-01-08 12:06:48 +01:00
parent dd0ea5df0e
commit 5e07e9a11b
18 changed files with 42 additions and 2 deletions

View File

@@ -411,6 +411,20 @@ const MqttSettings = () => {
</MenuItem> </MenuItem>
</TextField> </TextField>
</Grid> </Grid>
<Grid>
<TextField
name="ha_number_mode"
label={LL.MQTT_PUBLISH_TEXT_6()}
value={data.ha_number_mode}
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>Box</MenuItem>
<MenuItem value={1}>Slider</MenuItem>
</TextField>
</Grid>
</Grid> </Grid>
)} )}
</Grid> </Grid>

View File

@@ -219,6 +219,7 @@ const cz: Translation = {
MQTT_PUBLISH_TEXT_3: 'Povolit MQTT Discovery', MQTT_PUBLISH_TEXT_3: 'Povolit MQTT Discovery',
MQTT_PUBLISH_TEXT_4: 'Prefix pro Discovery témata', MQTT_PUBLISH_TEXT_4: 'Prefix pro Discovery témata',
MQTT_PUBLISH_TEXT_5: 'Typ Discovery', MQTT_PUBLISH_TEXT_5: 'Typ Discovery',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Intervaly publikování', MQTT_PUBLISH_INTERVALS: 'Intervaly publikování',
MQTT_INT_BOILER: 'Kotle a tepelná čerpadla', MQTT_INT_BOILER: 'Kotle a tepelná čerpadla',
MQTT_INT_THERMOSTATS: 'Termostaty', MQTT_INT_THERMOSTATS: 'Termostaty',

View File

@@ -219,6 +219,7 @@ const de: Translation = {
MQTT_PUBLISH_TEXT_3: 'Aktiviere `MQTT Discovery`', MQTT_PUBLISH_TEXT_3: 'Aktiviere `MQTT Discovery`',
MQTT_PUBLISH_TEXT_4: 'Prefix für die `Discovery`-Topics', MQTT_PUBLISH_TEXT_4: 'Prefix für die `Discovery`-Topics',
MQTT_PUBLISH_TEXT_5: 'Discovery Typ', MQTT_PUBLISH_TEXT_5: 'Discovery Typ',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Veröffentlichungs-Intervalle', MQTT_PUBLISH_INTERVALS: 'Veröffentlichungs-Intervalle',
MQTT_INT_BOILER: 'Boiler und Wärmepumpen', MQTT_INT_BOILER: 'Boiler und Wärmepumpen',
MQTT_INT_THERMOSTATS: 'Thermostate', MQTT_INT_THERMOSTATS: 'Thermostate',

View File

@@ -219,6 +219,7 @@ const en: Translation = {
MQTT_PUBLISH_TEXT_3: 'Enable MQTT Discovery', MQTT_PUBLISH_TEXT_3: 'Enable MQTT Discovery',
MQTT_PUBLISH_TEXT_4: 'Prefix for the Discovery topics', MQTT_PUBLISH_TEXT_4: 'Prefix for the Discovery topics',
MQTT_PUBLISH_TEXT_5: 'Discovery type', MQTT_PUBLISH_TEXT_5: 'Discovery type',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Publish Intervals', MQTT_PUBLISH_INTERVALS: 'Publish Intervals',
MQTT_INT_BOILER: 'Boilers and Heat Pumps', MQTT_INT_BOILER: 'Boilers and Heat Pumps',
MQTT_INT_THERMOSTATS: 'Thermostats', MQTT_INT_THERMOSTATS: 'Thermostats',

View File

@@ -219,6 +219,7 @@ const fr: Translation = {
MQTT_PUBLISH_TEXT_3: 'Activer la découverte MQTT', MQTT_PUBLISH_TEXT_3: 'Activer la découverte MQTT',
MQTT_PUBLISH_TEXT_4: 'Préfixe pour les topics découverte', MQTT_PUBLISH_TEXT_4: 'Préfixe pour les topics découverte',
MQTT_PUBLISH_TEXT_5: 'Type de découverte', MQTT_PUBLISH_TEXT_5: 'Type de découverte',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Intervalles de publication', MQTT_PUBLISH_INTERVALS: 'Intervalles de publication',
MQTT_INT_BOILER: 'Chaudières et pompes à chaleur', MQTT_INT_BOILER: 'Chaudières et pompes à chaleur',
MQTT_INT_THERMOSTATS: 'Thermostats', MQTT_INT_THERMOSTATS: 'Thermostats',

View File

@@ -219,6 +219,7 @@ const it: Translation = {
MQTT_PUBLISH_TEXT_3: 'Abilita rilevamento MQTT (Home Assistant, Domoticz)', MQTT_PUBLISH_TEXT_3: 'Abilita rilevamento MQTT (Home Assistant, Domoticz)',
MQTT_PUBLISH_TEXT_4: 'Prefisso per gli argomenti di scoperta', MQTT_PUBLISH_TEXT_4: 'Prefisso per gli argomenti di scoperta',
MQTT_PUBLISH_TEXT_5: 'Discovery type', MQTT_PUBLISH_TEXT_5: 'Discovery type',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Pubblica intervalli', MQTT_PUBLISH_INTERVALS: 'Pubblica intervalli',
MQTT_INT_BOILER: 'Caldaie e Pompe di Calore', MQTT_INT_BOILER: 'Caldaie e Pompe di Calore',
MQTT_INT_THERMOSTATS: 'Termostati', MQTT_INT_THERMOSTATS: 'Termostati',

View File

@@ -219,6 +219,7 @@ const nl: Translation = {
MQTT_PUBLISH_TEXT_3: 'Activeer MQTT Discovery', MQTT_PUBLISH_TEXT_3: 'Activeer MQTT Discovery',
MQTT_PUBLISH_TEXT_4: 'Prefix voor de Discovery topics', MQTT_PUBLISH_TEXT_4: 'Prefix voor de Discovery topics',
MQTT_PUBLISH_TEXT_5: 'Discovery type', MQTT_PUBLISH_TEXT_5: 'Discovery type',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Publicatie intervallen', MQTT_PUBLISH_INTERVALS: 'Publicatie intervallen',
MQTT_INT_BOILER: 'CV ketels en warmtepompen', MQTT_INT_BOILER: 'CV ketels en warmtepompen',
MQTT_INT_THERMOSTATS: 'Thermostaten', MQTT_INT_THERMOSTATS: 'Thermostaten',

View File

@@ -219,6 +219,7 @@ const no: Translation = {
MQTT_PUBLISH_TEXT_3: 'Aktiver MQTT Discovery', MQTT_PUBLISH_TEXT_3: 'Aktiver MQTT Discovery',
MQTT_PUBLISH_TEXT_4: 'Prefiks for Discovery topics', MQTT_PUBLISH_TEXT_4: 'Prefiks for Discovery topics',
MQTT_PUBLISH_TEXT_5: 'Discovery type', MQTT_PUBLISH_TEXT_5: 'Discovery type',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Publiseringsintervall', MQTT_PUBLISH_INTERVALS: 'Publiseringsintervall',
MQTT_INT_BOILER: 'Fyr/Varmepumpe', MQTT_INT_BOILER: 'Fyr/Varmepumpe',
MQTT_INT_THERMOSTATS: 'Termostat', MQTT_INT_THERMOSTATS: 'Termostat',

View File

@@ -219,6 +219,7 @@ const pl: BaseTranslation = {
MQTT_PUBLISH_TEXT_3: 'Włącz opcję "MQTT discovery"', MQTT_PUBLISH_TEXT_3: 'Włącz opcję "MQTT discovery"',
MQTT_PUBLISH_TEXT_4: 'Prefiks dla "MQTT discovery"', MQTT_PUBLISH_TEXT_4: 'Prefiks dla "MQTT discovery"',
MQTT_PUBLISH_TEXT_5: 'Typ "MQTT discovery"', MQTT_PUBLISH_TEXT_5: 'Typ "MQTT discovery"',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Interwały publikowania', MQTT_PUBLISH_INTERVALS: 'Interwały publikowania',
MQTT_INT_BOILER: 'Kotły i pompy ciepła', MQTT_INT_BOILER: 'Kotły i pompy ciepła',
MQTT_INT_THERMOSTATS: 'Termostaty', MQTT_INT_THERMOSTATS: 'Termostaty',

View File

@@ -219,6 +219,7 @@ const sk: Translation = {
MQTT_PUBLISH_TEXT_3: 'Povolenie zisťovania MQTT', MQTT_PUBLISH_TEXT_3: 'Povolenie zisťovania MQTT',
MQTT_PUBLISH_TEXT_4: 'Predpona tém Discovery', MQTT_PUBLISH_TEXT_4: 'Predpona tém Discovery',
MQTT_PUBLISH_TEXT_5: 'Typ zistenia', MQTT_PUBLISH_TEXT_5: 'Typ zistenia',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Intervaly zverejňovania', MQTT_PUBLISH_INTERVALS: 'Intervaly zverejňovania',
MQTT_INT_BOILER: 'Kotly a tepelné čerpadlá', MQTT_INT_BOILER: 'Kotly a tepelné čerpadlá',
MQTT_INT_THERMOSTATS: 'Termostaty', MQTT_INT_THERMOSTATS: 'Termostaty',

View File

@@ -219,6 +219,7 @@ const sv: Translation = {
MQTT_PUBLISH_TEXT_3: 'Aktivera MQTT Discovery', MQTT_PUBLISH_TEXT_3: 'Aktivera MQTT Discovery',
MQTT_PUBLISH_TEXT_4: 'Prefix för Discovery topics', MQTT_PUBLISH_TEXT_4: 'Prefix för Discovery topics',
MQTT_PUBLISH_TEXT_5: 'Discoverytyp', MQTT_PUBLISH_TEXT_5: 'Discoverytyp',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Publiceringsintervall', MQTT_PUBLISH_INTERVALS: 'Publiceringsintervall',
MQTT_INT_BOILER: 'Värmepump/panna', MQTT_INT_BOILER: 'Värmepump/panna',
MQTT_INT_THERMOSTATS: 'Termostater', MQTT_INT_THERMOSTATS: 'Termostater',

View File

@@ -219,6 +219,7 @@ const tr: Translation = {
MQTT_PUBLISH_TEXT_3: 'MQTT keşfi etkinleştir (Home Assistant, Domoticz)', MQTT_PUBLISH_TEXT_3: 'MQTT keşfi etkinleştir (Home Assistant, Domoticz)',
MQTT_PUBLISH_TEXT_4: 'Keşif konuları için ön ek', MQTT_PUBLISH_TEXT_4: 'Keşif konuları için ön ek',
MQTT_PUBLISH_TEXT_5: 'Domoticz Format', MQTT_PUBLISH_TEXT_5: 'Domoticz Format',
MQTT_PUBLISH_TEXT_6: 'Number mode',
MQTT_PUBLISH_INTERVALS: 'Yayınlama aralıkları', MQTT_PUBLISH_INTERVALS: 'Yayınlama aralıkları',
MQTT_INT_BOILER: 'Kazanlar ve Isı Pompaları', MQTT_INT_BOILER: 'Kazanlar ve Isı Pompaları',
MQTT_INT_THERMOSTATS: 'Termostatlar', MQTT_INT_THERMOSTATS: 'Termostatlar',

View File

@@ -49,4 +49,5 @@ export interface MqttSettingsType {
publish_single2cmd: boolean; publish_single2cmd: boolean;
discovery_prefix: string; discovery_prefix: string;
discovery_type: number; discovery_type: number;
ha_number_mode: number;
} }

View File

@@ -248,6 +248,7 @@ void MqttSettings::read(MqttSettings & settings, JsonObject root) {
root["nested_format"] = settings.nested_format; root["nested_format"] = settings.nested_format;
root["discovery_prefix"] = settings.discovery_prefix; root["discovery_prefix"] = settings.discovery_prefix;
root["discovery_type"] = settings.discovery_type; root["discovery_type"] = settings.discovery_type;
root["ha_number_mode"] = settings.ha_number_mode;
root["publish_single"] = settings.publish_single; root["publish_single"] = settings.publish_single;
root["publish_single2cmd"] = settings.publish_single2cmd; root["publish_single2cmd"] = settings.publish_single2cmd;
root["send_response"] = settings.send_response; root["send_response"] = settings.send_response;
@@ -288,6 +289,7 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings)
newSettings.nested_format = static_cast<uint8_t>(root["nested_format"] | EMSESP_DEFAULT_NESTED_FORMAT); newSettings.nested_format = static_cast<uint8_t>(root["nested_format"] | EMSESP_DEFAULT_NESTED_FORMAT);
newSettings.discovery_prefix = root["discovery_prefix"] | EMSESP_DEFAULT_DISCOVERY_PREFIX; newSettings.discovery_prefix = root["discovery_prefix"] | EMSESP_DEFAULT_DISCOVERY_PREFIX;
newSettings.discovery_type = static_cast<uint8_t>(root["discovery_type"] | EMSESP_DEFAULT_DISCOVERY_TYPE); newSettings.discovery_type = static_cast<uint8_t>(root["discovery_type"] | EMSESP_DEFAULT_DISCOVERY_TYPE);
newSettings.ha_number_mode = static_cast<uint8_t>(root["ha_number_mode"] | EMSESP_DEFAULT_HA_NUMBER_MODE);
newSettings.publish_single = root["publish_single"] | EMSESP_DEFAULT_PUBLISH_SINGLE; newSettings.publish_single = root["publish_single"] | EMSESP_DEFAULT_PUBLISH_SINGLE;
newSettings.publish_single2cmd = root["publish_single2cmd"] | EMSESP_DEFAULT_PUBLISH_SINGLE2CMD; newSettings.publish_single2cmd = root["publish_single2cmd"] | EMSESP_DEFAULT_PUBLISH_SINGLE2CMD;
newSettings.send_response = root["send_response"] | EMSESP_DEFAULT_SEND_RESPONSE; newSettings.send_response = root["send_response"] | EMSESP_DEFAULT_SEND_RESPONSE;

View File

@@ -93,6 +93,7 @@ class MqttSettings {
uint8_t nested_format = EMSESP_DEFAULT_NESTED_FORMAT; uint8_t nested_format = EMSESP_DEFAULT_NESTED_FORMAT;
String discovery_prefix = EMSESP_DEFAULT_DISCOVERY_PREFIX; String discovery_prefix = EMSESP_DEFAULT_DISCOVERY_PREFIX;
uint8_t discovery_type = EMSESP_DEFAULT_DISCOVERY_TYPE; uint8_t discovery_type = EMSESP_DEFAULT_DISCOVERY_TYPE;
uint8_t ha_number_mode = EMSESP_DEFAULT_HA_NUMBER_MODE;
bool publish_single = EMSESP_DEFAULT_PUBLISH_SINGLE; bool publish_single = EMSESP_DEFAULT_PUBLISH_SINGLE;
bool publish_single2cmd = EMSESP_DEFAULT_PUBLISH_SINGLE2CMD; bool publish_single2cmd = EMSESP_DEFAULT_PUBLISH_SINGLE2CMD;
bool send_response = EMSESP_DEFAULT_SEND_RESPONSE; bool send_response = EMSESP_DEFAULT_SEND_RESPONSE;

View File

@@ -210,6 +210,10 @@
#define EMSESP_DEFAULT_DISCOVERY_TYPE 0 // HA #define EMSESP_DEFAULT_DISCOVERY_TYPE 0 // HA
#endif #endif
#ifndef EMSESP_DEFAULT_HA_NUMBER_MODE
#define EMSESP_DEFAULT_HA_NUMBER_MODE 0 // BOX
#endif
#ifndef EMSESP_DEFAULT_PUBLISH_SINGLE #ifndef EMSESP_DEFAULT_PUBLISH_SINGLE
#define EMSESP_DEFAULT_PUBLISH_SINGLE false #define EMSESP_DEFAULT_PUBLISH_SINGLE false
#endif #endif

View File

@@ -43,6 +43,7 @@ bool Mqtt::ha_enabled_;
uint8_t Mqtt::nested_format_; uint8_t Mqtt::nested_format_;
std::string Mqtt::discovery_prefix_; std::string Mqtt::discovery_prefix_;
uint8_t Mqtt::discovery_type_; uint8_t Mqtt::discovery_type_;
uint8_t Mqtt::ha_number_mode_;
bool Mqtt::send_response_; bool Mqtt::send_response_;
bool Mqtt::publish_single_; bool Mqtt::publish_single_;
bool Mqtt::publish_single2cmd_; bool Mqtt::publish_single2cmd_;
@@ -343,6 +344,7 @@ void Mqtt::load_settings() {
discovery_prefix_ = mqttSettings.discovery_prefix.c_str(); discovery_prefix_ = mqttSettings.discovery_prefix.c_str();
entity_format_ = mqttSettings.entity_format; entity_format_ = mqttSettings.entity_format;
discovery_type_ = mqttSettings.discovery_type; discovery_type_ = mqttSettings.discovery_type;
ha_number_mode_ = mqttSettings.ha_number_mode;
// convert to milliseconds // convert to milliseconds
publish_time_boiler_ = mqttSettings.publish_time_boiler * 1000; publish_time_boiler_ = mqttSettings.publish_time_boiler * 1000;
@@ -1024,8 +1026,12 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev
snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::translated_word(options[0])); snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::translated_word(options[0]));
} }
} else if (type != DeviceValueType::STRING && type != DeviceValueType::BOOL) { } else if (type != DeviceValueType::STRING && type != DeviceValueType::BOOL) {
// For numeric's add the range // For numeric's add the range and mode
doc["mode"] = "box"; // auto, slider or box if (ha_number_mode_ == 1 && (dv_set_max - dv_set_min) <= 100) {
doc["mode"] = "slider";
} else {
doc["mode"] = "box"; // auto, slider or box
}
if (num_op > 0) { if (num_op > 0) {
doc["step"] = 1.0 / num_op; doc["step"] = 1.0 / num_op;
} else if (num_op < 0) { } else if (num_op < 0) {

View File

@@ -341,6 +341,7 @@ class Mqtt {
static uint8_t entity_format_; static uint8_t entity_format_;
static std::string discovery_prefix_; static std::string discovery_prefix_;
static uint8_t discovery_type_; static uint8_t discovery_type_;
static uint8_t ha_number_mode_;
static bool publish_single_; static bool publish_single_;
static bool publish_single2cmd_; static bool publish_single2cmd_;
static bool send_response_; static bool send_response_;