node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
2 lines (1 loc) • 1.86 kB
JavaScript
;var y=Object.create;var s=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var b=(o,e)=>{for(var t in e)s(o,t,{get:e[t],enumerable:!0})},l=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of w(e))!N.call(o,n)&&n!==t&&s(o,n,{get:()=>e[n],enumerable:!(a=S(e,n))||a.enumerable});return o};var h=(o,e,t)=>(t=o!=null?y(E(o)):{},l(e||!o||!o.__esModule?s(t,"default",{value:o,enumerable:!0}):t,o)),k=o=>l(s({},"__esModule",{value:!0}),o);var F={};b(F,{default:()=>m});module.exports=k(F);var f=h(require("../../common/controllers/InputOutputController")),p=h(require("../../common/errors/NoConnectionError")),c=require("../../common/services/InputService"),d=require("../../const"),v=require("../../helpers/mustache");class m extends f.default{async onInput({message:e,parsedMessage:t,send:a,done:n}){if(!this.homeAssistant.websocket.isConnected)throw new p.default;const u=t.event.source===c.DataSource.Message?t.event.value:(0,v.renderTemplate)(t.event.value,e,this.node.context(),this.homeAssistant.websocket.getStates());let r;if(t.data.source===c.DataSource.Message)r=t.data.value;else if(t.data.value)if(t.dataType.value===d.TypedInputTypes.JSONata)r=await this.jsonataService.evaluate(t.data.value,{message:e});else{const i=(0,v.renderTemplate)(typeof t.data.value=="object"?JSON.stringify(t.data.value):t.data.value,e,this.node.context(),this.homeAssistant.websocket.getStates());try{r=JSON.parse(i)}catch{r=i}}this.node.debug(`Fire Event: ${u} -- ${JSON.stringify({})}`),this.status.setSending();try{await this.homeAssistant.websocket.send({type:"fire_event",event_type:u,event_data:r})}catch(i){i instanceof Error&&(this.status.setError(i.message),n(i)),this.node.error(i);return}this.status.setSuccess(u),a(e),n()}}