mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-07-09 21:41:41 +00:00
4210edf60e
* Added function to override payloads for non-conforming devices * override implementation for Bosch BTH-RA * unit test including mockup for this device * Experimental and broken integration of overrideHaConfig * Not working experiments; mqtt publish debug output * fixes * Updates * fix --------- Co-authored-by: Koen Kanters <koenkanters94@gmail.com>
303 lines
8.8 KiB
JavaScript
303 lines
8.8 KiB
JavaScript
const tmp = require('tmp');
|
|
const yaml = require('../../lib/util/yaml').default;
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const stringify = require('json-stable-stringify-without-jsonify');
|
|
|
|
const mockDir = tmp.dirSync().name;
|
|
const stateFile = path.join(mockDir, 'state.json');
|
|
|
|
function writeDefaultConfiguration() {
|
|
const config = {
|
|
homeassistant: false,
|
|
permit_join: true,
|
|
mqtt: {
|
|
base_topic: 'zigbee2mqtt',
|
|
server: 'mqtt://localhost',
|
|
},
|
|
serial: {
|
|
port: '/dev/dummy',
|
|
},
|
|
devices: {
|
|
'0x18fc2600000d7ae2': {
|
|
friendly_name: 'bosch_radiator',
|
|
},
|
|
'0x000b57fffec6a5b2': {
|
|
retain: true,
|
|
friendly_name: 'bulb',
|
|
description: 'this is my bulb',
|
|
},
|
|
'0x0017880104e45517': {
|
|
retain: true,
|
|
friendly_name: 'remote',
|
|
},
|
|
'0x0017880104e45520': {
|
|
retain: false,
|
|
friendly_name: 'button',
|
|
},
|
|
'0x0017880104e45521': {
|
|
retain: false,
|
|
friendly_name: 'button_double_key',
|
|
},
|
|
'0x0017880104e45522': {
|
|
qos: 1,
|
|
retain: false,
|
|
friendly_name: 'weather_sensor',
|
|
},
|
|
'0x0017880104e45523': {
|
|
retain: false,
|
|
friendly_name: 'occupancy_sensor',
|
|
},
|
|
'0x0017880104e45524': {
|
|
retain: false,
|
|
friendly_name: 'power_plug',
|
|
},
|
|
'0x0017880104e45530': {
|
|
retain: false,
|
|
friendly_name: 'button_double_key_interviewing',
|
|
},
|
|
'0x0017880104e45540': {
|
|
friendly_name: 'ikea_onoff',
|
|
},
|
|
'0x000b57fffec6a5b7': {
|
|
retain: false,
|
|
friendly_name: 'bulb_2',
|
|
},
|
|
'0x000b57fffec6a5b3': {
|
|
retain: false,
|
|
friendly_name: 'bulb_color',
|
|
},
|
|
'0x000b57fffec6a5b4': {
|
|
retain: false,
|
|
friendly_name: 'bulb_color_2',
|
|
},
|
|
'0x0017880104e45541': {
|
|
retain: false,
|
|
friendly_name: 'wall_switch',
|
|
},
|
|
'0x0017880104e45542': {
|
|
retain: false,
|
|
friendly_name: 'wall_switch_double',
|
|
},
|
|
'0x0017880104e45543': {
|
|
retain: false,
|
|
friendly_name: 'led_controller_1',
|
|
},
|
|
'0x0017880104e45544': {
|
|
retain: false,
|
|
friendly_name: 'led_controller_2',
|
|
},
|
|
'0x0017880104e45545': {
|
|
retain: false,
|
|
friendly_name: 'dimmer_wall_switch',
|
|
},
|
|
'0x0017880104e45547': {
|
|
retain: false,
|
|
friendly_name: 'curtain',
|
|
},
|
|
'0x0017880104e45548': {
|
|
retain: false,
|
|
friendly_name: 'fan',
|
|
},
|
|
'0x0017880104e45549': {
|
|
retain: false,
|
|
friendly_name: 'siren',
|
|
},
|
|
'0x0017880104e45529': {
|
|
retain: false,
|
|
friendly_name: 'unsupported2',
|
|
},
|
|
'0x0017880104e45550': {
|
|
retain: false,
|
|
friendly_name: 'thermostat',
|
|
},
|
|
'0x0017880104e45551': {
|
|
retain: false,
|
|
friendly_name: 'smart vent',
|
|
},
|
|
'0x0017880104e45552': {
|
|
retain: false,
|
|
friendly_name: 'j1',
|
|
},
|
|
'0x0017880104e45553': {
|
|
retain: false,
|
|
friendly_name: 'bulb_enddevice',
|
|
},
|
|
'0x0017880104e45559': {
|
|
retain: false,
|
|
friendly_name: 'cc2530_router',
|
|
},
|
|
'0x0017880104e45560': {
|
|
retain: false,
|
|
friendly_name: 'livolo',
|
|
},
|
|
'0x90fd9ffffe4b64ae': {
|
|
retain: false,
|
|
friendly_name: 'tradfri_remote',
|
|
},
|
|
'0x90fd9ffffe4b64af': {
|
|
friendly_name: 'roller_shutter',
|
|
},
|
|
'0x90fd9ffffe4b64ax': {
|
|
friendly_name: 'ZNLDP12LM',
|
|
},
|
|
'0x90fd9ffffe4b64aa': {
|
|
friendly_name: 'SP600_OLD',
|
|
},
|
|
'0x90fd9ffffe4b64ab': {
|
|
friendly_name: 'SP600_NEW',
|
|
},
|
|
'0x90fd9ffffe4b64ac': {
|
|
friendly_name: 'MKS-CM-W5',
|
|
},
|
|
'0x0017880104e45526': {
|
|
friendly_name: 'GL-S-007ZS',
|
|
},
|
|
'0x0017880104e43559': {
|
|
friendly_name: 'U202DST600ZB',
|
|
},
|
|
'0xf4ce368a38be56a1': {
|
|
retain: false,
|
|
friendly_name: 'zigfred_plus',
|
|
front_surface_enabled: 'true',
|
|
dimmer_1_enabled: 'true',
|
|
dimmer_1_dimming_enabled: 'true',
|
|
dimmer_2_enabled: 'true',
|
|
dimmer_2_dimming_enabled: 'true',
|
|
dimmer_3_enabled: 'true',
|
|
dimmer_3_dimming_enabled: 'true',
|
|
dimmer_4_enabled: 'true',
|
|
dimmer_4_dimming_enabled: 'true',
|
|
cover_1_enabled: 'true',
|
|
cover_1_tilt_enabled: 'true',
|
|
cover_2_enabled: 'true',
|
|
cover_2_tilt_enabled: 'true',
|
|
},
|
|
'0x0017880104e44559': {
|
|
friendly_name: '3157100_thermostat',
|
|
},
|
|
'0x0017880104a44559': {
|
|
friendly_name: 'J1_cover',
|
|
},
|
|
'0x0017882104a44559': {
|
|
friendly_name: 'TS0601_thermostat',
|
|
},
|
|
'0x0017882104a44560': {
|
|
friendly_name: 'TS0601_switch',
|
|
},
|
|
'0x0017882104a44562': {
|
|
friendly_name: 'TS0601_cover_switch',
|
|
},
|
|
'0x0017882194e45543': {
|
|
friendly_name: 'QS-Zigbee-D02-TRIAC-2C-LN',
|
|
},
|
|
'0x0017880104e45724': {
|
|
friendly_name: 'GLEDOPTO_2ID',
|
|
},
|
|
'0x0017880104e45561': {
|
|
friendly_name: 'temperature_sensor',
|
|
},
|
|
'0x0017880104e45562': {
|
|
friendly_name: 'heating_actuator',
|
|
},
|
|
},
|
|
groups: {
|
|
1: {
|
|
friendly_name: 'group_1',
|
|
retain: false,
|
|
},
|
|
2: {
|
|
friendly_name: 'group_2',
|
|
retain: false,
|
|
},
|
|
15071: {
|
|
friendly_name: 'group_tradfri_remote',
|
|
retain: false,
|
|
devices: ['bulb_color_2', 'bulb_2'],
|
|
},
|
|
11: {
|
|
friendly_name: 'group_with_tradfri',
|
|
retain: false,
|
|
devices: ['bulb_2'],
|
|
},
|
|
12: {
|
|
friendly_name: 'thermostat_group',
|
|
retain: false,
|
|
devices: ['TS0601_thermostat'],
|
|
},
|
|
14: {
|
|
friendly_name: 'switch_group',
|
|
retain: false,
|
|
devices: ['power_plug', 'bulb_2'],
|
|
},
|
|
21: {
|
|
friendly_name: 'gledopto_group',
|
|
devices: ['GLEDOPTO_2ID/cct'],
|
|
},
|
|
9: {
|
|
friendly_name: 'ha_discovery_group',
|
|
devices: ['bulb_color_2', 'bulb_2', 'wall_switch_double/right'],
|
|
},
|
|
},
|
|
external_converters: [],
|
|
};
|
|
|
|
yaml.writeIfChanged(path.join(mockDir, 'configuration.yaml'), config);
|
|
}
|
|
|
|
function writeEmptyState() {
|
|
fs.writeFileSync(stateFile, stringify({}));
|
|
}
|
|
|
|
function removeState() {
|
|
if (stateExists()) {
|
|
fs.unlinkSync(stateFile);
|
|
}
|
|
}
|
|
|
|
function stateExists() {
|
|
return fs.existsSync(stateFile);
|
|
}
|
|
|
|
const defaultState = {
|
|
'0x000b57fffec6a5b2': {
|
|
state: 'ON',
|
|
brightness: 50,
|
|
color_temp: 370,
|
|
linkquality: 99,
|
|
},
|
|
'0x0017880104e45517': {
|
|
brightness: 255,
|
|
},
|
|
1: {
|
|
state: 'ON',
|
|
},
|
|
};
|
|
|
|
function getDefaultState() {
|
|
return defaultState;
|
|
}
|
|
|
|
function writeDefaultState() {
|
|
fs.writeFileSync(path.join(mockDir, 'state.json'), stringify(defaultState));
|
|
}
|
|
|
|
jest.mock('../../lib/util/data', () => ({
|
|
joinPath: (file) => require('path').join(mockDir, file),
|
|
getPath: () => mockDir,
|
|
}));
|
|
|
|
writeDefaultConfiguration();
|
|
writeDefaultState();
|
|
|
|
module.exports = {
|
|
mockDir,
|
|
read: () => yaml.read(path.join(mockDir, 'configuration.yaml')),
|
|
writeDefaultConfiguration,
|
|
writeDefaultState,
|
|
removeState,
|
|
writeEmptyState,
|
|
stateExists,
|
|
getDefaultState,
|
|
};
|