У меня есть ворота Doorhan, которые имеют только одну клемму управления - тактовая кнопка SBS.
Каждое нажатие переключает состояние привода: вверх, стоп, вниз, стоп, вверх и т.д.
И я хочу как-то сделать, чтобы у меня в веб-интерфейсе было понятное отображение текущего действия.
Я установил 2 геркона, чтобы понимать крайние состояния ворот (полностью открыты и полностью закрыты).
То что хочу пока смог сформулировать вот в таком виде. Дальше не могу понять как действовать
var garageGateRelay = "wb-mio-gpio_70:3/K8";
var garageGateTop = "wb-mio-gpio_70:2/IN3";
var garageGateDown = "wb-mio-gpio_70:1/IN7";
defineVirtualDevice("GarageGateControl", {
title: "Управление гаражными воротами",
cells: {
Up: {
title: "ВВЕРХ",
type: "switch",
value: false,
},
Down: {
title: "ВНИЗ",
type: "switch",
value: false,
},
Stop: {
title: "СТОП",
type: "switch",
value: false,
}
}
});
// действия при изменении положения гаражных ворот
defineRule("GarageGateRule", {
whenChanged: [garageGateTop, garageGateDown, garageGateRelay],
then: function (newValue, devName, cellName) {
// если ворота наверху, то только кнопка ВНИЗ должна посылать сигнал в топик управляющего реле
if ( dev[garageGateTop] == true ) {
dev['GarageGateControl/Up'] = NULL;
dev['GarageGateControl/Down'] = garageGateRelay; // кнопке ВНИЗ присваиваем топик управляющего реле
dev['GarageGateControl/Stop'] = NULL;
}
// если ворота внизу, то только кнопка ВВЕРХ должна посылать сигнал в топик управляющего реле
else if ( dev[garageGateDown] == true ) {
dev['GarageGateControl/Up'] = garageGateRelay; // кнопке ВВЕРХ присваиваем топик управляющего реле
dev['GarageGateControl/Down'] = NULL;
dev['GarageGateControl/Stop'] = NULL;
}
// если ворота где-то посередине, то кнопки работают в зависимости от прошлого состояния garageGateTop или garageGateDown и количества активаций реле
if ( dev[garageGateTop] == false && dev[garageGateDown] == false ) {
// тут сначала надо выяснить кто из garageGateTop и garageGateDown в последний раз был true
// потом посчитать сколько раз после этого активировано реле и в зависимости от этого определить
// какой код нужен для каждой кнопки, чтобы при нажатии кнопки программа сама послала на реле от 1 до 3 импульсов
// для направления ворот в нужную сторону
}
}
});