Ewelink не работает сценарий с температурой

Сценарий с температурой работает некорректно. #143

Comments

multysea commented Jan 20, 2019 •

Создал простенький сценарий, если температура меньше 23 — включить реле, если больше 25 — выключить. Но, после снижения температуры до 23 реле включилось, а после повышения до более , чем 25 так и не выключилось. Причем если отключить реле вручную, то при снижении до нижнего порога оно включается. Почему так?

The text was updated successfully, but these errors were encountered:

renat2985 commented Jan 21, 2019 •

После добавления сценария связанного с Тимпературой, Влажностью или Аналоговым выходом нужно перезагружать ESP. Это баг, скоро исправим.

multysea commented Jan 21, 2019

Естественно, что я перезагружал, и не только софт-ресетом, но и хард. И все равно, при понижении включается, при повышении не выключается. Может ли это быть связано с тем, что на это реле у меня есть еще и кнопка?

Читайте также:  Не работает яндекс трекер

Egor2101 commented Jan 21, 2019

У меня стабильная прошивка. На реле кнопка + сценарий. Все работает штатно.

Egor2101 commented Jan 21, 2019

На графике температуры у вас отображаются три линии?

multysea commented Jan 21, 2019

Да, три, средняя — движется, в соответствии с изменением температуры..

multysea commented Jan 21, 2019

У меня на этом модуле также стабильная прошивка и на реле кнопка и сценарий. Сценарий переклбчает кнопку в положение «включено» при понижении температуры, но не переключает в «выключено» при повышении.

multysea commented Jan 21, 2019

А может все же кто-то что-то посоветовать:-)? Кроме перезагрузки модуля, ее я изначально делал..

renat2985 commented Jan 21, 2019

@multysea скорее всего вы что-то не так подключили. Если у других все работает.

multiminik commented Jan 21, 2019

А может все же кто-то что-то посоветовать:-)? Кроме перезагрузки модуля, ее я изначально делал..

У вас пин подключенный к кнопке шунтирован через резистор к земле, либо питанию?

multysea commented Jan 21, 2019

Физической кнопки нет, только виртуальная, в интерфейсе

multiminik commented Jan 21, 2019 •

Виртуальная кнопка настроена через TACH? И я так понимаю, по умолчанию там прописан, в качестве пина, «gpio0» (то есть значение по умолчанию в конфигурации)? Если этот пин не привязан к плюсу питания через резистор в 10кОм, то на нём висит положительный потенциал — равный половине питания (1.65В). Т.е. пин не сконфигурирован должным образом. Отсюда и может появлятся проблема с вашей кнопкой. Также модуль при включении может не входить в рабочий режим, а уходить в режим прошивки при определенных условиях.

Читайте также:  Как правильно настроить заголовки

Egor2101 commented Jan 28, 2019

Сценарий по влажности и температуре на am2301 работал штатно. Подключил ds18b20 . На главной странице есть график и три линии. Но сценарий молчит. При нажатии кнопки управление график не отображается, а шкала температуры от 0 до 1.

multysea commented Feb 6, 2019 •

Большая просьба, все же, кому-то из разработчиков ответить в этой теме? Сценарии не работают! Датчик 18b20, и даже резистор между gpio0 и плюсом, как тут советовали, повесил. Все включено правильно, в трех проводах сложно напетлять. Сценарий не работает, виртуальные кнопки работают, реле переключаются. В сценарии — если температура меньше 25 — включить реле, если больше 29 — выключить. Прошивка стабильная. Модуль сам по себе не перегружается и в режим flash не входит, температуры с DHT11 и 18b20 и влажность с DHT11 показывает, линий на графике температуры c 18b20 — три.

Дополню. После выключения на длительное время и последующего включения начинает работать только первая задача сценария, если температура при включении модуля ниже порога, то реле включается, и его нельзя выключить даже кнопкой. А при повышении температуры до верхнего порога реле не выключается, но кнопкой его становится возможным выключить. И последнее, если включить модуль в то время как температура выше верхнего порога реле не включается. После охлаждения датчика — включается, но при нагреве до верхнего порога — не выключается. Много букв, но может быть это поможет лучше понять, что происходит и дать какие-то рекомендации?

mikemdr commented Feb 14, 2019 •

Решил проверить (чуть изменив исходник Scenary.ino) сценарий по-температуре (исходник — последний стабильный, 8266Core 2.3.0, т.к. на >2.3.0 в данном коде некорректно работает обновление по NTP)

Читайте также:  Откройте приложение настройки google настроить устройство поблизости

` void orCommand() <
String Name = readArgsString(); // Какой параметр проверяем
String Condition = readArgsString(); // Операция
String Volume = readArgsString(); // Значение параметра
String test = getStatus(Name); // получить текущее значение параметра

`
и вот что на выходе (у меня задано два сценария: «>27.00″ » 27 // 1-ый Сценарий
Volume 27 // заданная температура
Volume.toFloat() 27.00
test 27 // текущая температура из orCommand()[(test = getStatus(Name))]. А не 27.12.
test.toFloat() 27.00
thenOk = 0 // т.к. сравнивается 27.00>27.00, а не 27.12>27.00 , то команды на выполнение НЕ будет

temperature1(= 27 ) 27
Volume 27
Volume.toFloat() 27.00
test 26
test.toFloat() 26.00
thenOk = 0

temperature1(= 26 ) » использовать «>=» .

mikemdr commented Feb 14, 2019

если температура при включении модуля ниже порога, то реле включается, и его нельзя выключить даже кнопкой.

И, т.к. проверка кнопки идёт первой, то сначала подаётся команда на выключение, а через несколько микросекунд сценарий по температуре подаёт команду на включение.
Попробуйте поставить Сценарий-По-Кнопке последним.
P.S. Я несколько раз перешивал модуль (с предыдущей версией), думая что модуль глючит, т.к. он при нажатии кнопки выключался и тут-же включался, пока не понял, что если модуль включился по таймеру, то его можно выключить только отключив таймер .

mikemdr commented Feb 14, 2019

Ошибка возникала из-за того, что есть 3 функции:
boolean sendStatus(String Name, String volume) <>
boolean sendStatus(String Name, int volume) <>
boolean sendStatusF(String Name, float volume) <>.
У авторов:
flag = sendStatus(value, getStatusFloat(value));
а должно быть :
flag = sendStatusF(value, getStatusFloat(value));
иначе float getStatusFloat(value) интерпретировалась как int и записывалась только целая часть.

Источник

Оцените статью