95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
'use strict';
|
|
const mqtt = require('mqtt');
|
|
|
|
function Client(cbConnected, cbChanged, config) {
|
|
let that = this;
|
|
if (typeof config === 'string') config = {name: config};
|
|
config = config || {};
|
|
config.url = config.url || 'localhost';
|
|
this.client = mqtt.connect('mqtt://' + (config.user ? (config.user + ':' + config.pass + '@') : '') + config.url + (config.name ? '?clientId=' + config.name : ''), config);
|
|
|
|
this.client.on('connect', () => {
|
|
console.log((new Date()) + ' test client connected to localhost');
|
|
|
|
/*that.client.publish('mqtt/0/test', 'Roger1');
|
|
client.publish('test/out/testMessage1', 'Roger1');
|
|
client.publish('test/out/testMessage2', 'Roger2');
|
|
client.publish('test/in/testMessage3', 'Roger3');
|
|
client.publish('test/in/testMessage4', 'Roger4');*/
|
|
|
|
/*client.publish('arduino/kitchen/out/temperature', '10.1');
|
|
client.publish('arduino/kitchen/out/humidity', '56');
|
|
// Current light state
|
|
client.publish('arduino/kitchen/in/lightActor', 'false');
|
|
|
|
client.subscribe('arduino/kitchen/in/#');*/
|
|
//client.subscribe('arduino/kitchen/in/updateInterval');
|
|
that.client.subscribe('#');
|
|
if (cbConnected) cbConnected(true);
|
|
});
|
|
|
|
this.client.on('message', (topic, message, packet) => {
|
|
// message is Buffer
|
|
if (cbChanged) {
|
|
cbChanged(topic, message, packet);
|
|
} else {
|
|
console.log('Test MQTT Client received "' + topic + '": ' + message.toString());
|
|
}
|
|
});
|
|
this.client.on('close', err => {
|
|
if (err) console.error('Connection closed: ' + err);
|
|
// message is Buffer
|
|
if (cbConnected) {
|
|
cbConnected(false);
|
|
} else {
|
|
console.log('Test MQTT Client closed');
|
|
}
|
|
});
|
|
|
|
this.client.on('error', error => {
|
|
console.error('Test MQTT Client error: ' + error);
|
|
});
|
|
|
|
this.publish = (topic, message, qos, retain, cb) => {
|
|
if (typeof qos === 'function') {
|
|
cb = qos;
|
|
qos = undefined;
|
|
}
|
|
if (typeof retain === 'function') {
|
|
cb = retain;
|
|
retain = undefined;
|
|
}
|
|
const opts = {
|
|
retain: retain || false,
|
|
qos: qos || 0
|
|
};
|
|
that.client.publish(topic, message, opts, cb);
|
|
};
|
|
this.subscribe = (topic, opts, cb) => {
|
|
if (typeof opts === 'function') {
|
|
cb = opts;
|
|
opts = null;
|
|
}
|
|
that.client.subscribe(topic, opts, cb);
|
|
};
|
|
this.unsubscribe = (topic, cb) => {
|
|
that.client.unsubscribe(topic, cb);
|
|
};
|
|
this.destroy = () => {
|
|
if (that.client) {
|
|
that.client.end();
|
|
that.client = null;
|
|
}
|
|
};
|
|
|
|
this.stop = this.destroy;
|
|
|
|
return this;
|
|
}
|
|
|
|
if (typeof module !== 'undefined' && module.parent) {
|
|
module.exports = Client;
|
|
} else {
|
|
new Client();
|
|
}
|