UNPKG

node-red-contrib-aws-iot-custom-auth

Version:
281 lines (260 loc) 8.73 kB
<!-- Copyright 2014 IBM Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <script type="text/x-red" data-template-name="aws-iot-device"> <div class="form-row"> <label for="node-config-input-name"><i class="fa fa-globe"></i> Name</label> <input type="text" id="node-config-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-config-input-mode"><i class="fa fa-tag"></i> Type</label> <select type="text" id="node-config-input-mode"> <option value="broker">MQTT Broker</option> <option value="shadow">Thing Shadow</option> <option value="wss-custom-auth">Custom Authorizer</option> </select> </div> <div class="form-row"> <label for="node-config-input-clientId"><i class="fa fa-tag"></i> Client ID</label> <input type="text" id="node-config-input-clientId" placeholder="Client ID"> </div> <div class="form-row"> <label for="node-config-input-endpoint"><i class="fa fa-tag"></i> Endpoint</label> <input type="text" id="node-config-input-endpoint" placeholder="AWS IoT Endpoint"> </div> <div class="form-row"> For MQTT Broker and Thing Shadow types: </div> <div class="form-row"> <label for="node-config-input-awscerts"><i class="fa fa-tag"></i> AWS Certs</label> <input type="text" id="node-config-input-awscerts"></input> </div> <div class="form-row"> For Custom Authorizer type: </div> <div class="form-row"> <label for="node-config-input-customAuthName" placeholder="IoTAuthorizer"><i class="fa fa-tag"></i> Custom Authorizer Name</label> <input type="text" id="node-config-input-customAuthName"></input> </div> <div class="form-row"> <label for="node-config-input-tokenKey"><i class="fa fa-tag"></i> Token Key</label> <input type="text" id="node-config-input-tokenKey"></input> </div> <div class="form-row"> <label for="node-config-input-tokenValue"><i class="fa fa-tag"></i> Token Value</label> <textarea style="width: 70%" id="node-config-input-tokenValue"></textarea> </div> <div class="form-row"> <label for="node-config-input-customAuthSignature"><i class="fa fa-tag"></i> Custom Authorizer Signature</label> <textarea style="width: 70%" id="node-config-input-customAuthSignature"></textarea> </div> </script> <!-- MQTT Broker Configuration --> <script type="text/javascript"> RED.nodes.registerType('aws-iot-device', { category : 'config', defaults : { name : { value : "", required : true }, mode : { value : "", required : true }, clientId : { value : "" }, endpoint : { value : "", required : true }, awscerts : { value : "/root/.agent/certs", required : false }, customAuthName : { value : "IoTAuthorizer", required : false }, tokenKey : { value : "X-Token-Header", required : false }, tokenValue : { value : "", required : false }, customAuthSignature : { value : "", required : false } }, label : function() { return this.name; } }); </script> <script type="text/x-red" data-template-name="aws-mqtt out"> <div class="form-row"> <label for="node-input-device"><i class="fa fa-globe"></i> Device</label> <input type="text" id="node-input-device"> </div> <div class="form-row"> <label for="node-input-topic"><i class="fa fa-globe"></i> Topic</label> <input type="text" id="node-input-topic"> </div> <div class="form-row"> <label for="node-input-qos"><i class="fa fa-empire"></i> <span> QoS</span></label> <select id="node-input-qos" style="width:125px !important"> <option value="0">0</option> <option value="1">1</option> </select> </div> </script> <script type="text/x-red" data-help-name="aws-mqtt out"> <p>Connects to a MQTT broker and publishes <b>msg.payload</b> either to the <b>msg.topic</b> or to the topic specified in the edit window. The value in the edit window has precedence.</p> <p>Likewise QoS and/or retain values in the edit panel will overwrite any <b>msg.qos</b> and <b>msg.retain</b> properties. If nothing is set they default to <i>0</i> and <i>false</i> respectively.</p> <p>If <b>msg.payload</b> contains an object it will be stringified before being sent.</p> </script> <script type="text/javascript"> RED.nodes.registerType('aws-mqtt out', { category : 'output', color : "#CCB2FF", defaults : { device : { type : "aws-iot-device", required : true }, topic : { value : "" }, qos : { value : 0, validate : RED.validators.number() } }, inputs : 1, outputs : 0, icon : "aws-iot.png", align : "right", label : function() { var dbNode = RED.nodes.node(this.device); return this.name || ( dbNode ? dbNode.label() : "aws-mqtt"); }, labelStyle : function() { return this.name ? "node_label_italic" : ""; } }); </script> <script type="text/x-red" data-template-name="aws-mqtt in"> <div class="form-row"> <label for="node-input-device"><i class="fa fa-device"></i> Device</label> <input type="text" id="node-input-device"> </div> <div class="form-row"> <label for="node-input-topic"><i class="fa fa-tag"></i> Topic</label> <input type="text" id="node-input-topic" placeholder="Topic"> </div> </script> <script type="text/x-red" data-help-name="aws-mqtt in"> <p>MQTT input node. Connects to a broker and subscribes to the specified topic. The topic may contain MQTT wildcards.</p> <p>Outputs an object called <b>msg</b> containing <b>msg.topic, msg.payload, msg.qos</b> and <b>msg.retain</b>.</p> <p><b>msg.payload</b> is usually a string, but can also be a binary buffer.</p> </script> <script type="text/javascript"> RED.nodes.registerType('aws-mqtt in', { category : 'input', color : "#CCB2FF", defaults : { device : { type : "aws-iot-device", required : true }, topic : { value : "" } }, inputs : 0, outputs : 1, icon : "aws-iot.png", align : "left", label : function() { var dbNode = RED.nodes.node(this.device); return this.name || ( dbNode ? dbNode.label() : "aws-mqtt"); }, labelStyle : function() { return this.name ? "node_label_italic" : ""; } }); </script> <!-- ThingShadow Configuration --> <script type="text/x-red" data-template-name="aws-thing"> <div class="form-row"> <label for="node-input-device"><i class="fa fa-globe"></i> Device</label> <input type="text" id="node-input-device"> </div> <div class="form-row"> <label for="node-input-method"><i class="fa fa-empire"></i> <span>Method</span></label> <select id="node-input-method" style="width:125px !important"> <option value="get">GET</option> <option value="update">UPDATE</option> <option value="delete">DELETE</option> </select> </div> </script> <script type="text/x-red" data-help-name="aws-thing"> <p>A thing shadow (sometimes referred to as a device shadow) is a JSON document that is used to store and retrieve current state information for a thing (device, app, and so on).</p> <p>The Thing Shadows service maintains a thing shadow for each thing you connect to AWS IoT.</p> <p>You can use thing shadows to get and set the state of a thing over MQTT or HTTP, regardless of whether the thing is connected to the Internet.</p> <p>Each thing shadow is uniquely identified by its name. <b>Thing Name</b> that used for Device Shadow MQTT Pub/Sub Messages: <pre>$aws/things/thingName/shadow/#</pre> </p> <p>The input pin accepts a <b>msg.payload</b> with JSON format following the structure of AWS ThingShadow document for UPDATE <pre> <b>msg.payload</b> = { state: { desired: { color: "RED" } } }</pre> </p> <p>Whereas, the two output pins show out the STATUS (pin 1) and the TIMEOUT (pin 2) messages in the <b>msg.payload</b></p> </script> <script type="text/javascript"> RED.nodes.registerType('aws-thing', { category : 'AWS IoT', color : "#CCB2FF", defaults : { device : { type : "aws-iot-device", required : true }, method : { value : "get", required : true } }, inputs : 1, outputs : 1, icon : "aws-iot.png", align : "left", label : function() { var dbNode = RED.nodes.node(this.device); return "[" + this.method + "] /" + ( dbNode ? dbNode.label() : "aws-thing"); }, labelStyle : function() { return this.name ? "node_label_italic" : ""; } }); </script>