node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
40 lines (39 loc) • 1.63 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.startListeners = startListeners;
const Events_1 = require("../../common/events/Events");
const const_1 = require("../../const");
const Websocket_1 = require("../../homeAssistant/Websocket");
const _1 = require(".");
function startListeners(clientEvents, controller, homeAssistant, node) {
const config = node.config;
clientEvents.addListener(`${const_1.HA_EVENTS}:${config.eventType || 'all'}`, controller.onHaEventsAll.bind(controller));
if (config.eventType === '' || config.eventType === _1.HA_CLIENT) {
const list = [
[Websocket_1.ClientEvent.StatesLoaded, controller.onClientStatesLoaded],
[Websocket_1.ClientEvent.ServicesLoaded, controller.onClientServicesLoaded],
[Websocket_1.ClientEvent.Running, controller.onHaEventsRunning],
[Websocket_1.ClientEvent.Ready, controller.onHaEventsReady],
];
list.forEach(([event, callback]) => {
clientEvents.addListener(event, callback.bind(controller));
});
}
const updateEventList = () => {
if (homeAssistant.isConnected) {
homeAssistant.subscribeEvents();
}
};
// Registering only needed event types
if (homeAssistant) {
homeAssistant.eventsList[node.id] = config.eventType || '__ALL__';
updateEventList();
}
node.addListener(Events_1.NodeEvent.Close, (removed, done) => {
if (removed) {
delete homeAssistant.eventsList[node.id];
updateEventList();
}
done();
});
}
;