diff --git a/dist/AItem.js b/dist/AItem.js index d48bf09..64744f1 100644 --- a/dist/AItem.js +++ b/dist/AItem.js @@ -15,6 +15,8 @@ class AItem { } this.topicFirstPart = `dispatcher_ng/items/${this.floor}/${this.room}/${this.item}`; } + startFunc() { + } exportItem() { return null; } @@ -22,7 +24,7 @@ class AItem { MqttDispatcher_1.mqttHandler.register(this.subscribeTopics, (topic, payload) => { // logger.info(`item ${this.itemId}: ${topic}, ${payload}`) this.processMessage(topic, payload); - }); + }, () => { this.startFunc(); }); } } exports.AItem = AItem; diff --git a/dist/MaxThermostat.js b/dist/MaxThermostat.js index aa7e761..47e9b40 100644 --- a/dist/MaxThermostat.js +++ b/dist/MaxThermostat.js @@ -36,7 +36,10 @@ class MaxThermostat extends AHomegearItem_1.AHomegearItem { }); } setPresetTemperature(presetTemperature) { - this.processMessage(this.presetTemperatureTopic, `${presetTemperature}`); + this.presetTemperature = presetTemperature; + } + startFunc() { + MqttDispatcher_1.mqttHandler.send(this.presetTemperatureTopic, `${this.presetTemperature}`); } processMessage(topic, payload) { let setTemperature = false; diff --git a/dist/MqttDispatcher.js b/dist/MqttDispatcher.js index 2a6fbfb..7f21ae6 100644 --- a/dist/MqttDispatcher.js +++ b/dist/MqttDispatcher.js @@ -17,13 +17,15 @@ class MqttHandler { this.mqttOptions.rejectUnauthorized = true; } this.topicHandlers = []; + this.startCallbacks = []; logger.info("MqttHandler constructed"); } - register(topics, cb) { + register(topics, cb, startCb) { topics.forEach((topic) => { this.topicHandlers.push({ topic: topic, callback: cb }); logger.info(`Callback registered for ${topic}`); }); + this.startCallbacks.push(startCb); } exec() { logger.info(`Connecting to ${this.mqttBrokerUrl}`); @@ -39,6 +41,10 @@ class MqttHandler { logger.info(`${topicHandler.topic} subscribed`); }); logger.info('MQTT connection established'); + this.startCallbacks.forEach((cb) => { + cb(); + logger.info("started"); + }); }); this.mqttClient.on('message', (topic, payload, packet) => { if (!packet.retain) { diff --git a/dist/main.js b/dist/main.js index dc279c6..c569cb0 100644 --- a/dist/main.js +++ b/dist/main.js @@ -221,7 +221,7 @@ windowContactBathroom1st.start(); allLabeledItems.push(windowContactBathroom1st); let thermostatBathroom1st = new MaxThermostat_1.MaxThermostat('1st', 'Bathroom', 'Thermostat', 'Thermostat Bad oben', 3, [windowContactBathroom1st]); thermostatBathroom1st.start(); -thermostatBedroom1st.setPresetTemperature(20.0); +thermostatBathroom1st.setPresetTemperature(20.0); allLabeledItems.push(thermostatBathroom1st); let thermostatBathroom1stCron = new Cron_1.Cron('thermostatBathroom1stCron', thermostatBathroom1st, [ { cronTime: '00 00 06 * * 1-5', output: 'ON' }, diff --git a/src/AItem.ts b/src/AItem.ts index c5002de..084818d 100644 --- a/src/AItem.ts +++ b/src/AItem.ts @@ -41,6 +41,10 @@ export abstract class AItem { abstract processMessage(topic: string, payload: string) : void + startFunc() : void { + + } + exportItem() : ExportType|null { return null } @@ -49,6 +53,6 @@ export abstract class AItem { mqttHandler.register(this.subscribeTopics, (topic: string, payload: string) : void => { // logger.info(`item ${this.itemId}: ${topic}, ${payload}`) this.processMessage(topic, payload) - }) + }, () => { this.startFunc() }) } } diff --git a/src/MaxThermostat.ts b/src/MaxThermostat.ts index 3ffe40c..7fa9709 100644 --- a/src/MaxThermostat.ts +++ b/src/MaxThermostat.ts @@ -61,7 +61,11 @@ export class MaxThermostat extends AHomegearItem implements HasInTopic { } setPresetTemperature(presetTemperature: number) { - this.processMessage(this.presetTemperatureTopic, `${presetTemperature}`) + this.presetTemperature = presetTemperature + } + + startFunc() : void { + mqttHandler.send(this.presetTemperatureTopic, `${this.presetTemperature}`) } processMessage(topic: string, payload: string) : void { diff --git a/src/MqttDispatcher.ts b/src/MqttDispatcher.ts index 0a989f8..3801f98 100644 --- a/src/MqttDispatcher.ts +++ b/src/MqttDispatcher.ts @@ -7,6 +7,7 @@ import { IClientPublishOptions } from 'mqtt'; export type TopicCallbackFunc = (topic: string, payload: string) => void +export type StartCallbackFunc = () => void export interface TopicHandler { topic: string, @@ -14,11 +15,13 @@ export interface TopicHandler { } + class MqttHandler { private mqttClient: Mqtt.Client private mqttOptions: Mqtt.IClientOptions = {} private mqttBrokerUrl: string private topicHandlers: TopicHandler[] + private startCallbacks: StartCallbackFunc[] constructor() { this.mqttBrokerUrl = config.dict.brokerUrl @@ -33,15 +36,17 @@ class MqttHandler { } this.topicHandlers = [] + this.startCallbacks = [] logger.info("MqttHandler constructed") } - register(topics: string[], cb: TopicCallbackFunc) : void { + register(topics: string[], cb: TopicCallbackFunc, startCb: StartCallbackFunc) : void { topics.forEach((topic) => { this.topicHandlers.push({topic: topic, callback: cb}) logger.info(`Callback registered for ${topic}`) }) + this.startCallbacks.push(startCb) } exec() : void { @@ -59,6 +64,10 @@ class MqttHandler { logger.info(`${topicHandler.topic} subscribed`) }) logger.info('MQTT connection established') + this.startCallbacks.forEach((cb) => { + cb() + logger.info("started") + }) }) this.mqttClient.on('message', (topic: string, payload: Buffer, packet : Mqtt.IPublishPacket): void => { if (! packet.retain) { diff --git a/src/main.ts b/src/main.ts index c87a241..6496a14 100644 --- a/src/main.ts +++ b/src/main.ts @@ -288,7 +288,7 @@ allLabeledItems.push(windowContactBathroom1st) let thermostatBathroom1st = new MaxThermostat('1st', 'Bathroom', 'Thermostat', 'Thermostat Bad oben', 3, [windowContactBathroom1st]) thermostatBathroom1st.start() -thermostatBedroom1st.setPresetTemperature(20.0) +thermostatBathroom1st.setPresetTemperature(20.0) allLabeledItems.push(thermostatBathroom1st) let thermostatBathroom1stCron = new Cron('thermostatBathroom1stCron', thermostatBathroom1st, [