Merge 7d41db377f609d034b656fbd8c1cf2bf6680b685 into 5da75b4943d0c0665b2c66c46a56eb5c0716e26e

This commit is contained in:
hdoukas 2013-10-02 12:49:08 -07:00
commit e9ba44cbfc
2 changed files with 135 additions and 0 deletions

View File

@ -0,0 +1,61 @@
<!--
Copyright 2013 Charalampos Doukas.
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="scanBLE">
<div class="form-row">
<label for="node-input-topic"><i class="icon-tasks"></i> BLE Device name</label>
<input type="text" id="node-input-ble_name" placeholder="XXX">
</div>
<div class="form-row">
<label for="node-input-topic"><i class="icon-tasks"></i> UUID</label>
<input type="text" id="node-input-ble_uuid" placeholder="UUID">
</div>
<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>
</script>
<!-- Next, some simple help text is provided for the node. -->
<script type="text/x-red" data-help-name="scanBLE">
<p>Scans for a specific BLE Device</p>
</script>
<!-- Finally, the node type is registered along with all of its properties -->
<script type="text/javascript">
RED.nodes.registerType('scanBLE',{
category: 'advanced-input', // the palette category
color:"#0076d6",
defaults: { // defines the editable properties of the node
name: {value:""}, // along with default values.
ble_name: {value:"", required:true},
ble_uuid: {value: "", required:true}
},
inputs:1, // set the number of inputs - only 0 or 1
outputs:1, // set the number of outputs - 0 to n
icon: "arrow-in.png", // set the icon (held in public/icons)
label: function() { // sets the default label contents
return this.name||this.topic||"scanBLE";
},
labelStyle: function() { // sets the class to apply to the label
return this.name?"node_label_italic":"";
}
});
</script>

View File

@ -0,0 +1,74 @@
/**
* scanBLE.js
* Scans for a specific Bluetooth 4 (BLE) Device (by Name and UUID)
* Returns the Name the of Device when found and stops scanning
* Requires Noble: https://github.com/sandeepmistry/noble
* Copyright 2013 Charalampos Doukas
*
* 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.
**/
var RED = require("../../red/red");
//import noble
var noble = require('noble');
// The main node definition - most things happen in here
function Scan(n) {
// Create a RED node
RED.nodes.createNode(this,n);
var msg = {};
var ble_name;
var node = this;
//get name and uuid from user
this.ble_name = n.ble_name;
this.ble_uuid = n.ble_uuid;
this.on("input", function(msg){
noble.startScanning();
});
noble.on('scanStart', function(msg) {
var msg = {};
msg.topic = node.topic;
msg.payload = "Scanning initiated..." //debugging
//console.log('scanning initiated...');
node.send(msg);
});
noble.on('discover', function(peripheral) {
var msg = {};
msg.topic = node.topic;
msg.payload = "not found";
if(peripheral.advertisement.localName==node.ble_name && peripheral.advertisement.serviceUuids[0]==node.ble_uuid) {
msg.payload=peripheral.advertisement.localName;
noble.stopScanning(); }
node.send(msg);
});
}
// Register the node by name. This must be called before overriding any of the
// Node functions.
RED.nodes.registerType("scanBLE", Scan);
Scan.prototype.close = function() {
}