From 11c3def2204cd547ce01c861275a4909655d7b5c Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 25 Jan 2018 16:23:06 +0100 Subject: [PATCH] first Hue light --- dist/AHomegearItem.js | 14 +++++ dist/HomematicDimmerItem.js | 4 +- dist/HomematicFourButtonThing.js | 4 +- dist/HomematicSwitchItem.js | 4 +- dist/HueColorTemperatureBulbItem.js | 52 +++++++++++++++++ dist/MaxEcoSwitch.js | 4 +- dist/MaxThermostat.js | 4 +- dist/MaxWindowContact.js | 4 +- dist/main.js | 3 + src/{AHomematicItem.ts => AHomegearItem.ts} | 2 +- src/HomematicDimmerItem.ts | 4 +- src/HomematicFourButtonThing.ts | 4 +- src/HomematicSwitchItem.ts | 4 +- src/HueColorTemperatureBulbItem.ts | 64 +++++++++++++++++++++ src/MaxEcoSwitch.ts | 4 +- src/MaxThermostat.ts | 4 +- src/MaxWindowContact.ts | 4 +- src/main.ts | 4 ++ 18 files changed, 162 insertions(+), 25 deletions(-) create mode 100644 dist/AHomegearItem.js create mode 100644 dist/HueColorTemperatureBulbItem.js rename src/{AHomematicItem.ts => AHomegearItem.ts} (91%) create mode 100644 src/HueColorTemperatureBulbItem.ts diff --git a/dist/AHomegearItem.js b/dist/AHomegearItem.js new file mode 100644 index 0000000..333208e --- /dev/null +++ b/dist/AHomegearItem.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AItem_1 = require("./AItem"); +class AHomegearItem extends AItem_1.AItem { + constructor(floor, room, item, label, hmId) { + super(floor, room, item, label); + this.hmId = hmId; + this.homegearTopicPre = 'homegear/instance1'; + this.actionTopicPre = `${this.homegearTopicPre}/set/${this.hmId}`; + this.deviceTopicPre = `${this.homegearTopicPre}/plain/${this.hmId}`; + } +} +exports.AHomegearItem = AHomegearItem; +//# sourceMappingURL=AHomegearItem.js.map \ No newline at end of file diff --git a/dist/HomematicDimmerItem.js b/dist/HomematicDimmerItem.js index 80968bc..59cd6d3 100644 --- a/dist/HomematicDimmerItem.js +++ b/dist/HomematicDimmerItem.js @@ -2,8 +2,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const logger = require("./log"); const MqttDispatcher_1 = require("./MqttDispatcher"); -const AHomematicItem_1 = require("./AHomematicItem"); -class HomematicDimmerItem extends AHomematicItem_1.AHomematicItem { +const AHomegearItem_1 = require("./AHomegearItem"); +class HomematicDimmerItem extends AHomegearItem_1.AHomegearItem { constructor(floor, room, item, label, hmId) { super(floor, room, item, label, hmId); this.stateTopic = `${this.topicFirstPart}/state`; diff --git a/dist/HomematicFourButtonThing.js b/dist/HomematicFourButtonThing.js index 3dbaec1..ad691df 100644 --- a/dist/HomematicFourButtonThing.js +++ b/dist/HomematicFourButtonThing.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const logger = require("./log"); const MqttDispatcher_1 = require("./MqttDispatcher"); -const AHomematicItem_1 = require("./AHomematicItem"); +const AHomegearItem_1 = require("./AHomegearItem"); class HomematicFourButtonSingleItem { constructor(actionTopic) { this.actionTopic = actionTopic; @@ -26,7 +26,7 @@ class HomematicFourButtonSingleItem { } } exports.HomematicFourButtonSingleItem = HomematicFourButtonSingleItem; -class HomematicFourButtonThing extends AHomematicItem_1.AHomematicItem { +class HomematicFourButtonThing extends AHomegearItem_1.AHomegearItem { constructor(floor, room, item, hmId, itemObjs) { super(floor, room, item, '', hmId); this.itemObjs = itemObjs; diff --git a/dist/HomematicSwitchItem.js b/dist/HomematicSwitchItem.js index df0a38b..45b28f3 100644 --- a/dist/HomematicSwitchItem.js +++ b/dist/HomematicSwitchItem.js @@ -1,9 +1,9 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MqttDispatcher_1 = require("./MqttDispatcher"); -const AHomematicItem_1 = require("./AHomematicItem"); +const AHomegearItem_1 = require("./AHomegearItem"); const Export_1 = require("./Export"); -class HomematicSwitchItem extends AHomematicItem_1.AHomematicItem { +class HomematicSwitchItem extends AHomegearItem_1.AHomegearItem { getStateTopic() { return this.stateTopic; } diff --git a/dist/HueColorTemperatureBulbItem.js b/dist/HueColorTemperatureBulbItem.js new file mode 100644 index 0000000..02babe6 --- /dev/null +++ b/dist/HueColorTemperatureBulbItem.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const MqttDispatcher_1 = require("./MqttDispatcher"); +const AHomegearItem_1 = require("./AHomegearItem"); +class HueColorTemperatureBulbItem extends AHomegearItem_1.AHomegearItem { + constructor(floor, room, item, label, hmId) { + super(floor, room, item, label, hmId); + this.stateTopic = `${this.topicFirstPart}/state`; + this.brightTopic = `${this.topicFirstPart}/bright`; + this.colorTemperatureTopic = `${this.topicFirstPart}/colorTemperature`; + this.stateFeedbackTopic = `${this.topicFirstPart}/state/feedback`; + this.brightFeedbackTopic = `${this.topicFirstPart}/bright/feedback`; + this.colorTemperatureFeedbackTopic = `${this.topicFirstPart}/colorTemperature/feedback`; + this.stateActionTopic = `${this.actionTopicPre}/1/STATE`; + this.brightActionTopic = `${this.actionTopicPre}/1/BRIGHTNESS`; + this.colorTemperatureActionTopic = `${this.actionTopicPre}/1/COLOR_TEMPERATURE`; + this.subscribeTopics = [ + this.stateTopic, + this.brightTopic, + this.colorTemperatureTopic + ]; + this.state = 'OFF'; + this.bright = 0; + this.colorTemperature = 0; + } + processMessage(topic, payload) { + switch (topic) { + case this.stateTopic: + this.state = payload; + MqttDispatcher_1.mqttHandler.send(this.stateFeedbackTopic, this.state); + if (this.state == "ON") { + MqttDispatcher_1.mqttHandler.send(this.stateActionTopic, "true"); + } + else { + MqttDispatcher_1.mqttHandler.send(this.stateActionTopic, "false"); + } + break; + case this.brightTopic: + this.bright = parseInt(payload); + MqttDispatcher_1.mqttHandler.send(this.brightFeedbackTopic, `${this.bright}`); + MqttDispatcher_1.mqttHandler.send(this.brightActionTopic, `${this.bright}`); + break; + case this.colorTemperatureTopic: + this.colorTemperature = parseInt(payload); + MqttDispatcher_1.mqttHandler.send(this.colorTemperatureFeedbackTopic, `${this.colorTemperature}`); + MqttDispatcher_1.mqttHandler.send(this.colorTemperatureActionTopic, `${this.colorTemperature}`); + break; + } + } +} +exports.HueColorTemperatureBulbItem = HueColorTemperatureBulbItem; +//# sourceMappingURL=HueColorTemperatureBulbItem.js.map \ No newline at end of file diff --git a/dist/MaxEcoSwitch.js b/dist/MaxEcoSwitch.js index ed3da35..cffe223 100644 --- a/dist/MaxEcoSwitch.js +++ b/dist/MaxEcoSwitch.js @@ -1,8 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MqttDispatcher_1 = require("./MqttDispatcher"); -const AHomematicItem_1 = require("./AHomematicItem"); -class MaxEcoSwitch extends AHomematicItem_1.AHomematicItem { +const AHomegearItem_1 = require("./AHomegearItem"); +class MaxEcoSwitch extends AHomegearItem_1.AHomegearItem { constructor(floor, room, item, label, hmId, mainScene, ecoScene) { super(floor, room, item, label, hmId); this.mainButtonTopic = `${this.deviceTopicPre}/1/PRESS`; diff --git a/dist/MaxThermostat.js b/dist/MaxThermostat.js index 213ed0e..253ea27 100644 --- a/dist/MaxThermostat.js +++ b/dist/MaxThermostat.js @@ -1,10 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MqttDispatcher_1 = require("./MqttDispatcher"); -const AHomematicItem_1 = require("./AHomematicItem"); +const AHomegearItem_1 = require("./AHomegearItem"); const Export_1 = require("./Export"); const WINDOW_OPEN_TEMPERATURE = 4.5; -class MaxThermostat extends AHomematicItem_1.AHomematicItem { +class MaxThermostat extends AHomegearItem_1.AHomegearItem { // Thermostat: homegear/instance1/set/3/1/SET_TEMPERATURE getInTopic() { return this.temperatureTopic; diff --git a/dist/MaxWindowContact.js b/dist/MaxWindowContact.js index ee6cd6c..4499ef9 100644 --- a/dist/MaxWindowContact.js +++ b/dist/MaxWindowContact.js @@ -1,9 +1,9 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MqttDispatcher_1 = require("./MqttDispatcher"); -const AHomematicItem_1 = require("./AHomematicItem"); +const AHomegearItem_1 = require("./AHomegearItem"); const Export_1 = require("./Export"); -class MaxWindowContact extends AHomematicItem_1.AHomematicItem { +class MaxWindowContact extends AHomegearItem_1.AHomegearItem { getStateFeedbackTopic() { return this.stateFeedbackTopic; } diff --git a/dist/main.js b/dist/main.js index dcffb8a..425cdd3 100644 --- a/dist/main.js +++ b/dist/main.js @@ -17,6 +17,7 @@ const MaxThermostat_1 = require("./MaxThermostat"); const MaxWindowContact_1 = require("./MaxWindowContact"); const UrlSwitchItem_1 = require("./UrlSwitchItem"); const Cron_1 = require("./Cron"); +const HueColorTemperatureBulbItem_1 = require("./HueColorTemperatureBulbItem"); logger.info("Dispatcher starting"); let allLabeledItems = new Array(); // Anna ----------------------------------------------------------------------------------------------------- @@ -66,6 +67,8 @@ allLabeledItems.push(diningRoomCupboardLight); let diningRoomShelfLight = new UrlSwitchItem_1.UrlSwitchItem('Gnd', 'DiningRoom', 'ShelfLight', 'Regallicht Esszimmer', 'http://regallampe/dv?dv=1023', 'http://regallampe/dv?dv=0'); diningRoomShelfLight.start(); allLabeledItems.push(diningRoomShelfLight); +let diningRoomNaehkaestchenLight = new HueColorTemperatureBulbItem_1.HueColorTemperatureBulbItem('Gnd', 'DiningRoom', 'NaehkaestchenLight', 'Lampe Naehkaestchen', 15); +diningRoomNaehkaestchenLight.start(); // Wohnzimmer ----------------------------------------------------------------------------------------------- // Wohnzimmer grosse Lampe 65557 24 1 65556 24 1 let livingRoomLargeLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'LivingRoom', 'LargeLight', 'große Lampe Wohnzimmer', '65557 24 1', '65556 24 1'); diff --git a/src/AHomematicItem.ts b/src/AHomegearItem.ts similarity index 91% rename from src/AHomematicItem.ts rename to src/AHomegearItem.ts index db6b781..63a5b63 100644 --- a/src/AHomematicItem.ts +++ b/src/AHomegearItem.ts @@ -1,7 +1,7 @@ import { AItem } from './AItem' -export abstract class AHomematicItem extends AItem { +export abstract class AHomegearItem extends AItem { protected deviceTopicPre: string; protected actionTopicPre: string; protected homegearTopicPre: string; diff --git a/src/HomematicDimmerItem.ts b/src/HomematicDimmerItem.ts index 45f70fa..3ff82a5 100644 --- a/src/HomematicDimmerItem.ts +++ b/src/HomematicDimmerItem.ts @@ -1,9 +1,9 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' -import { AHomematicItem } from './AHomematicItem' +import { AHomegearItem } from './AHomegearItem' -export class HomematicDimmerItem extends AHomematicItem { +export class HomematicDimmerItem extends AHomegearItem { private oldBright: number|undefined private bright: number private oldState: string|undefined diff --git a/src/HomematicFourButtonThing.ts b/src/HomematicFourButtonThing.ts index 91c5482..ed2b22a 100644 --- a/src/HomematicFourButtonThing.ts +++ b/src/HomematicFourButtonThing.ts @@ -1,6 +1,6 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' -import { AHomematicItem } from './AHomematicItem' +import { AHomegearItem } from './AHomegearItem' export class HomematicFourButtonSingleItem { @@ -29,7 +29,7 @@ export class HomematicFourButtonSingleItem { } } -export class HomematicFourButtonThing extends AHomematicItem { +export class HomematicFourButtonThing extends AHomegearItem { private itemObjs: HomematicFourButtonSingleItem[] constructor(floor: string, room: string, item: string, hmId: number, itemObjs: HomematicFourButtonSingleItem[]) { diff --git a/src/HomematicSwitchItem.ts b/src/HomematicSwitchItem.ts index edb4f2e..ed47a0d 100644 --- a/src/HomematicSwitchItem.ts +++ b/src/HomematicSwitchItem.ts @@ -1,10 +1,10 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' -import { AHomematicItem } from './AHomematicItem' +import { AHomegearItem } from './AHomegearItem' import { SwitchExport, ExportType } from './Export' import { HasStateAndFeedbackTopic } from './AItem'; -export class HomematicSwitchItem extends AHomematicItem implements HasStateAndFeedbackTopic { +export class HomematicSwitchItem extends AHomegearItem implements HasStateAndFeedbackTopic { private oldState: string|undefined private state: string private actionTopic: string diff --git a/src/HueColorTemperatureBulbItem.ts b/src/HueColorTemperatureBulbItem.ts new file mode 100644 index 0000000..26b2edf --- /dev/null +++ b/src/HueColorTemperatureBulbItem.ts @@ -0,0 +1,64 @@ +import * as logger from './log' +import { mqttHandler } from './MqttDispatcher' +import { AHomegearItem } from './AHomegearItem' + +export class HueColorTemperatureBulbItem extends AHomegearItem { + private bright: number + private colorTemperature: number + private state: string + private stateActionTopic: string + private brightActionTopic: string + private colorTemperatureActionTopic: string + private brightFeedbackTopic: string + private stateFeedbackTopic: string + private colorTemperatureFeedbackTopic: string + private brightTopic: string + private stateTopic: string + private colorTemperatureTopic: string + + constructor(floor: string, room: string, item: string, label: string, hmId: number) { + super(floor, room, item, label, hmId) + this.stateTopic = `${this.topicFirstPart}/state` + this.brightTopic = `${this.topicFirstPart}/bright` + this.colorTemperatureTopic = `${this.topicFirstPart}/colorTemperature` + this.stateFeedbackTopic = `${this.topicFirstPart}/state/feedback` + this.brightFeedbackTopic = `${this.topicFirstPart}/bright/feedback` + this.colorTemperatureFeedbackTopic = `${this.topicFirstPart}/colorTemperature/feedback` + this.stateActionTopic = `${this.actionTopicPre}/1/STATE` + this.brightActionTopic = `${this.actionTopicPre}/1/BRIGHTNESS` + this.colorTemperatureActionTopic = `${this.actionTopicPre}/1/COLOR_TEMPERATURE` + this.subscribeTopics = [ + this.stateTopic, + this.brightTopic, + this.colorTemperatureTopic + ] + this.state = 'OFF' + this.bright = 0 + this.colorTemperature = 0 + } + + + processMessage(topic: string, payload: string) : void { + switch (topic) { + case this.stateTopic: + this.state = payload + mqttHandler.send(this.stateFeedbackTopic, this.state) + if (this.state == "ON") { + mqttHandler.send(this.stateActionTopic, "true") + } else { + mqttHandler.send(this.stateActionTopic, "false") + } + break + case this.brightTopic: + this.bright = parseInt(payload) + mqttHandler.send(this.brightFeedbackTopic, `${this.bright}`) + mqttHandler.send(this.brightActionTopic, `${this.bright}`) + break + case this.colorTemperatureTopic: + this.colorTemperature = parseInt(payload) + mqttHandler.send(this.colorTemperatureFeedbackTopic, `${this.colorTemperature}`) + mqttHandler.send(this.colorTemperatureActionTopic, `${this.colorTemperature}`) + break + } + } +} diff --git a/src/MaxEcoSwitch.ts b/src/MaxEcoSwitch.ts index 0b41d8a..d02b3e1 100644 --- a/src/MaxEcoSwitch.ts +++ b/src/MaxEcoSwitch.ts @@ -1,9 +1,9 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' -import { AHomematicItem } from './AHomematicItem' +import { AHomegearItem } from './AHomegearItem' import { LightScene } from './Scene' -export class MaxEcoSwitch extends AHomematicItem { +export class MaxEcoSwitch extends AHomegearItem { private ecoTopic: string private mainTopic: string private mainButtonTopic: string diff --git a/src/MaxThermostat.ts b/src/MaxThermostat.ts index c9ec901..ed84e25 100644 --- a/src/MaxThermostat.ts +++ b/src/MaxThermostat.ts @@ -1,7 +1,7 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' import { HasInTopic } from './AItem' -import { AHomematicItem } from './AHomematicItem' +import { AHomegearItem } from './AHomegearItem' import { MaxWindowContact } from './MaxWindowContact'; import { ThermostatExport, ExportType } from './Export' @@ -13,7 +13,7 @@ type WindowContactHolder = { state : string } -export class MaxThermostat extends AHomematicItem implements HasInTopic { +export class MaxThermostat extends AHomegearItem implements HasInTopic { private actionTopic: string private deviceFeedbackTopic: string private temperatureFeedbackTopic: string diff --git a/src/MaxWindowContact.ts b/src/MaxWindowContact.ts index 223be08..53db7fc 100644 --- a/src/MaxWindowContact.ts +++ b/src/MaxWindowContact.ts @@ -1,9 +1,9 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' -import { AHomematicItem } from './AHomematicItem' +import { AHomegearItem } from './AHomegearItem' import { ContactExport, ExportType } from './Export' -export class MaxWindowContact extends AHomematicItem { +export class MaxWindowContact extends AHomegearItem { private deviceFeedbackTopic: string private stateFeedbackTopic: string private stateTopic: string diff --git a/src/main.ts b/src/main.ts index d777f79..1a70125 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,6 +19,7 @@ import { MaxThermostat } from './MaxThermostat' import { MaxWindowContact } from './MaxWindowContact' import { UrlSwitchItem } from './UrlSwitchItem' import { Cron } from './Cron' +import { HueColorTemperatureBulbItem } from './HueColorTemperatureBulbItem' logger.info("Dispatcher starting") @@ -83,6 +84,9 @@ let diningRoomShelfLight = new UrlSwitchItem('Gnd', 'DiningRoom', 'ShelfLight', diningRoomShelfLight.start() allLabeledItems.push(diningRoomShelfLight) +let diningRoomNaehkaestchenLight = new HueColorTemperatureBulbItem('Gnd', 'DiningRoom', 'NaehkaestchenLight', 'Lampe Naehkaestchen', 15) +diningRoomNaehkaestchenLight.start() + // Wohnzimmer ----------------------------------------------------------------------------------------------- // Wohnzimmer grosse Lampe 65557 24 1 65556 24 1 let livingRoomLargeLight = new M433SwitchItem('Gnd', 'LivingRoom', 'LargeLight', 'große Lampe Wohnzimmer', '65557 24 1', '65556 24 1')