Fix Home Assistant command topics for multi endpoint climate devices. https://github.com/Koenkk/zigbee-herdsman-converters/pull/3217

This commit is contained in:
Koen Kanters
2021-11-10 21:07:47 +01:00
parent 97dacd7623
commit 420bae4259
+21 -21
View File
@@ -196,6 +196,7 @@ export default class HomeAssistant extends Extension {
// Temperature
current_temperature_topic: true,
current_temperature_template: `{{ value_json.${temperature.property} }}`,
command_topic_prefix: endpoint,
},
};
@@ -967,7 +968,8 @@ export default class HomeAssistant extends Extension {
this.discovered[discoverKey] = {topics: new Set(), mockProperties: new Set()};
this.getConfigs(entity).forEach((config) => {
const payload = {...config.discovery_payload};
let stateTopic = `${settings.get().mqtt.base_topic}/${entity.name}`;
const baseTopic = `${settings.get().mqtt.base_topic}/${entity.name}`;
let stateTopic = baseTopic;
if (payload.state_topic_postfix) {
stateTopic += `/${payload.state_topic_postfix}`;
delete payload.state_topic_postfix;
@@ -1017,19 +1019,14 @@ export default class HomeAssistant extends Extension {
/* istanbul ignore next */
if (availabilityEnabled) {
payload.availability_mode = 'all';
payload.availability.push({topic: `${settings.get().mqtt.base_topic}/${entity.name}/availability`});
payload.availability.push({topic: `${baseTopic}/availability`});
}
let commandTopic = `${settings.get().mqtt.base_topic}/${entity.name}/`;
if (payload.command_topic_prefix) {
commandTopic += `${payload.command_topic_prefix}/`;
delete payload.command_topic_prefix;
}
commandTopic += 'set';
if (payload.command_topic_postfix) {
commandTopic += `/${payload.command_topic_postfix}`;
delete payload.command_topic_postfix;
}
const commandTopicPrefix = payload.command_topic_prefix ? `${payload.command_topic_prefix}/` : '';
delete payload.command_topic_prefix;
const commandTopicPostfix = payload.command_topic_postfix ? `/${payload.command_topic_postfix}` : '';
delete payload.command_topic_postfix;
const commandTopic = `${baseTopic}/${commandTopicPrefix}set${commandTopicPostfix}`;
if (payload.command_topic) {
payload.command_topic = commandTopic;
@@ -1050,11 +1047,11 @@ export default class HomeAssistant extends Extension {
}
if (payload.mode_command_topic) {
payload.mode_command_topic = `${stateTopic}/set/system_mode`;
payload.mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/system_mode`;
}
if (payload.hold_command_topic) {
payload.hold_command_topic = `${stateTopic}/set/preset`;
payload.hold_command_topic = `${baseTopic}/${commandTopicPrefix}set/preset`;
}
if (payload.hold_state_topic) {
@@ -1066,7 +1063,7 @@ export default class HomeAssistant extends Extension {
}
if (payload.away_mode_command_topic) {
payload.away_mode_command_topic = `${stateTopic}/set/away_mode`;
payload.away_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/away_mode`;
}
if (payload.current_temperature_topic) {
@@ -1086,15 +1083,18 @@ export default class HomeAssistant extends Extension {
}
if (payload.temperature_command_topic) {
payload.temperature_command_topic = `${stateTopic}/set/${payload.temperature_command_topic}`;
payload.temperature_command_topic =
`${baseTopic}/${commandTopicPrefix}set/${payload.temperature_command_topic}`;
}
if (payload.temperature_low_command_topic) {
payload.temperature_low_command_topic = `${stateTopic}/set/${payload.temperature_low_command_topic}`;
payload.temperature_low_command_topic =
`${baseTopic}/${commandTopicPrefix}set/${payload.temperature_low_command_topic}`;
}
if (payload.temperature_high_command_topic) {
payload.temperature_high_command_topic = `${stateTopic}/set/${payload.temperature_high_command_topic}`;
payload.temperature_high_command_topic =
`${baseTopic}/${commandTopicPrefix}set/${payload.temperature_high_command_topic}`;
}
if (payload.fan_mode_state_topic) {
@@ -1102,7 +1102,7 @@ export default class HomeAssistant extends Extension {
}
if (payload.fan_mode_command_topic) {
payload.fan_mode_command_topic = `${stateTopic}/set/fan_mode`;
payload.fan_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/fan_mode`;
}
if (payload.percentage_state_topic) {
@@ -1110,7 +1110,7 @@ export default class HomeAssistant extends Extension {
}
if (payload.percentage_command_topic) {
payload.percentage_command_topic = `${stateTopic}/set/fan_mode`;
payload.percentage_command_topic = `${baseTopic}/${commandTopicPrefix}set/fan_mode`;
}
if (payload.preset_mode_state_topic) {
@@ -1118,7 +1118,7 @@ export default class HomeAssistant extends Extension {
}
if (payload.preset_mode_command_topic) {
payload.preset_mode_command_topic = `${stateTopic}/set/fan_mode`;
payload.preset_mode_command_topic = `${baseTopic}/${commandTopicPrefix}set/fan_mode`;
}
if (payload.action_topic) {