UNPKG

@keload/node-red-contrib-js-philips-tv-control

Version:

A collection of nodes to control Philips TV with Node-RED, including Ambilight control.

2 lines (1 loc) 4.81 kB
var K=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var $=(e,o)=>{for(var t in o)f(e,t,{get:o[t],enumerable:!0})},y=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of F(o))!B.call(e,a)&&a!==t&&f(e,a,{get:()=>o[a],enumerable:!(i=j(o,a))||i.enumerable});return e};var G=(e,o,t)=>(t=e!=null?K(M(e)):{},y(o||!e||!e.__esModule?f(t,"default",{value:e,enumerable:!0}):t,e)),O=e=>y(f({},"__esModule",{value:!0}),e);var z={};$(z,{default:()=>U});module.exports=O(z);var n=G(require("superstruct")),N=require("superstruct");var v=require("philtv-js");function C(e){return new v.PhilTVApi({apiUrl:e.url,user:e.digest_user,password:e.digest_password})}function c(e,o){let t=e.nodes.getNode(o);return{tvClient:C({url:t.url,digest_user:t.credentials.digest_user,digest_password:t.credentials.digest_password}),tvConfig:t}}var m=require("philtv-js/constants"),b=[{text:"Set Brightness",value:"set_brightness"},{text:"Increase Brightness",value:"increase_brightness"},{text:"Decrease Brightness",value:"decrease_brightness"},{text:"Set Video Mode",value:"set_video_mode"},{text:"Set Audio Mode",value:"set_audio_mode"}],Q={set_brightness:m.ambilightBrightnessChoices.map(String),set_video_mode:m.ambilightFollowVideoModeEnum,set_audio_mode:m.ambilightFollowAudioModeEnum};function _(e){RED.nodes.createNode(this,e);let{tvClient:o}=c(RED,e.tv);this.on("input",async t=>{let i=e.action,a=e.value,d=e.returnInfo,s={value:a,action:i,returnInfo:d};t.payload&&(s=t.payload);let r=n.object({action:n.enums(b.map(u=>u.value)),value:n.union([n.string(),n.number()]),returnInfo:n.optional(n.boolean())}),[l]=(0,N.validate)(s,r);if(l){this.error(`Validation failed: ${l.message}`,t);return}let k={set_brightness:{call:async()=>o.ambilight.setBrightness(Number(s.value))},decrease_brightness:{call:async()=>o.ambilight.decreaseBrightness()},increase_brightness:{call:async()=>o.ambilight.increaseBrightness()},set_video_mode:{call:()=>o.ambilight.setFollowVideoMode(s.value)},set_audio_mode:{call:()=>o.ambilight.setFollowAudioMode(s.value)}}[s.action];try{await k.call()}catch(u){this.error(`Error: ${u.message}`,t);return}if(s.returnInfo)try{s.info=await o.ambilight.getFullInformation()}catch(u){this.error(`Error: ${u.message}`,t);return}this.send({...t,payload:s})})}var I={};var g=require("superstruct");var P={kinds:[{value:"tv_structure",text:"TV Structure"},{value:"tv_ambilight_info",text:"Ambilight Info"},{value:"tv_system",text:"System Info"}],getAvailableKinds(){return this.kinds.map(e=>e.value)}};function w(e){RED.nodes.createNode(this,e);let{tvClient:o}=c(RED,e.tv),t=Object.freeze({tv_ambilight_info:()=>o.ambilight.getFullInformation(),tv_system:()=>o.system.getSystem(),tv_structure:()=>o.menu.getMenuStructure({flat:!0})}),i=e.kind,a=(0,g.enums)(P.getAvailableKinds()),d=r=>{let[l,p]=(0,g.validate)(r,a);return l?[!1,l.message]:[!0,p]},s=async(r,l)=>{try{let p=await t[r]();this.send({...l,payload:p})}catch(p){this.error(p.message,l)}};this.on("input",async r=>{if(i===""&&r.payload){let[l,p]=d(r.payload);if(!l){this.error(`Validation failed: ${p}`,r);return}i=r.payload}await s(i,r)})}var A={};var x={digest_user:{type:"text"},digest_password:{type:"password"}};function T(e){RED.nodes.createNode(this,e),this.name=e.name,this.url=e.url}var V=require("philtv-js/constants"),h=require("superstruct");function E(e){RED.nodes.createNode(this,e);let{tvClient:o}=c(RED,e.tv);this.on("input",async t=>{let i=t.payload,a=e.key,d=i||a,s=(0,h.enums)(V.inputKeys),[r]=(0,h.validate)(d,s);if(r){this.error(`Validation failed: ${r.message}`,t);return}try{await o.input.sendKey(d)}catch(l){this.error(l.message,t);return}this.send({...t,payload:d})})}var R={};var S=require("philtv-js");function D(){let e;RED.httpNode.post("/js-philips-tv-control/pairing",async(o,t)=>{let{action:i,ip:a,pin:d}=o.body;if(i==="start"){e=new S.PhilTVPairing({tvIp:a});let s=await e.init();if(s.success===!1){t.status(400).json({success:!1,message:s.error.message});return}let r=await e.startPairing();if(r.success===!1){t.status(400).json({success:!1,message:r.error.message});return}t.status(200).json({success:!1,message:r.data})}else if(i==="complete"){let s=await e.completePairing(d);if(s.success===!1){t.status(400).json({success:!1,message:s.error.message});return}s.data&&t.status(200).json({user:s.data.user,password:s.data.password})}else t.status(400).json({success:!1,message:"Undefined action"})})}var U=async e=>{global.RED=e,global.RED.nodes.registerType("ambilight",_,{credentials:I}),global.RED.nodes.registerType("info",w,{credentials:A}),global.RED.nodes.registerType("philips-tv-config",T,{credentials:x}),global.RED.nodes.registerType("send-key",E,{credentials:R}),D()};