UNPKG

thethingbox-node-sensortag

Version:

Sensortag node for thethingbox, compatible with node-red

147 lines (140 loc) 7.22 kB
<!-- First, the content of the edit dialog is defined. --> <script type="text/x-red" data-template-name="sensorTag"> <!-- data-template-name identifies the node type this is for --> <!-- Each of the following divs creates a field in the edit dialog. --> <!-- Generally, there should be an input for each property of the node. --> <!-- The for and id attributes identify the corresponding property --> <!-- (with the 'node-input-' prefix). --> <!-- The available icon classes are defined in Twitter Bootstrap --> <!-- By convention, most nodes have a 'name' property. The following div --> <!-- provides the necessary field. --> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-topic"><i class="icon-tag"></i> Topic</label> <input type="text" id="node-input-topic" > </div> <div class="form-row"> <label for="node-input-uuid"><i class="icon-tag"></i> UUID</label> <input type="text" id="node-input-uuid" > </div> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Temperature</label> <input type="checkbox" id="node-input-temperature" placeholder=""> </div> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Humidity</label> <input type="checkbox" id="node-input-humidity" > </div> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Pressure</label> <input type="checkbox" id="node-input-pressure" > </div> <div class="form-row"> <label for="node-input-name" style="width:25%"><i class="icon-tag"></i> Magnetometer</label> <input type="checkbox" style="width:63%" id="node-input-magnetometer" > </div> <div class="form-row"> <label for="node-input-name" style="width:100%"><i class="icon-tag"></i> Magnetometer period (1 - 2550 ms)</label><br/> <input type="text" id="node-input-magnPeriode" > </div> <div class="form-row"> <label for="node-input-name" style="width:25%"><i class="icon-tag"></i> Accelerometer</label> <input type="checkbox" style="width:65%" id="node-input-accelerometer" > </div> <div class="form-row"> <label for="node-input-name" style="width:100%"><i class="icon-tag"></i> Accelerometer period (1 - 2550 ms)</label><br/> <input type="text" id="node-input-accPeriode" > </div> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Gyroscope</label> <input type="checkbox" id="node-input-gyroscope" > </div> <div class="form-row"> <label for="node-input-name" style="width:100%"><i class="icon-tag"></i> Gyroscope period (100 - 2550 ms)</label><br/> <input type="text" id="node-input-gyrPeriode" > </div> <div class="form-row"> <label for="node-input-name"><i class="icon-tag"></i> Keys</label> <input type="checkbox" id="node-input-keys" > </div> </script> <!-- Next, some simple help text is provided for the node. --> <script type="text/x-red" data-help-name="sensorTag"> <!-- data-help-name identifies the node type this help is for --> <!-- This content appears in the Info sidebar when a node is selected --> <!-- The first <p> is used as the pop-up tool tip when hovering over a --> <!-- node in the palette. --> <p>Input node for the Ti SensorTag</p> <p>For this node to work correctly Node-Red needs to be run as root, this due to how Bluetooth 4.0 support is currently implemented in Linux</p> <p>The UUID field is the mac address of the sensor tag, this is optional can be used to bind to a specific SensorTag if you have more than one active in range at the same time. (note you can only have one SensorTag per node-red instance at the moment)</p> <p>The topic setting is a prefix that will be pre-pended to name of the sensor that creates the reading. e.g. <i>sensorTag/temperature</i></p> </script> <!-- Finally, the node type is registered along with all of its properties --> <!-- The example below shows a small subset of the properties that can be set--> <script type="text/javascript"> RED.nodes.registerType('sensorTag',{ category: 'advanced-function', // the palette category color:"GoldenRod", defaults: { // defines the editable properties of the node name: {value:"sensorTag"}, // along with default values. topic: {value:"sensorTag"}, uuid: {value:""}, temperature: {value:true}, humidity: {value:true}, pressure: {value:true}, magnetometer: {value:true}, magnPeriode : {value:1000}, accelerometer: {value:true}, accPeriode : {value : 1000}, gyroscope: {value:true}, gyrPeriode : {value: 1000}, keys: {value:true} }, inputs:0, // set the number of inputs - only 0 or 1 outputs:1, // set the number of outputs - 0 to n icon: "bluetooth.png", // set the icon (held in public/icons) label: function() { // sets the default label contents return this.name||this.topic||"sensorTag"; }, labelStyle: function() { // sets the class to apply to the label return this.name?"node_label_italic":""; }, oneditsave: function() { var mac = $("#node-input-uuid").val(); mac = mac.replace(/:/gi,''); mac = mac.toLowerCase(); $("#node-input-uuid").val(mac); }, button: { toggle: "active", onclick: function() { var label = this.name||"sensorTag"; d3.xhr("sensorTag/"+this.id+"/").post(function(err,resp) { if (err) { if (err.status == 404) { RED.notify("<strong>Error</strong>: sensorTag node not deployed","error"); } else if (err.status == 0) { RED.notify("<strong>Error</strong>: no response from server","error"); } else { RED.notify("<strong>Error</strong>: unexpected error: ("+err.status+")"+err.response,"error"); } } else if (resp.status == 200) { RED.notify("Successfully activated: "+label,"success"); } else if (resp.status == 201) { RED.notify("Successfully deactivated: "+label,"success"); } else { RED.notify("<strong>Error</strong>: unexpected response: ("+resp.status+") "+resp.response,"error"); } }); } } }); </script>