fix: Write ZIGBEE2MQTT_CONFIG_* envs to yaml as overrides (#26653)

This commit is contained in:
Nerivec
2025-03-08 14:32:52 +01:00
committed by GitHub
parent 1b6ad46462
commit f6f7ba68c9
3 changed files with 21 additions and 14 deletions
+1
View File
@@ -135,6 +135,7 @@ async function start() {
// Validate settings
const settings = require('./dist/util/settings');
settings.write(); // trigger initial writing of `ZIGBEE2MQTT_CONFIG_*` ENVs
settings.reRead();
const settingsMigration = require('./dist/util/settingsMigration');
+3 -2
View File
@@ -146,10 +146,12 @@ function parseValueRef(text: string): {filename: string; key: string} | null {
}
}
function write(): void {
export function write(): void {
const settings = getPersistedSettings();
const toWrite: KeyValue = objectAssignDeep({}, settings);
applyEnvironmentVariables(toWrite);
// Read settings to check if we have to split devices/groups into separate file.
const actual = yaml.read(CONFIG_FILE_PATH);
@@ -277,7 +279,6 @@ export function validate(): string[] {
function read(): Partial<Settings> {
const s = yaml.read(CONFIG_FILE_PATH) as Partial<Settings>;
applyEnvironmentVariables(s);
// Read !secret MQTT username and password if set
const interpretValue = <T>(value: T): T => {
+17 -12
View File
@@ -38,7 +38,7 @@ describe('Settings', () => {
const clearEnvironmentVariables = (): void => {
for (const key in process.env) {
if (key.indexOf('ZIGBEE2MQTT_CONFIG_') >= 0) {
if (key.startsWith('ZIGBEE2MQTT_CONFIG_')) {
delete process.env[key];
}
}
@@ -104,17 +104,16 @@ describe('Settings', () => {
expect(s).toStrictEqual(expected);
});
it('Should apply environment variables', () => {
process.env['ZIGBEE2MQTT_CONFIG_SERIAL_DISABLE_LED'] = 'true';
process.env['ZIGBEE2MQTT_CONFIG_ADVANCED_CHANNEL'] = '15';
process.env['ZIGBEE2MQTT_CONFIG_ADVANCED_OUTPUT'] = 'attribute_and_json';
process.env['ZIGBEE2MQTT_CONFIG_ADVANCED_LOG_OUTPUT'] = '["console"]';
process.env['ZIGBEE2MQTT_CONFIG_MAP_OPTIONS_GRAPHVIZ_COLORS_FILL'] =
'{"enddevice": "#ff0000", "coordinator": "#00ff00", "router": "#0000ff"}';
process.env['ZIGBEE2MQTT_CONFIG_MQTT_BASE_TOPIC'] = 'testtopic';
process.env['ZIGBEE2MQTT_CONFIG_MQTT_SERVER'] = 'testserver';
process.env['ZIGBEE2MQTT_CONFIG_ADVANCED_NETWORK_KEY'] = 'GENERATE';
process.env['ZIGBEE2MQTT_CONFIG_DEVICES'] = 'devices.yaml';
it('Should apply environment variables as overrides', () => {
process.env.ZIGBEE2MQTT_CONFIG_SERIAL_DISABLE_LED = 'true';
process.env.ZIGBEE2MQTT_CONFIG_ADVANCED_CHANNEL = '15';
process.env.ZIGBEE2MQTT_CONFIG_ADVANCED_OUTPUT = 'attribute_and_json';
process.env.ZIGBEE2MQTT_CONFIG_ADVANCED_LOG_OUTPUT = '["console"]';
process.env.ZIGBEE2MQTT_CONFIG_MAP_OPTIONS_GRAPHVIZ_COLORS_FILL = '{"enddevice": "#ff0000", "coordinator": "#00ff00", "router": "#0000ff"}';
process.env.ZIGBEE2MQTT_CONFIG_MQTT_BASE_TOPIC = 'testtopic';
process.env.ZIGBEE2MQTT_CONFIG_MQTT_SERVER = 'testserver';
process.env.ZIGBEE2MQTT_CONFIG_ADVANCED_NETWORK_KEY = 'GENERATE';
process.env.ZIGBEE2MQTT_CONFIG_DEVICES = 'devices.yaml';
const contentDevices = {
'0x00158d00018255df': {
@@ -125,6 +124,7 @@ describe('Settings', () => {
write(configurationFile, {});
write(devicesFile, contentDevices);
expect(settings.write()); // trigger writing of ENVs
expect(settings.validate()).toStrictEqual([]);
const s = settings.get();
@@ -147,6 +147,11 @@ describe('Settings', () => {
expected.advanced.network_key = 'GENERATE';
expect(s).toStrictEqual(expected);
settings.set(['advanced', 'channel'], 25);
expect(settings.get().advanced.channel).toStrictEqual(15);
expect(read(configurationFile)).toMatchObject({advanced: {channel: 15}});
});
it('Should add devices', () => {