Пользовательские регистры модулей устройств

Предлагаю выделить во внешних модулях область памяти под десяток регистров (HR) с возможностью записи/чтения. Задокументировать данную возможность в Wiki.
В частности такие регистры были необходимы при организации термостатов на WB-M1W2, для того, чтобы сохранять уставки температур.

Такая организация взаимодействия отличает от создания и связывания с виртуальными устройствами в случае, если есть необходимость тиражирования в системах от 10 однотипных устройств.

Аналогично, для WB-MSW v3

Это же сделано к примеру в WB-MR, когда имеется регистр счета нажатий!

Регистры того же WB-MDM3 можно было бы предоставить и для других “привязанных” значений типового использования

  • последнее значение яркости

  • уставка яркости для режимов “День/Ночь”
    и т.п.

  1. Я правильно понял, что эти значения - они в некотором смысле “внешние” для физических устройств? То есть самостоятельно WB-M1W2 не должен на них никак реагировать?
  2. Где эти значения предлагается хранить? В регистрах WB-M1W2 или на контроллере (условно, как в виртуальном устройстве, но сильнее связанном с WB-M1W2, чем сейчас)?

Это не очень понял. WB-MR же как раз сам считает и выдаёт в своих регистрах, мы просто выводим оттуда значение, как и любое другое значение из Modbus-регистра.

Ещё опишите, пожалуйста, в целом задачу, не спускаясь на уровень возможного решения. То есть в формате: “Есть здание, в нём 10 помещений, в каждом обогреватель через реле и нужно организовать функционал термостата. Сейчас это приходится реализовывать так, а хотелось бы вот так”

  1. Хранимые значения для внешнего пользования
  2. Хранить предполагается в регистрах WB-M1W2
    Про “счетчик нажатий” да, не совсем близкий пример.

Для меня типовая задача на примере АСУ обогрева школы, где 50+ WB-M1W2:

  • данные забираются с Internal Temperature 1 и 2 (для своих зон)
  • сверяются с Уставкой 1 и Уставкой 2 (для своих зон)
  • Уставка может быть Дневной и Ночной

Сейчас, чтобы не плодить 100+ виртуальных девайсов, есть .json в котором записаны уставки и привязки к управляемым модулям реле

Пример для одного этажа из четырех

