From ce1e243f0710a5ca08e310fb0fbb25cbf5ee9132 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 4 Jan 2018 21:54:53 +0100 Subject: [PATCH] timer handling --- src/TimerAdaptor.js | 51 +++++++++++++++++++++++++++++++++++++++++++++ src/main.js | 6 +++++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/TimerAdaptor.js diff --git a/src/TimerAdaptor.js b/src/TimerAdaptor.js new file mode 100644 index 0000000..7a1b097 --- /dev/null +++ b/src/TimerAdaptor.js @@ -0,0 +1,51 @@ +let AItem = require('./AItem') +let logger = require('./log') +let mqtt = require('./mqttHandler'); + + +class TimerAdaptor extends AItem { + constructor(floor, room, item, delay) { + super(floor, room, item); + this.actionStateTopic = `${this.topicFirstPart}/state`; + this.inTopic = `${this.topicFirstPart}/timerIn`; + this.subscribeTopics = [ this.inTopic ]; + this.state = 'OFF'; + this.delay = delay; + this.timer = null; + } + + processMessage(topic, payload) { + switch (topic) { + case this.inTopic: + switch (payload) { + case 'SHORT': + if ((this.state == 'ON') && (this.timer != null)) { + clearTimeout(this.timer); + } + this.state = 'ON'; + mqtt.send(this.actionStateTopic, this.state, true); + this.timer = setTimeout(() => { + this.state = 'OFF'; + mqtt.send(this.actionStateTopic, this.state, true); + }, (this.delay * 1000)); + break; + case 'LONG_END': + clearTimeout(this.timer); + if (this.state == 'OFF') { + this.state = 'ON'; + this.overwrite = true; + } else { + this.state = 'OFF'; + this.overwrite = false; + } + mqtt.send(this.actionStateTopic, this.state, true); + break; + } + break; + } + } +} + + +module.exports = TimerAdaptor; + diff --git a/src/main.js b/src/main.js index c22b98a..237257c 100644 --- a/src/main.js +++ b/src/main.js @@ -11,6 +11,7 @@ let M433SwitchItem = require('./M433SwitchItem'); let HomematicFourButtonThing = require('./HomematicFourButtonThing'); let HomematicFourButtonSingleItem = require('./HomematicFourButtonSingleItem'); let DimmerAdaptor = require('./DimmerAdaptor'); +let TimerAdaptor = require('./TimerAdaptor'); let Forwarder = require('./Forwarder'); @@ -22,7 +23,7 @@ deskLight.start(); let testFourButton = new HomematicFourButtonThing('Gnd', 'Hallway', 'TestButton', 9, [ new HomematicFourButtonSingleItem('button1', 'dispatcher_ng/items/Gnd/Hallway/Testlight/dimmerIn'), - new HomematicFourButtonSingleItem('button2', 'test/button/2'), + new HomematicFourButtonSingleItem('button2', 'dispatcher_ng/items/Gnd/Hallway/DeskLight/timerIn'), new HomematicFourButtonSingleItem('button3', 'test/button/3'), new HomematicFourButtonSingleItem('button4', 'test/button/4') ]); @@ -31,6 +32,9 @@ testFourButton.start(); let testDimmerAdaptor = new DimmerAdaptor('Gnd', 'Hallway', 'Testlight'); testDimmerAdaptor.start(); +let testTimerAdaptor = new TimerAdaptor('Gnd', 'Hallway', 'DeskLight', 10); +testTimerAdaptor.start(); + let testLight = new HomematicDimmerItemClass('Gnd', 'Hallway', 'Testlight', 8); testLight.start();