@pietrolubini/homebridge-ecoflow
Version:
Homebridge plugin for EcoFlow devices
78 lines • 2.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockMqttClient = void 0;
const mqtt_1 = require("mqtt");
class MockMqttClient extends mqtt_1.MqttClient {
deviceInfo;
emitQuotaIntervalId = null;
emitStatusIntervalId = null;
subscriptionTopics = [];
simulator;
constructor(deviceInfo, options) {
super(undefined, options);
this.deviceInfo = deviceInfo;
this.deviceInfo.log.warn('Simulating MQTT');
this.simulator = deviceInfo.config.simulator ? new deviceInfo.config.simulator() : null;
}
connect() {
this.connected = true;
return this;
}
async endAsync() {
if (this.emitQuotaIntervalId !== null) {
clearTimeout(this.emitQuotaIntervalId);
this.emitQuotaIntervalId = null;
}
if (this.emitStatusIntervalId !== null) {
clearTimeout(this.emitStatusIntervalId);
this.emitStatusIntervalId = null;
}
}
async subscribeAsync(topic) {
this.subscriptionTopics.push(topic);
if (topic.endsWith('quota')) {
this.emitQuotaIntervalId = setInterval(() => {
this.emitQuota();
}, this.deviceInfo.config.simulateQuotaTimeoutMs ?? 10000);
}
if (topic.endsWith('status')) {
this.emitStatusIntervalId = setInterval(() => {
this.emitStatus();
}, this.deviceInfo.config.simulateStatusTimeoutMs ?? 10000);
}
return [];
}
async publishAsync(topic, message) {
if (this.simulator && topic.endsWith('set')) {
const replyTopic = `${topic}_reply`;
if (this.subscriptionTopics.includes(replyTopic)) {
const responseMessage = this.simulator.generateSetReply(message);
this.emitMessage(replyTopic, responseMessage);
}
}
return undefined;
}
emitQuota() {
if (this.simulator) {
this.subscriptionTopics
.filter(topic => topic.endsWith('quota'))
.forEach(topic => {
this.emitMessage(topic, this.simulator.generateQuota());
});
}
}
emitStatus() {
if (this.simulator) {
this.subscriptionTopics
.filter(topic => topic.endsWith('status'))
.forEach(topic => {
this.emitMessage(topic, this.simulator.generateStatus());
});
}
}
emitMessage(topic, message) {
this.emit('message', topic, Buffer.from(JSON.stringify(message)), undefined);
}
}
exports.MockMqttClient = MockMqttClient;
//# sourceMappingURL=mockMqttClient.js.map