1
0
mirror of https://github.com/node-red/node-red-nodes.git synced 2023-10-10 13:36:58 +02:00

Merge pull request #3 from hdoukas/master

Added scanBLE node under hardware->scanBLE
This commit is contained in:
Nick O'Leary 2013-10-04 06:10:21 -07:00
commit cedc7a462a
2 changed files with 137 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,76 @@
/**
* 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 - @BuildingIoT
*
* 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.
**/
//might need to modify accordingly
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";
//check for the device name and the UUID (first one from the UUID list)
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() {
}