• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Управление уведомлениями от wemos

Moseich

Member
Собрал девайс для контроля и управления котлом. Несколько дней проверял дома ( котел в 100км) - все работает.
Но мне не нравится то, что уведомления о предельном значении параметра не заканчиваются, идут каждую секунду . Можно ли программно квитировать их? Т.е. нажав кнопку остановить этот поток?
Код:
//KOTEL  пины  V2, V3  и V4 для датчиков.E_MAIL 

/* WEMOS. 3 датчика DS18В20  + RELE _ 19 апреля 2019

RELE1_GPIO=D5 и RELE2_GPIO=D6 используются в регуляторе температуры.

реле активируются сигналом "0".  Замыкающие контакты   RELE1   включены

вместо перемычки  котла через дополнительные контакты.  RELE1  требует дополнительного

разрешения на включение.   Для этого будет использовано RELE2 и стороннее реле,

управляемое пo SMS внешним GSM девайсом,  поскольку в надежности BLYNK пока нет уверенности*/

#define BLYNK_PRINT Serial

//не надеюсь на значения задействованных GPIO при старте, поэтому

//присваиваю такие , какие хочу получить при старте для блока из 2 реле

 const uint8_t RELE1_GPIO=D5;       //GPIO 14

 const uint8_t RELE1_ON=1;     

 const uint8_t RELE1_OFF=0;

 

const uint8_t RELE2_GPIO=D6;       //GPIO 12     



#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include <OneWire.h>

#include <DallasTemperature.h>

#include <SimpleTimer.h>



#define ONE_WIRE_BUS D4    //WEMOS пины D3 и D2  нельзя использ!!!!

int alarmPin = 7; //******************

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

//определяю пороги для регулятора температуры в градусах(в двух режимах):

int tmin=15;  // 7 - 9градусов - это поддерживаемый минимум температуры котловой воды

int tmax=17; //15-17гр - это заблаговременный (за 4 часа до выезда на дачу) нагрев



char auth[] =         

      char ssid[] = "";

      char pass[] = " ";



BlynkTimer timer;  // контроль непрерывности работы девайса.  

void myTimerEvent(){ 

Blynk.virtualWrite(V8, millis() / 2000);}



void setup()

{ 

Serial.begin(9600);

Serial.println(ESP.getFreeHeap());

Blynk.begin(auth, ssid, pass);

sensors.begin();

//Настройка функции, которая будет вызываться каждую секунду(timer)

timer.setInterval(1000L, myTimerEvent);

 timer.setInterval(2500L, sendTemps);

pinMode (RELE1_GPIO, OUTPUT);

pinMode (RELE2_GPIO, OUTPUT);
}

