node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
2 lines (1 loc) • 1.89 kB
JavaScript
;var u=Object.create;var o=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var f=(s,e)=>{for(var t in e)o(s,t,{get:e[t],enumerable:!0})},a=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!b.call(s,r)&&r!==t&&o(s,r,{get:()=>e[r],enumerable:!(i=m(e,r))||i.enumerable});return s};var y=(s,e,t)=>(t=s!=null?u(l(s)):{},a(e||!s||!s.__esModule?o(t,"default",{value:s,enumerable:!0}):t,s)),v=s=>a(o({},"__esModule",{value:!0}),s);var I={};f(I,{default:()=>h});module.exports=v(I);var d=require("../../helpers/node"),c=require("../errors/HomeAssistantError"),g=require("../events/Events"),n=y(require("./Integration"));class h extends n.default{#e;constructor(e){super(e),this.node=e.node,this.node.on(g.NodeEvent.Close,this.onNodeClose.bind(this))}async register(){if(!this.isIntegrationLoaded){this.node.error(this.notInstalledMessage),this.status.forEach(t=>t.setFailed("home-assistant.status.error"));return}if(this.isRegistered)return;const e=this.getDiscoveryPayload();this.debugToClient("register",e);try{this.#e=await this.homeAssistant.websocket.subscribeMessage(this.onReceivedMessage.bind(this),e,{resubscribe:!1})}catch(t){this.status.forEach(r=>r.setFailed("home-assistant.status.error_registering"));const i=t instanceof Error||(0,c.isHomeAssistantApiError)(t)?t.message:t;this.node.error(`Error registering entity. Error Message: ${JSON.stringify(i)}`);return}this.status.forEach(t=>t?.setSuccess("home-assistant.status.registered")),this.registered=!0}async unregister(){await this.#e?.()}async onNodeClose(e,t){if(this.registered=!1,this.isIntegrationLoaded)try{await this.unregister()}catch(i){t(i)}t()}onReceivedMessage(e){this.node.emit(n.IntegrationEvent.Trigger,e.data)}debugToClient(e,t){(0,d.debugToClient)(this.node,t,e)}}