diff --git a/futurehome/CHANGELOG.md b/futurehome/CHANGELOG.md index f7efb53..95d1bdf 100644 --- a/futurehome/CHANGELOG.md +++ b/futurehome/CHANGELOG.md @@ -1,5 +1,9 @@ +## 0.1.10 (28.07.2025) + +- Allowed unpairing of devices using any adapter. + ## 0.1.9 (28.07.2025) - Added icon. diff --git a/futurehome/config.yaml b/futurehome/config.yaml index 33fb13e..86abdf7 100644 --- a/futurehome/config.yaml +++ b/futurehome/config.yaml @@ -1,6 +1,6 @@ # https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config name: Futurehome -version: '0.1.9' +version: '0.1.10' slug: futurehome description: Local Futurehome Smarthub integration url: 'https://github.com/adrianjagielak/home-assistant-futurehome' diff --git a/futurehome/src/ha/publish_device.ts b/futurehome/src/ha/publish_device.ts index a6ed159..73c7034 100644 --- a/futurehome/src/ha/publish_device.ts +++ b/futurehome/src/ha/publish_device.ts @@ -265,22 +265,52 @@ export function haPublishDevice(parameters: { parameters.thingsplexUsername && parameters.thingsplexPassword && parameters.vinculumDeviceData.fimp?.address && - (parameters.vinculumDeviceData.fimp?.adapter === 'zigbee' || - parameters.vinculumDeviceData.fimp?.adapter === 'zwave-ad') + parameters.vinculumDeviceData.fimp?.adapter ) { const deleteCommandTopic = `${topicPrefix}/delete/command`; + + const rawAdapterName = parameters.vinculumDeviceData.fimp?.adapter; + + let adapterName: string; + switch (rawAdapterName) { + case 'zigbee': + adapterName = 'ZigBee'; + break; + case 'zwave-ad': + adapterName = 'Z-Wave'; + break; + default: + adapterName = rawAdapterName + // Split the string by underscores + .split('_') + // Capitalize each word + .map( + (word) => + word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(), + ) + // Join words with spaces + .join(' '); + break; + } + + let adapterServiceAddr = `pt:j1/mt:evt/rt:ad/rn:${rawAdapterName}/ad:1`; + if (rawAdapterName === 'zwave-ad') { + adapterServiceAddr = 'pt:j1/mt:evt/rt:ad/rn:zw/ad:1'; + } + components[`${topicPrefix}_delete_button`] = { unique_id: `${topicPrefix}_delete_button`, platform: 'button', entity_category: 'diagnostic', - name: - parameters.vinculumDeviceData.fimp?.adapter === 'zigbee' - ? 'ZigBee: Unpair Device' - : 'Z-Wave: Unpair Device', + name: `${adapterName}: Unpair Device`, icon: 'mdi:delete-forever', command_topic: deleteCommandTopic, } as any; handlers[deleteCommandTopic] = async (_payload: string) => { + if (parameters.demoMode) { + return; + } + try { const token = await loginToThingsplex({ host: parameters.hubIp, @@ -294,14 +324,8 @@ export function haPublishDevice(parameters: { }, [ { - address: - parameters.vinculumDeviceData.fimp?.adapter === 'zigbee' - ? 'pt:j1/mt:cmd/rt:ad/rn:zigbee/ad:1' - : 'pt:j1/mt:evt/rt:ad/rn:zw/ad:1', - service: - parameters.vinculumDeviceData.fimp?.adapter === 'zigbee' - ? 'zigbee' - : 'zwave-ad', + address: adapterServiceAddr, + service: rawAdapterName, cmd: 'cmd.thing.delete', val_t: 'str_map', val: {