Wb-rules - запись в топики виртуального устройства?

Дню добрейшего.
Гайдлайн по wb-rulez учит нас писать не публикацией mqtt-топика, а записью в dev[channel], не так ли?
Дык вот скрипт wb-rules не пишет в переменные виртуального дивайса, объявленного в другом скрипте. Ставлю readonly: false, с вебальника можно спокойно менять значение. Из скрипта - хрен, причем молча.

Внимание, как корректно писать в виртуальный dev? Должен ли он быть объявлен в том же файле, что и скрипт, который в него пишет? Выглядит слегка нелогично, если да:

  1. дивайс штука по определению глобальная, не так ли?
  2. крутится несколько независимых циклов, которые в одном файле декларировать сложнее.

Добрый день!

Пожалуйста приложите минимальный код, воспроизводящий проблему.

Нет, совершенно не обязательно. И, в общем-то все равно, запись происходит в топик mqtt.
Вполне может быть такое:

Нет, не может, у меня вообще нет кириллицы в терминале: что за странная идея… Копирую тот же топик в вызов publish() - спокойно пишет. В файле скрипта, в котором заводится устройство, - не менее спокойно пишет через dev[]. В соседнем - нет.

Версия wb-rules 2.6.0, может, втащить более свежую?

Код как в соседнем треде, ничего необычного.
файл А:

// Device indicates the whole status of a node
defineVirtualDevice("NODE_STATUS",
	{
	    title: "Central Water Station",
	    cells: {
				TSTAMP: {				// тик от сотворения мира
				  readonly: true,
		          type: "string",
        		  value: "0"
				},						
          								// алармы: 0 неактивен, 1 порядок, 2 непорядок
        		ALM_FIRE: {				// пожарный, температура помещения > 50 градусов
                  type: "int",
                  value: "1",
                  forceDefault: true,
                },
........
            dev["NODE_STATUS/TSTAMP"] = millis.toString();      // работает
........

файл Б:

      publish("/devices/NODE_STATUS/controls/ALM_FIRE", 1, 0, true); // работает
      dev["NODE_STATUS/ALM_FIRE"] = 1;                             // не работает

А воспроизведу. Итак, первый файл:


// Device indicates the whole status of a node
defineVirtualDevice("NODE_STATUS",
{
	    title: "Central Water Station",
	    cells: {
				TSTAMP: {				// тик от сотворения мира
				  readonly: true,
		          type: "string",
        		  value: "0"
				},						
          								// алармы: 0 неактивен, 1 порядок, 2 непорядок
        		ALM_FIRE: {				// пожарный, температура помещения > 50 градусов
                  type: "int",
                  value: "1",
                  forceDefault: true,
                },
        }
})

Формируется в mqtt:

/devices/NODE_STATUS/meta/name Central Water Station
/devices/NODE_STATUS/meta/driver wb-rules
/devices/NODE_STATUS/controls/ALM_FIRE 1
/devices/NODE_STATUS/controls/ALM_FIRE/meta/type int
/devices/NODE_STATUS/controls/ALM_FIRE/meta/order 1
/devices/NODE_STATUS/controls/ALM_FIRE/meta/readonly 1
/devices/NODE_STATUS/controls/TSTAMP 0
/devices/NODE_STATUS/controls/TSTAMP/meta/order 2
/devices/NODE_STATUS/controls/TSTAMP/meta/readonly 1
/devices/NODE_STATUS/controls/TSTAMP/meta/type string

И другой файл.

dev["NODE_STATUS/ALM_FIRE"] = 1;
dev["NODE_STATUS/ALM_FIRE"] = 2;
dev["NODE_STATUS/ALM_FIRE"] = 3;

И да, при сохранении не устанавливает значения. А почему? Потому что не может привести сохраняемое к типу “int”
Меняем

type: "int",

На поддерживаемый

type: "value",

И видим:

/devices/NODE_STATUS/controls/TSTAMP 0
/devices/NODE_STATUS/controls/ALM_FIRE 1
/devices/NODE_STATUS/controls/ALM_FIRE 2
/devices/NODE_STATUS/controls/ALM_FIRE 3

Логично, спасибо.
А почему в первом файле работает тогда?

Сразу не подскажу, пойду в исходники смотреть. Не должно быть разницы в поведении. Возможно задам вопрос разработчику wb-rules/