diff --git a/dist/AItem.js b/dist/AItem.js index 64744f1..c2be838 100644 --- a/dist/AItem.js +++ b/dist/AItem.js @@ -1,8 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MqttDispatcher_1 = require("./MqttDispatcher"); -class AItem { +const Events = require("events"); +class AItem extends Events.EventEmitter { constructor(floor, room, item, label = '') { + super(); this.floor = floor; this.room = room; this.item = item; diff --git a/dist/HomematicSwitchItem.js b/dist/HomematicSwitchItem.js index c55b82e..266e85b 100644 --- a/dist/HomematicSwitchItem.js +++ b/dist/HomematicSwitchItem.js @@ -10,6 +10,9 @@ class HomematicSwitchItem extends AHomegearItem_1.AHomegearItem { getStateFeedbackTopic() { return this.stateFeedbackTopic; } + getState() { + return this.state; + } constructor(floor, room, item, label, hmId, partId = 1, type = 'bulb') { super(floor, room, item, label, hmId); this.partId = partId; @@ -29,6 +32,7 @@ class HomematicSwitchItem extends AHomegearItem_1.AHomegearItem { return Export_1.SwitchExport(this.itemId, this.label, this.stateTopic, this.stateFeedbackTopic, this.type); } processMessage(topic, payload) { + this.emit('somethingChanged'); switch (topic) { case this.stateTopic: this.state = payload; diff --git a/dist/main.js b/dist/main.js index 235dc13..0f07567 100644 --- a/dist/main.js +++ b/dist/main.js @@ -371,6 +371,14 @@ let basementLargeLight = new HomematicSwitchItem_1.HomematicSwitchItem('Base', ' basementLargeLight.start(); allLabeledItems.push(basementLargeLight); allRelevantLights.push(basementLargeLight); +basementLargeLight.on('somethingChange', () => { + if (basementLargeLight.getState() == 'ON') { + MqttDispatcher_1.mqttHandler.send(basementSmallLight.getStateTopic(), 'ON'); + } + else if (basementLargeLight.getState() == 'OFF') { + MqttDispatcher_1.mqttHandler.send(basementSmallLight.getStateTopic(), 'OFF'); + } +}); // ---------------------------------------------------------------------------------------------------------- let twoLedSignal1 = new TwoLedSignal_1.TwoLedSignal('Gnd', 'Hallway', 'TwoLedSignal1', 'Licht- und Fenster-Anzeiger', allRelevantLights, "OFF", "ON", allWindows, "CLOSED", "OPEN"); twoLedSignal1.start(); diff --git a/src/AItem.ts b/src/AItem.ts index 1249b11..790d292 100644 --- a/src/AItem.ts +++ b/src/AItem.ts @@ -1,6 +1,7 @@ import * as logger from './log' import { mqttHandler } from './MqttDispatcher' import { ExportType } from './Export' +import * as Events from 'events' @@ -20,7 +21,7 @@ export interface HasInTopic { getInTopic() : string } -export abstract class AItem { +export abstract class AItem extends Events.EventEmitter { protected topicFirstPart: string protected itemId: string protected label: string @@ -31,6 +32,7 @@ export abstract class AItem { constructor(floor: string, room: string, item: string, label: string = '') { + super() this.floor = floor this.room = room this.item = item diff --git a/src/HomematicSwitchItem.ts b/src/HomematicSwitchItem.ts index 58007d2..1467b0a 100644 --- a/src/HomematicSwitchItem.ts +++ b/src/HomematicSwitchItem.ts @@ -22,6 +22,10 @@ export class HomematicSwitchItem extends AHomegearItem implements HasStateAndFee return this.stateFeedbackTopic } + getState() : string { + return this.state + } + constructor(floor: string, room: string, item: string, label: string, hmId: number, partId: number = 1, type: string = 'bulb') { super(floor, room, item, label, hmId) this.partId = partId @@ -43,6 +47,7 @@ export class HomematicSwitchItem extends AHomegearItem implements HasStateAndFee } processMessage(topic: string, payload: string) : void { + this.emit('somethingChanged') switch (topic) { case this.stateTopic: this.state = payload diff --git a/src/main.ts b/src/main.ts index d72de21..bfdc4f9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -463,6 +463,13 @@ let basementLargeLight = new HomematicSwitchItem('Base', 'Hallway', 'LargeLight' basementLargeLight.start() allLabeledItems.push(basementLargeLight) allRelevantLights.push(basementLargeLight) +basementLargeLight.on('somethingChange', () => { + if (basementLargeLight.getState() == 'ON') { + mqttHandler.send(basementSmallLight.getStateTopic(), 'ON') + } else if (basementLargeLight.getState() == 'OFF') { + mqttHandler.send(basementSmallLight.getStateTopic(), 'OFF') + } +}) // ----------------------------------------------------------------------------------------------------------