diff --git a/lib/extension/availability.ts b/lib/extension/availability.ts index f34dce64d..e711576df 100644 --- a/lib/extension/availability.ts +++ b/lib/extension/availability.ts @@ -105,7 +105,7 @@ export default class Availability extends Extension { override async start(): Promise { this.eventBus.onEntityRenamed(this, (data) => { if (utils.isAvailabilityEnabledForEntity(data.entity, settings.get())) { - this.mqtt.publish(`${data.from}/availability`, null, {retain: true, qos: 0}); + this.mqtt.publish(`${data.from}/availability`, null, {retain: true, qos: 1}); this.publishAvailability(data.entity, false, true); } }); @@ -164,7 +164,7 @@ export default class Availability extends Extension { const topic = `${entity.name}/availability`; const payload = utils.availabilityPayload(available ? 'online' : 'offline', settings.get()); this.availabilityCache[entity.ID] = available; - this.mqtt.publish(topic, payload, {retain: true, qos: 0}); + this.mqtt.publish(topic, payload, {retain: true, qos: 1}); if (!skipGroups && entity.isDevice()) { this.zigbee.groups().filter((g) => g.hasMember(entity)) diff --git a/lib/extension/homeassistant.ts b/lib/extension/homeassistant.ts index 5c4da62f5..4b9b3035b 100644 --- a/lib/extension/homeassistant.ts +++ b/lib/extension/homeassistant.ts @@ -968,7 +968,7 @@ export default class HomeAssistant extends Extension { @bind onDeviceRemoved(data: eventdata.DeviceRemoved): void { logger.debug(`Clearing Home Assistant discovery topic for '${data.name}'`); this.discovered[data.ieeeAddr]?.topics.forEach((topic) => { - this.mqtt.publish(topic, null, {retain: true, qos: 0}, this.discoveryTopic, false, false); + this.mqtt.publish(topic, null, {retain: true, qos: 1}, this.discoveryTopic, false, false); }); delete this.discovered[data.ieeeAddr]; @@ -1049,7 +1049,7 @@ export default class HomeAssistant extends Extension { if (data.homeAssisantRename) { for (const config of this.getConfigs(data.entity)) { const topic = this.getDiscoveryTopic(config, data.entity); - this.mqtt.publish(topic, null, {retain: true, qos: 0}, this.discoveryTopic, false, false); + this.mqtt.publish(topic, null, {retain: true, qos: 1}, this.discoveryTopic, false, false); } // Make sure Home Assistant deletes the old entity first otherwise another one (_2) is created @@ -1422,7 +1422,7 @@ export default class HomeAssistant extends Extension { } const topic = this.getDiscoveryTopic(config, entity); - this.mqtt.publish(topic, stringify(payload), {retain: true, qos: 0}, this.discoveryTopic, false, false); + this.mqtt.publish(topic, stringify(payload), {retain: true, qos: 1}, this.discoveryTopic, false, false); this.discovered[discoverKey].topics.add(topic); this.discovered[discoverKey].objectIDs.add(config.object_id); config.mockProperties?.forEach((mockProperty) => @@ -1482,7 +1482,7 @@ export default class HomeAssistant extends Extension { if (clear) { logger.debug(`Clearing Home Assistant config '${data.topic}'`); const topic = data.topic.substring(this.discoveryTopic.length + 1); - this.mqtt.publish(topic, null, {retain: true, qos: 0}, this.discoveryTopic, false, false); + this.mqtt.publish(topic, null, {retain: true, qos: 1}, this.discoveryTopic, false, false); } } else if ((data.topic === this.statusTopic || data.topic === defaultStatusTopic) && data.message.toLowerCase() === 'online') { @@ -1603,7 +1603,7 @@ export default class HomeAssistant extends Extension { origin: this.discoveryOrigin, }; - await this.mqtt.publish(topic, stringify(payload), {retain: true, qos: 0}, this.discoveryTopic, false, false); + await this.mqtt.publish(topic, stringify(payload), {retain: true, qos: 1}, this.discoveryTopic, false, false); this.discoveredTriggers[device.ieeeAddr].add(discoveredKey); } diff --git a/test/availability.test.js b/test/availability.test.js index cb4584db3..80dc19182 100644 --- a/test/availability.test.js +++ b/test/availability.test.js @@ -60,11 +60,11 @@ describe('Availability', () => { it('Should publish availabilty on startup for device where it is enabled for', async () => { expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/remote/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); expect(MQTT.publish).not.toHaveBeenCalledWith('zigbee2mqtt/bulb_color_2/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); }); it('Should publish offline for active device when not seen for 10 minutes', async () => { @@ -77,7 +77,7 @@ describe('Availability', () => { expect(devices.bulb_color.ping).toHaveBeenCalledTimes(1); expect(devices.bulb_color.ping).toHaveBeenNthCalledWith(1, true); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); }); it('Shouldnt do anything for a device when availability: false is set for device', async () => { @@ -93,7 +93,7 @@ describe('Availability', () => { await advancedTime(utils.hours(26)); expect(devices.remote.ping).toHaveBeenCalledTimes(0); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/remote/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); }); it('Should reset ping timer when device last seen changes for active device', async () => { @@ -111,7 +111,7 @@ describe('Availability', () => { expect(devices.bulb_color.ping).toHaveBeenCalledTimes(1); expect(devices.bulb_color.ping).toHaveBeenNthCalledWith(1, true); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); }); it('Should ping again when first ping fails', async () => { @@ -132,7 +132,7 @@ describe('Availability', () => { expect(devices.bulb_color.ping).toHaveBeenNthCalledWith(1, true); expect(devices.bulb_color.ping).toHaveBeenNthCalledWith(2, false); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); }); it('Should reset ping timer when device last seen changes for passive device', async () => { @@ -150,7 +150,7 @@ describe('Availability', () => { await advancedTime(utils.hours(3)); expect(devices.remote.ping).toHaveBeenCalledTimes(0); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/remote/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); }); it('Should immediately mark device as online when it lastSeen changes', async () => { @@ -158,13 +158,13 @@ describe('Availability', () => { await advancedTime(utils.minutes(15)); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); devices.bulb_color.lastSeen = Date.now(); await zigbeeHerdsman.events.lastSeenChanged({device: devices.bulb_color}); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); }); it('Should allow to change availability timeout via device options', async () => { @@ -283,12 +283,12 @@ describe('Availability', () => { await flushPromises(); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', - null, {retain: true, qos: 0}, expect.any(Function)); + null, {retain: true, qos: 1}, expect.any(Function)); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_new_name/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); await advancedTime(utils.hours(12)); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_new_name/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); }); it('Should publish availabiltiy payload in JSON format', async () => { @@ -298,7 +298,7 @@ describe('Availability', () => { await advancedTime(utils.hours(26)); expect(devices.remote.ping).toHaveBeenCalledTimes(0); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/remote/availability', - stringify({state: 'offline'}), {retain: true, qos: 0}, expect.any(Function)); + stringify({state: 'offline'}), {retain: true, qos: 1}, expect.any(Function)); }); it('Deprecated - should allow to block via advanced.availability_blocklist', async () => { @@ -332,16 +332,16 @@ describe('Availability', () => { settings.set(['devices', devices.bulb_color_2.ieeeAddr, 'availability'], true); await resetExtension(); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/group_tradfri_remote/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); MQTT.publish.mockClear(); await advancedTime(utils.minutes(12)); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/group_tradfri_remote/availability', - 'offline', {retain: true, qos: 0}, expect.any(Function)); + 'offline', {retain: true, qos: 1}, expect.any(Function)); MQTT.publish.mockClear(); devices.bulb_color_2.lastSeen = Date.now(); await zigbeeHerdsman.events.lastSeenChanged({device: devices.bulb_color_2}); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/group_tradfri_remote/availability', - 'online', {retain: true, qos: 0}, expect.any(Function)); + 'online', {retain: true, qos: 1}, expect.any(Function)); }); }); diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index b18440af7..50a6b3622 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -119,7 +119,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/1221051039810110150109113116116_9/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -145,7 +145,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/switch/1221051039810110150109113116116_9/switch/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -173,7 +173,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -201,7 +201,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/humidity/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -229,7 +229,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/pressure/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -258,7 +258,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/battery/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -288,7 +288,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/linkquality/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -318,7 +318,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/switch/0x0017880104e45542/switch_left/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -348,7 +348,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/switch/0x0017880104e45542/switch_right/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -391,7 +391,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/0x000b57fffec6a5b2/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -434,7 +434,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -462,7 +462,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/humidity/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -490,7 +490,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/pressure/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -550,7 +550,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -579,7 +579,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/humidity/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -622,7 +622,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -650,7 +650,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/humidity/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -701,7 +701,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/0x0017880104e45541/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -776,7 +776,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/fan/0x0017880104e45548/fan/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -840,7 +840,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/climate/0x0017882104a44559/climate/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -878,7 +878,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/cover/0x0017880104e45551/cover/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -914,7 +914,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/cover/0xf4ce368a38be56a1/cover_l6/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -949,7 +949,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'my_custom_discovery_topic/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1077,7 +1077,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payloadHA), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1215,7 +1215,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1228,31 +1228,31 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/humidity/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/pressure/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/battery/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/linkquality/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1297,14 +1297,14 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -1327,7 +1327,7 @@ describe('HomeAssistant extension', () => { "manufacturer":"Xiaomi" } }), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1381,14 +1381,14 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/1221051039810110150109113116116_9/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/1221051039810110150109113116116_9/light/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1401,7 +1401,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).not.toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', null, - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -1429,7 +1429,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1463,7 +1463,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/binary_sensor/0x000b57fffec6a5b2/update_available/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1502,7 +1502,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/device_automation/0x0017880104e45520/action_single/config', stringify(discoverPayloadAction), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -1527,7 +1527,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/device_automation/0x0017880104e45520/click_single/config', stringify(discoverPayloadClick), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -1573,14 +1573,14 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).not.toHaveBeenCalledWith( 'homeassistant/device_automation/0x0017880104e45520/action_single/config', stringify(discoverPayloadAction), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); expect(MQTT.publish).not.toHaveBeenCalledWith( 'homeassistant/device_automation/0x0017880104e45520/click_single/config', stringify(discoverPayloadClick), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -1692,7 +1692,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/device_automation/0x0017880104e45520/action_single/config', stringify(discoverPayload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); @@ -1757,7 +1757,7 @@ describe('HomeAssistant extension', () => { await MQTT.events.message('homeassistant/light/1221051039810110150109113116116_91231/light/config', stringify({availability: [{topic: 'zigbee2mqtt/bridge/state'}]})); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledTimes(1); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/light/1221051039810110150109113116116_91231/light/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/light/1221051039810110150109113116116_91231/light/config', null, {qos: 1, retain: true}, expect.any(Function)); // Existing group -> dont clear MQTT.publish.mockClear(); @@ -1770,21 +1770,21 @@ describe('HomeAssistant extension', () => { await MQTT.events.message('homeassistant/light/9/light/config', stringify({availability: [{topic: 'zigbee2mqtt/bridge/state'}]})); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledTimes(1); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/light/9/light/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/light/9/light/config', null, {qos: 1, retain: true}, expect.any(Function)); // Existing group, non existing config -> clear MQTT.publish.mockClear(); await MQTT.events.message('homeassistant/light/1221051039810110150109113116116_9/switch/config', stringify({availability: [{topic: 'zigbee2mqtt/bridge/state'}]})); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledTimes(1); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/light/1221051039810110150109113116116_9/switch/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/light/1221051039810110150109113116116_9/switch/config', null, {qos: 1, retain: true}, expect.any(Function)); // Non-existing device -> clear MQTT.publish.mockClear(); await MQTT.events.message('homeassistant/sensor/0x123/temperature/config', stringify({availability: [{topic: 'zigbee2mqtt/bridge/state'}]})); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledTimes(1); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/sensor/0x123/temperature/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/sensor/0x123/temperature/config', null, {qos: 1, retain: true}, expect.any(Function)); // Existing device -> don't clear MQTT.publish.mockClear(); @@ -1803,7 +1803,7 @@ describe('HomeAssistant extension', () => { await MQTT.events.message('homeassistant/sensor/0x000b57fffec6a5b2/update_available/config', stringify({availability: [{topic: 'zigbee2mqtt/bridge/state'}]})); await flushPromises(); expect(MQTT.publish).toHaveBeenCalledTimes(1); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/sensor/0x000b57fffec6a5b2/update_available/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/sensor/0x000b57fffec6a5b2/update_available/config', null, {qos: 1, retain: true}, expect.any(Function)); // Non-existing device but invalid payload -> clear MQTT.publish.mockClear(); @@ -1830,11 +1830,11 @@ describe('HomeAssistant extension', () => { await MQTT.events.message('homeassistant/sensor/0x000b57fffec6a5b2/update_available/config', stringify({availability: [{topic: 'zigbee2mqtt/bridge/state'}]})); await flushPromises(); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/sensor/0x000b57fffec6a5b2/update_available/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/sensor/0x000b57fffec6a5b2/update_available/config', null, {qos: 1, retain: true}, expect.any(Function)); MQTT.publish.mockClear(); await MQTT.events.message('homeassistant/device_automation/0x000b57fffec6a5b2/action_button_3_single/config', stringify({topic: 'zigbee2mqtt/0x000b57fffec6a5b2/availability'})); await flushPromises(); - expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/device_automation/0x000b57fffec6a5b2/action_button_3_single/config', null, {qos: 0, retain: true}, expect.any(Function)); + expect(MQTT.publish).toHaveBeenCalledWith('homeassistant/device_automation/0x000b57fffec6a5b2/action_button_3_single/config', null, {qos: 1, retain: true}, expect.any(Function)); }); it('Should not have Home Assistant legacy entity attributes when disabled', async () => { @@ -1867,7 +1867,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1919,7 +1919,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/1221051039810110150109113116116_9/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -1970,7 +1970,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/1221051039810110150109113116116_9/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -2026,7 +2026,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/light/0x000b57fffec6a5b2/light/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -2066,7 +2066,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x000b57fffec6a5b2/last_seen/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); }); @@ -2104,7 +2104,7 @@ describe('HomeAssistant extension', () => { expect(MQTT.publish).toHaveBeenCalledWith( 'homeassistant/sensor/0x0017880104e45522/temperature/config', stringify(payload), - { retain: true, qos: 0 }, + { retain: true, qos: 1 }, expect.any(Function), ); });