From e413f2871c0e02ca6abb11fc89b14763f8ba4a61 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 24 May 2018 23:42:07 +0200 Subject: [PATCH] switch adaptor --- dist/Forwarder.js | 3 +++ dist/SwitchAdaptor.js | 35 +++++++++++++++++++++++++++++++++++ dist/main.js | 11 ++++++++++- src/Forwarder.ts | 8 +++++++- src/SwitchAdaptor.ts | 41 +++++++++++++++++++++++++++++++++++++++++ src/main.ts | 14 +++++++++++++- 6 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 dist/SwitchAdaptor.js create mode 100644 src/SwitchAdaptor.ts diff --git a/dist/Forwarder.js b/dist/Forwarder.js index e990c0d..3db6788 100644 --- a/dist/Forwarder.js +++ b/dist/Forwarder.js @@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); const AItem_1 = require("./AItem"); const MqttDispatcher_1 = require("./MqttDispatcher"); class Forwarder extends AItem_1.AItem { + getInTopic() { + return this.inTopic; + } constructor(floor, room, item, topicLastPart, label, targetTopics) { super(floor, room, item, label); this.inTopic = `${this.topicFirstPart}/${topicLastPart}`; diff --git a/dist/SwitchAdaptor.js b/dist/SwitchAdaptor.js new file mode 100644 index 0000000..ddf1aa9 --- /dev/null +++ b/dist/SwitchAdaptor.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AItem_1 = require("./AItem"); +const MqttDispatcher_1 = require("./MqttDispatcher"); +class SwitchAdaptor extends AItem_1.AItem { + constructor(floor, room, item) { + super(floor, room, item); + this.actionStateTopic = `${this.topicFirstPart}/state`; + this.inTopic = `${this.topicFirstPart}/in`; + this.subscribeTopics = [this.inTopic]; + this.state = 'OFF'; + } + getInTopic() { + return this.inTopic; + } + processMessage(topic, payload) { + switch (topic) { + case this.inTopic: + switch (payload) { + case 'SHORT': + if (this.state == 'OFF') { + this.state = 'ON'; + } + else { + this.state = 'OFF'; + } + MqttDispatcher_1.mqttHandler.send(this.actionStateTopic, this.state, true); + break; + } + break; + } + } +} +exports.SwitchAdaptor = SwitchAdaptor; +//# sourceMappingURL=SwitchAdaptor.js.map \ No newline at end of file diff --git a/dist/main.js b/dist/main.js index e1bdbd4..668511b 100644 --- a/dist/main.js +++ b/dist/main.js @@ -8,6 +8,7 @@ const M433SwitchItem_1 = require("./M433SwitchItem"); const HomematicFourButtonThing_1 = require("./HomematicFourButtonThing"); const DimmerAdaptor_1 = require("./DimmerAdaptor"); const TimerAdaptor_1 = require("./TimerAdaptor"); +const SwitchAdaptor_1 = require("./SwitchAdaptor"); const HomematicDimmerItem_1 = require("./HomematicDimmerItem"); const HomematicSwitchItem_1 = require("./HomematicSwitchItem"); const Forwarder_1 = require("./Forwarder"); @@ -389,13 +390,21 @@ basementLargeLight.on('somethingChanged', () => { MqttDispatcher_1.mqttHandler.send(basementSmallLight.getStateTopic(), 'OFF'); } }); +let basementForwarder = new Forwarder_1.Forwarder('Base', 'All', 'Forwarder', 'state', 'BasementForwarder', [ + basementLargeLight.getState(), + basementSmallLight.getState(), + workshopLight.getState() +]); +basementForwarder.start(); +let basementForwarderSwitchAdaptor = new SwitchAdaptor_1.SwitchAdaptor('Base', 'All', 'Forwarder'); +basementForwarderSwitchAdaptor.start(); // ---------------------------------------------------------------------------------------------------------- let twoLedSignal1 = new TwoLedSignal_1.TwoLedSignal('Gnd', 'Hallway', 'TwoLedSignal1', 'Licht- und Fenster-Anzeiger', allRelevantLights, "OFF", "ON", allWindows, "CLOSED", "OPEN"); twoLedSignal1.start(); // MySwitchTHing let mySwitchThingWolfgang = new MySwitchThing_1.MySwitchThing('1st', 'BedRoom', 'WolfgangsSwitch', [ new MySwitchThing_1.MySwitchSingleItem(bedRoomWolfgangBedLightDimmerAdaptor.getInTopic()), - new MySwitchThing_1.MySwitchSingleItem('IoT/InsLeere/1'), + new MySwitchThing_1.MySwitchSingleItem(basementForwarderSwitchAdaptor.getInTopic()), new MySwitchThing_1.MySwitchSingleItem('IoT/InsLeere/2'), ]); mySwitchThingWolfgang.start(); diff --git a/src/Forwarder.ts b/src/Forwarder.ts index 5b14453..7d7dcbc 100644 --- a/src/Forwarder.ts +++ b/src/Forwarder.ts @@ -1,12 +1,18 @@ import { AItem } from './AItem' import * as logger from './log' import { mqttHandler } from './MqttDispatcher' +import { HasInTopic } from './AItem'; -export class Forwarder extends AItem { +export class Forwarder extends AItem implements HasInTopic { private targetTopics: string[] private inTopic: string + getInTopic() : string { + return this.inTopic + } + + constructor(floor: string, room: string, item: string, topicLastPart: string, label: string, targetTopics: string[]) { super(floor, room, item, label) this.inTopic = `${this.topicFirstPart}/${topicLastPart}` diff --git a/src/SwitchAdaptor.ts b/src/SwitchAdaptor.ts new file mode 100644 index 0000000..8a4a84a --- /dev/null +++ b/src/SwitchAdaptor.ts @@ -0,0 +1,41 @@ +import { AItem, HasInTopic } from './AItem' +import * as logger from './log' +import { mqttHandler } from './MqttDispatcher' + +export class SwitchAdaptor extends AItem implements HasInTopic { + private state: string + private inTopic: string + private actionStateTopic: string + + constructor(floor: string, room: string, item: string) { + super(floor, room, item) + this.actionStateTopic = `${this.topicFirstPart}/state` + this.inTopic = `${this.topicFirstPart}/in` + this.subscribeTopics = [ this.inTopic ] + this.state = 'OFF' + } + + getInTopic() : string { + return this.inTopic + } + + + processMessage(topic: string, payload: string) : void { + switch (topic) { + case this.inTopic: + switch (payload) { + case 'SHORT': + if (this.state == 'OFF') { + this.state = 'ON' + } else { + this.state = 'OFF' + } + mqttHandler.send(this.actionStateTopic, this.state, true) + break + } + break + } + } +} + + diff --git a/src/main.ts b/src/main.ts index 5eeab83..1b73892 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,6 +10,7 @@ import { M433SwitchItem } from './M433SwitchItem' import { HomematicFourButtonThing, HomematicFourButtonSingleItem } from './HomematicFourButtonThing' import { DimmerAdaptor } from './DimmerAdaptor' import { TimerAdaptor } from './TimerAdaptor' +import { SwitchAdaptor } from './SwitchAdaptor' import { HomematicDimmerItem } from './HomematicDimmerItem' import { HomematicSwitchItem } from './HomematicSwitchItem' import { Forwarder } from './Forwarder' @@ -481,6 +482,17 @@ basementLargeLight.on('somethingChanged', () => { }) +let basementForwarder = new Forwarder('Base', 'All', 'Forwarder', 'state', 'BasementForwarder', [ + basementLargeLight.getState(), + basementSmallLight.getState(), + workshopLight.getState() +]) +basementForwarder.start() + + +let basementForwarderSwitchAdaptor = new SwitchAdaptor('Base', 'All', 'Forwarder') +basementForwarderSwitchAdaptor.start() + // ---------------------------------------------------------------------------------------------------------- let twoLedSignal1 = new TwoLedSignal('Gnd', 'Hallway', 'TwoLedSignal1', 'Licht- und Fenster-Anzeiger', allRelevantLights, "OFF", "ON", @@ -490,7 +502,7 @@ twoLedSignal1.start() // MySwitchTHing let mySwitchThingWolfgang = new MySwitchThing('1st', 'BedRoom', 'WolfgangsSwitch', [ new MySwitchSingleItem(bedRoomWolfgangBedLightDimmerAdaptor.getInTopic()), - new MySwitchSingleItem('IoT/InsLeere/1'), + new MySwitchSingleItem(basementForwarderSwitchAdaptor.getInTopic()), new MySwitchSingleItem('IoT/InsLeere/2'), ]) mySwitchThingWolfgang.start()