node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
2 lines (1 loc) • 4.04 kB
JavaScript
"use strict";var c=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var e in t)c(n,e,{get:t[e],enumerable:!0})},T=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of m(t))!N.call(n,o)&&o!==e&&c(n,o,{get:()=>t[o],enumerable:!(i=C(t,o))||i.enumerable});return n};var v=n=>T(c({},"__esModule",{value:!0}),n);var D={};g(D,{EventsStatus:()=>E,STATUS_COLOR_BLUE:()=>x,STATUS_COLOR_GREEN:()=>u,STATUS_COLOR_GREY:()=>f,STATUS_COLOR_RED:()=>S,STATUS_COLOR_YELLOW:()=>r,STATUS_SHAPE_DOT:()=>a,STATUS_SHAPE_RING:()=>h,Status:()=>l,SwitchEntityStatus:()=>_});module.exports=v(D);var s=require("../const"),d=require("../globals"),p=require("./date");const x="blue",u="green",f="grey",S="red",r="yellow",a="dot",h="ring";class l{constructor(t){this.node=t;this.isNodeDisabled=!1;this.#t={};const e=this.node?.config?.server,i=d.RED.nodes.getNode(e);this.serverConfig=i?.config}#t;init({}={}){}setNodeState(t){this.isNodeDisabled===t&&(this.isNodeDisabled=!t,this.updateStatus(this.#t))}set(t={}){this.isNodeDisabled===!1&&(this.#t=t),this.updateStatus(t)}setText(t=""){this.set({text:t})}setSuccess(t="Success"){this.set({fill:u,shape:a,text:this.appendDateString(t)})}setSending(t="Sending"){this.set({fill:r,shape:a,text:this.appendDateString(t)})}setFailed(t="Failed"){this.set({fill:S,shape:h,text:this.appendDateString(t)})}updateStatus(t){this.isNodeDisabled&&(t={fill:f,shape:a,text:d.RED._("home-assistant.status.disabled")}),this.node.status(t)}appendDateString(t){const e=this.serverConfig?.statusSeparator??"",i=(0,p.formatDate)({options:this.statusOptions()});return`${t} ${e}${i}`}statusOptions(){const t=this.serverConfig,e={year:t?.statusYear==="hidden"?void 0:t?.statusYear,month:t?.statusMonth==="hidden"?void 0:t?.statusMonth??"short",day:t?.statusDay==="hidden"?void 0:t?.statusDay??"numeric",hourCycle:t?.statusHourCycle==="default"?void 0:t?.statusHourCycle??"h23",hour:"numeric",minute:"numeric"};switch(t?.statusTimeFormat){case"h:m:s":e.second="numeric";break;case"h:m:s.ms":e.second="numeric",e.fractionalSecondDigits=3;break}return e}}class E extends l{#t=s.STATE_DISCONNECTED;#e=[];init({nodeState:t,homeAssistant:e}){t!==void 0&&(this.isNodeDisabled=!t),e&&this.enableConnectionStatus(e)}enableConnectionStatus(t){const e={"ha_client:close":this.onClientClose,"ha_client:connecting":this.onClientConnecting,"ha_client:error":this.onClientError,"ha_client:open":this.onClientOpen,"ha_client:running":this.onClientRunning};Object.entries(e).forEach(([i,o])=>{this.#e.push(()=>t.removeListener(i,o)),t.addListener(i,o.bind(this))})}onClientClose(){this.#t=s.STATE_DISCONNECTED,this.updateConnectionStatus()}onClientConnecting(){this.#t=s.STATE_CONNECTING,this.updateConnectionStatus()}onClientError(){this.#t=s.STATE_ERROR,this.updateConnectionStatus()}onClientOpen(){this.#t=s.STATE_CONNECTED,this.updateConnectionStatus()}onClientRunning(){this.#t=s.STATE_RUNNING,this.updateConnectionStatus()}updateConnectionStatus(){const t=this.getConnectionStatus();this.updateStatus(t)}getConnectionStatus(){const t={fill:S,shape:h,text:"home-assistant.status.disconnected"};switch(this.#t){case s.STATE_CONNECTED:t.fill=u,t.text="home-assistant.status.connected";break;case s.STATE_CONNECTING:t.fill=r,t.text="home-assistant.status.connecting";break;case s.STATE_ERROR:t.text="home-assistant.status.error";break;case s.STATE_RUNNING:t.fill=u,t.text="home-assistant.status.running";break}return t.text&&(t.text=d.RED._(t.text)),t}destroy(){this.#e.forEach(t=>t())}}class _ extends l{set({fill:t=r,shape:e=a,text:i=""}={}){const o={fill:t,shape:e,text:i};super.set(o)}setNodeState(t){this.isNodeDisabled=!t;const e={fill:r,shape:t?a:h,text:this.appendDateString(t?"on":"off")};this.updateStatus(e)}updateStatus(t){this.node.status(t)}}0&&(module.exports={EventsStatus,STATUS_COLOR_BLUE,STATUS_COLOR_GREEN,STATUS_COLOR_GREY,STATUS_COLOR_RED,STATUS_COLOR_YELLOW,STATUS_SHAPE_DOT,STATUS_SHAPE_RING,Status,SwitchEntityStatus});