From ed217176e99357a4aad7e92b1f78da92a65eac3f Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 18 Aug 2023 20:07:40 +0200 Subject: [PATCH 1/9] Set entity name to null to indicate entity is the default entity for the device Due to HA change as per https://developers.home-assistant.io/blog/2023-057-21-change-naming-mqtt-entities/ --- plejd/MqttClient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plejd/MqttClient.js b/plejd/MqttClient.js index 57f1262..3517041 100644 --- a/plejd/MqttClient.js +++ b/plejd/MqttClient.js @@ -58,7 +58,7 @@ const decodeTopic = (topic) => { const getOutputDeviceDiscoveryPayload = ( /** @type {import('./types/DeviceRegistry').OutputDevice} */ device, ) => ({ - name: device.name, + name: null, unique_id: device.uniqueId, '~': getBaseTopic(device.uniqueId, device.type), state_topic: `~/${TOPIC_TYPES.STATE}`, From 5f77638ca32b60053803895026afe27952a3f0b2 Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 25 Aug 2023 15:57:00 +0200 Subject: [PATCH 2/9] Add support for the DAL-01 Dali broadcast with dimmer and tuneable white support --- plejd/PlejdApi.js | 19 ++++++++----------- plejd/README.md | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/plejd/PlejdApi.js b/plejd/PlejdApi.js index cc12990..1fcc9cb 100644 --- a/plejd/PlejdApi.js +++ b/plejd/PlejdApi.js @@ -332,17 +332,14 @@ class PlejdApi { dimmable: true, broadcastClicks: false, }; - // DAL-01 is presumably a very special device - // Please open a new issue if you have ideas on how to handel - // Below could be use as testing, but since one device can have up to 64 slaves it probably won't work - // case 12: - // return { - // name: 'DAL-01', - // description: 'Dali broadcast with dimmer and tuneable white support', - // type: 'light', - // dimmable: true, - // broadcastClicks: false, - // }; + case 12: + return { + name: 'DAL-01', + description: 'Dali broadcast with dimmer and tuneable white support', + type: 'light', + dimmable: true, + broadcastClicks: false, + }; case 14: return { name: 'DIM-01', diff --git a/plejd/README.md b/plejd/README.md index 7b61943..9cecf0b 100644 --- a/plejd/README.md +++ b/plejd/README.md @@ -144,7 +144,7 @@ Plejd output devices typically appears as either lights or switches in Home Assi | DIM-02 | - | Light | | | LED-10 | - | Light | | | LED-75 | - | Light | | -| DAL-01 | - | - | Not tested, not supported | +| DAL-01 | - | Light | | | WPH-01 | - | Device Automation | type:button_short_press, subtype:button_1, button_2,button_3,button_4 | | WRT-01 | - | Device Automation | type:button_short_press, subtype:button_1 | | GWY-01 | - | - | | From 14ba12718240d70ab0529194079a1a2d432b6669 Mon Sep 17 00:00:00 2001 From: swevictor Date: Mon, 2 Oct 2023 08:58:11 +0200 Subject: [PATCH 3/9] Add support for DWN-01 smart tunable downlight --- plejd/PlejdApi.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/plejd/PlejdApi.js b/plejd/PlejdApi.js index 1fcc9cb..ebe0496 100644 --- a/plejd/PlejdApi.js +++ b/plejd/PlejdApi.js @@ -389,8 +389,33 @@ class PlejdApi { dimmable: true, broadcastClicks: false, }; + case 167: + return { + name: 'DWN-01', + description: 'Smart tunable downlight with a built-in dimmer function, 8W', + type: 'light', + dimmable: true, + broadcastClicks: false, + }; + // PLEASE CREATE AN ISSUE WITH THE HARDWARE ID if you own one of these devices! + // case + // return { + // name: 'DWN-02', + // description: 'Smart tunable downlight with a built-in dimmer function, 8W', + // type: 'light', + // dimmable: true, + // broadcastClicks: false, + // }; + // case + // return { + // name: 'OUT-01', + // description: 'Outdoor wall light with built-in LED, 2x5W', + // type: 'light', + // dimmable: true, + // broadcastClicks: false, + // }; default: - throw new Error(`Unknown device type with id ${plejdDevice.hardwareId}`); + throw new Error(`Unknown device type with hardware id ${plejdDevice.hardwareId}. --- PLEASE POST THIS AND THE NEXT LOG ROWS to https://github.com/icanos/hassio-plejd/issues/ --- `); } } From ae8e41ec41e8371f3022636143fff105adb7e36f Mon Sep 17 00:00:00 2001 From: swevictor Date: Tue, 3 Oct 2023 21:56:04 +0200 Subject: [PATCH 4/9] Only add a BLE output id once during discovery to account for grouping in DWN devices --- plejd/DeviceRegistry.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plejd/DeviceRegistry.js b/plejd/DeviceRegistry.js index 951652e..cf1b3c8 100644 --- a/plejd/DeviceRegistry.js +++ b/plejd/DeviceRegistry.js @@ -49,6 +49,14 @@ class DeviceRegistry { /** @param outputDevice {import('types/DeviceRegistry').OutputDevice} */ addOutputDevice(outputDevice) { + const alreadyExistingBLEDevice = this.getOutputDeviceByBleOutputAddress(outputDevice.bleOutputAddress); + if (alreadyExistingBLEDevice) { + logger.warn(`Device with output id ${outputDevice.bleOutputAddress} already exists named ${alreadyExistingBLEDevice.name}. These two devices are probably grouped in the Plejd app. If this seems to be an error, please log a GitHub issue.`); + logger.info(`NOT adding ${outputDevice.name} to device registry`); + logger.verbose(`Details of device NOT added: ${JSON.stringify(outputDevice)}`); + return; + } + this.outputDevices = { ...this.outputDevices, [outputDevice.uniqueId]: outputDevice, From 75306827ae5156afce6a80e160e89e4ea91bf258 Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 6 Oct 2023 11:57:09 +0200 Subject: [PATCH 5/9] Improve user-facing logging and BLE id handling in device registry and PlejdBLEHandler - Resolves #265 --- plejd/DeviceRegistry.js | 17 +++++++++++++++++ plejd/PlejdBLEHandler.js | 21 ++++++++++++++------- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/plejd/DeviceRegistry.js b/plejd/DeviceRegistry.js index cf1b3c8..173ab09 100644 --- a/plejd/DeviceRegistry.js +++ b/plejd/DeviceRegistry.js @@ -7,6 +7,8 @@ class DeviceRegistry { /** @private @type {Object.} */ devices = {}; + /** @private @type {Object.} */ + mainBleIdByDeviceId = {}; /** @private @type {Object.} */ outputDeviceUniqueIdsByRoomId = {}; /** @private @type {Object.} */ @@ -45,6 +47,10 @@ class DeviceRegistry { this.outputUniqueIdByBleOutputAddress[ this.getUniqueBLEId(inputDevice.bleInputAddress, inputDevice.input) ] = inputDevice.uniqueId; + + if (!this.mainBleIdByDeviceId[inputDevice.deviceId]) { + this.mainBleIdByDeviceId[inputDevice.deviceId] = inputDevice.bleInputAddress; + } } /** @param outputDevice {import('types/DeviceRegistry').OutputDevice} */ @@ -69,6 +75,9 @@ class DeviceRegistry { ); this.outputUniqueIdByBleOutputAddress[outputDevice.bleOutputAddress] = outputDevice.uniqueId; + if (!this.mainBleIdByDeviceId[outputDevice.deviceId]) { + this.mainBleIdByDeviceId[outputDevice.deviceId] = outputDevice.bleOutputAddress; + } if (!this.outputDeviceUniqueIdsByRoomId[outputDevice.roomId]) { this.outputDeviceUniqueIdsByRoomId[outputDevice.roomId] = []; @@ -179,6 +188,14 @@ class DeviceRegistry { return (this.inputDevices[uniqueInputId] || {}).name; } + /** + * @param {string} deviceId + */ + getMainBleIdByDeviceId(deviceId) { + return this.mainBleIdByDeviceId[deviceId]; + } + + /** * @param {string } deviceId The physical device serial number * @return {import('./types/ApiSite').Device} diff --git a/plejd/PlejdBLEHandler.js b/plejd/PlejdBLEHandler.js index 6e943d8..e6d85f6 100644 --- a/plejd/PlejdBLEHandler.js +++ b/plejd/PlejdBLEHandler.js @@ -47,7 +47,10 @@ class PlejBLEHandler extends EventEmitter { config; bleDevices = []; bus = null; + /** @type {import('types/ApiSite').Device} */ connectedDevice = null; + /** @type Number? */ + connectedDeviceId = null; consecutiveWriteFails; consecutiveReconnectAttempts = 0; /** @type {import('./DeviceRegistry')} */ @@ -140,6 +143,7 @@ class PlejBLEHandler extends EventEmitter { this.bleDevices = []; this.connectedDevice = null; + this.connectedDeviceId = null; this.characteristics = { data: null, @@ -244,8 +248,8 @@ class PlejBLEHandler extends EventEmitter { await delay(this.config.connectionTimeout * 1000); // eslint-disable-next-line no-await-in-loop - const connectedPlejdDevice = await this._onDeviceConnected(plejd); - if (connectedPlejdDevice) { + const deviceWasConnected = await this._onDeviceConnected(plejd); + if (deviceWasConnected) { break; } } @@ -284,7 +288,7 @@ class PlejBLEHandler extends EventEmitter { throw new Error('Could not connect to any Plejd device'); } - logger.info(`BLE Connected to ${this.connectedDevice.name}`); + logger.info(`BLE Connected to ${this.connectedDevice.title}`); // Connected and authenticated, request current time and start ping if (this.config.updatePlejdClock) { @@ -770,9 +774,12 @@ class PlejBLEHandler extends EventEmitter { return null; } - logger.info('Connected device is a Plejd device with the right characteristics.'); - this.connectedDevice = device.device; + this.connectedDeviceId = this.deviceRegistry.getMainBleIdByDeviceId(this.connectedDevice.deviceId); + + logger.verbose('The connected Plejd device has the right charecteristics!'); + logger.info(`Connected to Plejd device ${this.connectedDevice.title} (${this.connectedDevice.deviceId}, BLE id ${this.connectedDeviceId}).`); + await this._authenticate(); return this.connectedDevice; @@ -887,12 +894,12 @@ class PlejBLEHandler extends EventEmitter { logger.warn( `Plejd clock time off by more than 1 minute. Reported time: ${plejdTime.toString()}, diff ${diffSeconds} seconds. Time will be set hourly.`, ); - if (this.connectedDevice && bleOutputAddress === this.connectedDevice.id) { + if (this.connectedDevice && bleOutputAddress === this.connectedDeviceId) { // Requested time sync by us const newLocalTimestamp = now.getTime() / 1000 - offsetSecondsGuess; logger.info(`Setting time to ${now.toString()}`); const payload = this._createPayload( - this.connectedDevice.id, + this.connectedDeviceId, BLE_CMD_TIME_UPDATE, 10, (pl) => pl.writeInt32LE(Math.trunc(newLocalTimestamp), 5), From 1f2c2df5ca5b8056b081a128cf3010dbcbe6b301 Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 6 Oct 2023 14:02:04 +0200 Subject: [PATCH 6/9] Improve handling of too short BLE time update messages --- plejd/PlejdBLEHandler.js | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/plejd/PlejdBLEHandler.js b/plejd/PlejdBLEHandler.js index e6d85f6..2c6b504 100644 --- a/plejd/PlejdBLEHandler.js +++ b/plejd/PlejdBLEHandler.js @@ -39,6 +39,9 @@ const BLUEZ_DEVICE_ID = 'org.bluez.Device1'; const GATT_SERVICE_ID = 'org.bluez.GattService1'; const GATT_CHRC_ID = 'org.bluez.GattCharacteristic1'; +const PAYLOAD_POSITION_OFFSET = 5; +const DIM_LEVEL_POSITION_OFFSET = 7; + const delay = (timeout) => new Promise((resolve) => setTimeout(resolve, timeout)); class PlejBLEHandler extends EventEmitter { @@ -804,7 +807,7 @@ class PlejBLEHandler extends EventEmitter { const encryptedData = value.value; const decoded = this._encryptDecrypt(this.cryptoKey, this.plejdService.addr, encryptedData); - if (decoded.length < 5) { + if (decoded.length < PAYLOAD_POSITION_OFFSET) { if (Logger.shouldLog('debug')) { // decoded.toString() could potentially be expensive logger.verbose(`Too short raw event ignored: ${decoded.toString('hex')}`); @@ -817,13 +820,13 @@ class PlejBLEHandler extends EventEmitter { // Bytes 2-3 is Command/Request const cmd = decoded.readUInt16BE(3); - const state = decoded.length > 5 ? decoded.readUInt8(5) : 0; + const state = decoded.length > PAYLOAD_POSITION_OFFSET ? decoded.readUInt8(PAYLOAD_POSITION_OFFSET) : 0; - const dim = decoded.length > 7 ? decoded.readUInt8(7) : 0; + const dim = decoded.length > DIM_LEVEL_POSITION_OFFSET ? decoded.readUInt8(DIM_LEVEL_POSITION_OFFSET) : 0; if (Logger.shouldLog('silly')) { // Full dim level is 2 bytes, we could potentially use this - const dimFull = decoded.length > 7 ? decoded.readUInt16LE(6) : 0; + const dimFull = decoded.length > DIM_LEVEL_POSITION_OFFSET ? decoded.readUInt16LE(DIM_LEVEL_POSITION_OFFSET - 1) : 0; logger.silly(`Dim: ${dim.toString(16)}, full precision: ${dimFull.toString(16)}`); } @@ -874,12 +877,22 @@ class PlejBLEHandler extends EventEmitter { data = { sceneId: scene.uniqueId }; this.emit(PlejBLEHandler.EVENTS.commandReceived, outputUniqueId, command, data); } else if (cmd === BLE_CMD_TIME_UPDATE) { + + if (decoded.length < PAYLOAD_POSITION_OFFSET + 4) { + if (Logger.shouldLog('debug')) { + // decoded.toString() could potentially be expensive + logger.verbose(`Too short time update event ignored: ${decoded.toString('hex')}`); + } + // ignore the notification since too small + return; + } + const now = new Date(); // Guess Plejd timezone based on HA time zone const offsetSecondsGuess = now.getTimezoneOffset() * 60 + 250; // Todo: 4 min off // Plejd reports local unix timestamp adjust to local time zone - const plejdTimestampUTC = (decoded.readInt32LE(5) + offsetSecondsGuess) * 1000; + const plejdTimestampUTC = (decoded.readInt32LE(PAYLOAD_POSITION_OFFSET) + offsetSecondsGuess) * 1000; const diffSeconds = Math.round((plejdTimestampUTC - now.getTime()) / 1000); if ( bleOutputAddress !== BLE_BROADCAST_DEVICE_ID || @@ -902,7 +915,7 @@ class PlejBLEHandler extends EventEmitter { this.connectedDeviceId, BLE_CMD_TIME_UPDATE, 10, - (pl) => pl.writeInt32LE(Math.trunc(newLocalTimestamp), 5), + (pl) => pl.writeInt32LE(Math.trunc(newLocalTimestamp), PAYLOAD_POSITION_OFFSET), ); try { this._write(payload); @@ -954,8 +967,8 @@ class PlejBLEHandler extends EventEmitter { return this._createPayload( bleOutputAddress, command, - 5 + Math.ceil(hexDataString.length / 2), - (payload) => payload.write(hexDataString, 5, 'hex'), + PAYLOAD_POSITION_OFFSET + Math.ceil(hexDataString.length / 2), + (payload) => payload.write(hexDataString, PAYLOAD_POSITION_OFFSET, 'hex'), requestResponseCommand, ); } From 9146f9c7d353989b8a7371490db0b00bf3930718 Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 6 Oct 2023 14:11:23 +0200 Subject: [PATCH 7/9] Lint and code style fixes --- plejd/DeviceRegistry.js | 9 ++++++--- plejd/PlejdApi.js | 8 +++++--- plejd/PlejdBLEHandler.js | 25 +++++++++++++++++-------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/plejd/DeviceRegistry.js b/plejd/DeviceRegistry.js index 173ab09..491b92a 100644 --- a/plejd/DeviceRegistry.js +++ b/plejd/DeviceRegistry.js @@ -55,9 +55,13 @@ class DeviceRegistry { /** @param outputDevice {import('types/DeviceRegistry').OutputDevice} */ addOutputDevice(outputDevice) { - const alreadyExistingBLEDevice = this.getOutputDeviceByBleOutputAddress(outputDevice.bleOutputAddress); + const alreadyExistingBLEDevice = this.getOutputDeviceByBleOutputAddress( + outputDevice.bleOutputAddress, + ); if (alreadyExistingBLEDevice) { - logger.warn(`Device with output id ${outputDevice.bleOutputAddress} already exists named ${alreadyExistingBLEDevice.name}. These two devices are probably grouped in the Plejd app. If this seems to be an error, please log a GitHub issue.`); + logger.warn( + `Device with output id ${outputDevice.bleOutputAddress} already exists named ${alreadyExistingBLEDevice.name}. These two devices are probably grouped in the Plejd app. If this seems to be an error, please log a GitHub issue.`, + ); logger.info(`NOT adding ${outputDevice.name} to device registry`); logger.verbose(`Details of device NOT added: ${JSON.stringify(outputDevice)}`); return; @@ -195,7 +199,6 @@ class DeviceRegistry { return this.mainBleIdByDeviceId[deviceId]; } - /** * @param {string } deviceId The physical device serial number * @return {import('./types/ApiSite').Device} diff --git a/plejd/PlejdApi.js b/plejd/PlejdApi.js index ebe0496..fffcc2f 100644 --- a/plejd/PlejdApi.js +++ b/plejd/PlejdApi.js @@ -398,7 +398,7 @@ class PlejdApi { broadcastClicks: false, }; // PLEASE CREATE AN ISSUE WITH THE HARDWARE ID if you own one of these devices! - // case + // case // return { // name: 'DWN-02', // description: 'Smart tunable downlight with a built-in dimmer function, 8W', @@ -406,7 +406,7 @@ class PlejdApi { // dimmable: true, // broadcastClicks: false, // }; - // case + // case // return { // name: 'OUT-01', // description: 'Outdoor wall light with built-in LED, 2x5W', @@ -415,7 +415,9 @@ class PlejdApi { // broadcastClicks: false, // }; default: - throw new Error(`Unknown device type with hardware id ${plejdDevice.hardwareId}. --- PLEASE POST THIS AND THE NEXT LOG ROWS to https://github.com/icanos/hassio-plejd/issues/ --- `); + throw new Error( + `Unknown device type with hardware id ${plejdDevice.hardwareId}. --- PLEASE POST THIS AND THE NEXT LOG ROWS to https://github.com/icanos/hassio-plejd/issues/ --- `, + ); } } diff --git a/plejd/PlejdBLEHandler.js b/plejd/PlejdBLEHandler.js index 2c6b504..7f50d55 100644 --- a/plejd/PlejdBLEHandler.js +++ b/plejd/PlejdBLEHandler.js @@ -778,10 +778,14 @@ class PlejBLEHandler extends EventEmitter { } this.connectedDevice = device.device; - this.connectedDeviceId = this.deviceRegistry.getMainBleIdByDeviceId(this.connectedDevice.deviceId); + this.connectedDeviceId = this.deviceRegistry.getMainBleIdByDeviceId( + this.connectedDevice.deviceId, + ); logger.verbose('The connected Plejd device has the right charecteristics!'); - logger.info(`Connected to Plejd device ${this.connectedDevice.title} (${this.connectedDevice.deviceId}, BLE id ${this.connectedDeviceId}).`); + logger.info( + `Connected to Plejd device ${this.connectedDevice.title} (${this.connectedDevice.deviceId}, BLE id ${this.connectedDeviceId}).`, + ); await this._authenticate(); @@ -820,13 +824,18 @@ class PlejBLEHandler extends EventEmitter { // Bytes 2-3 is Command/Request const cmd = decoded.readUInt16BE(3); - const state = decoded.length > PAYLOAD_POSITION_OFFSET ? decoded.readUInt8(PAYLOAD_POSITION_OFFSET) : 0; + const state = + decoded.length > PAYLOAD_POSITION_OFFSET ? decoded.readUInt8(PAYLOAD_POSITION_OFFSET) : 0; - const dim = decoded.length > DIM_LEVEL_POSITION_OFFSET ? decoded.readUInt8(DIM_LEVEL_POSITION_OFFSET) : 0; + const dim = + decoded.length > DIM_LEVEL_POSITION_OFFSET ? decoded.readUInt8(DIM_LEVEL_POSITION_OFFSET) : 0; if (Logger.shouldLog('silly')) { // Full dim level is 2 bytes, we could potentially use this - const dimFull = decoded.length > DIM_LEVEL_POSITION_OFFSET ? decoded.readUInt16LE(DIM_LEVEL_POSITION_OFFSET - 1) : 0; + const dimFull = + decoded.length > DIM_LEVEL_POSITION_OFFSET + ? decoded.readUInt16LE(DIM_LEVEL_POSITION_OFFSET - 1) + : 0; logger.silly(`Dim: ${dim.toString(16)}, full precision: ${dimFull.toString(16)}`); } @@ -877,7 +886,6 @@ class PlejBLEHandler extends EventEmitter { data = { sceneId: scene.uniqueId }; this.emit(PlejBLEHandler.EVENTS.commandReceived, outputUniqueId, command, data); } else if (cmd === BLE_CMD_TIME_UPDATE) { - if (decoded.length < PAYLOAD_POSITION_OFFSET + 4) { if (Logger.shouldLog('debug')) { // decoded.toString() could potentially be expensive @@ -886,13 +894,14 @@ class PlejBLEHandler extends EventEmitter { // ignore the notification since too small return; } - + const now = new Date(); // Guess Plejd timezone based on HA time zone const offsetSecondsGuess = now.getTimezoneOffset() * 60 + 250; // Todo: 4 min off // Plejd reports local unix timestamp adjust to local time zone - const plejdTimestampUTC = (decoded.readInt32LE(PAYLOAD_POSITION_OFFSET) + offsetSecondsGuess) * 1000; + const plejdTimestampUTC = + (decoded.readInt32LE(PAYLOAD_POSITION_OFFSET) + offsetSecondsGuess) * 1000; const diffSeconds = Math.round((plejdTimestampUTC - now.getTime()) / 1000); if ( bleOutputAddress !== BLE_BROADCAST_DEVICE_ID || From fd14d51144a214e5ebbd66293c8a9a0059202c68 Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 6 Oct 2023 14:11:52 +0200 Subject: [PATCH 8/9] Update readme and add support for DWN-01 --- plejd/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plejd/README.md b/plejd/README.md index 9cecf0b..7e0c8da 100644 --- a/plejd/README.md +++ b/plejd/README.md @@ -145,6 +145,7 @@ Plejd output devices typically appears as either lights or switches in Home Assi | LED-10 | - | Light | | | LED-75 | - | Light | | | DAL-01 | - | Light | | +| DWN-01 | - | Light | | | WPH-01 | - | Device Automation | type:button_short_press, subtype:button_1, button_2,button_3,button_4 | | WRT-01 | - | Device Automation | type:button_short_press, subtype:button_1 | | GWY-01 | - | - | | From 1c0cb66e03bf8183ba678fa5f7afe8e857d96965 Mon Sep 17 00:00:00 2001 From: swevictor Date: Fri, 6 Oct 2023 14:12:37 +0200 Subject: [PATCH 9/9] Update release notes and config to prepare for 0.11.0 --- plejd/CHANGELOG.md | 21 ++++++++++++++++++++- plejd/config.json | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/plejd/CHANGELOG.md b/plejd/CHANGELOG.md index 2ccc750..90fe28a 100644 --- a/plejd/CHANGELOG.md +++ b/plejd/CHANGELOG.md @@ -1,6 +1,25 @@ # Changelog hassio-plejd Home Assistant Plejd addon -## [0.10.0](https://github.com/icanos/hassio-plejd/tree/0.10.0) +## [0.11.0](https://github.com/icanos/hassio-plejd/tree/0.11.0) (2023-10-06) + +[Full Changelog](https://github.com/icanos/hassio-plejd/compare/0.10.0...0.11.0) + +**Closed issues:** + +- DWN-01 [\#287](https://github.com/icanos/hassio-plejd/issues/287) +- Lights detected but cannot control them via HA. Going to unknown / unavailable in MQTT logbook [\#285](https://github.com/icanos/hassio-plejd/issues/285) +- 0.10.0 breaks DAL-01 [\#284](https://github.com/icanos/hassio-plejd/issues/284) +- Seems to just be looping [\#283](https://github.com/icanos/hassio-plejd/issues/283) +- Failed to start discovery. Operation already in progress [\#282](https://github.com/icanos/hassio-plejd/issues/282) +- Warning after HASS upgrade to 2023.8 [\#279](https://github.com/icanos/hassio-plejd/issues/279) +- Discovery timeout because of gateway [\#278](https://github.com/icanos/hassio-plejd/issues/278) +- Non-existing fields of connectedDevice are accessed in PlejdBLEHandler.js breaking time sync [\#265](https://github.com/icanos/hassio-plejd/issues/265) +- Unable to retrieve session token response: Request failed with status code 404 [\#264](https://github.com/icanos/hassio-plejd/issues/264) +- Used to work, can't find suitable bt device [\#263](https://github.com/icanos/hassio-plejd/issues/263) +- Reconnecting loop keeps going after devices found, this makes them unavailable. [\#261](https://github.com/icanos/hassio-plejd/issues/261) +- disconnecting after a few days [\#252](https://github.com/icanos/hassio-plejd/issues/252) + +## [0.10.0](https://github.com/icanos/hassio-plejd/tree/0.10.0) (2023-08-22) [Full Changelog](https://github.com/icanos/hassio-plejd/compare/0.9.1...0.10.0) diff --git a/plejd/config.json b/plejd/config.json index 36d6896..8a05d03 100644 --- a/plejd/config.json +++ b/plejd/config.json @@ -1,6 +1,6 @@ { "name": "Plejd", - "version": "0.10.0", + "version": "0.11.0", "slug": "plejd", "description": "Adds support for the Swedish home automation devices from Plejd.", "url": "https://github.com/icanos/hassio-plejd/",