From e9c3e7fd26886609315c4c4eacbaf16fc5b3e4b0 Mon Sep 17 00:00:00 2001 From: Charalampos Doukas Date: Mon, 30 Sep 2013 14:50:56 +0200 Subject: [PATCH] Added new nodes to the node repository. Although current HTTP node will be updated to include more functionality, still added the HTTP_generic node just in case --- hardware/101-scanBLE.html | 61 +++++++++++++++++++++++++ hardware/101-scanBLE.js | 74 ++++++++++++++++++++++++++++++ io/102-HTTP_generic.html | 95 +++++++++++++++++++++++++++++++++++++++ io/102-HTTP_generic.js | 93 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 323 insertions(+) create mode 100644 hardware/101-scanBLE.html create mode 100644 hardware/101-scanBLE.js create mode 100644 io/102-HTTP_generic.html create mode 100644 io/102-HTTP_generic.js diff --git a/hardware/101-scanBLE.html b/hardware/101-scanBLE.html new file mode 100644 index 00000000..cd602574 --- /dev/null +++ b/hardware/101-scanBLE.html @@ -0,0 +1,61 @@ + + + + + + + + + diff --git a/hardware/101-scanBLE.js b/hardware/101-scanBLE.js new file mode 100644 index 00000000..7f01385e --- /dev/null +++ b/hardware/101-scanBLE.js @@ -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() { + +} + diff --git a/io/102-HTTP_generic.html b/io/102-HTTP_generic.html new file mode 100644 index 00000000..690212bf --- /dev/null +++ b/io/102-HTTP_generic.html @@ -0,0 +1,95 @@ + + + + + + + + + diff --git a/io/102-HTTP_generic.js b/io/102-HTTP_generic.js new file mode 100644 index 00000000..9c42bf0f --- /dev/null +++ b/io/102-HTTP_generic.js @@ -0,0 +1,93 @@ +/* + + HTTP_generic.js + Performs a generic HTTP Request (PUT, GET, POST, DELETE) + User can set method, host, port, path, content-type and header/data request. + Example of header parameters:'foo:bar,param2:value,param3:value' + + 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"); +var http = require("http"); + + +// The main node definition - most things happen in here +function HTTP_Request(n) { + // Create a RED node + RED.nodes.createNode(this,n); + var msg = {}; + this.method = n.method; + this.header = n.header; + this.data = n.data; + this.host = n.host; + this.port = n.port; + this.path = n.path; + this.contenttype = n.contenttype; + var node = this; + + + this.on("input", function(msg){ + var options = { + host: node.host, + port: node.port, + path: node.path, + method: node.method, + headers: { + 'Content-Type': node.contenttype + } + }; + + var req = http.request(options, function(res) { + res.setEncoding('utf8'); + res.on('data', function (chunk) { + var msg = {}; + msg.payload = chunk; + node.send(msg); + }); + }); + + req.on('error', function(e) { + console.log('problem with request: ' + e.message); + }); + + var tmp_head = node.header.split(','); + for(var i = 0; i < tmp_head.length; i++) + { + var head_part = tmp_head[i].split(':'); + req.setHeader(head_part[0], head_part[1]); + } + + // write data to request body + req.write(node.data); + req.end(); + + + }); + +} + +// Register the node by name. This must be called before overriding any of the +// Node functions. +RED.nodes.registerType("HTTP_generic", HTTP_Request); + + +HTTP_Request.prototype.close = function() { + // Called when the node is shutdown - eg on redeploy. + // Allows ports to be closed, connections dropped etc. + // eg: this.client.disconnect(); +} +