const EventEmitter = require('events');
var mqtt = require('mqtt')
class mqttclient extends EventEmitter {
constructor() {
super();
global.plgManager.logger.info('-------- PLUGIN MQTTCLIENT -----------');
// setting defaults
this.mqttserverDomain = null;
this.mqttserverUsername = null;
this.mqttserverPassword = null;
this.mqttserverPort = 1883;
this.mqttserverTopic = 'alarmiator/stichwort';
// register Events
this.registerForEvents();
// loading configuration of plugin
this.loadConfig((success) => {
if (success) {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | successfully loaded Configuration from core database');
this.initializePlugin((successInit) => {
if (successInit) {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | successfully initialized plugin. Ready to send messages now.');
} else {
global.plgManager.logger.error('PLUGIN | MQTTCLIENT | something went wrong initializing plugin');
}
});
} else {
global.plgManager.logger.error('PLUGIN | MQTTCLIENT | something went wrong loading configuration. Can not send mqtt messages!!');
}
});
}
/**
* Registration of Events at the plugin manager (hook in to events provided by the plugin manager)
*/
registerForEvents() {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | Registering events')
global.plgManager.on('event_new_alarm', (alarmInfo) => {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | EVENT event_new_alarm recieved');
this.sendNewAlarm(alarmInfo, (success) => {
if (success) {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | sent MQTT Message successfully');
} else {
global.plgManager.logger.error('PLUGIN | MQTTCLIENT | Could not send MQTT Message');
}
});
})
}
/**
* Plugin-specific Getters and Setters
*
*/
set mqttserverDomain(mqttserverDomain) {
this._mqttseverDomain = mqttserverDomain;
}
get mqttserverDomain() {
return this._mqttseverDomain;
}
set mqttserverUsername(mqttserverUsername) {
this._mqttserverUsername = mqttserverUsername;
}
get mqttserverUsername() {
return this._mqttserverUsername;
}
set mqttserverPassword(mqttserverPassword) {
this._mqttserverPassword = mqttserverPassword;
}
get mqttserverPassword() {
return this._mqttserverPassword;
}
set mqttserverPort(mqttserverPort) {
this._mqttserverPort = mqttserverPort;
}
get mqttserverPort() {
return this._mqttserverPort;
}
set mqttserverTopic(mqttserverTopic) {
this._mqttserverTopic = mqttserverTopic;
}
get mqttserverTopic() {
return this._mqttserverTopic;
}
/**
* Plugin-specific implementation
*/
sendNewAlarm(alarmInfo, callback) {
var message = alarmInfo.subject.value + ', Einsatzort: ' + alarmInfo.location.value;
//console.log('Sending MQTT Alarm ... ');
var client = mqtt.connect(this.mqttserverDomain);
client.on('connect', (result) => {
// console.log('connected to mqtt Server ' + this.mqttserverDomain);
// console.log('sending message: ' + message);
// console.log('sending to topic: ' + this.mqttserverTopic);
client.publish(this.mqttserverTopic, message, (resultPublish) => {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | Sent message to mqtt server');
client.end();
})
})
}
/**
* Loads configuration for KatSys Service
* TBD: Needs to be pulled from plugin config store
*/
loadConfig(callback) {
global.plgManager.loadConfigFromStore('mqttclient', (configRows) => {
if (configRows !== null) {
this.config = configRows[0];
this.config = JSON.parse(this.config.configstore);
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | Configuration reloaded from core database');
callback(true);
} else {
global.plgManager.logger.info('PLUGIN | MQTTCLIENT | Found no configuration reloaded in core database');
callback(false);
}
})
}
/**
* returns config parameter for given fieldname
* @param {string} fieldname
*/
getConfigValue(fieldname) {
var retVal = null;
this.config.fields.forEach((field) => {
if (field.fieldname === fieldname) {
retVal = field.value;
}
});
return retVal;
}
/**
* initializes all settings. Returns false, if a needed setting is not valid or not set
* @param {function} callback success (true/false)
*/
initializePlugin(callback) {
this.mqttserverDomain = this.getConfigValue('mqttserverDomain');
this.mqttserverUsername = this.getConfigValue('mqttserverUsername');
this.mqttserverPassword = this.getConfigValue('mqttserverPassword');
this.mqttserverPort = this.getConfigValue('mqttserverPort');
this.mqttserverTopic = this.getConfigValue('mqttserverTopic');
if (this.mqttserverDomain !== null) {
return callback(true);
} else {
return callback(false);
}
}
}
module.exports = mqttclient;