const { HCFogmachine } = require('homecontrol-control-base'); const mqtt = require('mqtt'); class HCFogmachineMQTT extends HCFogmachine { constructor(config) { super(config); if (!("server" in this._configuration)) { throw new Error(`Required configuration field "server" is missing"`); } if (!("control_topic" in this._configuration)) { throw new Error(`Required configuration field "control_topic" is missing"`); } if (!("indicator_topic" in this._configuration)) { throw new Error(`Required configuration field "indicator_topic" is missing"`); } this._client = null; } init() { return new Promise((resolve, reject) => { this._client = mqtt.connect(this._configuration.server); this._client.on("connect", () => { this._client.subscribe(this._configuration.indicator_topic, err => { if (err) return reject(err); resolve(); }); }); this._client.on("error", err => { reject(err); }); this._client.on("message", (topic, messageBuf) => { let message = messageBuf.toString(); if (topic != this._configuration.indicator_topic) return; this._state.ready = (message == "1"); this.emit("state change", this.state); }); }); } triggerFor(milliseconds) { return new Promise((resolve, reject) => { this._client.publish(this._configuration.control_topic, String(milliseconds), err => { if (err) return reject(err); resolve(); }); }); } } module.exports = HCFogmachineMQTT;