Подскажите, что я делаю не так?

Есть “Шлюз MQTT - Modbus RTU/TCP slave” в режиме
Снимок экрана 2024-04-10 в 15.43.47
Настроено вот так:


Данные прилетают

DEBUG: [gateway] Set value via Modbus: /devices/RF_Reciver/controls/Uptime 28313
wb-mqtt-mbgate[28244]: [01][10][00][02][00][02][E0][08]
Скрипт ловит:

defineVirtualDevice('RF_Reciver', {
  title: 'RF приемник', 
  cells: {  
    RF: {
      title: "RF приемник",
      type: "value",
      value: 0,
    },
    Temperature: {
      title: "Температура на кухне",
      type: "value",
      precision: 1,
      unit: " °C",
      value: -1000,
    },
    Uptime: {
      title: "Время работы",
      type: "value",
      value: 0
    },
  }
}); 

trackMqtt("/devices/RF_Reciver/controls/Temperature/on", function(message){ 
  dev["RF_Reciver/Temperature"] = parseFloat(message.value);
});

trackMqtt("/devices/RF_Reciver/controls/Uptime/on", function(message){
  dev["RF_Reciver/Uptime"] = Number(message.value);
});

Вроде всё хорошо, но в логе
wb-rules[1874]: ERROR: [backend] failed to process /on request to RF_Reciver/Uptime: This control is not writable

Что не так?

И ещё, для общего понимания: “Шлюз MQTT - Modbus RTU/TCP slave” не может одновременно на двух устройствах /dev/ttyRS485-1 и /dev/ttyRS485-2? Или на одном /dev/ttyRS485-1 и ТСР?

Совершенно очевидно что контрл - не поддерживает запись. То есть статус readonly для него не задан.

Может. Создайте дополнительные инсансы для сервиса.

Сделал readonly = false, но теперь можно с веб интерфейса выставлять значения … - что в корне не верно… Совсем запутался, как мне описать cell Temperature чтобы в интерфейсе было “только чтение” и не было wb-rules[]: ERROR: [backend] failed to process /on This control is not writable?

И есть “косячек”:


А у меня на это число

делиться

!!!

Не критично, но не приятно.

Может быть два варианта. Или radonly=true, тогда в контрол может писать только драйвер устройства. Или radonly=false, когда писать может любой, в том числе и веб-интерфейс.
Иначе говоря - нет возможности из wb-mqtt-mbgate писать в readonly=true топики, созданные wb-rules (виртуальные устройства).

Только использовать какие-то промежуточные топики, значения из которых уже передавать в целевой с помощью wb-rules.

Проверил. Все работает как ожидается - значение топика умножается, значение записываемого в регистр - делится.

Я думал прилетающие значения умножаются.

Из ответа я что-то понял, но меня это возвращает к самому вопросу “что я делаю не так?”
Для формализации:

  1. Данные едут из “Шлюз MQTT - Modbus RTU”
  2. Менять их в defineVirtualDevice(‘’)… ПОЛЬЗОВАТЕЛЬ не может (т.е. readonly = true).
    Как это реализовать и как реагировать на изменение?

Если они из этого сервиса записываются в топик то топик должен быть готов значение принять. Быть изменяемым. Если он readonly - то в него может записывать только и исключительно его драйвер.

Использовать для коммуникации какой-то еще топик, доступный для записи например.