UNPKG

node-red-contrib-tv-bravia

Version:
283 lines (258 loc) 11 kB
<!-- TV BRAVIA - config node which represents the Sony Bravia Television. Holds address and pre shared key. --> <script type="text/javascript"> RED.nodes.registerType("tv-bravia", { category: "config", defaults: { name: {value:"", required:false}, address: {value:"", required:true}, port: {value:"80", required:true}, debug: {value:false, required:true} }, credentials: { key: {type: "text", required:true} }, label: function() { return this.name ? this.name : 'TV Bravia'; } }); </script> <script type="text/x-red" data-template-name="tv-bravia"> <div class="form-row"> <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-config-input-name" /> </div> <div class="form-row"> <label for="node-config-input-address"><i class="fa fa-globe"></i> Address</label> <input type="text" id="node-config-input-address" placeholder="e.g. 192.168.0.5" /> </div> <div class="form-row"> <label for="node-config-input-port"><i class="fa fa-sign-in"></i> Port</label> <input type="text" id="node-config-input-port" placeholder="80" /> </div> <div class="form-row"> <label for="node-config-input-key"><i class="fa fa-key"></i> Username</label> <input type="text" id="node-config-input-key" placeholder="0000" /> </div> <div class="form-row"> <label>&nbsp;</label> <input type="checkbox" id="node-config-input-debug" style="display: inline-block; width: auto; vertical-align: top;"> <label for="node-config-input-debug" style="width: 70%;"> Debug mode</label> </div> <div class="form-tips"> <p></p> <p>Hint: You need to set your TV to use a pre-shared key. (Default: 0000)</p> <ul> <li>Navigate to: [Settings] → [Network] → [Home Network Setup] → [IP Control]</li> <li>Set [Authentication] to [Normal and Pre-Shared Key]</li> <li>There should be a new menu entry [Pre-Shared Key]. Set it equal to the key field.</li> </ul> </div> </script> <!-- TV BRAVIA - "put" node to to send a command (action) to the tv. --> <script type="text/javascript"> RED.nodes.registerType("tv-bravia-put", { category: "devices", color: "#B24F3F", icon: "tv.png", defaults: { device: {type:"tv-bravia", required:true}, name: {value:"", required:false}, action: {value:"", required:false} }, inputs: 1, outputs: 1, paletteLabel: "Bravia Action", label: function() { if (this.name) { return this.name; } if (this.action) { return this.action; } return "Bravia Action"; }, oneditprepare: function() { var node = this; $('#node-input-scanaction').click(function() { scanActions(); }); function scanActions() { var current = $('#node-input-action').val(); var config = RED.nodes.node($('#node-input-device').val()); if(config && config.address) { RED.notify("Requesting supported actions from TV.", "info"); // Read list of possible reference nodes from server and add to dropdown $.get('tvbravia/actions', { address: config.address }) .done(function(data) { RED.notify("Actions received.", "info"); var actions = JSON.parse(data); // Clear all services $('#node-input-action').find('option').remove(); $('#node-input-action').append('<option value="' + '">' + '</option>'); // And add the received actions actions.forEach(function(action) { $('#node-input-action').append('<option value="' + action + '">' + action + '</option>'); }); $('#node-input-action').val(current); }) .fail(function() { RED.notify("Something went wrong. Please retry.", "error"); }) } else { RED.notify("Cannot receive action. Please check required informations: address", "warning"); } } } }); </script> <script type="text/x-red" data-template-name="tv-bravia-put"> <div class="form-row"> <label for="node-input-device"><i class="fa fa-sign-in"></i> Device</label> <input type="text" id="node-input-device"> </div> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" /> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-send"></i> Action</label> <select id="node-input-action" style="width:50%"> <option value=""></option> <option value="Num1">Num1</option> <option value="Num2">Num2</option> <option value="Num3">Num3</option> <option value="Num4">Num4</option> <option value="Num5">Num5</option> <option value="Num6">Num6</option> <option value="Num7">Num7</option> <option value="Num8">Num8</option> <option value="Num9">Num9</option> <option value="Num0">Num0</option> <option value="Num11">Num11</option> <option value="Num12">Num12</option> <option value="Enter">Enter</option> <option value="GGuide">GGuide</option> <option value="ChannelUp">ChannelUp</option> <option value="ChannelDown">ChannelDown</option> <option value="VolumeUp">VolumeUp</option> <option value="VolumeDown">VolumeDown</option> <option value="Mute">Mute</option> <option value="TvPower">TvPower</option> <option value="Audio">Audio</option> <option value="MediaAudioTrack">MediaAudioTrack</option> <option value="Tv">Tv</option> <option value="Input">Input</option> <option value="TvInput">TvInput</option> <option value="TvAntennaCable">TvAntennaCable</option> <option value="WakeUp">WakeUp</option> <option value="PowerOff">PowerOff</option> <option value="Sleep">Sleep</option> <option value="Right">Right</option> <option value="Left">Left</option> <option value="SleepTimer">SleepTimer</option> <option value="Analog2">Analog2</option> <option value="TvAnalog">TvAnalog</option> <option value="Display">Display</option> <option value="Jump">Jump</option> <option value="PicOff">PicOff</option> <option value="PictureOff">PictureOff</option> <option value="Teletext">Teletext</option> <option value="Video1">Video1</option> <option value="Video2">Video2</option> <option value="AnalogRgb1">AnalogRgb1</option> <option value="Home">Home</option> <option value="Exit">Exit</option> <option value="PictureMode">PictureMode</option> <option value="Confirm">Confirm</option> <option value="Up">Up</option> <option value="Down">Down</option> <option value="ClosedCaption">ClosedCaption</option> <option value="Component1">Component1</option> <option value="Component2">Component2</option> <option value="Wide">Wide</option> <option value="EPG">EPG</option> <option value="PAP">PAP</option> <option value="TenKey">TenKey</option> <option value="BSCS">BSCS</option> <option value="Ddata">Ddata</option> <option value="Stop">Stop</option> <option value="Pause">Pause</option> <option value="Play">Play</option> <option value="Rewind">Rewind</option> <option value="Forward">Forward</option> <option value="DOT">DOT</option> <option value="Rec">Rec</option> <option value="Return">Return</option> <option value="Blue">Blue</option> <option value="Red">Red</option> <option value="Green">Green</option> <option value="Yellow">Yellow</option> <option value="SubTitle">SubTitle</option> <option value="CS">CS</option> <option value="BS">BS</option> <option value="Digital">Digital</option> <option value="Options">Options</option> <option value="Media">Media</option> <option value="Prev">Prev</option> <option value="Next">Next</option> <option value="DpadCenter">DpadCenter</option> <option value="CursorUp">CursorUp</option> <option value="CursorDown">CursorDown</option> <option value="CursorLeft">CursorLeft</option> <option value="CursorRight">CursorRight</option> <option value="ShopRemoteControlForcedDynamic">ShopRemoteControlForcedDynamic</option> <option value="FlashPlus">FlashPlus</option> <option value="FlashMinus">FlashMinus</option> <option value="AudioQualityMode">AudioQualityMode</option> <option value="DemoMode">DemoMode</option> <option value="Analog">Analog</option> <option value="Mode3D">Mode3D</option> <option value="DigitalToggle">DigitalToggle</option> <option value="DemoSurround">DemoSurround</option> <option value="'*AD'">'*AD'</option> <option value="AudioMixUp">AudioMixUp</option> <option value="AudioMixDown">AudioMixDown</option> <option value="PhotoFrame">PhotoFrame</option> <option value="Tv_Radio">Tv_Radio</option> <option value="SyncMenu">SyncMenu</option> <option value="Hdmi1">Hdmi1</option> <option value="Hdmi2">Hdmi2</option> <option value="Hdmi3">Hdmi3</option> <option value="Hdmi4">Hdmi4</option> <option value="TopMenu">TopMenu</option> <option value="PopUpMenu">PopUpMenu</option> <option value="OneTouchTimeRec">OneTouchTimeRec</option> <option value="OneTouchView">OneTouchView</option> <option value="DUX">DUX</option> <option value="FootballMode">FootballMode</option> <option value="iManual">iManual</option> <option value="Netflix">Netflix</option> <option value="Assists">Assists</option> <option value="ActionMenu">ActionMenu</option> <option value="Help">Help</option> <option value="TvSatellite">TvSatellite</option> <option value="WirelessSubwoofer">WirelessSubwoofer</option> </select> <button type="button" id="node-input-scanaction" class="btn"><i class="icon-search"></i></button> </div> </script> <script type="text/x-red" data-help-name="tv-bravia-put"> <p>Send an action command to the TV.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt class="optional">payload <span class="property-type">string</span></dt> <dd> if no action is set in the node configuration panel, this property specifies the action to be send to the TV.</dd> </dl> <h3>Outputs</h3> <h3>Details</h3> <p>The node sends a single action to the TV.<br> If no action is given in the node configuration panel, then the action in <code>msg.payload</code> is used.</p> <h3>References</h3> <ul> <li><a href="https://github.com/krauskopf/node-red-contrib-tv-bravia">GitHub</a> - the nodes github repository</li> </ul> </script>