diff --git a/hardware/physical-web/physical-web.html b/hardware/physical-web/physical-web.html index 38e185fa..34852cb1 100644 --- a/hardware/physical-web/physical-web.html +++ b/hardware/physical-web/physical-web.html @@ -78,16 +78,35 @@ @@ -114,9 +142,13 @@ category: 'output', defaults: { name: {value:""}, + mode: {value:"url"}, url: {value:"",validate:function(v) {return v.length<19; }}, + namespace: {value:""}, + instance: {value:""}, power: {value:"-21",validate:RED.validators.number()}, - period: {value:"1",validate:RED.validators.number()} + period: {value:"10",validate:RED.validators.number()}, + count: {value:"2",validate:RED.validators.number()} }, color: "#2F7ACD", inputs:1, @@ -129,8 +161,20 @@ return this.name?"node_label_italic":""; }, oneditprepare: function() { - $( "#node-input-period" ).spinner({min:1}); + $( "#node-input-period" ).spinner({min:0}); + $( "#node-input-count" ).spinner({min:0}); $( "#node-input-power" ).spinner({min:-30,max:100}); + $("#node-input-mode").on("change",function() { + if ($("#node-input-mode").val() === "uid") { + $("#node-url").hide(); + $("#node-namespace").show(); + $("#node-instance").show(); + } else { + $("#node-url").show(); + $("#node-namespace").hide(); + $("#node-instance").hide(); + } + }); } }); diff --git a/hardware/physical-web/physical-web.js b/hardware/physical-web/physical-web.js index 576bb84e..40b4f0fd 100644 --- a/hardware/physical-web/physical-web.js +++ b/hardware/physical-web/physical-web.js @@ -23,17 +23,21 @@ module.exports = function(RED) { function Beacon(n) { RED.nodes.createNode(this,n); var node = this; + node.mode = n.mode; node.power = n.power; - node.period = n.period * 10; + node.period = n.period; + node.count = n.count; node.url = n.url; + node.namespace = n.namespace; + node.instance = n.instance; node.options = { txPowerLevel: node.power, tlmPeriod: node.period, - tlmCount: 2 + tlmCount: node.count }; - if (node.url) { + if (node.mode === "url" && node.url) { if (!eddyBeacon) { eddyBeacon = true; try { @@ -46,13 +50,38 @@ module.exports = function(RED) { else {node.warn('Beacon already in use');} } + if (node.mode === "uid") { + if (!eddyBeacon) { + eddyBeacon = true; + try { + eddystoneBeacon.advertiseUid(node.namespace, node.instance, node.options); + node.status({fill:"green",shape:"dot",text:node.namespace}); + } catch(e) { + node.error('Error setting beacon information', e); + } + } + else {node.warn('Beacon already in use');} + } + node.on('input', function(msg) { - try { - eddystoneBeacon.advertiseUrl(msg.payload, node.options); - node.status({fill:"green",shape:"dot",text:node.url.toString()}); - } catch(e) { - node.status({fill:"red",shape:"circle",text:"URL too long"}); - node.error('error updating beacon URL', e); + if (node.mode === "url") { + try { + eddystoneBeacon.advertiseUrl(msg.payload, node.options); + node.status({fill:"green",shape:"dot",text:msg.payload}); + } catch(e) { + node.status({fill:"red",shape:"dot",text:"URL too long"}); + node.error('error updating beacon URL', e); + } + } + // uid mode + else { + try { + eddystoneBeacon.advertiseUid(msg.payload, msg.topic, node.options); + node.status({fill:"green",shape:"dot",text:msg.payload}); + } catch(e) { + node.status({fill:"red",shape:"dot",text:"Error setting beacon information"}); + node.error('Error setting beacon information', e); + } } });