Zeta
September 27, 2019, 8:40am
#1
Добрый день!
Создаю виртуальный девайс. В значении по умолчанию хочу записать JSON, но получаю неожиданный результат.
Можете помочь?
Код
var init_cmd = '{"expiration_stamp_ms":0,"args":[]}';
defineVirtualDevice("5d6957cb800689a8794a0341", {
title: "5d6957cb800689a8794a0341",
cells: {
io_5d6957c7800689a8794a031a: {
type: "value",
value: "0"
},
exec: {
type: init_cmd,
value: "0"
},
suspend: {
type: "value",
value: "0"
}
}
});
Результат
/devices/5d6957cb800689a8794a0341/controls/exec 0
/devices/5d6957cb800689a8794a0341/controls/exec/meta/type {"expiration_stamp_ms"
/devices/5d6957cb800689a8794a0341/controls/exec/meta/order 1
/devices/5d6957cb800689a8794a0341/controls/exec/meta/units 0,"args":[]}
Zeta
September 27, 2019, 9:32am
#2
Теперь я вообще ничего не понимаю.
Описываю пошагово:
Выполнил в wb-rules строчку
dev['5d6957cb800689a8794a0341']['exec'] = init_cmd;
json появился корректно.
Затем я захотел стереть json. Для этого я изменил код скрипта на
(function() {
defineVirtualDevice("5d6957cb800689a8794a0341", {
title: "5d6957cb800689a8794a0341",
cells: {
io_5d6957c7800689a8794a031a: {
type: "value",
value: "0"
},
exec: {
type: "0",
value: "0"
},
suspend: {
type: "value",
value: "0"
}
}
});
})();
и выполнил
mqtt-delete-retained /devices/5d6957cb800689a8794a0341/
service wb-rules restart
mosquitto_sub -t /devices/5d6957cb800689a8794a0341/# -v
результат
/devices/5d6957cb800689a8794a0341/meta/name 5d6957cb800689a8794a0341
/devices/5d6957cb800689a8794a0341/controls/exec/meta/type 0
/devices/5d6957cb800689a8794a0341/controls/exec/meta/order 1
/devices/5d6957cb800689a8794a0341/controls/exec {"expiration_stamp_ms":0,"args":[]}
/devices/5d6957cb800689a8794a0341/controls/io_5d6957c7800689a8794a031a/meta/type value
/devices/5d6957cb800689a8794a0341/controls/io_5d6957c7800689a8794a031a/meta/order 2
/devices/5d6957cb800689a8794a0341/controls/io_5d6957c7800689a8794a031a 1
/devices/5d6957cb800689a8794a0341/controls/suspend/meta/type value
/devices/5d6957cb800689a8794a0341/controls/suspend/meta/order 3
/devices/5d6957cb800689a8794a0341/controls/suspend 0
ответ на
root@wirenboard-AFK2C6PD:/etc/wb-rules# cat * | grep expiration_stamp_ms
пустой
что происходит?
Zeta
September 27, 2019, 9:55am
#3
В общем, если после объявления девайса прописать новое значение, например
dev['5d6957cb800689a8794a0341']['exec'] = "2";
Оно где-то кешируется в wb-rules, так как если убрать эту строчку из скрипта, оставить только инициализацию, со значением, например “0”, и перед перезапуском wb-rules удалить все топики этого девайса, все равно появляется “2”.
Чудеса.
Где задокументирован такой способ типизации виртуальных девайсов?
Zeta
October 1, 2019, 1:39pm
#5
А, кажется вижу проблему. Ошибся строчками.