{
“highHysteresis”: 0.3,
“lowHysteresis”: 0.3,
“rooms”: [
{
“groupN”: 1,
“heaters”: 1,
“phase”: 2,
“relay”: “01R01/K1”,
“roomN”: 2,
“roomName”: “Коридор”,
“sensor”: “A01/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 2,
“heaters”: 2,
“phase”: 2,
“relay”: “01R01/K2”,
“roomN”: 3,
“roomName”: “Раздевалка”,
“sensor”: “A01/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 3,
“heaters”: 5,
“phase”: 1,
“relay”: “01R01/K3”,
“roomN”: 4,
“roomName”: “Слесарная”,
“sensor”: “A02/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 4,
“heaters”: 6,
“phase”: 3,
“relay”: “01R02/K1”,
“roomN”: 4,
“roomName”: “Слесарная”,
“sensor”: “A02/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 5,
“heaters”: 1,
“phase”: 1,
“relay”: “01R02/K2”,
“roomN”: 5,
“roomName”: “Коридор”,
“sensor”: “A02/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 6,
“heaters”: 6,
“phase”: 1,
“relay”: “01R02/K3”,
“roomN”: 6,
“roomName”: “Столярная”,
“sensor”: “A03/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 7,
“heaters”: 6,
“phase”: 2,
“relay”: “01R03/K1”,
“roomN”: 6,
“roomName”: “Столярная”,
“sensor”: “A03/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 8,
“heaters”: 5,
“phase”: 3,
“relay”: “01R03/K2”,
“roomN”: 6,
“roomName”: “Столярная”,
“sensor”: “A03/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 9,
“heaters”: 5,
“phase”: 1,
“relay”: “01R03/K3”,
“roomN”: 7,
“roomName”: “Котельная”,
“sensor”: “A03/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 10,
“heaters”: 4,
“phase”: 2,
“relay”: “01R04/K1”,
“roomN”: 7,
“roomName”: “Котельная”,
“sensor”: “A03/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 11,
“heaters”: 6,
“phase”: 3,
“relay”: “01R04/K2”,
“roomN”: 8,
“roomName”: “Склад Мастерских”,
“sensor”: “A04/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 12,
“heaters”: 1,
“phase”: 2,
“relay”: “01R04/K3”,
“roomN”: 52,
“roomName”: “Лестница”,
“sensor”: “A04/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 13,
“heaters”: 6,
“phase”: 1,
“relay”: “01R05/K1”,
“roomN”: 9,
“roomName”: “Столовая”,
“sensor”: “A05/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 14,
“heaters”: 6,
“phase”: 2,
“relay”: “01R05/K2”,
“roomN”: 9,
“roomName”: “Столовая”,
“sensor”: “A05/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 15,
“heaters”: 6,
“phase”: 3,
“relay”: “01R05/K3”,
“roomN”: 9,
“roomName”: “Столовая”,
“sensor”: “A05/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 16,
“heaters”: 6,
“phase”: 1,
“relay”: “01R06/K1”,
“roomN”: 9,
“roomName”: “Столовая”,
“sensor”: “A06/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 17,
“heaters”: 6,
“phase”: 2,
“relay”: “01R06/K2”,
“roomN”: 9,
“roomName”: “Столовая”,
“sensor”: “A06/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 18,
“heaters”: 6,
“phase”: 3,
“relay”: “01R06/K3”,
“roomN”: 9,
“roomName”: “Столовая”,
“sensor”: “A06/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 19,
“heaters”: 4,
“phase”: 2,
“relay”: “01R07/K1”,
“roomN”: 37,
“roomName”: “Коридор”,
“sensor”: “A05/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 20,
“heaters”: 6,
“phase”: 3,
“relay”: “01R07/K2”,
“roomN”: 37,
“roomName”: “Коридор”,
“sensor”: “A06/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 21,
“heaters”: 6,
“phase”: 1,
“relay”: “01R07/K3”,
“roomN”: 37,
“roomName”: “Коридор”,
“sensor”: “A06/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 1
},
{
“groupN”: 1,
“heaters”: 8,
“phase”: 1,
“relay”: “02R01/K1”,
“roomN”: 1,
“roomName”: “Раздевалка лев.”,
“sensor”: “A07/T1”,
“setPointDay”: 21,
“setPointNight”: 21,
“shieldN”: 2
},
{
“groupN”: 2,
“heaters”: 8,
“phase”: 2,
“relay”: “02R01/K2”,
“roomN”: 1,
“roomName”: “Вестибюль”,
“sensor”: “A07/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 3,
“heaters”: 8,
“phase”: 3,
“relay”: “02R01/K3”,
“roomN”: 1,
“roomName”: “Вестибюль”,
“sensor”: “A18/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 4,
“heaters”: 8,
“phase”: 1,
“relay”: “02R02/K1”,
“roomN”: 1,
“roomName”: “Вестибюль”,
“sensor”: “A07/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 5,
“heaters”: 8,
“phase”: 2,
“relay”: “02R02/K2”,
“roomN”: 1,
“roomName”: “Раздевалка прав.”,
“sensor”: “A18/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 6,
“heaters”: 6,
“phase”: 2,
“relay”: “02R02/K3”,
“roomN”: 1,
“roomName”: “Раздевалка прав.”,
“sensor”: “A18/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 7,
“heaters”: 6,
“phase”: 3,
“relay”: “02R03/K1”,
“roomN”: 38,
“roomName”: “Коридор”,
“sensor”: “A11/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 8,
“heaters”: 2,
“phase”: 2,
“relay”: “02R04/K1”,
“roomN”: 39,
“roomName”: “С/узел М”,
“sensor”: “A14/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 9,
“heaters”: 3,
“phase”: 2,
“relay”: “02R04/K2”,
“roomN”: 41,
“roomName”: “С/узел Ж”,
“sensor”: “A14/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 10,
“heaters”: 6,
“phase”: 1,
“relay”: “02R03/K2”,
“roomN”: 44,
“roomName”: “Автодело”,
“sensor”: “A12/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 11,
“heaters”: 7,
“phase”: 2,
“relay”: “02R03/K3”,
“roomN”: 44,
“roomName”: “Автодело”,
“sensor”: “A12/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 12,
“heaters”: 6,
“phase”: 1,
“relay”: “02R05/K1”,
“roomN”: 45,
“roomName”: “Библиотека”,
“sensor”: “A12/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 13,
“heaters”: 4,
“phase”: 2,
“relay”: “02R04/K3”,
“roomN”: 45,
“roomName”: “Библиотека”,
“sensor”: “A12/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 14,
“heaters”: 3,
“phase”: 3,
“relay”: “02R04/K4”,
“roomN”: 46,
“roomName”: “Медкабинет”,
“sensor”: “A10/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 15,
“heaters”: 3,
“phase”: 3,
“relay”: “02R04/K5”,
“roomN”: 46,
“roomName”: “Медкабинет”,
“sensor”: “A10/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 16,
“heaters”: 3,
“phase”: 3,
“relay”: “02R04/K6”,
“roomN”: 46,
“roomName”: “Медкабинет”,
“sensor”: “A10/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 17,
“heaters”: 4,
“phase”: 2,
“relay”: “02R06/K1”,
“roomN”: 47,
“roomName”: “Приемная”,
“sensor”: “A08/T1”,
“setPointDay”: 23,
“setPointNight”: 23,
“shieldN”: 2
},
{
“groupN”: 18,
“heaters”: 2,
“phase”: 2,
“relay”: “02R06/K2”,
“roomN”: 48,
“roomName”: “Кладовая АХЧ”,
“sensor”: “A09/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 19,
“heaters”: 5,
“phase”: 3,
“relay”: “02R05/K2”,
“roomN”: 49,
“roomName”: “Архив”,
“sensor”: “A11/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 20,
“heaters”: 5,
“phase”: 3,
“relay”: “02R05/K3”,
“roomN”: 49,
“roomName”: “Архив”,
“sensor”: “A11/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 21,
“heaters”: 2,
“phase”: 2,
“relay”: “02R06/K3”,
“roomN”: 50,
“roomName”: “Зам по АХЧ”,
“sensor”: “A13/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 22,
“heaters”: 2,
“phase”: 1,
“relay”: “02R06/K4”,
“roomN”: 53,
“roomName”: “Лестница”,
“sensor”: “A09/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 23,
“heaters”: 4,
“phase”: 1,
“relay”: “02R06/K5”,
“roomN”: 54,
“roomName”: “Секретарь”,
“sensor”: “A08/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 24,
“heaters”: 1,
“phase”: 1,
“relay”: “02R06/K6”,
“roomN”: 55,
“roomName”: “Медкабинет”,
“sensor”: “A10/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 2
},
{
“groupN”: 1,
“heaters”: 3,
“phase”: 2,
“relay”: “03R01/K1”,
“roomN”: 10,
“roomName”: “Мойка”,
“sensor”: “A15/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 2,
“heaters”: 7,
“phase”: 3,
“relay”: “03R01/K2”,
“roomN”: 11,
“roomName”: “Кухня”,
“sensor”: “A15/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 3,
“heaters”: 6,
“phase”: 1,
“relay”: “03R01/K3”,
“roomN”: 11,
“roomName”: “Кухня”,
“sensor”: “A15/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 4,
“heaters”: 2,
“phase”: 2,
“relay”: “03R02/K1”,
“roomN”: 13,
“roomName”: “Раздевалка Д”,
“sensor”: “A20/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 5,
“heaters”: 4,
“phase”: 2,
“relay”: “03R02/K2”,
“roomN”: 18,
“roomName”: “Весовая”,
“sensor”: “A16/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 6,
“heaters”: 1,
“phase”: 2,
“relay”: “03R02/K3”,
“roomN”: 21,
“roomName”: “Коридор”,
“sensor”: “A17/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 7,
“heaters”: 4,
“phase”: 1,
“relay”: “03R02/K4”,
“roomN”: 23,
“roomName”: “Нач. Производства”,
“sensor”: “A17/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 8,
“heaters”: 2,
“phase”: 1,
“relay”: “03R02/K5”,
“roomN”: 24,
“roomName”: “Кладовая”,
“sensor”: “A17/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 9,
“heaters”: 2,
“phase”: 1,
“relay”: “03R02/K6”,
“roomN”: 26,
“roomName”: “Раздевалка М”,
“sensor”: “A21/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 10,
“heaters”: 7,
“phase”: 1,
“relay”: “03R03/K1”,
“roomN”: 34,
“roomName”: “Спортзал мал.”,
“sensor”: “A19/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 11,
“heaters”: 6,
“phase”: 2,
“relay”: “03R03/K2”,
“roomN”: 34,
“roomName”: “Спортзал мал.”,
“sensor”: “A19/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 12,
“heaters”: 6,
“phase”: 3,
“relay”: “03R03/K3”,
“roomN”: 34,
“roomName”: “Спортзал мал.”,
“sensor”: “A19/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 13,
“heaters”: 7,
“phase”: 1,
“relay”: “03R04/K1”,
“roomN”: 34,
“roomName”: “Спортзал мал.”,
“sensor”: “A19/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 14,
“heaters”: 2,
“phase”: 2,
“relay”: “03R04/K2”,
“roomN”: 35,
“roomName”: “Инвентарь”,
“sensor”: “A22/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 15,
“heaters”: 8,
“phase”: 2,
“relay”: “03R04/K3”,
“roomN”: 36,
“roomName”: “Коридор”,
“sensor”: “A22/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 16,
“heaters”: 4,
“phase”: 3,
“relay”: “03R05/K1”,
“roomN”: 51,
“roomName”: “Физрук”,
“sensor”: “A21/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 17,
“heaters”: 6,
“phase”: 3,
“relay”: “03R05/K2”,
“roomN”: 51,
“roomName”: “Физрук”,
“sensor”: “A21/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 18,
“heaters”: 6,
“phase”: 1,
“relay”: “03R05/K3”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A20/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 19,
“heaters”: 6,
“phase”: 2,
“relay”: “03R06/K1”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A20/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 20,
“heaters”: 6,
“phase”: 3,
“relay”: “03R06/K2”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A20/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 21,
“heaters”: 6,
“phase”: 1,
“relay”: “03R06/K3”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A20/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 22,
“heaters”: 6,
“phase”: 2,
“relay”: “03R07/K1”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A20/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 23,
“heaters”: 6,
“phase”: 3,
“relay”: “03R07/K2”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A20/T1”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 24,
“heaters”: 6,
“phase”: 1,
“relay”: “03R07/K3”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 25,
“heaters”: 6,
“phase”: 2,
“relay”: “03R08/K1”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 26,
“heaters”: 6,
“phase”: 3,
“relay”: “03R08/K2”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 27,
“heaters”: 6,
“phase”: 1,
“relay”: “03R08/K3”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 28,
“heaters”: 6,
“phase”: 2,
“relay”: “03R09/K1”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 29,
“heaters”: 6,
“phase”: 3,
“relay”: “03R09/K2”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
},
{
“groupN”: 30,
“heaters”: 6,
“phase”: 3,
“relay”: “03R09/K3”,
“roomN”: 31,
“roomName”: “Спортзал бол.”,
“sensor”: “A19/T2”,
“setPointDay”: 21,
“setPointNight”: 18,
“shieldN”: 3
}
],
“startDay”: “08:00”,
“startNight”: “16:00”,
“week”: [
{
“friday”: true,
“monday”: true,
“saturday”: false,
“sunday”: false,
“thursday”: true,
“tuesday”: true,
“wednesday”: true
}
]
}

Этот файл считывается и выводится в WebUI:
изображение
и можно вводить параметры
изображение
Недостатки:

  1. Из скрипта в файл не записать
  2. Сохранение вызывает перезагрузку правил.
  3. Тип range с ползунком не использовать в этой конструкции

Этих недостатков не будет если использовать внутренние регистры и еще плюс в том, что наглядная привязка уставок к конкретному устройству - меньше возможность ошибиться