Состояния устройства

После последнего обновления исчезла возможность добавлять в каналы “значение” и “состояние”.

Пытаюсь сделать это правилами.
использую один MQTT топик “/devices/C2000PP/controls/ДИП.01”

Создал виртуальное устройство

deviceName = 'DIP';

defineVirtualDevice(deviceName, {
    title: {'en': 'DIP', 'ru': 'ДИП-34А'} ,
    cells: {
      value: {
        title: {'en': 'Value', 'ru': 'Значение'},
        type: "number",
        value: null,
        readonly: false
      },
      state: {
        title: {'en': 'State', 'ru': 'Состояние'},
        type: "value",
        value: "",
        enum:{
  24:	{'en':'', 'ru': 'Взят'},
  37:	{'en':'', 'ru': 'Пожар'},
  40:	{'en':'', 'ru': 'Пожар 2'},
  41:	{'en':'', 'ru': 'Неисправность'},
  43:	{'en':'', 'ru': 'Предупреждение'},
  44:	{'en':'', 'ru': 'Внимание'},
  109:	{'en':'', 'ru': 'Снят'},
  110:	{'en':'', 'ru': 'Сброс тревоги'},
  186:	{'en':'', 'ru': 'Замена батареи'},
  187:	{'en':'', 'ru': 'Нет связи'},
  202:	{'en':'', 'ru': 'Неисправность батареи'},
  204:	{'en':'', 'ru': 'Требуется обслуживание'},
  211:	{'en':'', 'ru': 'Батарея разряжена'},
  212:	{'en':'', 'ru': 'Резервная батарея разряжена'},
  241:	{'en':'', 'ru': 'Раздел взят'},
  242:	{'en':'', 'ru': 'Раздел снят'}}
      },
    }
});

defineRule({
  whenChanged: deviceName+"/value",
  then: function (newValue, devName, cellName) {
  dev[deviceName+"/state"] = newValue;
  }
});

Добавил правило

defineRule(“DIP.1”,{
whenChanged:“/devices/C2000PP/controls/ДИП.01”,
then: function (newValue,devName,cellName) {
log.debug(“debug - devName:{}, cellName:{}, newValue:{}”, newValue, devName, cellName);
log.info(“devName:{}, cellName:{}, newValue:{}”, newValue, devName, cellName);
dev[“DIP/value”]=newValue; //
}
});

В логах пишет

2026-03-26 14:27:53 debug - devName:24, cellName:C2000PP, newValue:ДИП.01
2026-03-26 14:27:53 devName:24, cellName:C2000PP, newValue:ДИП.01

в общем не работает, где я ошибся?

Добрый день.
Для начала проверьте кавычки.

Почему то при вставке текста, такие кавычки " заменяются на такие “.
Проверил, везде стоят нормальные.

У вас в лог аргументы похоже выводятся в другом порядке, поэтому кажется, что значения перепутаны.
В документации whenChanged это именно так: сначала новое значение, потом имя устройства, потом имя канала. Также в whenChanged нужно указывать device/control, а не полный MQTT-путь /devices/.../controls/....
Для whenChanged нужно использовать C2000PP/ДИП.01, а не /devices/C2000PP/controls/ДИП.01.
Объект dev и триггеры в правилах работают с форматом device/control.

Попробуйте этот вариан:

var deviceName = "DIP";

defineVirtualDevice(deviceName, {
  title: { en: "DIP", ru: "ДИП-34А" },
  cells: {
    value: {
      title: { en: "Value", ru: "Значение" },
      type: "number",
      value: 0,
      readonly: true
    },
    state: {
      title: { en: "State", ru: "Состояние" },
      type: "value",
      value: 0,
      readonly: true,
      enum: {
        24:  { en: "", ru: "Взят" },
        37:  { en: "", ru: "Пожар" },
        40:  { en: "", ru: "Пожар 2" },
        41:  { en: "", ru: "Неисправность" },
        43:  { en: "", ru: "Предупреждение" },
        44:  { en: "", ru: "Внимание" },
        109: { en: "", ru: "Снят" },
        110: { en: "", ru: "Сброс тревоги" },
        186: { en: "", ru: "Замена батареи" },
        187: { en: "", ru: "Нет связи" },
        202: { en: "", ru: "Неисправность батареи" },
        204: { en: "", ru: "Требуется обслуживание" },
        211: { en: "", ru: "Батарея разряжена" },
        212: { en: "", ru: "Резервная батарея разряжена" },
        241: { en: "", ru: "Раздел взят" },
        242: { en: "", ru: "Раздел снят" }
      }
    }
  }
});

defineRule("DIP_1", {
  whenChanged: "C2000PP/ДИП.01",
  then: function (newValue, devName, cellName) {
    log.info("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue);

    dev["DIP/value"] = newValue;
    dev["DIP/state"] = newValue;
  }
});


Всё заработало

но при попытке привязать состояние к элементу text выводится значение


выглядит так
первое значение state
второе значение color

а если так?

var deviceName = "DIP";

defineVirtualDevice(deviceName, {
  title: { en: "DIP", ru: "ДИП-34А" },
  cells: {
    value: {
      title: { en: "Value", ru: "Значение" },
      type: "number",
      value: 0,
      readonly: true
    },
    state: {
      title: { en: "State", ru: "Состояние" },
      type: "value",
      value: 0,
      readonly: true
    },
    state_text: {
      title: { en: "State text", ru: "Текст состояния" },
      type: "text",
      value: "",
      readonly: true
    }
  }
});

function getDipStateText(code) {
  switch (Number(code)) {
    case 24:  return "Взят";
    case 37:  return "Пожар";
    case 40:  return "Пожар 2";
    case 41:  return "Неисправность";
    case 43:  return "Предупреждение";
    case 44:  return "Внимание";
    case 109: return "Снят";
    case 110: return "Сброс тревоги";
    case 186: return "Замена батареи";
    case 187: return "Нет связи";
    case 202: return "Неисправность батареи";
    case 204: return "Требуется обслуживание";
    case 211: return "Батарея разряжена";
    case 212: return "Резервная батарея разряжена";
    case 241: return "Раздел взят";
    case 242: return "Раздел снят";
    default:  return "Неизвестно (" + code + ")";
  }
}

defineRule("DIP_1", {
  whenChanged: "C2000PP/ДИП.01",
  then: function (newValue, devName, cellName) {
    log.info("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue);

    dev["DIP/value"] = Number(newValue);
    dev["DIP/state"] = Number(newValue);
    dev["DIP/state_text"] = getDipStateText(newValue);
  }
});

Да.
Так работает.