This commit is contained in:
Koen Kanters
2020-12-02 20:38:48 +01:00
parent 1c634dde60
commit 9ff232fbb2
15 changed files with 14 additions and 37 deletions
+1 -4
View File
@@ -52,6 +52,7 @@ class Controller {
// Initialize extensions.
const args = [this.zigbee, this.mqtt, this.state, this.publishEntityState, this.eventBus];
this.extensions = [
new ExtensionBridge(...args, this.enableDisableExtension),
new ExtensionPublish(...args),
new ExtensionReceive(...args),
new ExtensionDeviceGroupMembership(...args),
@@ -64,10 +65,6 @@ class Controller {
new ExtensionReport(...args),
];
if (settings.get().experimental.new_api) {
this.extensions.push(new ExtensionBridge(...args, this.enableDisableExtension));
}
if (settings.get().frontend) {
this.extensions.push(new ExtensionFrontend(...args));
}
+1 -1
View File
@@ -28,7 +28,7 @@ class Bind extends Extension {
type = topic.split('/')[0];
sourceKey = topic.replace(`${type}/`, '');
targetKey = message;
} else if (settings.get().experimental.new_api && topic.match(topicRegex)) {
} else if (topic.match(topicRegex)) {
type = topic.endsWith('unbind') ? 'unbind' : 'bind';
message = JSON.parse(message);
sourceKey = message.from;
+2 -6
View File
@@ -86,7 +86,6 @@ class HomeAssistant extends Extension {
this.mapping = {};
this.discoveredTriggers = {};
this.legacyApi = settings.get().advanced.legacy_api;
this.newApi = settings.get().experimental.new_api;
if (!settings.get().advanced.cache_state) {
logger.warn('In order for HomeAssistant integration to work properly set `cache_state: true');
@@ -535,7 +534,7 @@ class HomeAssistant extends Extension {
},
{
property: 'update',
condition: supportsOTA && this.newApi,
condition: supportsOTA,
value: {state: 'idle'},
},
{
@@ -595,13 +594,10 @@ class HomeAssistant extends Extension {
let configs = this.mapping[resolvedEntity.definition.model].slice();
if (resolvedEntity.definition.hasOwnProperty('ota')) {
configs.push(cfg.sensor_update_state);
if (this.legacyApi) {
configs.push(cfg.binary_sensor_update_available);
}
if (this.newApi) {
configs.push(cfg.sensor_update_state);
}
}
if (resolvedEntity.settings.hasOwnProperty('legacy') && !resolvedEntity.settings.legacy) {
+1 -1
View File
@@ -42,7 +42,7 @@ class NetworkMap extends Extension {
}
}
if (settings.get().experimental.new_api && topic === this.topic) {
if (topic === this.topic) {
try {
message = utils.parseJSON(message, message);
const type = typeof message === 'object' ? message.type : message;
+3 -8
View File
@@ -90,20 +90,15 @@ class OTAUpdate extends Extension {
}
getEntityPublishPayload(state, progress=null, remaining=null) {
const payload = {};
const payload = {update: {state}};
if (progress !== null) payload.update.progress = progress;
if (remaining !== null) payload.update.remaining = Math.round(remaining);
/* istanbul ignore else */
if (this.legacyApi) {
payload.update_available = state === 'available';
}
/* istanbul ignore else */
if (settings.get().experimental.new_api) {
payload.update = {state};
if (progress !== null) payload.update.progress = progress;
if (remaining !== null) payload.update.remaining = Math.round(remaining);
}
return payload;
}
-1
View File
@@ -50,7 +50,6 @@ const defaults = {
experimental: {
// json or attribute or attribute_and_json
output: 'json',
new_api: false,
},
advanced: {
legacy_api: true,
+1
View File
@@ -174,6 +174,7 @@ function* getExternalConvertersDefinitions(settings) {
function toSnakeCase(value) {
if (typeof value === 'object') {
value = {...value};
for (const key of Object.keys(value)) {
const keySnakeCase = toSnakeCase(key);
if (key !== keySnakeCase) {
-1
View File
@@ -28,7 +28,6 @@ describe('Availability', () => {
data.writeEmptyState();
jest.useFakeTimers();
settings.set(['advanced', 'availability_timeout'], 10);
settings.set(['experimental', 'new_api'], true);
controller = new Controller();
mocksClear.forEach((m) => m.mockClear());
await controller.start();
-1
View File
@@ -25,7 +25,6 @@ describe('Bind', () => {
data.writeDefaultConfiguration();
settings._reRead();
data.writeEmptyState();
settings.set(['experimental', 'new_api'], true);
controller = new Controller();
await controller.start();
await flushPromises();
+1 -2
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -75,7 +75,6 @@ describe('Frontend', () => {
data.writeDefaultConfiguration();
data.writeDefaultState();
settings._reRead();
settings.set(['experimental'], {new_api: true});
settings.set(['frontend'], {port: 8081, host: "127.0.0.1"});
settings.set(['homeassistant'], true);
zigbeeHerdsman.devices.bulb.linkquality = 10;
-1
View File
@@ -20,7 +20,6 @@ describe('Groups', () => {
beforeEach(() => {
data.writeEmptyState();
settings.set(['experimental', 'new_api'], true);
controller = new Controller();
Object.values(zigbeeHerdsman.groups).forEach((g) => g.members = []);
data.writeDefaultConfiguration();
+4 -8
View File
@@ -779,8 +779,6 @@ describe('HomeAssistant extension', () => {
MQTT.publish.mockClear();
await zigbeeHerdsman.events.deviceLeave(payload);
await flushPromises();
// 1 publish is from device_removed
expect(MQTT.publish).toHaveBeenCalledTimes(1);
});
it('Should send all status when home assistant comes online (default topic)', async () => {
@@ -797,13 +795,13 @@ describe('HomeAssistant extension', () => {
await flushPromises();
expect(MQTT.publish).toHaveBeenCalledWith(
'zigbee2mqtt/bulb',
stringify({"state":"ON","brightness":50,"color_temp":370,"linkquality":99,"update_available":false}),
stringify({"state":"ON","brightness":50,"color_temp":370,"linkquality":99,"update":{"state":"idle"},"update_available":false}),
{ retain: true, qos: 0 },
expect.any(Function)
);
expect(MQTT.publish).toHaveBeenCalledWith(
'zigbee2mqtt/remote',
stringify({"brightness":255,"update_available":false}),
stringify({"brightness":255,"update_available":false,"update":{"state":"idle"}}),
{ retain: true, qos: 0 },
expect.any(Function)
);
@@ -823,13 +821,13 @@ describe('HomeAssistant extension', () => {
await flushPromises();
expect(MQTT.publish).toHaveBeenCalledWith(
'zigbee2mqtt/bulb',
stringify({"state":"ON","brightness":50,"color_temp":370,"linkquality":99,"update_available":false}),
stringify({"state":"ON","brightness":50,"color_temp":370,"linkquality":99,"update_available":false,"update":{"state":"idle"}}),
{ retain: true, qos: 0 },
expect.any(Function)
);
expect(MQTT.publish).toHaveBeenCalledWith(
'zigbee2mqtt/remote',
stringify({"brightness":255,"update_available":false}),
stringify({"brightness":255,"update_available":false,"update":{"state":"idle"}}),
{ retain: true, qos: 0 },
expect.any(Function)
);
@@ -948,7 +946,6 @@ describe('HomeAssistant extension', () => {
});
it('Should refresh discovery when device is renamed', async () => {
settings.set(['experimental', 'new_api'], true);
controller = new Controller(false);
await controller.start();
await flushPromises();
@@ -1014,7 +1011,6 @@ describe('HomeAssistant extension', () => {
});
it('Shouldnt refresh discovery when device is renamed and homeassistant_rename is false', async () => {
settings.set(['experimental', 'new_api'], true);
controller = new Controller(false);
await controller.start();
await flushPromises();
-1
View File
@@ -31,7 +31,6 @@ describe('Networkmap', () => {
data.writeEmptyState();
fs.copyFileSync(path.join(__dirname, 'assets', 'mock-external-converter.js'), path.join(data.mockDir, 'mock-external-converter.js'));
settings.set(['external_converters'], ['mock-external-converter.js']);
settings.set(['experimental', 'new_api'], true);
controller = new Controller();
await controller.start();
mocksClear.forEach((m) => m.mockClear());
-1
View File
@@ -19,7 +19,6 @@ describe('OTA update', () => {
beforeEach(async () => {
data.writeDefaultConfiguration();
settings._reRead();
settings.set(['experimental', 'new_api'], true);
data.writeEmptyState();
controller = new Controller();
await controller.start();