From 54a481f459098494c907221f6e1cd1dbea261489 Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Mon, 26 Jan 2026 11:19:49 +1100 Subject: [PATCH] FE+BE+DOCS: lock fields, devVlan not saveable Signed-off-by: jokob-sk --- ...RENCE_FIELD_LOCK.md => DEVICE_FIELD_LOCK.md} | 4 +++- docs/DEVICE_MANAGEMENT.md | 4 +++- .../field_sources_and_locks.png | Bin 0 -> 44970 bytes front/deviceDetailsEdit.php | 7 +++++++ front/php/templates/language/ar_ar.json | 3 ++- front/php/templates/language/ca_ca.json | 3 ++- front/php/templates/language/cs_cz.json | 1 + front/php/templates/language/de_de.json | 3 ++- front/php/templates/language/en_us.json | 1 + front/php/templates/language/es_es.json | 3 ++- front/php/templates/language/fa_fa.json | 1 + front/php/templates/language/fr_fr.json | 3 ++- front/php/templates/language/it_it.json | 3 ++- front/php/templates/language/ja_jp.json | 3 ++- front/php/templates/language/nb_no.json | 3 ++- front/php/templates/language/pl_pl.json | 3 ++- front/php/templates/language/pt_br.json | 3 ++- front/php/templates/language/pt_pt.json | 3 ++- front/php/templates/language/ru_ru.json | 3 ++- front/php/templates/language/sv_sv.json | 1 + front/php/templates/language/tr_tr.json | 3 ++- front/php/templates/language/uk_ua.json | 3 ++- front/php/templates/language/zh_cn.json | 3 ++- mkdocs.yml | 2 +- server/models/device_instance.py | 14 +++++++++----- .../FIELD_LOCK_TEST_SUMMARY.md | 12 ++++++------ 26 files changed, 63 insertions(+), 29 deletions(-) rename docs/{QUICK_REFERENCE_FIELD_LOCK.md => DEVICE_FIELD_LOCK.md} (98%) create mode 100644 docs/img/DEVICE_MANAGEMENT/field_sources_and_locks.png diff --git a/docs/QUICK_REFERENCE_FIELD_LOCK.md b/docs/DEVICE_FIELD_LOCK.md similarity index 98% rename from docs/QUICK_REFERENCE_FIELD_LOCK.md rename to docs/DEVICE_FIELD_LOCK.md index fb68cc63..2b40f80f 100644 --- a/docs/QUICK_REFERENCE_FIELD_LOCK.md +++ b/docs/DEVICE_FIELD_LOCK.md @@ -1,6 +1,8 @@ # Quick Reference Guide - Device Field Lock/Unlock System -## One-Minute Overview +## Overview + +![Field source and locks](./img/DEVICE_MANAGEMENT/field_sources_and_locks.png) The device field lock/unlock system allows you to protect specific device fields from being automatically overwritten by scanning plugins. When you lock a field, NetAlertX remembers your choice and prevents plugins from changing that value until you unlock it. diff --git a/docs/DEVICE_MANAGEMENT.md b/docs/DEVICE_MANAGEMENT.md index d1c66347..9d320bcf 100755 --- a/docs/DEVICE_MANAGEMENT.md +++ b/docs/DEVICE_MANAGEMENT.md @@ -49,6 +49,8 @@ To speed up device population you can also copy data from an existing device. Th ## Field Locking (Preventing Plugin Overwrites) +![Field source and locks](./img/DEVICE_MANAGEMENT/field_sources_and_locks.png) + NetAlertX allows you to "lock" specific device fields to prevent plugins from automatically overwriting your custom values. This is useful when you've manually corrected information that might be discovered differently by discovery plugins. ### Quick Start @@ -64,7 +66,7 @@ The following 10 fields support locking: ### See Also -- **For Users:** [Quick Reference - Device Field Lock/Unlock](QUICK_REFERENCE_FIELD_LOCK.md) - How to use field locking +- **For Users:** [Quick Reference - Device Field Lock/Unlock](DEVICE_FIELD_LOCK.md) - How to use field locking - **For Developers:** [API Device Field Lock Documentation](API_DEVICE_FIELD_LOCK.md) - Technical API reference - **For Plugin Developers:** [Plugin Field Configuration (SET_ALWAYS/SET_EMPTY)](PLUGINS_DEV_CONFIG.md) - Configure which fields plugins can update diff --git a/docs/img/DEVICE_MANAGEMENT/field_sources_and_locks.png b/docs/img/DEVICE_MANAGEMENT/field_sources_and_locks.png new file mode 100644 index 0000000000000000000000000000000000000000..4b4b4b144d73ae38124826a3c5cf30634bd87ad7 GIT binary patch literal 44970 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
    XwAs1Jttbo_W#KV^ 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 l8لم يتم إجراء التحقق.", "test_event_tooltip": "احفظ التغييرات أولاً قبل اختبار الإعدادات." -} +} \ No newline at end of file diff --git a/front/php/templates/language/ca_ca.json b/front/php/templates/language/ca_ca.json index dad26da4..88de31f2 100644 --- a/front/php/templates/language/ca_ca.json +++ b/front/php/templates/language/ca_ca.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "Sistema", "settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. No hi ha validació.", "test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració." -} +} \ No newline at end of file diff --git a/front/php/templates/language/cs_cz.json b/front/php/templates/language/cs_cz.json index 73c1e2d6..5bad90f8 100644 --- a/front/php/templates/language/cs_cz.json +++ b/front/php/templates/language/cs_cz.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", diff --git a/front/php/templates/language/de_de.json b/front/php/templates/language/de_de.json index d1a3a956..28c3e3af 100644 --- a/front/php/templates/language/de_de.json +++ b/front/php/templates/language/de_de.json @@ -304,6 +304,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -855,4 +856,4 @@ "settings_system_label": "System", "settings_update_item_warning": "", "test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen." -} +} \ No newline at end of file diff --git a/front/php/templates/language/en_us.json b/front/php/templates/language/en_us.json index 939e221e..30141a60 100755 --- a/front/php/templates/language/en_us.json +++ b/front/php/templates/language/en_us.json @@ -300,6 +300,7 @@ "FieldLock_Error": "Error updating field lock status", "FieldLock_Lock_Tooltip": "Lock field (prevent plugin overwrites)", "FieldLock_Locked": "Field locked", + "FieldLock_SaveBeforeLocking": "Save your changes before locking", "FieldLock_Source_Label": "Source: ", "FieldLock_Unlock_Tooltip": "Unlock field (allow plugin overwrites)", "FieldLock_Unlocked": "Field unlocked", diff --git a/front/php/templates/language/es_es.json b/front/php/templates/language/es_es.json index cfee0477..58f3627b 100644 --- a/front/php/templates/language/es_es.json +++ b/front/php/templates/language/es_es.json @@ -302,6 +302,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -853,4 +854,4 @@ "settings_system_label": "Sistema", "settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. O la validación no se realiza.", "test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes." -} +} \ No newline at end of file diff --git a/front/php/templates/language/fa_fa.json b/front/php/templates/language/fa_fa.json index d9e81669..8fe5e7be 100644 --- a/front/php/templates/language/fa_fa.json +++ b/front/php/templates/language/fa_fa.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", diff --git a/front/php/templates/language/fr_fr.json b/front/php/templates/language/fr_fr.json index 69bc9613..cba1e807 100644 --- a/front/php/templates/language/fr_fr.json +++ b/front/php/templates/language/fr_fr.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "Système", "settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. Il n'y a pas de pas de contrôle.", "test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage." -} +} \ No newline at end of file diff --git a/front/php/templates/language/it_it.json b/front/php/templates/language/it_it.json index a45cf7b5..55f9394f 100644 --- a/front/php/templates/language/it_it.json +++ b/front/php/templates/language/it_it.json @@ -300,6 +300,7 @@ "FieldLock_Error": "Errore durante l'aggiornamento dello stato di blocco del campo", "FieldLock_Lock_Tooltip": "Blocca campo (impedisci sovrascrittura plugin)", "FieldLock_Locked": "Campo bloccato", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "Sorgente: ", "FieldLock_Unlock_Tooltip": "Sblocca campo (consenti sovrascritture plugin)", "FieldLock_Unlocked": "Campo sbloccato", @@ -782,4 +783,4 @@ "settings_system_label": "Sistema", "settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. La convalida non viene eseguita.", "test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni." -} +} \ No newline at end of file diff --git a/front/php/templates/language/ja_jp.json b/front/php/templates/language/ja_jp.json index 97ecb6b0..f9578a10 100644 --- a/front/php/templates/language/ja_jp.json +++ b/front/php/templates/language/ja_jp.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "システム", "settings_update_item_warning": "以下の値を更新してください。以前のフォーマットに従うよう注意してください。検証は行われません。", "test_event_tooltip": "設定をテストする前に、まず変更を保存してください。" -} +} \ No newline at end of file diff --git a/front/php/templates/language/nb_no.json b/front/php/templates/language/nb_no.json index fa27089e..70db7f9b 100644 --- a/front/php/templates/language/nb_no.json +++ b/front/php/templates/language/nb_no.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "System", "settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. Validering etterpå utføres ikke.", "test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine." -} +} \ No newline at end of file diff --git a/front/php/templates/language/pl_pl.json b/front/php/templates/language/pl_pl.json index fb4177b3..e0a6d3fd 100644 --- a/front/php/templates/language/pl_pl.json +++ b/front/php/templates/language/pl_pl.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "System", "settings_update_item_warning": "Zaktualizuj wartość poniżej. Uważaj, aby zachować poprzedni format. Walidacja nie jest wykonywana.", "test_event_tooltip": "Najpierw zapisz swoje zmiany, zanim przetestujesz ustawienia." -} +} \ No newline at end of file diff --git a/front/php/templates/language/pt_br.json b/front/php/templates/language/pt_br.json index 3940a27c..64569cdd 100644 --- a/front/php/templates/language/pt_br.json +++ b/front/php/templates/language/pt_br.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "", "settings_update_item_warning": "", "test_event_tooltip": "Guarde as alterações antes de testar as definições." -} +} \ No newline at end of file diff --git a/front/php/templates/language/pt_pt.json b/front/php/templates/language/pt_pt.json index 484202f1..c3ad2246 100644 --- a/front/php/templates/language/pt_pt.json +++ b/front/php/templates/language/pt_pt.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "", "settings_update_item_warning": "", "test_event_tooltip": "Guarde as alterações antes de testar as definições." -} +} \ No newline at end of file diff --git a/front/php/templates/language/ru_ru.json b/front/php/templates/language/ru_ru.json index 760940ce..4ca53a1b 100644 --- a/front/php/templates/language/ru_ru.json +++ b/front/php/templates/language/ru_ru.json @@ -300,6 +300,7 @@ "FieldLock_Error": "Ошибка при обновлении статуса блокировки поля", "FieldLock_Lock_Tooltip": "Заблокировать поле (предотвратить перезапись плагином)", "FieldLock_Locked": "Поле заблокировано", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "Источник: ", "FieldLock_Unlock_Tooltip": "Разблокировать поле (разрешить перезапись плагином)", "FieldLock_Unlocked": "Поле разблокировано", @@ -782,4 +783,4 @@ "settings_system_label": "Система", "settings_update_item_warning": "Обновить значение ниже. Будьте осторожны, следуя предыдущему формату. Проверка не выполняется.", "test_event_tooltip": "Сначала сохраните изменения, прежде чем проверять настройки." -} +} \ No newline at end of file diff --git a/front/php/templates/language/sv_sv.json b/front/php/templates/language/sv_sv.json index 642ec17a..f76e6729 100644 --- a/front/php/templates/language/sv_sv.json +++ b/front/php/templates/language/sv_sv.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", diff --git a/front/php/templates/language/tr_tr.json b/front/php/templates/language/tr_tr.json index 13075929..27eeb177 100644 --- a/front/php/templates/language/tr_tr.json +++ b/front/php/templates/language/tr_tr.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "Sistem", "settings_update_item_warning": "", "test_event_tooltip": "" -} +} \ No newline at end of file diff --git a/front/php/templates/language/uk_ua.json b/front/php/templates/language/uk_ua.json index 217fe969..92e799c5 100644 --- a/front/php/templates/language/uk_ua.json +++ b/front/php/templates/language/uk_ua.json @@ -300,6 +300,7 @@ "FieldLock_Error": "Помилка оновлення стану блокування поля", "FieldLock_Lock_Tooltip": "Заблокувати поле (запобігти перезапису плагіном)", "FieldLock_Locked": "Поле заблоковано", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "Джерело: ", "FieldLock_Unlock_Tooltip": "Поле розблокування (дозволити перезапис плагіна)", "FieldLock_Unlocked": "Поле розблоковано", @@ -782,4 +783,4 @@ "settings_system_label": "Система", "settings_update_item_warning": "Оновіть значення нижче. Слідкуйте за попереднім форматом. Перевірка не виконана.", "test_event_tooltip": "Перш ніж перевіряти налаштування, збережіть зміни." -} +} \ No newline at end of file diff --git a/front/php/templates/language/zh_cn.json b/front/php/templates/language/zh_cn.json index 914df988..7e27c3d8 100644 --- a/front/php/templates/language/zh_cn.json +++ b/front/php/templates/language/zh_cn.json @@ -300,6 +300,7 @@ "FieldLock_Error": "", "FieldLock_Lock_Tooltip": "", "FieldLock_Locked": "", + "FieldLock_SaveBeforeLocking": "", "FieldLock_Source_Label": "", "FieldLock_Unlock_Tooltip": "", "FieldLock_Unlocked": "", @@ -782,4 +783,4 @@ "settings_system_label": "系统", "settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。未执行验证。", "test_event_tooltip": "在测试设置之前,请先保存更改。" -} +} \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 62ef64e0..8bd37bb1 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -76,7 +76,7 @@ nav: - Custom Properties: CUSTOM_PROPERTIES.md - Device Display Settings: DEVICE_DISPLAY_SETTINGS.md - Session Info: SESSION_INFO.md - - Field Lock/Unlock: QUICK_REFERENCE_FIELD_LOCK.md + - Field Lock/Unlock: DEVICE_FIELD_LOCK.md - Icons and Topology: - Icons: ICONS.md - Network Topology: NETWORK_TREE.md diff --git a/server/models/device_instance.py b/server/models/device_instance.py index 3b243a74..6037ab7f 100755 --- a/server/models/device_instance.py +++ b/server/models/device_instance.py @@ -429,7 +429,8 @@ class DeviceInstance: "devDownAlerts": 0, "devPresenceHours": 0, "devFQDN": "", - "devForceStatus" : "dont_force" + "devForceStatus" : "dont_force", + "devVlan": "" } return device_data @@ -536,7 +537,8 @@ class DeviceInstance: "devIsNew", "devIsArchived", "devCustomProps", - "devForceStatus" + "devForceStatus", + "devVlan" } # Only mark USER for tracked fields that this method actually updates. @@ -586,8 +588,8 @@ class DeviceInstance: devParentRelType, devReqNicsOnline, devSkipRepeated, devIsNew, devIsArchived, devLastConnection, devFirstConnection, devLastIP, devGUID, devCustomProps, - devSourcePlugin, devForceStatus - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + devSourcePlugin, devForceStatus, devVlan + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ values = ( @@ -621,6 +623,7 @@ class DeviceInstance: data.get("devCustomProps") or "", data.get("devSourcePlugin") or "DUMMY", data.get("devForceStatus") or "dont_force", + data.get("devVlan") or "", ) else: @@ -631,7 +634,7 @@ class DeviceInstance: devParentMAC=?, devParentPort=?, devSSID=?, devSite=?, devStaticIP=?, devScan=?, devAlertEvents=?, devAlertDown=?, devParentRelType=?, devReqNicsOnline=?, devSkipRepeated=?, - devIsNew=?, devIsArchived=?, devCustomProps=?, devForceStatus=? + devIsNew=?, devIsArchived=?, devCustomProps=?, devForceStatus=?, devVlan=? WHERE devMac=? """ values = ( @@ -659,6 +662,7 @@ class DeviceInstance: data.get("devIsArchived") or 0, data.get("devCustomProps") or "", data.get("devForceStatus") or "dont_force", + data.get("devVlan") or "", normalized_mac, ) diff --git a/test/authoritative_fields/FIELD_LOCK_TEST_SUMMARY.md b/test/authoritative_fields/FIELD_LOCK_TEST_SUMMARY.md index 2259f5fa..3adcbdb6 100644 --- a/test/authoritative_fields/FIELD_LOCK_TEST_SUMMARY.md +++ b/test/authoritative_fields/FIELD_LOCK_TEST_SUMMARY.md @@ -165,20 +165,20 @@ def test_scenario(): ```python def test_scan_scenario(scan_db, mock_device_handlers): cur = scan_db.cursor() - + # Insert device with specific source cur.execute("INSERT INTO Devices ...") - + # Insert scan results cur.execute("INSERT INTO CurrentScan ...") scan_db.commit() - + # Run actual scan update db = Mock() db.sql_connection = scan_db db.sql = cur device_handling.update_devices_data_from_scan(db) - + # Verify results row = cur.execute("SELECT ... FROM Devices") assert row["field"] == "expected_value" @@ -246,7 +246,7 @@ All 10 lockable fields tested: 5. **Rule 5 (Default):** If current_source is empty/"NEWDEV" → Return `True`, else → Return `False` - Default behavior: only overwrite empty/unset fields -**Key Principles:** +**Key Principles:** - **USER and LOCKED** = Absolute protection (cannot be overwritten, even with SET_ALWAYS) - **SET_ALWAYS** = Allow overwrite of: own fields, other plugin fields, empty current values, NEWDEV fields - **SET_EMPTY** = "Set only if empty" - fills empty fields only, won't overwrite existing plugin data @@ -257,7 +257,7 @@ All 10 lockable fields tested: ## Related Documentation -- **User Guide:** [QUICK_REFERENCE_FIELD_LOCK.md](../../docs/QUICK_REFERENCE_FIELD_LOCK.md) - User-friendly field locking instructions +- **User Guide:** [DEVICE_FIELD_LOCK.md](../../docs/DEVICE_FIELD_LOCK.md) - User-friendly field locking instructions - **API Documentation:** [API_DEVICE_FIELD_LOCK.md](../../docs/API_DEVICE_FIELD_LOCK.md) - Endpoint documentation - **Plugin Configuration:** [PLUGINS_DEV_CONFIG.md](../../docs/PLUGINS_DEV_CONFIG.md) - SET_ALWAYS/SET_EMPTY configuration guide - **Device Management:** [DEVICE_MANAGEMENT.md](../../docs/DEVICE_MANAGEMENT.md) - Device management admin guide