@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 лайк
Здравствуйте, починили в wb-rules (2.20.6).
Обновите тестинг: apt update && apt upgrade
1 лайк