From 18c12513dc7d29cd30f6266681131ee4ff9dd7ff Mon Sep 17 00:00:00 2001 From: Raphael Date: Sat, 22 Jun 2019 15:37:36 +0200 Subject: [PATCH 1/2] add speaker accessory --- src/AccessoryFactory.js | 4 +++- src/SpeakerAccessory.js | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/SpeakerAccessory.js diff --git a/src/AccessoryFactory.js b/src/AccessoryFactory.js index 343b2ee..7b8c618 100644 --- a/src/AccessoryFactory.js +++ b/src/AccessoryFactory.js @@ -6,6 +6,7 @@ const HumiditySensorAccessory = require('./HumiditySensorAccessory.js'); const TemperatureSensorAccessory = require('./TemperatureSensorAccessory.js'); const LightSensorAccessory = require('./LightSensorAccessory.js'); const MotionSensorAccessory = require('./MotionSensorAccessory.js'); +const SpeakerAccessory = require('./SpeakerAccessory.js'); const accessoryRegistry = { lightbulb: LightbulbAccessory, @@ -15,7 +16,8 @@ const accessoryRegistry = { temperaturesensor: TemperatureSensorAccessory, humiditysensor: HumiditySensorAccessory, lightsensor: LightSensorAccessory, - motionsensor: MotionSensorAccessory + motionsensor: MotionSensorAccessory, + speaker: SpeakerAccessory }; class AccessoryFactory { diff --git a/src/SpeakerAccessory.js b/src/SpeakerAccessory.js new file mode 100644 index 0000000..3812691 --- /dev/null +++ b/src/SpeakerAccessory.js @@ -0,0 +1,39 @@ +const ActorAccessory = require('./ActorAccessory.js'); + +class SpeakerAccessory extends ActorAccessory { + + constructor(log, url, accessToken, device, homebridge) { + const Service = homebridge.hap.Service; + const Characteristic = homebridge.hap.Characteristic; + super(log, url, accessToken, device, homebridge, Service.Speaker, Characteristic.Mute); + this.actorService.getCharacteristic(Characteristic.Volume) + .on('set', this.setVolume.bind(this)) + .on('get', this.getVolume.bind(this)); + this.volumeFunctionName = 'volume'; + } + + setState(value, callback) { + super.setState(value ? '1' : '0', callback); + } + + setVolume(value, callback) { + this.volume = value; + this.callParticleFunction(this.volumeFunctionName, value, + (error, response, body) => this.callbackHelper(error, response, body, callback), true); + } + + getVolume(callback) { + this.callParticleFunction(this.volumeFunctionName, '?', (error, response, body) => { + this.volume = parseInt(body, 10); + try { + callback(null, this.volume); + } catch (err) { + this.log(`Caught error ${err} when calling homebridge callback.`); + } + }, + true); + } + +} + +module.exports = LightbulbAccessory; From 85b5bd6a7c2615dc202e8a9acf3978c88d2e7b33 Mon Sep 17 00:00:00 2001 From: Raphael Date: Sun, 4 Aug 2019 01:10:28 +0200 Subject: [PATCH 2/2] fix name --- src/SpeakerAccessory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SpeakerAccessory.js b/src/SpeakerAccessory.js index 3812691..f8857be 100644 --- a/src/SpeakerAccessory.js +++ b/src/SpeakerAccessory.js @@ -36,4 +36,4 @@ class SpeakerAccessory extends ActorAccessory { } -module.exports = LightbulbAccessory; +module.exports = SpeakerAccessory;