Доброго времени суток всем!
Не знаю - софтовая проблема или хардверная. Может кто сталкивался… вобщем нарисовалась.В форумах и виках не нашел., кто увидит - ткните сопаткой.
Теперь собс-тно по сути:
В двух правилах описано управление разными двумя реле ( на модуле DB-IO-R3A-8).
Причём управление идёт в зависимости от значений одного и того же аналогового датчика.(R1 в режиме измерения сопротивления.) Незадача - срабатывает только одно из правил ( закономерности пока не выявил, но по-моему - которое первым сработало - то и “в деле”) т.е. например: свет должен включаться в зависимости от уровня естественного освещения с 6:00 до 21:00 на одном обьекте ( теплица., правило №1)., и в зависимости от другого уровня освещения на другом (птичник правило №2) , но в интервале с 6:00 до 19:30.
Срабатывает одно из правил (пусть№1)., второе - не срабатывает. Включаю вручную на закладке devices., далее, при повышении уровня естественного света ( солнышко встало) отключается реле из правила №1., второе аппарат игнорирует. Ставлю, чтобы второе правило срабатывало раньше ( не с 06:00, а с 05:55) или уровень освещенности в правиле занижаю - не важно как., но теперь после сработки 2-го правила WB-5 игнорирует правило № 1.
Пробовал всякие вариации - работает только одно из правил.
Пока выхожу из положения, сведя оба реле в одно правило , но при этом время включения - выключения у них одинаковые., разнятся только уровни освещенности. Сразу предупреждаю - сам ни разу не программист - всё изучаю тут, на форуме да в и-нете, Но мне кажется, что этот костыль не очень правильный. Никто с этим не сталкивался?
Спасибо.
Выложите все правила сюда пожалуйста.
Правило для управления освещением и вентиляцией теплицы:
// Правило обслуживает теплицу.
// При превышении температуры 20 град. открывает форточку., при 21 град - открывает
// вторую форточку и дверь.
// С 06:00 до 22:00 если мала освещенность - включает подсветку
// Создаём виртуальное устройство - выключатель правила
defineVirtualDevice("switch_rule_teplitca", {
title: "switch_rule_teplitca",
cells: {
disabled: {
type: "switch",
value: false
},
}
});
// Теперь само включение
// первая форточка
defineRule("teplitca_control_temp", { //название правила - "контроль температуры теплицы"
whenChanged: "wb-w1/10-00080229c6ee", //при изменении состояния датчика 1-Wire с идентификатором 10-00080229c6ee
then: function(newValue, devName, cellName) { //выполняй следующие действия
if (dev.switch_rule_teplitca.disabled) { // если вируальн. устр-во switch_rule_teplitca не в положении disabled
if (dev["wb-w1"]["10-00080229c6ee"] > 21) { //если температура датчика больше 21 градус
dev["wb-gpio"]["EXT1_R3A4"] = 1; //установи на выходе wb-gpio устройство EXT1_R3A4 в состояние "включено"
} else { // иначе
if (dev["wb-w1"]["10-00080229c6ee"] < 18) { // если температура датчика меньше 18 градуса
dev["wb-gpio"]["EXT1_R3A4"] = 0; //установи EXT1_R3A4 в состояние "включено"
}
}
}
}
});
// Открытие второй форточки и двери.
defineRule("teplitca_control_temp1", { //название правила - "контроль температуры теплицы1"
whenChanged: "wb-w1/10-00080229c6ee", //при изменении состояния датчика 1-Wire с идентификатором 10-00080229c6ee
then: function(newValue, devName, cellName) { //выполняй следующие действия
if (dev.switch_rule_teplitca.disabled) { // если вируальн. устр-во switch_rule_teplitca не в положении disabled
if (dev["wb-w1"]["10-00080229c6ee"] > 20) { //если температура датчика больше 20 градуса
dev["wb-gpio"]["EXT1_R3A3"] = 1; //установи на выходе wb-gpio устройство EXT1_R3A3 в состояние "включено"
} else { // иначе
if (dev["wb-w1"]["10-00080229c6ee"] < 17) { // если температура датчика меньше 17 градуса
dev["wb-gpio"]["EXT1_R3A3"] = 0; //установи EXT1_R3A3 в состояние "выключено"
}
}
}
}
});
// Теперь создаём правило включения света.
defineRule("Svet_teplitca_control", { //название правила - "управление светом в теплице"
whenChanged: "wb-adc/R1", //при изменении состояния датчика R1
then: function(newValue, devName, cellName) { //выполняй следующие действия
var date = new Date();
// точка начала действия правила 06:05
var date_start = new Date(date);
date_start.setHours(6);
date_start.setMinutes(05);
// точка окончания действия правила 21:00
var date_end = new Date(date);
date_end.setHours(21);
date_end.setMinutes(00);
// если время между началом и окончанием дейсвия правила
if ((date > date_start) && (date < date_end)) {
if (dev.switch_rule_teplitca.disabled) { // если вируальн. устр-во !dev.switch_rule_teplitca не в положении enabled
if (dev["wb-adc"]["R1"] < 8500) { //если сопротивление датчика меньше 60000,
dev["wb-gpio"]["EXT1_R3A7"] = 0; //установи на выходе wb-gpio устройство EXT1_R3A1 в состояние "выключено"
} else { // иначе
if (dev["wb-adc"]["R1"] > 9500) { //если сопротивление датчика больше 63000, (обеспечиваем гистерезис)
dev["wb-gpio"]["EXT1_R3A7"] = 1; //установи EXT1_R3A1 в состояние "включено"
}
}
}
} else { // иначе, если время начала и конца правила не подходит
dev["wb-gpio"]["EXT1_R3A7"] = 0; // выключить реле света
}
}
});
Правило для управления светом в хоз. постройке (птичник):
// Это правило обслуживает курятник
// С 06:05 до 20:00 свет в курятнике должен гореть. Управляет светом реле ext1_R3A6
// Кроме того правило следит за датчиком освещения на R1 - как солнце встало
// свет отключаем., как село - снова включаем.
defineRule("kurjatnik_control", { //название правила - "управление курятником", может быть произвольным
whenChanged: "wb-adc/R1", //при изменении состояния датчика R1
then: function(newValue, devName, cellName) { //выполняй следующие действия
var date = new Date();
// точка начала действия правила 06:05
var date_start = new Date(date);
date_start.setHours(6);
date_start.setMinutes(05);
// точка окончания действия правила 20:00
var date_end = new Date(date);
date_end.setHours(20);
date_end.setMinutes(00);
// если время между началом и окончанием дейсвия правила
if ((date > date_start) && (date < date_end)) {
if (dev["wb-adc"]["R1"] < 500) { //если сопротивление датчика меньше 500,
dev["wb-gpio"]["EXT1_R3A6"] = 0; //установи на выходе wb-gpio устройство EXT1_R3A6 в состояние "выключено"
} else { // иначе
if (dev["wb-adc"]["R1"] > 1550) { //если сопротивление датчика больше 1550, (обеспечиваем гистерезис)
dev["wb-gpio"]["EXT1_R3A6"] = 1; //установи EXT1_R3A6 в состояние "включено"
}
}
} else { // иначе, если время начала и конца правила не подходит
dev["wb-gpio"]["EXT1_R3A6"] = 0; // выключить реле света
}
}
});
Програамёр из меня слабый, поэтому для себя почти к каждой строчке приписал комменты., однако комменты могут быть неточные- правила менял, настраивал, а комментарии не всегда выправлял. R1 - фоторезистор, сопротивление которого падает по мере нарастания светового потока. Его сопротивление в пределах от 300 Ом ( яркий солнечный день) до 12-15 КОм (ночь).
Ещё дополнение - по одному правила вроде как работают…
Спасибо.