From 654eaf151fb9e51bb0e61ebbcfb2285a6e1e38f7 Mon Sep 17 00:00:00 2001 From: Robin Baum Date: Thu, 26 Dec 2024 20:16:22 +0100 Subject: [PATCH] added: support for HmIP-MIOB --- drivers/HmIP-MIOB/assets/icon.svg | 226 +++++++++++++++++ drivers/HmIP-MIOB/assets/images/large.png | Bin 0 -> 73463 bytes drivers/HmIP-MIOB/assets/images/small.png | Bin 0 -> 3851 bytes drivers/HmIP-MIOB/device.js | 88 +++++++ drivers/HmIP-MIOB/driver.compose.json | 280 ++++++++++++++++++++++ drivers/HmIP-MIOB/driver.js | 26 ++ lib/DeviceLister.js | 18 +- lib/HomeMaticCCUJack.js | 16 +- lib/driver.js | 7 +- 9 files changed, 649 insertions(+), 12 deletions(-) create mode 100644 drivers/HmIP-MIOB/assets/icon.svg create mode 100644 drivers/HmIP-MIOB/assets/images/large.png create mode 100644 drivers/HmIP-MIOB/assets/images/small.png create mode 100644 drivers/HmIP-MIOB/device.js create mode 100644 drivers/HmIP-MIOB/driver.compose.json create mode 100644 drivers/HmIP-MIOB/driver.js diff --git a/drivers/HmIP-MIOB/assets/icon.svg b/drivers/HmIP-MIOB/assets/icon.svg new file mode 100644 index 0000000..ed8b91e --- /dev/null +++ b/drivers/HmIP-MIOB/assets/icon.svg @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + diff --git a/drivers/HmIP-MIOB/assets/images/large.png b/drivers/HmIP-MIOB/assets/images/large.png new file mode 100644 index 0000000000000000000000000000000000000000..065c478cd55b7a2e0bf67ba1302eb1256c828e87 GIT binary patch literal 73463 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

