Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Раздел для начинающих", создана пользователем Moseich, 20 апр 2019.

  1. Moseich

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    Собрал девайс для контроля и управления котлом. Несколько дней проверял дома ( котел в 100км) - все работает.
    Но мне не нравится то, что уведомления о предельном значении параметра не заканчиваются, идут каждую секунду . Можно ли программно квитировать их? Т.е. нажав кнопку остановить этот поток?
    Код (Text):
    1.  
    2.  
    3. //KOTEL  пины  V2, V3  и V4 для датчиков.E_MAIL
    4.  
    5. /* WEMOS. 3 датчика DS18В20  + RELE _ 19 апреля 2019
    6.  
    7. RELE1_GPIO=D5 и RELE2_GPIO=D6 используются в регуляторе температуры.
    8.  
    9. реле активируются сигналом "0".  Замыкающие контакты   RELE1   включены
    10.  
    11. вместо перемычки  котла через дополнительные контакты.  RELE1  требует дополнительного
    12.  
    13. разрешения на включение.   Для этого будет использовано RELE2 и стороннее реле,
    14.  
    15. управляемое пo SMS внешним GSM девайсом,  поскольку в надежности BLYNK пока нет уверенности*/
    16.  
    17. #define BLYNK_PRINT Serial
    18.  
    19. //не надеюсь на значения задействованных GPIO при старте, поэтому
    20.  
    21. //присваиваю такие , какие хочу получить при старте для блока из 2 реле
    22.  
    23.  const uint8_t RELE1_GPIO=D5;       //GPIO 14
    24.  
    25.  const uint8_t RELE1_ON=1;    
    26.  
    27.  const uint8_t RELE1_OFF=0;
    28.  
    29.  
    30.  
    31. const uint8_t RELE2_GPIO=D6;       //GPIO 12    
    32.  
    33.  
    34.  
    35. #include <ESP8266WiFi.h>
    36.  
    37. #include <BlynkSimpleEsp8266.h>
    38.  
    39. #include <OneWire.h>
    40.  
    41. #include <DallasTemperature.h>
    42.  
    43. #include <SimpleTimer.h>
    44.  
    45.  
    46.  
    47. #define ONE_WIRE_BUS D4    //WEMOS пины D3 и D2  нельзя использ!!!!
    48.  
    49. int alarmPin = 7; //******************
    50.  
    51. OneWire oneWire(ONE_WIRE_BUS);
    52.  
    53. DallasTemperature sensors(&oneWire);
    54.  
    55. //определяю пороги для регулятора температуры в градусах(в двух режимах):
    56.  
    57. int tmin=15;  // 7 - 9градусов - это поддерживаемый минимум температуры котловой воды
    58.  
    59. int tmax=17; //15-17гр - это заблаговременный (за 4 часа до выезда на дачу) нагрев
    60.  
    61.  
    62.  
    63. char auth[] =        
    64.  
    65.       char ssid[] = "";
    66.  
    67.       char pass[] = " ";
    68.  
    69.  
    70.  
    71. BlynkTimer timer;  // контроль непрерывности работы девайса.  
    72.  
    73. void myTimerEvent(){
    74.  
    75. Blynk.virtualWrite(V8, millis() / 2000);}
    76.  
    77.  
    78.  
    79. void setup()
    80.  
    81. {
    82.  
    83. Serial.begin(9600);
    84.  
    85. Serial.println(ESP.getFreeHeap());
    86.  
    87. Blynk.begin(auth, ssid, pass);
    88.  
    89. sensors.begin();
    90.  
    91. //Настройка функции, которая будет вызываться каждую секунду(timer)
    92.  
    93. timer.setInterval(1000L, myTimerEvent);
    94.  
    95.  timer.setInterval(2500L, sendTemps);
    96.  
    97. pinMode (RELE1_GPIO, OUTPUT);
    98.  
    99. pinMode (RELE2_GPIO, OUTPUT);
    100. }
    101.  
    102. void sendTemps()
    103. {  
    104.  
    105. sensors.requestTemperatures();
    106.  
    107. float temp = sensors.getTempCByIndex(0);
    108.  
    109. float temp1 = sensors.getTempCByIndex(1);
    110.  
    111. float temp2 = sensors.getTempCByIndex(2);
    112.  
    113. delay(2000);
    114.  
    115. Serial.println(temp );
    116.  
    117. Blynk.virtualWrite(V3, temp );    delay(100);
    118.  
    119. Blynk.virtualWrite(V4, temp1 );
    120.  
    121. Blynk.virtualWrite(V2, temp2 );
    122.  
    123. //регулятор  температуры
    124.  
    125. if ( temp <  tmin)
    126.  
    127.   digitalWrite(RELE1_GPIO,RELE1_ON);
    128.  
    129.  if ( temp  > tmax)
    130.  
    131.   digitalWrite(RELE1_GPIO,RELE1_OFF);
    132. }
    133.  
    134.   void mail()
    135. {
    136.  // УВЕДОМЛЕНИЯ на смартфон *************************
    137.  
    138. float temp = sensors.getTempCByIndex(0);
    139.  
    140. if(temp <= 9)
    141.   {
    142.     Blynk.email(«……@mail.ru","Температура обратки менее 9C!"); // вызов API Blynk для отправки EMAIL
    143.     Blynk.notify("  обратка  < 9C!!!»); // вызов API Blynk для отправки уведомлений
    144.   }
    145. }
    146. void loop()
    147. {
    148.   Blynk.run();
    149. sendTemps();
    150. mail();
    151. timer.run();
    152. }
    153.  
    154.  
     
  2. nikolz

    nikolz Гуру

    Сообщения:
    4.489
    Симпатии:
    443
    можно.
     
  3. Moseich

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    Я догадывался об этом, но не знаю как, поэтому попросил помощи. Вас не затруднит ответить как?
    котел.png хочется на той неделе смонтировать.
     
  4. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.148
    Симпатии:
    226
    @Moseich вы программу сами писали? Что у вас шлёт предельные значения каждую секунду? Вот этот кусок кода и отключите при "нажатии кнопки".
    Или вы хотите готовый скетч?
     
  5. Moseich

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    Я копипастер , слепил сам этот скетч из разных. Поэтому и попросил помочь. Спасибо за подсказку- понял что отключить надо таймеры. Кнопку я пропишу в приложении и привяжу к физическому пину, например D0. при нажатии на этом пине появится нужный уровень - тоже понимаю. но как сформулировать условие отключения куска кода не могу домыслить-старею.
    if D0 = 0 { timer.setInterval = работает }
    if D0 = 1 {timer.setInterval = не работаеt}
     
  6. Сергей_Ф

    Сергей_Ф Moderator Команда форума

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

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

    Почитайте
     
    Последнее редактирование: 21 апр 2019
  7. Moseich

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    Спасибо , буду вникать! В основном я "настраиваю свои" скетчи методом тыка, к сожалению.
     
  8. nikolz

    nikolz Гуру

    Сообщения:
    4.489
    Симпатии:
    443
    а изучить основы лень мешает, или гордость не позволяет?
    --------------
    вот в этом условии
    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)
    {
     
  9. Сергей_Ф

    Сергей_Ф Moderator Команда форума

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

    nikolz Гуру

    Сообщения:
    4.489
    Симпатии:
    443
    я понял так, что если температура меньше 9 то посылает сигнал. меньше 9 это критическое значение или нет?
    далее чел хочет чтобы по кнопке отключать это извещение
    в приведенном условии сообщается о том что темп меньше
    мы его и блокируем по кнопке
    если есть другое критические то блокировка делается аналогично.
    возможно что-то пропустил.
     
    Moseich нравится это.
  11. Сергей_Ф

    Сергей_Ф Moderator Команда форума

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

    Moseich Новичок

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

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

    Moseich Новичок

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

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    Я отключил эти таймеры (я же их скопипастил) и ничего не изменилось
     
  15. Moseich

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    Изучать основы в 74 года я конечно пытаюсь, но память сильно подводит. Именно из-за этого я стал изучать ардуино, как только перестал работать в прошлом году. Чтобы тренировать извилины, При чем тут гордость.
     
  16. Сергей_Ф

    Сергей_Ф Moderator Команда форума

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

    nikolz Гуру

    Сообщения:
    4.489
    Симпатии:
    443
    У вас очень сырой алгоритм.
    Алгоритм это не программа, а последовательность действий приводящая к желаемому результату.
    алгоритмы пишутся на том языке, на котором чел умеет мыслить.
    В данном случае полагаю это русский язык. Вы его знаете достаточно хорошо.
    Когда напишите алгоритм то наступит время перевода его в программу
    Это как перевод рассказа с одного языка на другой - можно сделать со словарем. можно скопировать из него целые фразы.
    Но сначала пишется рассказ, а потом перевод.
    ----------------------------------------------------------
    Тренировка извилин эффективнее продляет жизнь, чем тренировка мышц.
     
    Moseich нравится это.
  18. nikolz

    nikolz Гуру

    Сообщения:
    4.489
    Симпатии:
    443
    относительно программы
    у таймеров есть два режима - автомат и однократно
    и еще таймер можно остановить и снова запустить.
    Останавливать и запускать можно по кнопке.
     
  19. Moseich

    Moseich Новичок

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

Поделиться этой страницей