diff --git a/io/mdns/README.md b/io/mdns/README.md
index d09377d8..d4b944d5 100644
--- a/io/mdns/README.md
+++ b/io/mdns/README.md
@@ -4,6 +4,8 @@ node-red-node-discover
A Node-RED node that uses Bonjour
/ Avahi to discover local network services such as iTunes libraries, printers, etc.
+Now also supports announcing new services.
+
Prerequisites
-------------
@@ -11,19 +13,21 @@ please read the [install instructions](https://www.npmjs.com/package/mdns) for t
For Debian / Ubuntu this requires installing
- sudo apt-get install libavahi-compat-libdnssd-dev
+ sudo apt-get install libavahi-compat-libdnssd-dev
Install
-------
-Run the following command in the root directory of your Node-RED install
+Run the following command in the root directory of your Node-RED install, usually `~/.node-red`
- npm install node-red-node-discovery
+ npm install node-red-node-discovery
Usage
-----
-Uses a javascript implenetation of mdns ( mdns-js ) to provide a Bonjour / Avahi
+### Discovery
+
+Uses an implemetation of mdns to provide a Bonjour / Avahi
service discovery capability.
**msg.payload** contains the service object on both arrival and leaving.
@@ -40,4 +44,19 @@ Within the msg.payload object the most interesting things are:
For a full list of official service types see [this list](http://www.dns-sd.org/ServiceTypes.html" target="_new).
-**Note**: When Node-RED starts you will get a big WARNING message about the Bonjour compatability layer... this is just a warning so don't worry.
+###Announce
+
+Provides a Bonjour / Avahi / Zeroconf announcement node.
+
+If **msg.payload** is 0 - the announcement is stopped. Any other value starts the announcement process.
+
+The announcement can be customised by the msg if not configured in the edit panel.
+
+ - **msg.service** - For a full list of official service types see this list.
+ - **msg.port** - the tcp or udp port to use.
+ - **msg.name** - the short description name of the service. If you use %h in the name, it will be replaced by the machine hostname.
+ - **msg.txtRecord** - a set of comma separated name:value pairs
+
+###Note:
+
+When Node-RED starts you will get a big WARNING message about the Bonjour compatability layer... this is just a warning so don't worry.
diff --git a/io/mdns/mdns.html b/io/mdns/mdns.html
index 579d922b..17e4be39 100644
--- a/io/mdns/mdns.html
+++ b/io/mdns/mdns.html
@@ -16,15 +16,15 @@
+
+
+
+
+
+
diff --git a/io/mdns/mdns.js b/io/mdns/mdns.js
index e2964287..966af28f 100644
--- a/io/mdns/mdns.js
+++ b/io/mdns/mdns.js
@@ -28,24 +28,69 @@ module.exports = function(RED) {
var browser = mdns.createBrowser(this.service);
var node = this;
- browser.on('serviceUp', function (service) {
+ browser.on('serviceUp', function(service) {
if (RED.settings.verbose) { node.log("here : " + service.name); }
service.state = true;
- var msg = {topic: node.topic, payload: service};
+ var msg = {topic:node.topic, payload:service};
node.send(msg);
});
- browser.on('serviceDown', function (service) {
+ browser.on('serviceDown', function(service) {
if (RED.settings.verbose) { node.log("away : " + service.name); }
service.state = false;
- var msg = {topic: node.topic, payload: service};
+ var msg = {topic:node.topic, payload:service};
node.send(msg);
});
browser.start();
- node.on("close", function () {
+ node.on("close", function() {
if (browser) { browser.stop(); }
});
}
-
RED.nodes.registerType("discovery", MdnsNode);
+
+
+ function MdnsAnnNode(n) {
+ var mdns = require('mdns');
+ var os = require("os");
+ if (process.platform === "linux") {
+ RED.log.info("You may ignore the warning about Bonjour compatability.");
+ }
+ RED.nodes.createNode(this, n);
+ this.service = n.service || "";
+ this.port = n.port;
+ this.name = n.name;
+ this.txt = n.txt;
+ if (this.txt && (this.txt !== '')) {
+ try { this.txt = JSON.parse('{'+this.txt+'}'); }
+ catch (e) { delete this.txt; };
+ }
+ var node = this;
+
+ this.on("input", function(msg) {
+ if ((msg.payload === 0) || (msg.payload === "0")) {
+ node.ad.stop();
+ }
+ else {
+ var service = node.service || msg.service;
+ var port = Number(node.port || msg.port);
+ var options = {};
+ if (node.name || msg.name) {
+ options.name = (node.name || msg.name).replace(/\%h/g, os.hostname());
+ }
+ if (node.txt || msg.txtRecord) { options.txtRecord = node.txt || msg.txtRecord };
+ node.ad = mdns.createAdvertisement(service, port, options);
+ node.ad.start();
+ }
+ });
+
+ this.on("error", function(e) {
+ node.error(e);
+ });
+
+ this.on("close", function() {
+ if (node.ad) { node.ad.stop(); }
+ });
+
+ }
+ RED.nodes.registerType("announce", MdnsAnnNode);
}
diff --git a/io/mdns/package.json b/io/mdns/package.json
index 46cfcda1..e85840a0 100644
--- a/io/mdns/package.json
+++ b/io/mdns/package.json
@@ -1,6 +1,6 @@
{
"name" : "node-red-node-discovery",
- "version" : "0.0.6",
+ "version" : "0.0.7",
"description" : "A Node-RED node that uses Bonjour / Avahi to discover nearby services.",
"dependencies" : {
"mdns" : "2.2.*"
@@ -9,7 +9,7 @@
"type":"git",
"url":"https://github.com/node-red/node-red-nodes/tree/master/io/mdns"
},
- "license": "Apache",
+ "license": "Apache v2",
"keywords": [ "node-red", "mdns", "avahi", "bonjour" ],
"node-red" : {
"nodes" : {