97 lines
3.6 KiB
JavaScript
97 lines
3.6 KiB
JavaScript
"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
|