From a5e3d53d50b11e0ee0b15d19b073b4f748800770 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Sun, 23 Sep 2018 17:19:50 +0200 Subject: [PATCH] state machine for hard button --- dist/main.js | 53 ++++++++++++++++++++++++++++++++++++++++++++---- src/main.ts | 57 ++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 102 insertions(+), 8 deletions(-) diff --git a/dist/main.js b/dist/main.js index 32ca770..6327323 100644 --- a/dist/main.js +++ b/dist/main.js @@ -409,13 +409,58 @@ let mySwitchThingWolfgang = new MySwitchThing_1.MySwitchThing('1st', 'Schlafzimm ]); mySwitchThingWolfgang.start(); // ---------------------------------------------------------------------------------------------------------- -let testFourButton = new HomematicFourButtonThing_1.HomematicFourButtonThing('Gnd', 'Flur', 'TestButton', 9, [ - new HomematicFourButtonThing_1.HomematicFourButtonSingleItem('dispatcher_ng/items/Gnd/Flur/Testlight/dimmerIn'), - new HomematicFourButtonThing_1.HomematicFourButtonSingleItem('dispatcher_ng/items/Gnd/Flur/DeskLight/timerIn'), +let hardButton = new HomematicFourButtonThing_1.HomematicFourButtonThing('Gnd', 'Flur', 'HardButton', 9, [ + new HomematicFourButtonThing_1.HomematicFourButtonSingleItem('dispatcher_ng/items/Gnd/Flur/HardButtonState/NextState'), + new HomematicFourButtonThing_1.HomematicFourButtonSingleItem('test/button/2'), new HomematicFourButtonThing_1.HomematicFourButtonSingleItem('test/button/3'), new HomematicFourButtonThing_1.HomematicFourButtonSingleItem('test/button/4') ]); -testFourButton.start(); +hardButton.start(); +let hardButtonState = 0; +MqttDispatcher_1.mqttHandler.register(['dispatcher_ng/items/Gnd/Flur/HardButtonState/NextState'], (topic, payload) => { + switch (hardButtonState) { + case 0: + if (payload == 'SHORT') { + hardButtonState = 1; + } + if (payload == 'LONG_END') { + hardButtonState = 0; + } + break; + case 1: + if (payload == 'SHORT') { + hardButtonState = 2; + } + if (payload == 'LONG_END') { + hardButtonState = 0; + } + break; + case 2: + if (payload == 'SHORT') { + hardButtonState = 0; + } + if (payload == 'LONG_END') { + hardButtonState = 0; + } + break; + default: + hardButtonState = 0; + } + switch (hardButtonState) { + case 0: + MqttDispatcher_1.mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/DayLight/state', 'OFF'); + MqttDispatcher_1.mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/EcoLight/state', 'OFF'); + break; + case 1: + MqttDispatcher_1.mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/DayLight/state', 'ON'); + MqttDispatcher_1.mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/EcoLight/state', 'OFF'); + break; + case 2: + MqttDispatcher_1.mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/DayLight/state', 'OFF'); + MqttDispatcher_1.mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/EcoLight/state', 'ON'); + break; + } +}, () => { }); let testDimmerAdaptor = new DimmerAdaptor_1.DimmerAdaptor('Gnd', 'Flur', 'Testlight'); testDimmerAdaptor.start(); let testTimerAdaptor = new TimerAdaptor_1.TimerAdaptor('Gnd', 'Flur', 'DeskLight', 10); diff --git a/src/main.ts b/src/main.ts index a153a73..e642edb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -496,13 +496,62 @@ mySwitchThingWolfgang.start() // ---------------------------------------------------------------------------------------------------------- -let testFourButton = new HomematicFourButtonThing('Gnd', 'Flur', 'TestButton', 9, [ - new HomematicFourButtonSingleItem('dispatcher_ng/items/Gnd/Flur/Testlight/dimmerIn'), - new HomematicFourButtonSingleItem('dispatcher_ng/items/Gnd/Flur/DeskLight/timerIn'), +let hardButton = new HomematicFourButtonThing('Gnd', 'Flur', 'HardButton', 9, [ + new HomematicFourButtonSingleItem('dispatcher_ng/items/Gnd/Flur/HardButtonState/NextState'), + new HomematicFourButtonSingleItem('test/button/2'), new HomematicFourButtonSingleItem('test/button/3'), new HomematicFourButtonSingleItem('test/button/4') ]) -testFourButton.start() +hardButton.start() + +let hardButtonState : number = 0 +mqttHandler.register(['dispatcher_ng/items/Gnd/Flur/HardButtonState/NextState'], + (topic: string, payload: string) : void => { + switch (hardButtonState) { + case 0: + if (payload == 'SHORT') { + hardButtonState = 1 + } + if (payload == 'LONG_END') { + hardButtonState = 0 + } + break + case 1: + if (payload == 'SHORT') { + hardButtonState = 2 + } + if (payload == 'LONG_END') { + hardButtonState = 0 + } + break + case 2: + if (payload == 'SHORT') { + hardButtonState = 0 + } + if (payload == 'LONG_END') { + hardButtonState = 0 + } + break + default: + hardButtonState = 0 + } + switch (hardButtonState) { + case 0: + mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/DayLight/state', 'OFF') + mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/EcoLight/state', 'OFF') + break + case 1: + mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/DayLight/state', 'ON') + mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/EcoLight/state', 'OFF') + break + case 2: + mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/DayLight/state', 'OFF') + mqttHandler.send('dispatcher_ng/items/Gnd/Szenen/EcoLight/state', 'ON') + break + } +}, () => {}) + + let testDimmerAdaptor = new DimmerAdaptor('Gnd', 'Flur', 'Testlight') testDimmerAdaptor.start()