UNPKG

node-red-contrib-home-assistant-websocket

Version:
64 lines (63 loc) 2.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const InputOutputController_1 = __importDefault(require("../../common/controllers/InputOutputController")); const NoConnectionError_1 = __importDefault(require("../../common/errors/NoConnectionError")); const InputService_1 = require("../../common/services/InputService"); const const_1 = require("../../const"); const mustache_1 = require("../../helpers/mustache"); class FireEventController extends InputOutputController_1.default { async onInput({ message, parsedMessage, send, done, }) { if (!this.homeAssistant.websocket.isConnected) { throw new NoConnectionError_1.default(); } const eventType = parsedMessage.event.source === InputService_1.DataSource.Message ? parsedMessage.event.value : (0, mustache_1.renderTemplate)(parsedMessage.event.value, message, this.node.context(), this.homeAssistant.websocket.getStates()); let eventData; if (parsedMessage.data.source === InputService_1.DataSource.Message) { eventData = parsedMessage.data.value; } else if (parsedMessage.data.value) { if (parsedMessage.dataType.value === const_1.TypedInputTypes.JSONata) { eventData = await this.jsonataService.evaluate(parsedMessage.data.value, { message, }); } else { const dataString = (0, mustache_1.renderTemplate)(typeof parsedMessage.data.value === 'object' ? JSON.stringify(parsedMessage.data.value) : parsedMessage.data.value, message, this.node.context(), this.homeAssistant.websocket.getStates()); try { eventData = JSON.parse(dataString); } catch (e) { eventData = dataString; } } } this.node.debug(`Fire Event: ${eventType} -- ${JSON.stringify({})}`); this.status.setSending(); try { await this.homeAssistant.websocket.send({ type: 'fire_event', event_type: eventType, event_data: eventData, }); } catch (e) { if (e instanceof Error) { this.status.setError(e.message); done(e); } this.node.error(e); return; } this.status.setSuccess(eventType); send(message); done(); } } exports.default = FireEventController;