mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-08-06 19:00:13 +00:00
fix: Write ZIGBEE2MQTT_CONFIG_* envs to yaml as overrides (#26653)
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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
@@ -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', () => {
|
||||
|
||||
Reference in New Issue
Block a user