"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const AItem_1 = require("./AItem"); const MqttDispatcher_1 = require("./MqttDispatcher"); const Export_1 = require("./Export"); class LightScene extends AItem_1.AItem { getLabel() { return this.label; } getRoom() { return this.room; } getStateTopic() { return this.stateTopic; } getStateFeedbackTopic() { return this.stateFeedbackTopic; } constructor(floor, room, item, label = '', onItems, offItems) { super(floor, room, item, label); this.onItems = onItems; this.offItems = offItems; this.stateTopic = `${this.topicFirstPart}/state`; this.stateFeedbackTopic = `${this.topicFirstPart}/state/feedback`; this.subscribeTopics = []; this.subscribeTopics.push(this.stateTopic); this.onFeedbackTopics = []; this.onTopics = []; this.onFeedbackMap = {}; this.onItems.forEach((item) => { this.subscribeTopics.push(item.getStateFeedbackTopic()); this.onFeedbackTopics.push(item.getStateFeedbackTopic()); this.onTopics.push(item.getStateTopic()); this.onFeedbackMap[item.getStateFeedbackTopic()] = '-'; }); this.offFeedbackTopics = []; this.offTopics = []; this.offFeedbackMap = {}; this.offItems.forEach((item) => { this.subscribeTopics.push(item.getStateFeedbackTopic()); this.offFeedbackTopics.push(item.getStateFeedbackTopic()); this.offTopics.push(item.getStateTopic()); this.offFeedbackMap[item.getStateFeedbackTopic()] = '-'; }); this.state = 'OFF'; this.myLastFeedbackState = '-'; } exportItem() { return Export_1.SwitchExport(this.itemId, this.label, this.stateTopic, this.stateFeedbackTopic, 'bulb'); } processMessage(topic, payload) { if (topic == this.stateTopic) { this.state = payload; if (this.state == 'ON') { this.onTopics.forEach((topic2) => { MqttDispatcher_1.mqttHandler.send(topic2, 'ON'); }); this.offTopics.forEach((topic2) => { MqttDispatcher_1.mqttHandler.send(topic2, 'OFF'); }); } else { this.onTopics.forEach((topic2) => { MqttDispatcher_1.mqttHandler.send(topic2, 'OFF'); }); this.offTopics.forEach((topic2) => { MqttDispatcher_1.mqttHandler.send(topic2, 'OFF'); }); } } else if (this.onFeedbackTopics.some((x) => { return x == topic; })) { let feedbackState = payload; this.onFeedbackMap[topic] = feedbackState; } else if (this.offFeedbackTopics.some((x) => { return x == topic; })) { let feedbackState = payload; this.offFeedbackMap[topic] = feedbackState; } let myFeedbackState = 'ON'; Object.values(this.onFeedbackMap).forEach((v) => { if (v != 'ON') { myFeedbackState = 'OFF'; } }); Object.values(this.offFeedbackMap).forEach((v) => { if (v != 'OFF') { myFeedbackState = 'OFF'; } }); if (myFeedbackState != this.myLastFeedbackState) { MqttDispatcher_1.mqttHandler.send(this.stateFeedbackTopic, myFeedbackState); this.myLastFeedbackState = myFeedbackState; } } } exports.LightScene = LightScene; //# sourceMappingURL=Scene.js.map