;*kDs&0v=Y+9fk-mvAS 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 N002ovPDHLkV1mUB94!C< literal 0 HcmV?d00001 diff --git a/drivers/HmIP-MIOB/device.js b/drivers/HmIP-MIOB/device.js new file mode 100644 index 0000000..306e681 --- /dev/null +++ b/drivers/HmIP-MIOB/device.js @@ -0,0 +1,88 @@ +'use strict'; + +const Device = require('../../lib/device.js'); +const capabilityMap = { + "onoff.channel2": { channel: 2, key: "STATE", set: { key: "STATE", channel: 2 } }, + "onoff.channel3": { channel: 3, key: "STATE", set: { key: "STATE", channel: 3 } }, + "onoff.channel4": { channel: 4, key: "STATE", set: { key: "STATE", channel: 4 } }, + "onoff.channel6": { channel: 6, key: "STATE", set: { key: "STATE", channel: 6 } }, + "onoff.channel7": { channel: 7, key: "STATE", set: { key: "STATE", channel: 7 } }, + "onoff.channel8": { channel: 8, key: "STATE", set: { key: "STATE", channel: 8 } }, + "dim": { channel: 11, key: "LEVEL", set: { key: "LEVEL", channel: 11 } }, +}; + +class HomematicDevice extends Device { + + // Define a getter for the channels to avoid duplication + get channels() { + return [ + { id: "onoff.channel2", showKey: "ShowButtonChannel2", titleKey: "TitleButtonChannel2" }, + { id: "onoff.channel3", showKey: "ShowButtonChannel3", titleKey: "TitleButtonChannel3" }, + { id: "onoff.channel4", showKey: "ShowButtonChannel4", titleKey: "TitleButtonChannel4" }, + { id: "onoff.channel6", showKey: "ShowButtonChannel6", titleKey: "TitleButtonChannel6" }, + { id: "onoff.channel7", showKey: "ShowButtonChannel7", titleKey: "TitleButtonChannel7" }, + { id: "onoff.channel8", showKey: "ShowButtonChannel8", titleKey: "TitleButtonChannel8" }, + ]; + } + + async onInit() { + super.onInit(capabilityMap); + + const settings = this.getSettings(); + + // Configure each channel + for (const channel of this.channels) { + await this.configureChannel(channel, settings); + } + + // Configure dimmer + await this.configureDimmer(settings); + } + + async onSettings({ oldSettings, newSettings, changedKeys }) { + const quickActionChanged = changedKeys.includes("QuickActionChannel"); + + for (const channel of this.channels) { + if ( + quickActionChanged || // Reconfigure all channels if the quick action was changed + changedKeys.includes(channel.showKey) || + changedKeys.includes(channel.titleKey) + ) { + await this.configureChannel(channel, newSettings); + } + } + + // Handle dimmer settings change + if (changedKeys.includes("ShowDimmer") || changedKeys.includes("TitleDimmer")) { + await this.configureDimmer(newSettings); + } + } + + async configureChannel(channel, settings) { + const { id, showKey, titleKey } = channel; + const isQuickAction = settings.QuickActionChannel === id; + + if (!settings[showKey]) { + await this.setCapabilityOptions(id, { uiComponent: null, uiQuickAction: isQuickAction }); + } else { + await this.setCapabilityOptions(id, { + uiComponent: "toggle", + title: settings[titleKey], + uiQuickAction: isQuickAction, + }); + } + } + + async configureDimmer(settings) { + if (!settings.ShowDimmer) { + await this.setCapabilityOptions("dim", { uiComponent: null }); + } else { + await this.setCapabilityOptions("dim", { + uiComponent: "slider", + title: settings.TitleDimmer, + }); + } + } +} + +module.exports = HomematicDevice; diff --git a/drivers/HmIP-MIOB/driver.compose.json b/drivers/HmIP-MIOB/driver.compose.json new file mode 100644 index 0000000..191aebc --- /dev/null +++ b/drivers/HmIP-MIOB/driver.compose.json @@ -0,0 +1,280 @@ +{ + "id": "HmIP-MIOB", + "name": { + "en": "HmIP-MIOB" + }, + "class": "socket", + "capabilities": [], + "capabilitiesOptions": { + "onoff.channel2": { + "title": "Schalter Kanal 2" + }, + "onoff.channel3": { + "title": "Schalter Kanal 3" + }, + "onoff.channel4": { + "title": "Schalter Kanal 4" + }, + "onoff.channel6": { + "title": "Schalter Kanal 6" + }, + "onoff.channel7": { + "title": "Schalter Kanal 7" + }, + "onoff.channel8": { + "title": "Schalter Kanal 8" + }, + "dim": { + "title": "Regler" + } + }, + "images": { + "large": "/drivers/HmIP-MIOB/assets/images/large.png", + "small": "/drivers/HmIP-MIOB/assets/images/small.png" + }, + "pair": [ + { + "id": "list_bridges", + "template": "list_devices", + "options": { + "singular": true + }, + "navigation": { + "next": "list_devices" + } + }, + { + "id": "list_devices", + "template": "list_devices", + "navigation": { + "next": "add_devices" + } + }, + { + "id": "add_devices", + "template": "add_devices" + } + ], + "settings": [ + { + "type": "group", + "label": { + "en": "Device data" + }, + "children": [ + { + "id": "app", + "type": "label", + "label": { + "en": "App" + }, + "value": "Homematic" + }, + { + "id": "driver", + "type": "label", + "label": { + "en": "Driver" + }, + "value": "", + "hint": { + "en": "In most cases the driver name is the same as the device type, but some drivers support multiple device types. In those cases they might not match." + } + }, + { + "id": "address", + "type": "label", + "label": { + "en": "Device Address" + }, + "value": "" + }, + { + "id": "ccuIP", + "type": "label", + "label": { + "en": "CCU IP" + }, + "value": "" + }, + { + "id": "ccuSerial", + "type": "text", + "label": { + "en": "CCU Serial" + }, + "value": "" + } + ] + }, + { + "type": "group", + "label": { + "en": "Device settings" + }, + "children": [ + { + "id": "ShowButtonChannel2", + "type": "checkbox", + "label": { + "en": "Show Button Channel 2" + }, + "value": true + }, + { + "id": "TitleButtonChannel2", + "type": "text", + "label": { + "en": "Title Button Channel 2" + }, + "value": "Schalter Kanal 2" + }, + { + "id": "ShowButtonChannel3", + "type": "checkbox", + "label": { + "en": "Show Button Channel 3" + }, + "value": true + }, + { + "id": "TitleButtonChannel3", + "type": "text", + "label": { + "en": "Title Button Channel 3" + }, + "value": "Schalter Kanal 3" + }, + { + "id": "ShowButtonChannel4", + "type": "checkbox", + "label": { + "en": "Show Button Channel 4" + }, + "value": true + }, + { + "id": "TitleButtonChannel4", + "type": "text", + "label": { + "en": "Title Button Channel 4" + }, + "value": "Schalter Kanal 4" + }, + { + "id": "ShowButtonChannel6", + "type": "checkbox", + "label": { + "en": "Show Button Channel 6" + }, + "value": true + }, + { + "id": "TitleButtonChannel6", + "type": "text", + "label": { + "en": "Title Button Channel 6" + }, + "value": "Schalter Kanal 6" + }, + { + "id": "ShowButtonChannel7", + "type": "checkbox", + "label": { + "en": "Show Button Channel 7" + }, + "value": true + }, + { + "id": "TitleButtonChannel7", + "type": "text", + "label": { + "en": "Title Button Channel 7" + }, + "value": "Schalter Kanal 7" + }, + { + "id": "ShowButtonChannel8", + "type": "checkbox", + "label": { + "en": "Show Button Channel 8" + }, + "value": true + }, + { + "id": "TitleButtonChannel8", + "type": "text", + "label": { + "en": "Title Button Channel 8" + }, + "value": "Schalter Kanal 8" + }, + { + "id": "ShowDimmer", + "type": "checkbox", + "label": { + "en": "Show Dimmer" + }, + "value": true + }, + { + "id": "TitleDimmer", + "type": "text", + "label": { + "en": "Title Dimmer" + }, + "value": "Regler" + }, + { + "id": "QuickActionChannel", + "type": "dropdown", + "label": { + "en": "Quick Action Channel" + }, + "hint": { + "en": "Select which channel should have the Quick Action button." + }, + "value": "onoff.channel2", + "values": [ + { + "id": "onoff.channel2", + "label": { + "en": "Channel 2" + } + }, + { + "id": "onoff.channel3", + "label": { + "en": "Channel 3" + } + }, + { + "id": "onoff.channel4", + "label": { + "en": "Channel 4" + } + }, + { + "id": "onoff.channel6", + "label": { + "en": "Channel 6" + } + }, + { + "id": "onoff.channel7", + "label": { + "en": "Channel 7" + } + }, + { + "id": "onoff.channel8", + "label": { + "en": "Channel 8" + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/drivers/HmIP-MIOB/driver.js b/drivers/HmIP-MIOB/driver.js new file mode 100644 index 0000000..e35b783 --- /dev/null +++ b/drivers/HmIP-MIOB/driver.js @@ -0,0 +1,26 @@ +'use strict'; + +const Homey = require('homey'); +const Driver = require('../../lib/driver.js'); + +class HomematicDriver extends Driver { + + onInit() { + super.onInit(); + this.capabilities = [ + 'onoff.channel2', + 'onoff.channel3', + 'onoff.channel4', + 'onoff.channel6', + 'onoff.channel7', + 'onoff.channel8', + 'dim' + ] + this.homematicTypes = ['HmIP-MIOB']; + this.log(this.homematicTypes.join(','), 'has been inited'); + } + + +} + +module.exports = HomematicDriver; \ No newline at end of file diff --git a/lib/DeviceLister.js b/lib/DeviceLister.js index 28084d0..8e2e7ae 100644 --- a/lib/DeviceLister.js +++ b/lib/DeviceLister.js @@ -1,11 +1,13 @@ 'use strict'; class DeviceLister { - constructor(driver) { + constructor(driver, logger) { this.driver = driver; + this.logger = logger; } - async onListDevices(data, currentBridge) { + async onListDevices(currentBridge) { + this.logger.log('info', 'onListDevices invoked with currentBridge:', currentBridge); if (!currentBridge) { return this.onListDevicesBridges(); } @@ -31,10 +33,12 @@ class DeviceLister { if (!currentBridge) { throw new Error('Missing Bridge'); } - + try { const devices = []; - const bridgeDevices = await currentBridge.listDevices(); + let bridgeDevices; + bridgeDevices = await currentBridge.listDevices(); + for (const [interfaceName, interfaceDevices] of Object.entries(bridgeDevices)) { interfaceDevices.forEach(device => { if (this.driver.homematicTypes.includes(device.TYPE)) { @@ -50,6 +54,7 @@ class DeviceLister { } } }; + if (this.driver.multiDevice) { deviceObj.data.attributes.Index = idx; } @@ -58,12 +63,13 @@ class DeviceLister { } }); } + return devices; } catch (err) { - this.driver.logger.log('error', 'Failed to list devices:', err); - throw new Error('Failed to list devices: ' + err.message); + throw new Error('DeviceLister.onListDevicesDevices() Failed to list devices: ' + err.message); } } + } module.exports = DeviceLister; diff --git a/lib/HomeMaticCCUJack.js b/lib/HomeMaticCCUJack.js index f629929..9f125c8 100644 --- a/lib/HomeMaticCCUJack.js +++ b/lib/HomeMaticCCUJack.js @@ -38,9 +38,19 @@ class HomeMaticCCUJack extends EventEmitter { } enqueueRequest(request) { - this.requestQueue.push(request); - this.processQueue(); + return new Promise((resolve, reject) => { + this.requestQueue.push(async () => { + try { + const result = await request(); + resolve(result); + } catch (err) { + reject(err); + } + }); + this.processQueue(); + }); } + async processQueue() { if (this.isProcessingQueue || this.requestQueue.length === 0) { @@ -159,7 +169,7 @@ class HomeMaticCCUJack extends EventEmitter { }, {}); return deviceMap; } catch (err) { - this.logger.log('error', 'Failed to list devices:', err); + this.logger.log('error', 'HomeMaticCCUJack.listDevices() Failed to list devices:', err); throw err; } } diff --git a/lib/driver.js b/lib/driver.js index be0fb43..f80146e 100644 --- a/lib/driver.js +++ b/lib/driver.js @@ -6,9 +6,10 @@ const DeviceLister = require('./DeviceLister'); class Driver extends Homey.Driver { onInit() { + this.logger = this.homey.app.logger; this.multiDevice = false; this.numDevices = 1; - this.deviceLister = new DeviceLister(this); + this.deviceLister = new DeviceLister(this, this.logger); } getDeviceName(address, idx) { @@ -50,9 +51,9 @@ class Driver extends Homey.Driver { session.setHandler('list_devices', async (data) => { try { - return await self.deviceLister.onListDevices(data, currentBridge); + return await self.deviceLister.onListDevices(currentBridge); } catch (err) { - self.homey.app.logger.log('error', 'Failed to list devices during pairing:', err); + self.homey.app.logger.log('error', 'driver.onPair() Failed to list devices during pairing:', err); throw err; } });