node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
2 lines (1 loc) • 1.5 kB
JavaScript
"use strict";const h=require("../EntityNode"),{STATUS_SHAPE_RING:r,STATUS_COLOR_BLUE:p}=require("../../helpers/status"),u="input",c="state change",g={config:{outputOnStateChange:{},outputPayload:{},outputPayloadType:{}}};class y extends h{constructor({node:t,config:s,RED:a,status:e}){super({node:t,config:s,RED:a,status:e,nodeOptions:g}),this.status.init({nodeState:this.isEnabled,homeAssistant:this.homeAssistant})}onHaEventMessage(t){const s=t.type==="state_changed"&&t.state!==this.isEnabled;if(super.onHaEventMessage(t),s&&this.nodeConfig.outputOnStateChange){const a={state:this.isEnabled};let e;try{e=this.getTypedInputValue(this.nodeConfig.outputPayload,this.nodeConfig.outputPayloadType,{entity:a})}catch(l){this.status.setFailed("Error"),this.node.error(`JSONata Error: ${l.message}`,{});return}const n={payload:e,outputType:c},i=[n,null],d=n.payload||"state change",o={fill:p,text:this.status.appendDateString(d)};this.isEnabled?this.send(i):(o.shape=r,this.send(i.reverse())),this.status.set(o)}}onInput({message:t,send:s,done:a}){if(typeof t.enable=="boolean"){this.isEnabled=t.enable,this.updateHomeAssistant(),a();return}t.outputType=u;const e=[t,null],n=t.payload||u;this.isEnabled?(this.status.setSuccess(n),s(e)):(this.status.setFailed(n),s(e.reverse()))}handleTriggerMessage(t={}){const s={topic:"triggered",payload:t.payload};this.isEnabled?(this.status.setSuccess("triggered"),this.send([s,null])):(this.status.setFailed("triggered"),this.send([null,s]))}}module.exports=y;