Wb-rules не считывает units

@AlexandrD, появились снова вопросы )

Имеется контрол: /devices/Garage_Sensor_2/controls/Temperature.
MQTT Explorer подтверждает, что у данного датчика есть градусы цельсия в топике meta.

Пытаюсь прочитать значение units через API создания/управления устройств:

var control = getDevice('Garage_Sensor_2').getControl('Temperature');
log.warning("Type: {}",  control.getType()); 
log.warning("Units: {}", control.getUnits());

// 02-04-2024 16:20:03.163	WARNING: [rule warning] Units:
// 02-04-2024 16:20:03.161	WARNING: [rule warning] Type: value

Также пытаюсь получить это значение через Доступ к топикам meta:

log.warning("Meta type: {}",  dev['Garage_Sensor_2/Temperature#type']);
log.warning("Meta units: {}", dev['Garage_Sensor_2/Temperature#units']);

// 02-04-2024 16:20:03.167	WARNING: [rule warning] Meta units: undefined
// 02-04-2024 16:20:03.166	WARNING: [rule warning] Meta type: value

Я что-то делаю не так, или через API нельзя получить units?

Есть ли какая-то информация? Это баг?

Пришлите диагностический архив, чтобы увидеть версии установленного софта. Предполагаю, у вас версия wb-rules, где ещё не появились units.

приложен диагностический архив, доступен только сотрудникам поддержки
(279,6 КБ)


Прямо сейчас сделал apt upgrade и всё еще раз перепроверил, результат пока тот же.

Welcome to Wiren Board 7.4.3 (s/n AOAMRHYG), release unstable.latest (as testing)
Linux wirenboard-AOAMRHYG 5.10.35-wb164 #1 SMP Fri Mar 22 15:05:23 UTC 2024 armv7l GNU/Linux
...
root@wirenboard-AOAMRHYG:~# apt search --names-only wb-rules
...
wb-rules/testing,now 2.20.1 armhf [installed,automatic]
  Wiren Board Rule Engine

Здравствуйте. Прошу прощения за задержку с ответом.

Проверьте, пожалуйста, пример ниже с виртуальным устройством. При сохранении в лог будут выведены юниты и типы контролов:

defineVirtualDevice('test-units-device', {
    title: 'Test Units Device' ,
    cells: {
      ControlWithUnit: {
        title: "Control with utit",
        type: "value",
        value: 25.5,
        units: "°C"
      },
      ControlWithoutUnit: {
        title: "Control without unit",
        type: "temperature",
        value: 20
      },
    }
});


log(
  "Name: {} Unit {} Type {}", 
  "ControlWithUnit", 
  dev['test-units-device/ControlWithUnit#units'], 
  dev['test-units-device/ControlWithUnit#type']
)
log(
  "Name: {} Unit {} Type {}", 
  "ControlWithoutUnit", 
  dev['test-units-device/ControlWithoutUnit#units'], 
  dev['test-units-device/ControlWithoutUnit#type']
)

Устройство выглядит так:
изображение

08-04-2024 09:20:13.731	INFO: [rule info] Name: ControlWithoutUnit Unit undefined Type temperature
08-04-2024 09:20:13.727	INFO: [rule info] Name: ControlWithUnit Unit °C Type value

Всё верно. А что у вас не работает? Если юнит undefined , то он не задан в контроле и надо обрабатывать тип. Это всё обратная совместимость и легаси.

А что у вас не работает?

Давайте я изложу еще раз более последовательно.

Есть датчик WB-MSW v.4. После обновления его канал температуры в MQTT стал выглядеть вот так:

То есть, units там есть.

Однако вот этот код:

var control = getDevice('Garage_Sensor_2').getControl('Temperature');
log.warning("Type: {}, units: {}",  control.getType(), control.getUnits());
log.warning("Meta. Type: {}, units: {}", dev['Garage_Sensor_2/Temperature#type'], dev['Garage_Sensor_2/Temperature#units']);

Дает следующий результат:

08-04-2024 09:34:57.631	WARNING: [rule warning] Meta. Type: value, units: undefined
08-04-2024 09:34:57.629	WARNING: [rule warning] Type: value, units:

units нет в обеих случаях, а по идее должны быть.

То есть теперь я из скрипта не могу получить информацию о датчике, п.ч. его тип - “value”, но при этом единиц измерения нет.

Перенёс обсуждение в отдельную тему.

Вы правы, так не работает и это бага, заведу тикет и буду держать вас в курсе.

Суть в том, что при создании виртуального устройства юнит пишет по старой нотации в топик meta/units, а драйвер устройств в /meta и тут JSON строку. Вот второй вариант и не обрабатывается через dev[] и getUnits.

1 Like

Здравствуйте, починили в wb-rules (2.20.6).

Обновите тестинг: apt update && apt upgrade

1 Like