void sendTemps()
{   

sensors.requestTemperatures();

float temp = sensors.getTempCByIndex(0);

float temp1 = sensors.getTempCByIndex(1);

float temp2 = sensors.getTempCByIndex(2);

delay(2000);

Serial.println(temp );

Blynk.virtualWrite(V3, temp );    delay(100);

Blynk.virtualWrite(V4, temp1 );

Blynk.virtualWrite(V2, temp2 );

//регулятор  температуры

if ( temp <  tmin)

  digitalWrite(RELE1_GPIO,RELE1_ON);

 if ( temp  > tmax)

  digitalWrite(RELE1_GPIO,RELE1_OFF); 
}

  void mail() 
{
 // УВЕДОМЛЕНИЯ на смартфон *************************

float temp = sensors.getTempCByIndex(0);

if(temp <= 9)
  {
    Blynk.email(«……@mail.ru","Температура обратки менее 9C!"); // вызов API Blynk для отправки EMAIL
    Blynk.notify("  обратка  < 9C!!!»); // вызов API Blynk для отправки уведомлений
  }
}
void loop()
{
  Blynk.run();
sendTemps();
mail();
timer.run();
}
 

Сергей_Ф

Moderator
Команда форума
@Moseich вы программу сами писали? Что у вас шлёт предельные значения каждую секунду? Вот этот кусок кода и отключите при "нажатии кнопки".
Или вы хотите готовый скетч?
 

Moseich

Member
@Moseich вы программу сами писали? Что у вас шлёт предельные значения каждую секунду? Вот этот кусок кода и отключите при "нажатии кнопки".
Или вы хотите готовый скетч?
Я копипастер , слепил сам этот скетч из разных. Поэтому и попросил помочь. Спасибо за подсказку- понял что отключить надо таймеры. Кнопку я пропишу в приложении и привяжу к физическому пину, например D0. при нажатии на этом пине появится нужный уровень - тоже понимаю. но как сформулировать условие отключения куска кода не могу домыслить-старею.
if D0 = 0 { timer.setInterval = работает }
if D0 = 1 {timer.setInterval = не работаеt}
 

Сергей_Ф

Moderator
Команда форума
Кнопку я пропишу в приложении и привяжу к физическому пину, например D0.
зачем это? "Привязка"нужна только для какого то физического действия - сработка реле, зажигания светодиода.

Могу предположить, что шлёт у вас
  • timer.setInterval(1000L, myTimerEvent);
Вот можете этот таймер отключить вообще или задать ему интервал побольше.

Почитайте
 
Последнее редактирование:

Moseich

Member
зачем это? "Привязка"нужна только для какого то физического действия - сработка реле, зажигания светодиода.

Могу предположить, что шлёт у вас

Вот можете этот таймер отключить вообще или задать ему интервал побольше.

Почитайте
Спасибо , буду вникать! В основном я "настраиваю свои" скетчи методом тыка, к сожалению.
 

nikolz

Well-known member
Спасибо , буду вникать! В основном я "настраиваю свои" скетчи методом тыка, к сожалению.
а изучить основы лень мешает, или гордость не позволяет?
--------------
вот в этом условии
  1. if(temp <= 9)
  2. {
  3. Blynk.email(«……@mail.ru","Температура обратки менее 9C!"); // вызов API Blynk для отправки EMAIL
  4. Blynk.notify(" обратка < 9C!!!»); // вызов API Blynk для отправки уведомлений
  5. }

добавьте флаг нажатия кнопки
флагом управляйте от внешней кнопки
когда флаг false условие не будет исполняться
условие будет записано так
if((temp<=9)&& flag)
{
 

Сергей_Ф

Moderator
Команда форума
@nikolz вы уверены, что посоветовали правильно? У ТС в этом случае не будет уведомления о критической температуры. А он хочет избавиться от информирования о предельных значениях, которые идут каждую секунду.
 

nikolz

Well-known member
@nikolz вы уверены, что посоветовали правильно? У ТС в этом случае не будет уведомления о критической температуры. А он хочет избавиться от информирования о предельных значениях, которые идут каждую секунду.
я понял так, что если температура меньше 9 то посылает сигнал. меньше 9 это критическое значение или нет?
далее чел хочет чтобы по кнопке отключать это извещение
в приведенном условии сообщается о том что темп меньше
мы его и блокируем по кнопке
если есть другое критические то блокировка делается аналогично.
возможно что-то пропустил.
 

Сергей_Ф

Moderator
Команда форума
@nikolz вы невнимательно посмотрели. ТС хочет отключить сообщения, которые посылает программа каждую секунду. Это делает таймер, запуская процедуру myTimerEvent. Что там посылается - я не знаю, но понял именно так. А уведомление опускание ниже предела температуры, отключать вряд ли надо. Смысл всего этого именно получить уведомление об этом.
 

Moseich

Member
Сергей_Ф, С таймерами я разобрался . И мне показалось, что Вы не поняли моего вопроса.
Уведомления приходят только по условию и мне нужно, чтобы это происходило однократно.
Да, таймер тут совсем не нужен, т.к. с каждым новым циклом сигнал заново формируется:
if(temp <= 9)
{ Blynk.notify(" обратка < 9C!!!»);
}

Как правильно записать следующую команду типа disable (Blynk.notify)-
остановить дальнейшее формирование синала?
 

Moseich

Member
Пока сочинял уже появились два сообщения.
я понял так, что если температура меньше 9 то посылает сигнал. меньше 9 это критическое значение или нет?
далее чел хочет чтобы по кнопке отключать это извещение
в приведенном условии сообщается о том что темп меньше
мы его и блокируем по кнопке
...
оПока писал появились новые сообщения.
Да, 9 градусов - это околокритическое состояние котла. При 7 градусах в обратке он переходит в неуправляемый режим спасения самого себя от разморозки, который нельзя выключить. ( это я про свой котел Виссман, другими не интересовался). Смартфон всегда при мне и я могу дистанционно либо включить доп нагрев, либо отключить его питание.
 

Moseich

Member
@nikolz вы невнимательно посмотрели. ТС хочет отключить сообщения, которые посылает программа каждую секунду. Это делает таймер, запуская процедуру myTimerEvent. Что там посылается - я не знаю, но понял именно так. А уведомление опускание ниже предела температуры, отключать вряд ли надо. Смысл всего этого именно получить уведомление об этом.
Я отключил эти таймеры (я же их скопипастил) и ничего не изменилось
 

Moseich

Member
а изучить основы лень мешает, или гордость не позволяет?
--------------
вот в этом условии
  1. if(temp <= 9)
  2. {
  3. Blynk.email(«……@mail.ru","Температура обратки менее 9C!"); // вызов API Blynk для отправки EMAIL
  4. Blynk.notify(" обратка < 9C!!!»); // вызов API Blynk для отправки уведомлений
  5. }

добавьте флаг нажатия кнопки
флагом управляйте от внешней кнопки
когда флаг false условие не будет исполняться
условие будет записано так
if((temp<=9)&& flag)
{
Изучать основы в 74 года я конечно пытаюсь, но память сильно подводит. Именно из-за этого я стал изучать ардуино, как только перестал работать в прошлом году. Чтобы тренировать извилины, При чем тут гордость.
 

Сергей_Ф

Moderator
Команда форума
@nikolz извинююсь, это я не так понял автора оказывается.
@Moseich а кнопка, то вам какая нужна? аппаратная или на экране смартфона?
Как вы отключили таймер и как вы увидели, что ничего не происходит? У вас два таймера. Один отправляет температуру, каждые 2500мс, другой каждую секунду вызывает процедуру для поддержания связи, как я понял.
Вам надо сделать как сказал @nikolz - по нажатию кнопки присвоить flag значение false, тогда уведомления больше не придут до сброса этого flag обратно в true.
 
Последнее редактирование:

nikolz

Well-known member
Изучать основы в 74 года я конечно пытаюсь, но память сильно подводит. Именно из-за этого я стал изучать ардуино, как только перестал работать в прошлом году. Чтобы тренировать извилины, При чем тут гордость.
У вас очень сырой алгоритм.
Алгоритм это не программа, а последовательность действий приводящая к желаемому результату.
алгоритмы пишутся на том языке, на котором чел умеет мыслить.
В данном случае полагаю это русский язык. Вы его знаете достаточно хорошо.
Когда напишите алгоритм то наступит время перевода его в программу
Это как перевод рассказа с одного языка на другой - можно сделать со словарем. можно скопировать из него целые фразы.
Но сначала пишется рассказ, а потом перевод.
----------------------------------------------------------
Тренировка извилин эффективнее продляет жизнь, чем тренировка мышц.
 

nikolz

Well-known member
относительно программы
у таймеров есть два режима - автомат и однократно
и еще таймер можно остановить и снова запустить.
Останавливать и запускать можно по кнопке.
 

Moseich

Member
nikolz, Я согласен с Вашими тезисами, но у меня возникла срочная необходимость заменить работавший 8 лет девайс из телефона сименс С25 и интерфейса ( аналог сегодняшних GSM модулей охраны). Он полностью управлял котлом и поливом на даче. Две недели назад я понял, что не смогу восстановить его и решил заменить ардуино-есп. И все это время копипастил. Не до красоты алгоритма - главное чтобы работал.
Завтра уезжаю - посевная начинается! Спасибо, я буду следовать Вашим советам.
 
Сверху Снизу