Добрый день.
Подскажите, что я делаю не так:
хочу сделать виртуальный переключатель, который выключается через 2 секунды после включения.
написал такое правило:
defineVirtualDevice(“virtual_btn”, {
title: “Virtual button”,
cells: {
state: {
title: ‘State’,
type: “value”,
value: 0,
enum: {
0: “Off”,
1: “On”
}
}
}
});
defineRule({
whenChanged: “virtual_btn/state”,
then: function (newValue, devName, cellName) {
log(“newValue - '” + newValue + “'”);
if(newValue)
{
log(“Virtual btn - ON”);
setTimeout(function () {
log(“Virtual btn - OFF”);
dev[“virtual_btn/state”] = 0;
}, 2000);
}
}
});
устанавливаю свойство в “1” через
mosquitto_pub -h 127.0.0.1 -t /devices/virtual_btn/controls/state -m “1”
Вижу, что в устройствах свойство меняется, но в логах тишина и в “0” не переключается
vag
02.Февраль.2025 11:14:15
2
https://wirenboard.com/wiki/MQTT#Структура_сообщения_—_команды_на_изменение_состояния
и
https://wirenboard.com/wiki/MQTT#Управление_устройствами_из_командной_строки
Передавать устройству команду (побудить к действию) необходимо в топик /on
попробуйте
mosquitto_pub -h 127.0.0.1 -t /devices/virtual_btn/controls/state/on -m “1”
1 лайк
Не получается. В логах:
ERROR: [backend] failed to process /on request to virtual_btn/state: This control is not writable
Добрый день.
Вы устанавливаете для контрола с неззананным readonly: false
То есть:
defineVirtualDevice("virtual_btn", {
title: "Virtual button",
cells: {
state: {
title: ‘State’,
type: "value",
teadonly: false,
value: 0,
enum: {
0: "Off",
1: "On"
}
}
}
});
vag
02.Февраль.2025 12:17:15
5
Проверил ваш код.
У меня правило отрабатывает при (после записи 1 через 2 секунды в появившаяся 1 меняется на 0 с соответствующем отображением в логе)
mosquitto_pub -h 127.0.0.1 -t /devices/virtual_btn/controls/state/on -m 1
и ошибок не вызывает
Если без /on , то значение в вирт устройстве меняется, а правило не отрабатывает (лог пустой).
Единственное, что я заменил у вас
dev["virtual_btn/state"] = 0;
Т.е. в устройство отправляю “цифру” 0, а не символ “0”
vag
02.Февраль.2025 12:46:16
6
test3.7z (594 байта)
Прикрепил рабочий js скрипт (в архиве .7z ).
defineVirtualDevice("virtual_btn", {
title: "Virtual button",
cells: {
state: {
title: "State",
type: "value",
value: 0,
enum: {
0 :{en: 'Off', ru: 'ВЫКЛ'},
1 :{en: 'On', ru: 'ВКЛ'},
},
readonly: false,
}
}
});
defineRule("test3",{
whenChanged: "virtual_btn/state",
then: function (newValue, devName, cellName) {
log("newValue - " + newValue );
if(newValue) {
log("Virtual btn - ON");
setTimeout(function () {
log("Virtual btn - OFF");
dev["virtual_btn/state"] = 0;
}, 2000);
}
}
});
# Правило отрабатывает при записи 1 в топик /devices/virtual_btn/controls/state/on
#
# mosquitto_pub -h 127.0.0.1 -t /devices/virtual_btn/controls/state/on -m 1
#
vag:
readonly: false,
C “readonly: false” и “…/on -m 1” заработало