Здравствуйте,
как лучше всего организовать синхронизацию свитчей виртуального устройства с реальным?
При этом необходимо, чтобы после перезапуска эти свитчи были синхронизированы и, очевидно, не происходило рекурсивных вызовов.
Допустим я хочу сделать виртуальное устройство клапана у которого есть свич вкл выкл реле открытия (open_relay). Соответствующее ему устройство - dev[‘open_device’].
Сейчас я сделал 3 правила, но иногда в процессе отладки при перезаливке файла правил кнопки не синхронизированы - в последний раз кнопка на виртуальном устройстве была ВКЛ в то время как реле было ВЫКЛ.
defineVirtualDevice('valve', {
title: 'my valve',
cells: {
open_relay: {type: "switch", value: false, order: 1}
}
});
defineRule({
whenChanged: ["valve/open"],
then: function (value, device, name) {
dev['open_device'] = value;
}
});
defineRule({
asSoonAs: function () {
return dev['open_device'];
},
then: function () {
// продублировать на кнопку в клапане
dev['valve/open'] = true;
}
});
defineRule({
asSoonAs: function () {
return !(dev['open_device']);
},
then: function () {
// продублировать на кнопку в клапане
dev['valve/open'] = false;
}
});
Может быть стоит выставить lazyInit и вручную присваивать значение сразу после инициализации (dev[‘valve’][‘open’] = dev[‘open_device’])?
Или же лучше forceDefault и value: dev[‘open_device’] ?