UNPKG

node-red-contrib-musiccast

Version:

A Node-RED collection for monitoring and controlling a Yamaha Musiccast network.

587 lines (550 loc) 29.8 kB
<!-- Apache-2.0 Copyright (c) 2023 Vahdettin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. --> <script src="resources/node-red-contrib-musiccast/musiccast-ui.js"></script> <script type="text/javascript"> (function () { const BASE = 'device'; RED.nodes.registerType('musiccast-device', { category: 'Musiccast', defaults: { mc: {type: "musiccast-config", required: true}, name: {value: "", required: false}, device: {value: "", required: false}, type_device: {value: "", required: false}, command: {value: "getDeviceInfo", required: false}, type_command: {value: "", required: false}, payload: {value: "{}", required: false}, type_payload: {value: "", required: false}, f_show_status: {value: false, required: false} }, inputs: 1, outputs: 1, color: "#9c86bc", label: function () { return this.name || this.command; }, icon: "font-awesome/fa-crosshairs", align: 'right', paletteLabel: "device", oneditprepare: function () { const BASE = 'system'; let mc = RED.nodes.node($("#node-input-mc").val()) || null; let ui = new MCUI(BASE,mc,RED); const Fields = ui.cFields; let mcDeviceDraw = function (done,) { ui.popDevices(null, function (err, curDev) { ui.popCommands(curDev, function (err, curCommand) { ui.popAttributes(); ui.loadCommand(curCommand,function(err,curCommand){}) done(true); }); }); } mcDeviceDraw(function (drawn) { if (drawn) { Fields.c.on('change', function (event, type, value) { ui.loadCommand({ v: value, t: Fields.c.typedInput("type") }, function (err, curCommand) { }) }); Fields.d.on('change', function (event, type, value) { ui.popCommands({ v: value, t: Fields.d.typedInput("type") }, function (err, curCommand) { ui.popAttributes(); ui.loadCommand(curCommand,function(err,curCommand){}) }); }); Fields.p.on('change', function (event, type, value) { if (type && type === 'json') { if (!value) { Fields.p.typedInput('value', '{}') } } }); $("#lookup-command").on("click", function () { ui.showSidebarHelpPanel({ v: Fields.c.typedInput("value"), t: Fields.c.typedInput("type") }); }); $("#set-attribute-default").on("click", function () { ui.popExampleAttributes({ v: Fields.c.typedInput("value"), t: Fields.c.typedInput("type") }, function (err, data) { }) }); RED.events.on("nodes:change", function (theNode) { if (theNode && theNode.type === 'musiccast-config') { if (theNode.dirty && theNode.dirty !== false && theNode.valid && theNode.valid !== false) { ui.refresh(theNode, function (err, done) { ui.popDevices(null, function (err, curZone) { }) }) } } }); } }); }, oneditsave: function () { let mc = RED.nodes.node($("#node-input-mc").val()) || null; let ui = new MCUI(BASE,mc,RED); const Fields = ui.cFields; $("#lookup-command").off(); $("#set-attribute-default").off(); this.device = Fields.d.typedInput("value"); this.command = Fields.c.typedInput("value"); this.payload = Fields.p.typedInput("value"); }, oneditcancel: function () { $("#lookup-command").off(); $("#set-attribute-default").off(); } }); })(); </script> <script type="text/html" data-template-name="musiccast-device"> <link rel="stylesheet" href="resources/node-red-contrib-musiccast/style.css"/> <div class="form-row"> <label for="node-input-mc"> Musiccast</label> <input type="text" id="node-input-mc"> </div> <div class="form-row "> <label for="node-input-device"><i class="fa fa-crosshairs"></i> Device</label> <div style="display: inline-block; position: relative; width: 70%; height: 20px;"> <div style="position: absolute; left: 0px; right: 40px;"> <input type="text" id="node-input-device" style="width:80%"> </div> </div> </div> <div class="form-row "> <label for="node-input-command"><i class="fa fa-cogs"></i> Command</label> <div style="display: inline-block; position: relative; width: 70%; height: 20px;"> <div style="position: absolute; left: 0px; right: 40px;"> <input type="text" id="node-input-command" style="width:100%"> </div> <a id="lookup-command" class="red-ui-button" style="position: absolute; right: 0px; top: 0px;"><i class="fa fa-book"></i></a> </div> </div> <div class="form-row musiccast-form-row-cmd-addt "> <label>&nbsp;</label> <input type="checkbox" id="node-input-f_show_status" style="display:inline-block; width:15px; vertical-align:baseline;" autocomplete="off"> <label style="width: 60% !important;" for="node-input-f_show_status" title="Show power status for the designated zone on the palette when command runs.">Show on palette</label> </div> <div class="form-row musiccast-form-row-payload"> <label for="node-input-payload"><i class="fa fa-puzzle-piece"></i> Attributes</label> <div style="display: inline-block; position: relative; width: 70%; height: 20px;"> <div style="position: absolute; left: 0px; right: 40px;"> <input type="text" id="node-input-payload" style="width:100%"> </div> <a id="set-attribute-default" class="red-ui-button" style="position: absolute; right: 0px; top: 0px;"><i class="fa fa-paste"></i></a> </div> </div> <div class="form-row "> <label for="node-input-name"><i class="fa fa-tag"></i> Label</label> <div style="display: inline-block; position: relative; width: 70%; height: 20px;"> <div style="position: absolute; left: 0px; right: 40px;"> <input type="text" id="node-input-name" placeholder="optional" style="width:100%"> </div> </div> </div> <div class="form-row musiccast-form-row-ah"> <input type="text" id="node-input-type_device"> </div> <div class="form-row musiccast-form-row-ah"> <input type="text" id="node-input-type_command"> </div> <div class="form-row musiccast-form-row-ah"> <input type="text" id="node-input-type_payload"> </div> </script><script type="text/html" data-help-name="musiccast-device"> <link rel="stylesheet" href="resources/node-red-contrib-musiccast/style.css"/> <p>Configure or retrieve information about a device.</p> <h4>Yamaha API Relationship</h4> <p>The Yamaha API command types included in this node are:</p> <dl> <dd> <ul> <li>System</li> <li>Clock</li> </ul> </dd> </dl> <h4>Basic Configuration</h4> <p>The following items can only be set via the palette editor. All other configuration items can be set in the editor or via inbound message or context variable. Details for these items are in the Input section below. </p> <dl> <dt>Musiccast</dt> <dd>Select the Musiccast configuration to use.</dd> <dt>Label</dt> <dd>Optional. Enter a name for the node or the default will be assigned.</dd> <dt>Show on palette</dt> <dd>Optional. If this option appears under the Command dropdown and is checked, basic information from a response will be displayed on the palette under the node when a command is sent. </dl> <h4>Helpful Features</h4> <p>There are several buttons that when clicked, provide helpful functionality to assist with configuration.</p> <dl> <dd> <ul> <li><a class="red-ui-button"><i class="fa fa-question"></i></a> Shows inline help for the selected command. </li> <li><a class="red-ui-button"><i class="fa fa-paste"></i></a> Populates the Attributes field with example values to start with. </li> </ul> </dd> </dl> <h3>Input</h3> <dl class="message-properties"> <dt>device <span class="property-type">string</span> </dt> <dd> The target device name or label. </dd> <dt>command <span class="property-type">string</span> </dt> <dd> The command to send. </dd> <dt>attributes <span class="property-type">object</span> </dt> <dd> Additional attributes if needed by the command. This can also be supplied as <code>payload</code>. </dd> </dl> <h3>Output</h3> <dl class="message-properties"> <dt>device <span class="property-type">string</span> </dt> <dd> The device the command was sent to. </dd> <dt>command <span class="property-type">string</span></dt> <dd> The command that was sent.</dd> <dt>payload <span class="property-type">object</span></dt> <dd> The response received from the device. This will always include <i>response_code</i> and <i>response_message</i>. </dd> </dl> <h3 id="command_ref">Command Reference</h3> <!-- BEGIN COMMAND HELP --> <dl class="message-properties"> <dt id="musiccast-command-info-getsettings">getSettings</dt> <dd>Retrieve clock settings. Details on the output of this command are complex and the included API doc should be consulted.</dd><p></p> <dt id="musiccast-command-info-setautosync">setAutoSync</dt> <dd>For setting clock time auto sync.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setdateandtime">setDateAndTime</dt> <dd>Set the date and time manually. All characters in [date_time] attribute are integers.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"date_time":</span> <span class="string">"YYMMDDhhmmss"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setclockformat">setClockFormat</dt> <dd>Set the clock format to 12 hour or 24 hour display.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"format":</span> <span class="string">"12h|24h"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setalarmsettings">setAlarmSettings</dt> <dd>Set an alarm to play a preset or resume playback. Configuration of the attributes are complex and the included API doc should be consulted.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"alarm_on":</span> <span class="string">"true|false"</span>, <span class="key">"volume":</span> <span class="string">"0|1|2|..."</span>, <span class="key">"fade_interval":</span> <span class="string">"1|...|90"</span>, <span class="key">"fade_type":</span> <span class="string">"1|2|3|..."</span>, <span class="key">"mode":</span> <span class="string">"true|false"</span>, <span class="key">"repeat":</span> <span class="string">"true|false"</span>, <span class="key">"detail":</span> { <span class="key">"day":</span> <span class="string">"oneday|sunday|monday|..."</span>, <span class="key">"enable":</span> <span class="string">"true|false"</span>, <span class="key">"time":</span> <span class="string">"hhmm"</span>, <span class="key">"beep":</span> <span class="string">"true|false"</span>, <span class="key">"playback_type":</span> <span class="string">"resume|preset"</span>, <span class="key">"preset":</span> { <span class="key">"type":</span> <span class="string">"netusb"</span>, <span class="key">"num":</span> <span class="string">"1|2|3|..."</span> }, <span class="key">"resume":</span> { <span class="key">"type":</span> <span class="string">"&lt;input&gt;&gt;"</span> } } }</pre><p></p> </dd> <dt id="musiccast-command-info-getinternalconfig">getInternalConfig</dt> <dd>Show the known configuration of a device that is stored in Node-RED. This is not a Musiccast function.</dd><p></p> <dt id="musiccast-command-info-getdeviceinfo">getDeviceInfo</dt> <dd>Get detailed information about a a device. Optionally, the model and software versions of the device can be displayed on the palette.</dd><p></p> <dt id="musiccast-command-info-requestnetworkreboot">requestNetworkReboot</dt> <dd>Request a network reboot.</dd><p></p> <dt id="musiccast-command-info-requestsystemreboot">requestSystemReboot</dt> <dd>Request a system reboot.</dd><p></p> <dt id="musiccast-command-info-getadvancedfeatures">getAdvancedFeatures</dt> <dd>Get additional information about the functions installed in the device.</dd><p></p> <dt id="musiccast-command-info-getremoteinfo">getRemoteInfo</dt> <dd>Retrieve remote monitor information.</dd><p></p> <dt id="musiccast-command-info-getstereopairinfo">getStereoPairInfo</dt> <dd>Get the status of paired wireless speakers.</dd><p></p> <dt id="musiccast-command-info-setautoplay">setAutoPlay</dt> <dd>Set auto play for a device.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setspeakerpattern">setSpeakerPattern</dt> <dd>Set speaker pattern for a device.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"num":</span> <span class="string">"1|2|3|..."</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setpartymode">setPartyMode</dt> <dd>Set party mode on a device.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-getfuncstatus">getFuncStatus</dt> <dd>Get status of device functions.</dd><p></p> <dt id="musiccast-command-info-getnetworkstatus">getNetworkStatus</dt> <dd>Get network status of a device. Optionally, the IP address and connection type of the device can be displayed on the palette.</dd><p></p> <dt id="musiccast-command-info-getfeatures">getFeatures</dt> <dd>Get available features for a device. Useful to determine exactly what commands can be called for a device and input.</dd><p></p> <dt id="musiccast-command-info-getlocationinfo">getLocationInfo</dt> <dd>Show which zones a device is a member of. Optionally, the location name can be displayed on the palette..</dd><p></p> <dt id="musiccast-command-info-sendircode">sendIrCode</dt> <dd>Send a specific remote IR code. Code attribute must be an 8-character hex value.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"code":</span> <span class="string">"xxxxxxxx"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setautopowerstandby">setAutoPowerStandby</dt> <dd>Change the auto power standby setting for the system.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-getnametext">getNameText</dt> <dd>Get the display names for system elements. Send empty id value to show all.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"id":</span> <span class="string">"main|munich|av1|..."</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setnametext">setNameText</dt> <dd>Change the display name of a system element.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"id":</span> <span class="string">"main|munich|av1|..."</span>, <span class="key">"text":</span> <span class="string">"abcd..."</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setwiredlan">setWiredLan</dt> <dd>Change the settings for the wired LAN port. If attributes are valid, the command will change the device&#x27;s connection to the LAN port.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"dhcp":</span> <span class="string">"true|false"</span>, <span class="key">"ip_address":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"subnet_mask":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"default_gateway":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"dns_server_1":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"dns_server_2":</span> <span class="string">"n.n.n.n"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setwirelesslan">setWirelessLan</dt> <dd>Change the settings for the Wifi port. If attributes are valid, the command will change the device&#x27;s connection to Wifi.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"ssid":</span> <span class="string">"AP1-2.4GHz"</span>, <span class="key">"type":</span> <span class="string">"wpa2-psk(aes)|..."</span>, <span class="key">"key":</span> <span class="string">"abcd..."</span>, <span class="key">"dhcp":</span> <span class="string">"true|false"</span>, <span class="key">"ip_address":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"subnet_mask":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"default_gateway":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"dns_server_1":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"dns_server_2":</span> <span class="string">"n.n.n.n"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setwirelessdirect">setWirelessDirect</dt> <dd>Configure settings for Wireless Direct feature. If attributes are valid, the command will change the device&#x27;s connection to Wireless Direct.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"type":</span> <span class="string">"wpa2-psk(aes)|..."</span>, <span class="key">"key":</span> <span class="string">"abcd..."</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setipsettings">setIpSettings</dt> <dd>Changes the IP settings only for the currently active network connection.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"dhcp":</span> <span class="string">"true|false"</span>, <span class="key">"ip_address":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"subnet_mask":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"default_gateway":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"dns_server_1":</span> <span class="string">"n.n.n.n"</span>, <span class="key">"dns_server_2":</span> <span class="string">"n.n.n.n"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setnetworkname">setNetworkName</dt> <dd>Set the device&#x27;s name to a value that should appear on the local network.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"name":</span> <span class="string">"Living room|Office|..."</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setairplaypin">setAirPlayPin</dt> <dd>Set the PIN needed for an AirPlay connection.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"pin":</span> <span class="string">"abc123..."</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-getmacaddressfilter">getMacAddressFilter</dt> <dd>Get the current list of MAC addresses that are being filtered.</dd><p></p> <dt id="musiccast-command-info-setmacaddressfilter">setMacAddressFilter</dt> <dd>Add MAC addresses to the filter and/or enable and disable the filter.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"filter":</span> <span class="string">"true|false"</span>, <span class="key">"address_1":</span> <span class="string">"xxxxxxxxxxxx"</span>, <span class="key">"address_2":</span> <span class="string">"xxxxxxxxxxxx"</span>, <span class="key">"address_3":</span> <span class="string">"xxxxxxxxxxxx"</span>, <span class="key">"address_10":</span> <span class="string">"xxxxxxxxxxxx"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-getnetworkstandby">getNetworkStandby</dt> <dd>Retrieve current setting for the network standby option.</dd><p></p> <dt id="musiccast-command-info-setnetworkstandby">setNetworkStandby</dt> <dd>Change network standby option.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"standby":</span> <span class="string">"on|off|auto"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-getbluetoothinfo">getBluetoothInfo</dt> <dd>Retrieve Bluetooth information.</dd><p></p> <dt id="musiccast-command-info-setbluetoothstandby">setBluetoothStandby</dt> <dd>Set Bluetooth standby.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setbluetoothtxsetting">setBluetoothTxSetting</dt> <dd>Enable or disable Bluetooth transmission.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-getbluetoothdevicelist">getBluetoothDeviceList</dt> <dd>Change</dd><p></p> <dt id="musiccast-command-info-updatebluetoothdevicelist">updateBluetoothDeviceList</dt> <dd>Refresh list of detected Bluetooth devices.</dd><p></p> <dt id="musiccast-command-info-connectbluetoothdevice">connectBluetoothDevice</dt> <dd>Connect a Bluetooth device given its MAC address.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"address":</span> <span class="string">"xxxxxxxxxx"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-disconnectbluetoothdevice">disconnectBluetoothDevice</dt> <dd>Disconnect the Bluetooth device.</dd><p></p> <dt id="musiccast-command-info-setirsensor">setIrSensor</dt> <dd>Enable or disable remote control IR sensor.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setspeakera">setSpeakerA</dt> <dd>Change Speaker A configuration.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setspeakerb">setSpeakerB</dt> <dd>Change Speaker B configuration.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setdimmer">setDimmer</dt> <dd>Set the dimmer level. Set value of &#x27;-1&#x27; for auto.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"value":</span> <span class="string">"0|1|2|...|-1"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-setzonebvolumesync">setZoneBVolumeSync</dt> <dd>Enable or disable Zone B volume sync.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-sethdmiout1">setHdmiOut1</dt> <dd>Turn HDMI 1 output on or off.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-sethdmiout2">setHdmiOut2</dt> <dd>Turn HDMI 2 output on or off.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> <dt id="musiccast-command-info-sethdmiout3">setHdmiOut3</dt> <dd>Turn HDMI 3 output on or off.</dd><p></p> <dd>Attribute structure: <pre class="musiccast-attributes-example">{ <span class="key">"enable":</span> <span class="string">"true|false"</span> }</pre><p></p> </dd> </dl> <!-- END COMMAND HELP --> <h4>Collection Information</h4> <ul> <li>Version: 4.5.2</li> </ul> <div style="height: 700px;"></div> <span>This space intentionally left blank</span> </script>