Add base extension.

This commit is contained in:
Koenkk
2019-09-17 18:32:16 +02:00
parent 11aacb8620
commit c8a07a5c2d
14 changed files with 47 additions and 77 deletions
@@ -1,10 +1,4 @@
/* istanbul ignore file */
/**
* This extensions is for documentation purposes only.
* It describes all methods that are called by the controller.
*/
class ExtensionTemplate {
class BaseExtension {
/**
* Besides intializing variables, the constructor should do nothing!
*
@@ -23,12 +17,12 @@ class ExtensionTemplate {
/**
* This method is called by the controller once Zigbee has been started.
*/
onZigbeeStarted() {}
// onZigbeeStarted() {}
/**
* This method is called by the controller once connected to the MQTT server.
*/
onMQTTConnected() {}
// onMQTTConnected() {}
/**
* Is called when a Zigbee message from a device is received.
@@ -36,7 +30,7 @@ class ExtensionTemplate {
* @param {Object?} device The device of the message (can be null)
* @param {Object?} mappedDevice The mapped device (can be null)
*/
onZigbeeMessage(message, device, mappedDevice) {}
// onZigbeeMessage(message, device, mappedDevice) {}
/**
* Is called when a MQTT message is received
@@ -44,14 +38,12 @@ class ExtensionTemplate {
* @param {Object} message The received message
* @return {boolean} if the message was handled
*/
onMQTTMessage(topic, message) {
return false;
}
// onMQTTMessage(topic, message) {}
/**
* Is called once the extension has to stop
*/
stop() {}
// stop() {}
}
module.exports = ExtensionTemplate;
module.exports = BaseExtension;
+3 -5
View File
@@ -3,16 +3,14 @@ const logger = require('../util/logger');
const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const utils = require('../util/utils');
const assert = require('assert');
const BaseExtension = require('./baseExtension');
const configRegex = new RegExp(`${settings.get().mqtt.base_topic}/bridge/config/((?:\\w+/get)|(?:\\w+))`);
const allowedLogLevels = ['error', 'warn', 'info', 'debug'];
class BridgeConfig {
class BridgeConfig extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
super(zigbee, mqtt, state, publishEntityState);
// Bind functions
this.permitJoin = this.permitJoin.bind(this);
+4 -3
View File
@@ -2,6 +2,7 @@ const logger = require('../util/logger');
const settings = require('../util/settings');
const utils = require('../util/utils');
const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const BaseExtension = require('./baseExtension');
// Some EndDevices should be pinged
// e.g. E11-G13 https://github.com/Koenkk/zigbee2mqtt/issues/775#issuecomment-453683846
@@ -14,10 +15,10 @@ const toZigbeeCandidates = ['state', 'brightness', 'color', 'color_temp'];
/**
* This extensions pings devices to check if they are online.
*/
class DeviceAvailability {
class DeviceAvailability extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
super(zigbee, mqtt, state, publishEntityState);
this.availability_timeout = settings.get().advanced.availability_timeout;
this.timers = {};
this.state = {};
+2 -8
View File
@@ -2,17 +2,11 @@ const settings = require('../util/settings');
const logger = require('../util/logger');
const assert = require('assert');
const topicRegex = new RegExp(`^${settings.get().mqtt.base_topic}/bridge/(bind|unbind)/.+$`);
const BaseExtension = require('./baseExtension');
const clusters = ['genScenes', 'genOnOff', 'genLevelCtrl', 'lightingColorCtrl'];
class DeviceBind {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
}
class DeviceBind extends BaseExtension {
onMQTTConnected() {
this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/bind/+`);
this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/bind/+/+`);
+4 -2
View File
@@ -1,10 +1,12 @@
const settings = require('../util/settings');
const logger = require('../util/logger');
const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const BaseExtension = require('./baseExtension');
class DeviceConfigure {
class DeviceConfigure extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
super(zigbee, mqtt, state, publishEntityState);
this.configuring = new Set();
this.attempts = {};
}
+2 -7
View File
@@ -1,16 +1,11 @@
/* istanbul ignore file */
const settings = require('../util/settings');
const logger = require('../util/logger');
const BaseExtension = require('./baseExtension');
const topicRegex = new RegExp(`^${settings.get().mqtt.base_topic}/bridge/device/(.+)/get_group_membership$`);
class DeviceGroupMembership {
constructor(zigbee, mqtt, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.publishEntityState = publishEntityState;
}
class DeviceGroupMembership extends BaseExtension {
onMQTTConnected() {
this.mqtt.subscribe(`${settings.get().mqtt.base_topic}/bridge/device/+/get_group_membership`);
}
+3 -5
View File
@@ -2,13 +2,11 @@ const settings = require('../util/settings');
const logger = require('../util/logger');
const utils = require('../util/utils');
const debounce = require('debounce');
const BaseExtension = require('./baseExtension');
class DeviceReceive {
class DeviceReceive extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
super(zigbee, mqtt, state, publishEntityState);
this.coordinator = null;
this.elapsed = {};
this.debouncers = {};
+3 -5
View File
@@ -2,6 +2,7 @@ const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const logger = require('../util/logger');
const CC2530Router = zigbeeHerdsmanConverters.devices.find((d) => d.model === 'CC2530.ROUTER');
const utils = require('../util/utils');
const BaseExtension = require('./baseExtension');
const defaultConfiguration = {
minimumReportInterval: 3, maximumReportInterval: 300, reportableChange: 0,
@@ -27,12 +28,9 @@ const clusters = {
],
};
class DeviceReport {
class DeviceReport extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
super(zigbee, mqtt, state, publishEntityState);
this.configuring = new Set();
}
+2 -8
View File
@@ -4,6 +4,7 @@ const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const logger = require('../util/logger');
const utils = require('../util/utils');
const assert = require('assert');
const BaseExtension = require('./baseExtension');
const postfixes = utils.getPostfixes();
const topicRegex = new RegExp(`^(.+?)(?:/(${postfixes.join('|')}))?/(get|set)(?:/(.+))?`);
@@ -16,14 +17,7 @@ const groupConverters = [
zigbeeHerdsmanConverters.toZigbeeConverters.ignore_transition,
];
class EntityPublish {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
}
class EntityPublish extends BaseExtension {
onMQTTConnected() {
// Subscribe to topics.
const baseTopic = settings.get().mqtt.base_topic;
+4 -5
View File
@@ -1,15 +1,14 @@
const settings = require('../util/settings');
const logger = require('../util/logger');
const BaseExtension = require('./baseExtension');
const topicRegex = new RegExp(`^${settings.get().mqtt.base_topic}/bridge/group/(.+)/(remove|add|remove_all)$`);
const topicRegexRemoveAll = new RegExp(`^${settings.get().mqtt.base_topic}/bridge/group/remove_all$`);
class Groups {
class Groups extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
super(zigbee, mqtt, state, publishEntityState);
this.onStateChange = this.onStateChange.bind(this);
}
onMQTTConnected() {
+3 -5
View File
@@ -2,6 +2,7 @@ const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const settings = require('../util/settings');
const logger = require('../util/logger');
const zigbee2mqttVersion = require('../../package.json').version;
const BaseExtension = require('./baseExtension');
const configurations = {
// Binary sensor
@@ -907,12 +908,9 @@ Object.keys(mapping).forEach((key) => {
/**
* This extensions handles integration with HomeAssistant
*/
class HomeAssistant {
class HomeAssistant extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
this.publishEntityState = publishEntityState;
super(zigbee, mqtt, state, publishEntityState);
// A map of all discoverd devices
this.discovered = {};
+3 -2
View File
@@ -3,15 +3,16 @@
const utils = require('../util/utils');
const interval = utils.secondsToMilliseconds(1);
const logger = require('../util/logger');
const BaseExtension = require('./baseExtension');
const foundationCfg = {manufSpec: 0, disDefaultRsp: 0};
/**
* Extension required for Livolo device support.
*/
class Livolo {
class Livolo extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
super(zigbee, mqtt, state, publishEntityState);
this.timer = null;
this.configured = {};
}
+3 -4
View File
@@ -2,12 +2,11 @@ const settings = require('../util/settings');
const utils = require('../util/utils');
const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const logger = require('../util/logger');
const BaseExtension = require('./baseExtension');
class NetworkMap {
class NetworkMap extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
super(zigbee, mqtt, state, publishEntityState);
// Subscribe to topic.
this.topic = `${settings.get().mqtt.base_topic}/bridge/networkmap`;
+4 -3
View File
@@ -1,15 +1,16 @@
/* istanbul ignore file */
// deprecated
// DEPRECATED
const settings = require('../util/settings');
const logger = require('../util/logger');
const utils = require('../util/utils');
const BaseExtension = require('./baseExtension');
/**
* This extensions soft resets the ZNP after a certain timeout.
*/
class SoftReset {
class SoftReset extends BaseExtension {
constructor(zigbee, mqtt, state, publishEntityState) {
this.zigbee = zigbee;
super(zigbee, mqtt, state, publishEntityState);
this.timer = null;
this.timeout = utils.secondsToMilliseconds(settings.get().advanced.soft_reset_timeout);
}