Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <EEPROM.h>
- #include <RCSwitch.h>
- RCSwitch mySwitch = RCSwitch();
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- #include <WiFiUdp.h> //часы
- #include <WiFiClient.h>
- #include <ESP8266WebServer.h>
- #include <ESP8266mDNS.h>
- #include <ESP8266HTTPUpdateServer.h>
- /////////////////для часов/////////////////////////////////////////////////////////////////
- unsigned int localPort = 2390; // local port to listen for UDP packets
- /* Don't hardwire the IP address or we won't get the benefits of the pool.
- Lookup the IP address for the host name instead */
- //IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server
- IPAddress timeServerIP; // time.nist.gov NTP server address
- const char* ntpServerName = "time.nist.gov";
- const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
- byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
- #define GMT 6 //часовой пояс
- long evTimeClock;
- long start_sinh; //старт синхронизации часов
- byte state_clock = 1;
- // A UDP instance to let us send and receive packets over UDP
- WiFiUDP udp;
- long secsSince1900 = 0;
- long secsSince1900_2 = 0;//unix time с 1900 года 1 яанваря (время последнего удачного онлайн обнавления).
- long highWord;
- long lowWord;
- long epoch;
- byte weekday = 4;// день недели
- byte day = 1;// число месяца
- int year = 1970;// год
- byte month = 1;// месяц
- int month_days; //дней в месяце
- long count_day; //количество дней с 1970 года 1 яанваря по текущее время
- long v_year; //кличество дней в году
- long next_year; //количество дней с 1970 года 1 яанваря, до зовершения текущего года
- int next_month; //количество дней от ночала текущего года до зовершения текущего месяца
- int count_day_curent_year; //сколько прошло дней в текущем году
- //int accuracy = 0; //буфер погрешности времени при подсчете оффлайн (в милисекундах)
- String curent_time = ""; //вывод текущего времени и даты
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- String str = "";
- boolean conf = false;
- String html_header = "<html>\
- <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
- <head>\
- <title>Wi-Fi Switch 1</title>\
- <style>\
- body { background-color: #00FF00; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }\
- </style>\
- </head>";
- ESP8266WebServer server(80);
- ESP8266HTTPUpdateServer httpUpdater;
- byte len_ssid, len_pass, len_mqtt_server, len_mqtt_port, len_mqtt_user, len_mqtt_pass;
- const char* host = "VPN";
- String ssid = "VPN";
- String pass = "8888888888";
- const char *ssid_ap = "Wi-Fi_relay2"; //имя точки доступа
- const char *pass_ap = "AP12345678";//пароль точки доступа
- //////////////////////настройки для MQTT///////////////////////////////
- //все в eeprom хранится ///////////////////////////////////////////////
- String mqtt_server = "10.160.254.26";
- String buf_mqtt_port = "8883";
- String mqtt_user = "Aaaaa";
- String mqtt_pass = "Bbbbbb";
- uint16_t mqtt_port;
- /////////////////////////////////////////////////////////////////////////
- #define ONLINE "relay/online" //топик о состоянии устройства - в сети\ не в сети
- #define OUT1 "relay/out1" //топик для управления каналом 1
- #define OUT2 "relay/out2" //топик для управления каналом 2
- #define OUT3 "relay/out3" //топик для управления каналом 3
- #define OUT4 "relay/out4" //топик для управления каналом 4
- #define STAT1 "relay/stat1" //топик для обратной связи, текущее состояние вых. 1
- #define STAT2 "relay/stat2" //топик для обратной связи, текущее состояние вых. 2
- #define STAT3 "relay/stat3" //топик для обратной связи, текущее состояние вых. 3
- #define STAT4 "relay/stat4" //топик для обратной связи, текущее состояние вых. 4
- #define DEF1 "relay/def1" //топик для розетка1 "по умолчанию"
- #define DEF2 "relay/def2" //топик для розетка2 "по умолчанию"
- #define DEF3 "relay/def3" //топик для розетка3 "по умолчанию"
- #define DEF4 "relay/def4" //топик для розетка4 "по умолчанию"
- #define TIMER_ON1 "relay/timer_on1" //топик для вкл\выкл таймера 1
- #define TIMER_ON2 "relay/timer_on2" //топик для вкл\выкл таймера 2
- #define TIMER_ON3 "relay/timer_on3" //топик для вкл\выкл таймера 3
- #define TIMER_ON4 "relay/timer_on4" //топик для вкл\выкл таймера 4
- #define SET_TIME_1H "relay/set_time1h" //топик для установки часов таймера 1
- #define SET_TIME_2H "relay/set_time2h" //топик для установки часов таймера 2
- #define SET_TIME_3H "relay/set_time3h" //топик для установки часов таймера 3
- #define SET_TIME_4H "relay/set_time4h" //топик для установки часов таймера 4
- #define SET_TIME_1M "relay/set_time1m" //топик для установки минут таймера 1
- #define SET_TIME_2M "relay/set_time2m" //топик для установки минут таймера 2
- #define SET_TIME_3M "relay/set_time3m" //топик для установки минут таймера 3
- #define SET_TIME_4M "relay/set_time4m" //топик для установки минут таймера 4
- #define SET_TIME_1S "relay/set_time1s" //топик для установки секунд таймера 1
- #define SET_TIME_2S "relay/set_time2s" //топик для установки секунд таймера 2
- #define SET_TIME_3S "relay/set_time3s" //топик для установки секунд таймера 3
- #define SET_TIME_4S "relay/set_time4s" //топик для установки секунд таймера 4
- #define TIME1 "relay/time1" //топик о прошедшем времени таймера 1
- #define TIME2 "relay/time2" //топик о прошедшем времени таймера 2
- #define TIME3 "relay/time3" //топик о прошедшем времени таймера 3
- #define TIME4 "relay/time4" //топик о прошедшем времени таймера 4
- #define CURENT_TIME "relay/curent_time" //текущее дата и время.
- #define WEEKDEY1 "relay/weekday1" //будильник 1 по дням недели
- #define WEEKDEY2 "relay/weekday2" //будильник 2 по дням недели
- #define WEEKDEY3 "relay/weekday3" //будильник 3 по дням недели
- #define WEEKDEY4 "relay/weekday4" //будильник 4 по дням недели
- /////////////////настройки для радиобрелка///////////////////////////
- #define KEY_A 1855936 //код клавиши А
- #define KEY_B 1855792 // код клавиши В
- #define KEY_C 1855756 //код клавиши С
- #define KEY_D 1855747 //код клавиши D
- #define KEY_AB 1855984 //ПЕРЕЗАГРУЗКА
- #define KEY_AC 1855759 //(CD key) стирает ssid & pass & mqtt параметры подключений.
- /////////////////////////////////////////////////////////////////////
- byte def1;// состояние розетки 1 "по умолчанию"
- byte def2;// состояние розетки 2 "по умолчанию"
- byte def3;// состояние розетки 3 "по умолчанию"
- byte def4;// состояние розетки 4 "по умолчанию"
- byte count_con = 0; // колличество подключений к wi-fi AP
- #define BUFFER_SIZE 100
- int led_r = 5; // красный свето-диод - режим точки доступа, мигающий - нстройки ssid сохранены, ожидание перезагрузки пользоватилем
- int led_g = 15; // зеленый свето-диод - wi-fi подключен, мигающий - попытка подключится к сети с сохраненным ssid,
- // оранжевый (красный + зеленый) - успешно подключен к wi-fi и mqtt брокеру
- boolean red_led_blink = 0; // флаг для запуска мигания красным свето-диодом
- byte timer_on1 = 0;// переменная для включения таймера 1-ой розетки: 0 - выкл, 1-включен для отключения розетки, 2 - включен для включения розетки.3-будильник для выкл. розетки 4- буд. для вкл. розетки
- byte timer_on2 = 0;// переменная для включения таймера 2-ой розетки: 0 - выкл, 1-включен для отключения розетки, 2 - включен для включения розетки.
- byte timer_on3 = 0;// переменная для включения таймера 3-ей розетки: 0 - выкл, 1-включен для отключения розетки, 2 - включен для включения розетки.
- byte timer_on4 = 0;// переменная для включения таймера 4-ой розетки: 0 - выкл, 1-включен для отключения розетки, 2 - включен для включения розетки.
- String time1 = "";// переменная для отображения прошедшего времени с момента старта таймера 1
- String time2 = "";// переменная для отображения прошедшего времени с момента старта таймера 2
- String time3 = "";// переменная для отображения прошедшего времени с момента старта таймера 3
- String time4 = "";// переменная для отображения прошедшего времени с момента старта таймера 4
- unsigned long set_time1 = 0;// переменная для установки времени таймера 1-ой розетки (в милисекундах)
- unsigned long set_time2 = 0;// переменная для установки времени таймера 2-ой розетки (в милисекундах)
- unsigned long set_time3 = 0;// переменная для установки времени таймера 3-ей розетки (в милисекундах)
- unsigned long set_time4 = 0;// переменная для установки времени таймера 4-ой розетки (в милисекундах)
- long evTime1; //переменная для снятия показания времени с millis() для начала отсчета времени таймера 1
- long evTime2; //переменная для снятия показания времени с millis() для начала отсчета времени таймера 2
- long evTime3; //переменная для снятия показания времени с millis() для начала отсчета времени таймера 3
- long evTime4; //переменная для снятия показания времени с millis() для начала отсчета времени таймера 4
- boolean timer_start1 = 0; // 0 - таймер остановлен, 1- таймер запущен
- boolean timer_start2 = 0; // 0 - таймер остановлен, 1- таймер запущен
- boolean timer_start3 = 0; // 0 - таймер остановлен, 1- таймер запущен
- boolean timer_start4 = 0; // 0 - таймер остановлен, 1- таймер запущен
- boolean alarm1_0; //флаг для установки 1 - ого будильника на воскресенье
- boolean alarm1_1; //флаг для установки 1 - ого будильника на понедельник
- boolean alarm1_2; //флаг для установки 1 - ого будильника на вторник
- boolean alarm1_3; //флаг для установки 1 - ого будильника на среда
- boolean alarm1_4; //флаг для установки 1 - ого будильника на четверг
- boolean alarm1_5; //флаг для установки 1 - ого будильника на пятница
- boolean alarm1_6; //флаг для установки 1 - ого будильника на суббота
- boolean alarm2_0; //флаг для установки 2 - ого будильника на воскресенье
- boolean alarm2_1; //флаг для установки 2 - ого будильника на понедельник
- boolean alarm2_2; //флаг для установки 2 - ого будильника на вторник
- boolean alarm2_3; //флаг для установки 2 - ого будильника на среда
- boolean alarm2_4; //флаг для установки 2 - ого будильника на четверг
- boolean alarm2_5; //флаг для установки 2 - ого будильника на пятница
- boolean alarm2_6; //флаг для установки 2 - ого будильника на суббота
- boolean alarm3_0; //флаг для установки 3 - ого будильника на воскресенье
- boolean alarm3_1; //флаг для установки 3 - ого будильника на понедельник
- boolean alarm3_2; //флаг для установки 3 - ого будильника на вторник
- boolean alarm3_3; //флаг для установки 3 - ого будильника на среда
- boolean alarm3_4; //флаг для установки 3 - ого будильника на четверг
- boolean alarm3_5; //флаг для установки 3 - ого будильника на пятница
- boolean alarm3_6; //флаг для установки 3 - ого будильника на суббота
- boolean alarm4_0; //флаг для установки 4 - ого будильника на воскресенье
- boolean alarm4_1; //флаг для установки 4 - ого будильника на понедельник
- boolean alarm4_2; //флаг для установки 4 - ого будильника на вторник
- boolean alarm4_3; //флаг для установки 4 - ого будильника на среда
- boolean alarm4_4; //флаг для установки 4 - ого будильника на четверг
- boolean alarm4_5; //флаг для установки 4 - ого будильника на пятница
- boolean alarm4_6; //флаг для установки 4 - ого будильника на суббота
- long buf_ss1 = 0;
- long buf_ss2 = 0;
- long buf_ss3 = 0;
- long buf_ss4 = 0;
- int set_time1h;
- int set_time2h;
- int set_time3h;
- int set_time4h;
- int set_time1m;
- int set_time2m;
- int set_time3m;
- int set_time4m;
- int set_time1s;
- int set_time2s;
- int set_time3s;
- int set_time4s;
- String bufer;
- byte step_mqtt_send = 0; //переменная для поочередной (по однаму сообщению за цикл loop) отправки исходящих сообщений mqtt
- //в ходе опытов было установленно что отправка одного исходяжего сообщения занемает не малое время, где то 500 милисек
- // таким образом если отправлять за раз много сообщений (около 10) то это создает длительное преривание цикла loop
- WiFiClient wclient;
- PubSubClient client(wclient);
- // Функция получения данных от сервера
- long eventTime; // для снятия текущего времени с начала старта.
- long evTimeconn;
- boolean flagconn = 1;// флаг для однакратного подключения к wi fi
- long loop_start;
- long loop_end;
- String wifi_scan = "";
- void alarm1_stat(){
- if(timer_on1 >=3){
- time1 = "";
- if(timer_on1 == 3){
- time1 += "выкл. в: ";
- }else{
- time1 += "вкл. в: ";
- }
- time1 += String(set_time1h);
- time1 += ':';
- if(set_time1m < 10)time1 += '0';
- time1 += String(set_time1m);
- time1 += "--";
- if(alarm1_1 == 1)time1 += "Пн,";
- if(alarm1_2 == 1)time1 += "Вт,";
- if(alarm1_3 == 1)time1 += "Ср,";
- if(alarm1_4 == 1)time1 += "Чт,";
- if(alarm1_5 == 1)time1 += "Пт,";
- if(alarm1_6 == 1)time1 += "Сб,";
- if(alarm1_0 == 1)time1 += "Вс,";
- time1 += '\n';
- if (client.connected())client.publish(TIME1, String (time1));
- }
- }
- void alarm2_stat(){
- if(timer_on2 >=3){
- time2 = "";
- if(timer_on2 == 3){
- time2 += "выкл. в: ";
- }else{
- time2 += "вкл. в: ";
- }
- time2 += String(set_time2h);
- time2 += ':';
- if(set_time2m < 10)time2 += '0';
- time2 += String(set_time2m);
- time2 += "--";
- if(alarm2_1 == 1)time2 += "Пн,";
- if(alarm2_2 == 1)time2 += "Вт,";
- if(alarm2_3 == 1)time2 += "Ср,";
- if(alarm2_4 == 1)time2 += "Чт,";
- if(alarm2_5 == 1)time2 += "Пт,";
- if(alarm2_6 == 1)time2 += "Сб,";
- if(alarm2_0 == 1)time2 += "Вс,";
- time2 += '\n';
- if (client.connected())client.publish(TIME2, String (time2));
- }
- }
- void alarm3_stat(){
- if(timer_on3 >=3){
- time3 = "";
- if(timer_on3 == 3){
- time3 += "выкл. в: ";
- }else{
- time3 += "вкл. в: ";
- }
- time3 += String(set_time3h);
- time3 += ':';
- if(set_time3m < 10)time3 += '0';
- time3 += String(set_time3m);
- time3 += "--";
- if(alarm3_1 == 1)time3 += "Пн,";
- if(alarm3_2 == 1)time3 += "Вт,";
- if(alarm3_3 == 1)time3 += "Ср,";
- if(alarm3_4 == 1)time3 += "Чт,";
- if(alarm3_5 == 1)time3 += "Пт,";
- if(alarm3_6 == 1)time3 += "Сб,";
- if(alarm3_0 == 1)time3 += "Вс,";
- time3 += '\n';
- if (client.connected())client.publish(TIME3, String (time3));
- }
- }
- void alarm4_stat(){
- if(timer_on4 >=3){
- time4 = "";
- if(timer_on4 == 3){
- time4 += "выкл. в: ";
- }else{
- time4 += "вкл. в: ";
- }
- time4 += String(set_time4h);
- time4 += ':';
- if(set_time4m < 10)time4 += '0';
- time4 += String(set_time4m);
- time4 += "--";
- if(alarm4_1 == 1)time4 += "Пн,";
- if(alarm4_2 == 1)time4 += "Вт,";
- if(alarm4_3 == 1)time4 += "Ср,";
- if(alarm4_4 == 1)time4 += "Чт,";
- if(alarm4_5 == 1)time4 += "Пт,";
- if(alarm4_6 == 1)time4 += "Сб,";
- if(alarm4_0 == 1)time4 += "Вс,";
- time4 += '\n';
- if (client.connected())client.publish(TIME4, String (time4));
- }
- }
- void callback(const MQTT::Publish& pub){
- //Serial.print(pub.topic()); // выводим в сериал порт название топика
- //Serial.print(" => ");
- //Serial.println(pub.payload_string()); // выводим в сериал порт значение полученных данных
- bufer = pub.payload_string();
- if (String(pub.topic()) == OUT1) // проверяем из нужного ли нам топика пришли данные
- {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- digitalWrite(16, stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- if (digitalRead(16) == HIGH) {
- client.publish(STAT1, String ("выкл."));
- if (timer_on1 == 1) {
- evTime1 = millis();
- timer_start1 = 0;
- }
- } else {
- client.publish(STAT1, String ("вкл."));
- if (timer_on1 == 2) {
- evTime1 = millis();
- timer_start1 = 0;
- }
- }
- }
- //delay(1);
- if (String(pub.topic()) == OUT2) // проверяем из нужного ли нам топика пришли данные
- {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- digitalWrite(14, stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- if (digitalRead(14) == HIGH) {
- client.publish(STAT2, String ("выкл."));
- if (timer_on2 == 1) {
- evTime2 = millis();
- timer_start2 = 0;
- }
- } else {
- client.publish(STAT2, String ("вкл."));
- if (timer_on2 == 2) {
- evTime2 = millis();
- timer_start2 = 0;
- }
- }
- }
- //delay(1);
- if (String(pub.topic()) == OUT3) // проверяем из нужного ли нам топика пришли данные
- {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- digitalWrite(12, stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- if (digitalRead(12) == HIGH) {
- client.publish(STAT3, String ("выкл."));
- if (timer_on3 == 1) {
- evTime3 = millis();
- timer_start3 = 0;
- }
- } else {
- client.publish(STAT3, String ("вкл."));
- if (timer_on3 == 2) {
- evTime3 = millis();
- timer_start3 = 0;
- }
- }
- }
- //delay(1);
- if (String(pub.topic()) == OUT4) // проверяем из нужного ли нам топика пришли данные
- {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- digitalWrite(13, stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- if (digitalRead(13) == HIGH) {
- client.publish(STAT4, String ("выкл."));
- if (timer_on4 == 1) {
- evTime4 = millis();
- timer_start4 = 0;
- }
- } else {
- client.publish(STAT4, String ("вкл."));
- if (timer_on4 == 2) {
- evTime4 = millis();
- timer_start4 = 0;
- }
- }
- }
- //delay(1);
- if (String(pub.topic()) == DEF1) // проверяем из нужного ли нам топика пришли данные
- {
- int buf_def1 = bufer.toInt(); // преобразуем полученные данные в тип integer
- if (EEPROM.read(115) != buf_def1)EEPROM.write(115, buf_def1); // записываем значение состояние розетки 1 "по умолчанию" в 1 ячейку eeprom
- EEPROM.commit();
- }
- //delay(1);
- if (String(pub.topic()) == DEF2) // проверяем из нужного ли нам топика пришли данные
- {
- int buf_def2 = bufer.toInt(); // преобразуем полученные данные в тип integer
- if (EEPROM.read(117) != buf_def2)EEPROM.write(117, buf_def2); // записываем значение состояние розетки 2 "по умолчанию" в 3 ячейку eeprom
- EEPROM.commit();
- }
- //delay(1);
- if (String(pub.topic()) == DEF3) // проверяем из нужного ли нам топика пришли данные
- {
- int buf_def3 = bufer.toInt(); // преобразуем полученные данные в тип integer
- if (EEPROM.read(119) != buf_def3)EEPROM.write(119, buf_def3); // записываем значение состояние розетки 2 "по умолчанию" в 3 ячейку eeprom
- EEPROM.commit();
- }
- //delay(1);
- if (String(pub.topic()) == DEF4) // проверяем из нужного ли нам топика пришли данные
- {
- int buf_def4 = bufer.toInt(); // преобразуем полученные данные в тип integer
- if (EEPROM.read(121) != buf_def4)EEPROM.write(121, buf_def4); // записываем значение состояние розетки 2 "по умолчанию" в 3 ячейку eeprom
- EEPROM.commit();
- }
- // delay(1);
- if (String(pub.topic()) == TIMER_ON1) {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- timer_on1 = stled;
- //delay(1);
- if(timer_on1 >= 3)alarm1_stat();
- }
- if (String(pub.topic()) == TIMER_ON2) {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- timer_on2 = stled;
- // delay(1);
- if(timer_on2 >= 3)alarm2_stat();
- }
- if (String(pub.topic()) == TIMER_ON3) {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- timer_on3 = stled;
- //delay(1);
- if(timer_on3 >= 3)alarm3_stat();
- }
- if (String(pub.topic()) == TIMER_ON4) {
- int stled = bufer.toInt(); // преобразуем полученные данные в тип integer
- timer_on4 = stled;
- //delay(1);
- if(timer_on4 >= 3)alarm4_stat();
- }
- if (String(pub.topic()) == SET_TIME_1H) { // установка часов таймера
- //delay(100);
- set_time1h = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on1 >= 3)alarm1_stat();
- }
- if (String(pub.topic()) == SET_TIME_2H) {// установка часов таймера
- //delay(100);
- set_time2h = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on2 >= 3)alarm2_stat();
- }
- if (String(pub.topic()) == SET_TIME_3H) {// установка часов таймера
- //delay(100);
- set_time3h = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on3 >= 3)alarm3_stat();
- }
- if (String(pub.topic()) == SET_TIME_4H) {// установка часов таймера
- //delay(100);
- set_time4h = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on4 >= 3)alarm4_stat();
- }
- if (String(pub.topic()) == SET_TIME_1M) { //установка минут таймера
- //delay(100);
- set_time1m = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on1 >= 3)alarm1_stat();
- }
- if (String(pub.topic()) == SET_TIME_2M) {//установка минут таймера
- //delay(100);
- set_time2m = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on2 >= 3)alarm2_stat();
- }
- if (String(pub.topic()) == SET_TIME_3M) {//установка минут таймера
- //delay(100);
- set_time3m = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on3 >= 3)alarm3_stat();
- }
- if (String(pub.topic()) == SET_TIME_4M) {//установка минут таймера
- //delay(100);
- set_time4m = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- if(timer_on4 >= 3)alarm4_stat();
- }
- if (String(pub.topic()) == SET_TIME_1S) {//установка секунд таймера
- //delay(100);
- set_time1s = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- }
- if (String(pub.topic()) == SET_TIME_2S) {//установка секунд таймера
- //delay(100);
- set_time2s = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- }
- if (String(pub.topic()) == SET_TIME_3S) {//установка секунд таймера
- //delay(100);
- set_time3s = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- }
- if (String(pub.topic()) == SET_TIME_4S) {//установка секунд таймера
- //delay(100);
- set_time4s = bufer.toInt(); // преобразуем полученные данные в тип integer
- //delay(1);
- }
- if (String(pub.topic()) == WEEKDEY1) {
- int buf = bufer.toInt();
- if(buf == 0){
- alarm1_0 = !alarm1_0;
- EEPROM.write(123, alarm1_0);// сохраняем в 123 ячеку флаг установки дня недели воскресенье для 1-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 1){
- alarm1_1 = !alarm1_1;
- EEPROM.write(124, alarm1_1);
- EEPROM.commit();
- }
- if(buf == 2){
- alarm1_2 = !alarm1_2;
- EEPROM.write(125, alarm1_2);
- EEPROM.commit();
- }
- if(buf == 3){
- alarm1_3 = !alarm1_3;
- EEPROM.write(126, alarm1_3);// сохраняем в 126 ячеку флаг установки дня недели среда для 1-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 4){
- alarm1_4 = !alarm1_4;
- EEPROM.write(127, alarm1_4);// сохраняем в 127 ячеку флаг установки дня недели четверг для 1-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 5){
- alarm1_5 = !alarm1_5;
- EEPROM.write(128, alarm1_5);// сохраняем в 128 ячеку флаг установки дня недели пятница для 1-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 6){
- alarm1_6 = !alarm1_6;
- EEPROM.write(129, alarm1_6);// сохраняем в 129 ячеку флаг установки дня недели суббота для 1-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- alarm1_stat();
- }
- if (String(pub.topic()) == WEEKDEY2) {
- int buf = bufer.toInt();
- if(buf == 0){
- alarm2_0 = !alarm2_0;
- EEPROM.write(130, alarm2_0);// сохраняем в 130 ячеку флаг установки дня недели воскресенье для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 1){
- alarm2_1 = !alarm2_1;
- EEPROM.write(131, alarm2_1);// сохраняем в 131 ячеку флаг установки дня недели понедельник для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 2){
- alarm2_2 = !alarm2_2;
- EEPROM.write(132, alarm2_2);// сохраняем в 132 ячеку флаг установки дня недели вторник для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 3){
- alarm2_3 = !alarm2_3;
- EEPROM.write(133, alarm2_3);// сохраняем в 133 ячеку флаг установки дня недели среда для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 4){
- alarm2_4 = !alarm2_4;
- EEPROM.write(134, alarm2_4);// сохраняем в 134 ячеку флаг установки дня недели четверг для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 5){
- alarm2_5 = !alarm2_5;
- EEPROM.write(135, alarm2_5);// сохраняем в 135 ячеку флаг установки дня недели пятница для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 6){
- alarm2_6 = !alarm2_6;
- EEPROM.write(136, alarm2_6);// сохраняем в 136 ячеку флаг установки дня недели суббота для 2-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- alarm2_stat();
- }
- if (String(pub.topic()) == WEEKDEY3) {
- int buf = bufer.toInt();
- if(buf == 0){
- alarm3_0 = !alarm3_0;
- EEPROM.write(137, alarm3_0);// сохраняем в 137 ячеку флаг установки дня недели воскресенье для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 1){
- alarm3_1 = !alarm3_1;
- EEPROM.write(138, alarm3_1);// сохраняем в 138 ячеку флаг установки дня недели понедельник для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 2){
- alarm3_2 = !alarm3_2;
- EEPROM.write(139, alarm3_2);// сохраняем в 139 ячеку флаг установки дня недели вторник для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 3){
- alarm3_3 = !alarm3_3;
- EEPROM.write(140, alarm3_3);// сохраняем в 140 ячеку флаг установки дня недели среда для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 4){
- alarm3_4 = !alarm3_4;
- EEPROM.write(141, alarm3_4);// сохраняем в 141 ячеку флаг установки дня недели четверг для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 5){
- alarm3_5 = !alarm3_5;
- EEPROM.write(142, alarm3_5);// сохраняем в 142 ячеку флаг установки дня недели пятница для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 6){
- alarm3_6 = !alarm3_6;
- EEPROM.write(143, alarm3_6);// сохраняем в 143 ячеку флаг установки дня недели суббота для 3-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- alarm3_stat();
- }
- if (String(pub.topic()) == WEEKDEY4) {
- int buf = bufer.toInt();
- if(buf == 0){
- alarm4_0 = !alarm4_0;
- EEPROM.write(144, alarm4_0);// сохраняем в 144 ячеку флаг установки дня недели воскресенье для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 1){
- alarm4_1 = !alarm4_1;
- EEPROM.write(145, alarm4_1);// сохраняем в 145 ячеку флаг установки дня недели понедельник для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 2){
- alarm4_2 = !alarm4_2;
- EEPROM.write(146, alarm4_2);// сохраняем в 146 ячеку флаг установки дня недели вторник для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 3){
- alarm4_3 = !alarm4_3;
- EEPROM.write(147, alarm4_3);// сохраняем в 147 ячеку флаг установки дня недели среда для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 4){
- alarm4_4 = !alarm4_4;
- EEPROM.write(148, alarm4_4);// сохраняем в 148 ячеку флаг установки дня недели четверг для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 5){
- alarm4_5 = !alarm4_5;
- EEPROM.write(149, alarm4_5);// сохраняем в 149 ячеку флаг установки дня недели пятница для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- if(buf == 6){
- alarm4_6 = !alarm4_6;
- EEPROM.write(150, alarm4_6);// сохраняем в 150 ячеку флаг установки дня недели суббота для 4-ого будильника
- EEPROM.commit(); //подтверждаем сохранение
- }
- alarm4_stat();
- }
- }
- void handleRoot() {
- String str = "";
- str += html_header;
- str += "<p><font size=\"5\"><font style=\"background-color:#ffffff;\">Удлиннитель. Настройки подключения к WiFi.</font></font></p>\n\r";
- str += "<p><font size=\"4\"><font style=\"background-color:#ffffff;\">Текущий сохранненный Wi-Fi NET: ";
- if(len_ssid < 32){
- str += ssid;
- }else{
- str += "не установлен";
- }
- str += "</font></font></p>\n\r";
- str += "<p><font size=\"4\"><font style=\"background-color:#5CD862;\">Список доступных Wi-Fi сетей: (обновляется только при первом включении!)</font></font></p>\n\r";
- str += wifi_scan;
- str += "<body>\
- <form method=\"POST\" action=\"ok\">\
- <input name=\"ssid\"> WIFI Net</br></br>\
- <input name=\"pswd\"> Password</br></br>\
- <input name=\"mqtt_server\"> URL MQTT Server</br></br>\
- <input name=\"mqtt_port\"> MQTT PORT</br></br>\
- <input name=\"mqtt_user\"> MQTT USER</br></br>\
- <input name=\"mqtt_pass\"> MQTT PASSWORD</br></br>\
- <input type=SUBMIT value=\"Save settings\">\
- </form>\
- </body>\
- </html>";
- server.send ( 200, "text/html", str );
- }
- void handleOk() {
- String ssid_ap;
- String pass_ap;
- String mqtt_server_;
- String mqtt_user_;
- String mqtt_pass_;
- String mqtt_port_;
- String str = "";
- str += html_header;
- str += "<body>";
- //EEPROM.begin(512);
- ssid_ap = server.arg(0);
- pass_ap = server.arg(1);
- mqtt_server_ = server.arg(2);
- mqtt_port_ = server.arg(3);
- mqtt_user_ = server.arg(4);
- mqtt_pass_ = server.arg(5);
- if (ssid_ap != "") {
- EEPROM.write(96, ssid_ap.length());
- EEPROM.write(97, pass_ap.length());
- EEPROM.write(400, mqtt_server_.length());
- EEPROM.write(401, mqtt_port_.length());
- EEPROM.write(402, mqtt_user_.length());
- EEPROM.write(403, mqtt_pass_.length());
- for (byte i = 0; i < ssid_ap.length(); i++)
- EEPROM.write(i, ssid_ap.charAt(i));
- for (byte i = 0; i < pass_ap.length(); i++)
- EEPROM.write(i + 32, pass_ap.charAt(i));
- delay(10);
- for (byte i = 0; i <= mqtt_server_.length(); i++){
- EEPROM.write(404 + i, mqtt_server_.charAt(i));
- }
- delay(10);
- for (byte i = 0; i < mqtt_port_.length(); i++){
- EEPROM.write(436 + i, mqtt_port_.charAt(i)); //остовляем 32 символа для mqtt_server выше
- }
- delay(10);
- for (byte i = 0; i <= mqtt_user_.length(); i++){
- EEPROM.write(441 + i, mqtt_user_.charAt(i)); //остовляем 32 символа для mqtt_server выше и 5 символов для mqtt_port
- }
- delay(10);
- for (byte i = 0; i <= mqtt_pass_.length(); i++){
- EEPROM.write(457 + i, mqtt_pass_.charAt(i)); //остовляем 32 символа для mqtt_server выше и 5 символов для mqtt_port, и еще 16 символов для mqtt_user
- }
- EEPROM.commit();
- EEPROM.end();
- red_led_blink = 1; // запускаем мигание красным свето-диодом
- Serial.println("Configuration saved in FLASH");
- str += "Configuration saved in FLASH</br>\
- Changes applied after reboot</p></br></br>\
- <a href=\"/\">Return</a> to settings page</br>";
- } else {
- str += "No WIFI Net</br>\
- <a href=\"/\">Return</a> to settings page</br>";
- }
- str += "</body></html>";
- server.send ( 200, "text/html", str );
- }
- void http_server() {
- MDNS.begin(host);
- httpUpdater.setup(&server);
- server.on("/", handleRoot);
- server.on("/ok", handleOk);
- server.begin();
- MDNS.addService("http", "tcp", 80);
- Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
- delay(100);
- Serial.println("HTTP server started");
- delay(20);
- ////////////////////////для часов///////////////////////
- Serial.println("Starting UDP");
- udp.begin(localPort);
- Serial.print("Local port: ");
- Serial.println(udp.localPort());
- }
- void WiFi_AP() {
- //WiFi.mode(WIFI_AP);
- // if ( WiFi.status() != WL_CONNECTED || len_ssid > 32) {
- Serial.print("Configuring access point...");
- /* You can remove the password parameter if you want the AP to be open. */
- WiFi.softAP(ssid_ap, pass_ap);// запуск точки доступа
- //delay(2000);
- Serial.println("done");
- IPAddress myIP = WiFi.softAPIP();
- Serial.print("AP IP address: ");
- Serial.println(myIP);
- digitalWrite(led_g, LOW);
- //http_server();
- //}
- }
- void WiFi_STA() {
- if (flagconn == 1) {
- evTimeconn = millis();
- flagconn = 0;
- WiFi_AP();// то запускаем точу доступа, раз уж пытаемся подключится к wi-fi роутару
- }
- if ((millis() - evTimeconn > 500 && millis() - evTimeconn < 1000)) {
- digitalWrite(led_g, LOW);
- }
- if ((millis() - evTimeconn > 1000 && millis() - evTimeconn < 1500)) {
- digitalWrite(led_g, HIGH);
- }
- if (millis() - evTimeconn > 1500 && millis() - evTimeconn < 2000) {
- digitalWrite(led_g, LOW);
- }
- if (millis() - evTimeconn > 2000) {
- if (flagconn == 0)evTimeconn = millis();
- Serial.print("Connecting to...");
- Serial.println(ssid);
- WiFi.begin(ssid.c_str(), pass.c_str()); // пробуем подключится к роутару
- delay(10);
- digitalWrite(led_g, HIGH);
- }
- if (WiFi.status() == WL_CONNECTED) {
- digitalWrite(led_g, HIGH);
- Serial.println("WiFi connected");
- Serial.print("Connected to ");
- Serial.println(ssid);
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- flagconn == 1;//для возврата таймера для следующих попытках подключится к wi-fi после разрыва подключения
- http_server();
- }
- }
- void WiFi_Scan(){
- WiFi.disconnect();
- delay(10);
- int n = WiFi.scanNetworks();
- wifi_scan = "";
- //wifi_scan += "сканирование wi-fi сетей выполнено ";
- if (n == 0){
- wifi_scan += "<p><font size=\"4\"><font style=\"background-color:#EF2A2A;\">";
- wifi_scan += "нет доступных wi-fi сетей";
- wifi_scan += "</font></font></p>\n\r";
- }else
- {
- wifi_scan += "<p><font size=\"4\"><font style=\"background-color:#3CDB53;\">";
- wifi_scan += (n);
- wifi_scan += " найдено сетей wi-fi";
- wifi_scan += "</font></font></p>\n\r";
- for (int i = 0; i < n; ++i)
- {
- // Print SSID and RSSI for each network found
- wifi_scan += "<p><font size=\"3\"><font style=\"background-color:#888CD9;\">"; //формирует начало html строки
- wifi_scan += (i + 1);
- wifi_scan += ": ";
- wifi_scan += (WiFi.SSID(i));
- wifi_scan += (" (");
- wifi_scan += (WiFi.RSSI(i));
- wifi_scan += (")");
- wifi_scan += ((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
- wifi_scan += "</font></font></p>\n\r";// формирует оканчание html строки
- delay(10);
- }
- }
- }
- void setup(void) {
- delay(2000);
- pinMode(16, OUTPUT);
- pinMode(14, OUTPUT);
- pinMode(12, OUTPUT);
- pinMode(13, OUTPUT);
- digitalWrite(16, HIGH);
- digitalWrite(14, HIGH);
- digitalWrite(12, HIGH);
- digitalWrite(13, HIGH);
- pinMode(led_r, OUTPUT);
- pinMode(led_g, OUTPUT);
- digitalWrite(led_r, LOW);
- digitalWrite(led_g, LOW);
- EEPROM.begin(512); // размер eeprom памяти 512 байт
- def1 = EEPROM.read(115);
- def2 = EEPROM.read(117);
- def3 = EEPROM.read(119);
- def4 = EEPROM.read(121);
- delay(100);
- if (def1 == 1) digitalWrite(16, HIGH); // состояние розетки 1 "по умолчанию" - выключено
- if (def1 == 0) digitalWrite(16, LOW); // состояние розетки 1 "по умолчанию" - включено
- if (def1 == 2) digitalWrite(16, EEPROM.read(116)); // состояние розетки 1 "по умолчанию" - последнее состояние до выключения напряжения
- if (def2 == 1) digitalWrite(14, HIGH); // состояние розетки 2 "по умолчанию" - выключено
- if (def2 == 0) digitalWrite(14, LOW); // состояние розетки 2 "по умолчанию" - включено
- if (def2 == 2) digitalWrite(14, EEPROM.read(118)); // состояние розетки 2 "по умолчанию" - последнее состояние до выключения напряжения
- if (def3 == 1) digitalWrite(12, HIGH); // состояние розетки 3 "по умолчанию" - выключено
- if (def3 == 0) digitalWrite(12, LOW); // состояние розетки 3 "по умолчанию" - включено
- if (def3 == 2) digitalWrite(12, EEPROM.read(120)); //состояние розетки 3 "по умолчанию" - последнее состояние до выключения напряжения
- if (def4 == 1) digitalWrite(13, HIGH); // состояние розетки 4 "по умолчанию" - выключено
- if (def4 == 0) digitalWrite(13, LOW); // состояние розетки 4 "по умолчанию" - включено
- if (def4 == 2) digitalWrite(13, EEPROM.read(122)); //состояние розетки 4 "по умолчанию" - последнее состояние до выключения напряжения
- delay(1);
- alarm1_0 = EEPROM.read(123); //восстанавливаем флаг дня недели на восскресение для 1-ого будильника
- alarm1_1 = EEPROM.read(124); //восстанавливаем флаг дня недели на понедельник для 1-ого будильника
- alarm1_2 = EEPROM.read(125); //восстанавливаем флаг дня недели на вторник для 1-ого будильника
- alarm1_3 = EEPROM.read(126); //восстанавливаем флаг дня недели на среда для 1-ого будильника
- alarm1_4 = EEPROM.read(127); //восстанавливаем флаг дня недели на четверг для 1-ого будильника
- alarm1_5 = EEPROM.read(128); //восстанавливаем флаг дня недели на пятница для 1-ого будильника
- alarm1_6 = EEPROM.read(129); //восстанавливаем флаг дня недели на суббота для 1-ого будильника
- alarm2_0 = EEPROM.read(130); //восстанавливаем флаг дня недели на восскресение для 2-ого будильника
- alarm2_1 = EEPROM.read(131); //восстанавливаем флаг дня недели на понедельник для 2-ого будильника
- alarm2_2 = EEPROM.read(132); //восстанавливаем флаг дня недели на вторник для 2-ого будильника
- alarm2_3 = EEPROM.read(133); //восстанавливаем флаг дня недели на среда для 2-ого будильника
- alarm2_4 = EEPROM.read(134); //восстанавливаем флаг дня недели на четверг для 2-ого будильника
- alarm2_5 = EEPROM.read(135); //восстанавливаем флаг дня недели на пятница для 2-ого будильника
- alarm2_6 = EEPROM.read(136); //восстанавливаем флаг дня недели на суббота для 2-ого будильника
- alarm3_0 = EEPROM.read(137); //восстанавливаем флаг дня недели на восскресение для 3-ого будильника
- alarm3_1 = EEPROM.read(138); //восстанавливаем флаг дня недели на понедельник для 3-ого будильника
- alarm3_2 = EEPROM.read(139); //восстанавливаем флаг дня недели на вторник для 3-ого будильника
- alarm3_3 = EEPROM.read(140); //восстанавливаем флаг дня недели на среда для 3-ого будильника
- alarm3_4 = EEPROM.read(141); //восстанавливаем флаг дня недели на четверг для 3-ого будильника
- alarm3_5 = EEPROM.read(142); //восстанавливаем флаг дня недели на пятница для 3-ого будильника
- alarm3_6 = EEPROM.read(143); //восстанавливаем флаг дня недели на суббота для 3-ого будильника
- alarm4_0 = EEPROM.read(144); //восстанавливаем флаг дня недели на восскресение для 4-ого будильника
- alarm4_1 = EEPROM.read(145); //восстанавливаем флаг дня недели на понедельник для 4-ого будильника
- alarm4_2 = EEPROM.read(146); //восстанавливаем флаг дня недели на вторник для 4-ого будильника
- alarm4_3 = EEPROM.read(147); //восстанавливаем флаг дня недели на среда для 4-ого будильника
- alarm4_4 = EEPROM.read(148); //восстанавливаем флаг дня недели на четверг для 4-ого будильника
- alarm4_5 = EEPROM.read(149); //восстанавливаем флаг дня недели на пятница для 4-ого будильника
- alarm4_6 = EEPROM.read(150); //восстанавливаем флаг дня недели на суббота для 4-ого будильника
- Serial.begin(115200);
- delay(1);
- Serial.println();
- Serial.println();
- len_ssid = EEPROM.read(96);
- len_pass = EEPROM.read(97);
- if (len_pass > 64) len_pass = 0;
- //Serial.print("len_ssid = ");
- //Serial.println(len_ssid);
- if ((len_ssid < 33) && (len_ssid != 0)) {
- for (byte i = 0; i < len_ssid; i++)ssid += char(EEPROM.read(i));
- delay(1);
- for (byte i = 0; i < len_pass; i++)pass += char(EEPROM.read(i + 32));
- delay(1);
- Serial.print("SSID: ");
- Serial.println(ssid);
- Serial.print("Password: ");//off
- Serial.println(pass);//off
- len_mqtt_server = EEPROM.read(400);
- len_mqtt_port = EEPROM.read(401);
- len_mqtt_user = EEPROM.read(402);
- len_mqtt_pass = EEPROM.read(403);
- if(len_mqtt_server <= 32){// восстанавливаем url mqtt сервера, но только если длинна len_mqtt_server менее 32 символа
- for(byte i = 0; i <= len_mqtt_server; i++)mqtt_server += char(EEPROM.read(404 + i));
- }
- delay(10);
- String mqtt_port_ = "";
- if(len_mqtt_port < 6){//восстанавливаем mqqt порт, но только если длинна менее 6 символов
- for(byte i = 0; i < len_mqtt_port; i++)mqtt_port_ += char(EEPROM.read(436 + i));
- }
- delay(10);
- mqtt_port = mqtt_port_.toInt();
- if(len_mqtt_user <= 16){//восстанавливаем mqqt user
- for(byte i = 0; i <= len_mqtt_user; i++)mqtt_user += char(EEPROM.read(441 + i));
- delay(10);
- }
- if(len_mqtt_pass <= 32){
- for(byte i = 0; i <= len_mqtt_pass; i++)mqtt_pass += char(EEPROM.read(457 + i));
- delay(10);
- }
- }
- Serial.print("MQTT SERVER : ");
- Serial.println(mqtt_server);
- Serial.print("MQTT port : ");
- Serial.println(mqtt_port);
- Serial.print("MQTT user : ");
- Serial.println(mqtt_user);
- Serial.print("MQTT pass : ");
- Serial.println(mqtt_pass);
- // Режим STATION
- WiFi.mode( WIFI_STA);
- WiFi_Scan();
- if (len_ssid > 32) { // для первого запуска если не сохранены ssid & pass
- digitalWrite(led_r, HIGH);
- WiFi.mode(WIFI_AP);
- WiFi_AP();
- }
- http_server();
- digitalWrite(led_g, LOW);
- digitalWrite(led_r, LOW);
- client.set_server(mqtt_server, mqtt_port);
- mySwitch.enableReceive(4); // радиоприемник подключен к gpio 4
- eventTime = millis();
- evTimeClock = millis(); // для обновления часов
- start_sinh = millis();//для часов, старт интервала с момента удачного онлайн обновления
- evTimeconn = millis();// для wi-fi подключения раз в 2 секунды если не подключено
- }
- // запрашиваем у NTP сервера время
- unsigned long sendNTPpacket(IPAddress& address)
- {
- Serial.println("sending NTP packet...");
- // set all bytes in the buffer to 0
- memset(packetBuffer, 0, NTP_PACKET_SIZE);
- // Initialize values needed to form NTP request
- // (see URL above for details on the packets)
- packetBuffer[0] = 0b11100011; // LI, Version, Mode
- packetBuffer[1] = 0; // Stratum, or type of clock
- packetBuffer[2] = 6; // Polling Interval
- packetBuffer[3] = 0xEC; // Peer Clock Precision
- // 8 bytes of zero for Root Delay & Root Dispersion
- packetBuffer[12] = 49;
- packetBuffer[13] = 0x4E;
- packetBuffer[14] = 49;
- packetBuffer[15] = 52;
- // all NTP fields have been given values, now
- // you can send a packet requesting a timestamp:
- udp.beginPacket(address, 123); //NTP requests are to port 123
- udp.write(packetBuffer, NTP_PACKET_SIZE);
- udp.endPacket();
- delay(1);
- }
- void receiv_time_clock() {
- int cb = udp.parsePacket();
- if (!cb || WiFi.status() != WL_CONNECTED) {
- secsSince1900 = secsSince1900_2 + ((millis() - start_sinh)/1000);//часы оффлайн
- evTimeClock = millis();
- Serial.println("no packet yet");
- }else {
- Serial.print("packet received, length=");
- Serial.println(cb);
- // We've received a packet, read the data from it
- udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
- //the timestamp starts at byte 40 of the received packet and is four bytes,
- // or two words, long. First, esxtract the two words:
- highWord = word(packetBuffer[40], packetBuffer[41]);
- lowWord = word(packetBuffer[42], packetBuffer[43]);
- // combine the four bytes (two words) into a long integer
- // this is NTP time (seconds since Jan 1 1900):
- secsSince1900 = (highWord << 16 | lowWord) + ((millis() - evTimeClock)/1000);
- secsSince1900_2 = secsSince1900;
- start_sinh = millis();
- evTimeClock = millis();
- }
- Serial.print("Seconds since Jan 1 1900 = " );
- Serial.println(secsSince1900);
- // now convert NTP time into everyday time:
- Serial.print("Unix time = ");
- // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
- const unsigned long seventyYears = 2208988800UL;
- // subtract seventy years:
- epoch = (secsSince1900 - seventyYears) + (3600 * GMT);
- // print Unix time:
- Serial.println(epoch);
- count_day = epoch / 86400L;// прошедшее количество дней с 1 яанваря 1970 года
- Serial.print("count day on Jan 1 1970: ");
- Serial.println(count_day);
- year = 1970;// старт отсчета лет
- for (int i = 0; i <= count_day; i ++) {
- if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400) == 0) { //если год високосный
- v_year = 366; // то количество дней в високосном году 366
- } else {
- v_year = 365;//иначе количество дней в НЕ високосном году 365
- }
- if (i <= v_year) {
- next_year = v_year;
- }
- if (i == next_year) {
- year++;
- if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400) == 0) { //если год високосный
- v_year = 366; // то количество дней в високосном году 366
- } else {
- v_year = 365;//иначе количество дней в НЕ високосном году 365
- }
- next_year = next_year + v_year;
- }
- }
- delay(1);
- count_day_curent_year = (count_day - (next_year - v_year))+1; // сколько прошло дней сначала этого (текущего) года (не полных, наверное по этому +1).
- month = 1;
- for(int m = 0; m <= count_day_curent_year; m ++){
- if(month == 1)month_days = 31;
- if(m <= month_days)next_month = month_days;
- if(m > next_month){
- month ++;
- if(v_year == 366 && month == 2)month_days = 29;
- if(v_year == 365 && month == 2)month_days = 28;
- if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)month_days = 31;
- if(month == 4 || month == 6 || month == 9 || month == 11)month_days = 30;
- next_month = next_month + month_days;
- }
- }
- day = count_day_curent_year - (next_month - month_days);
- Serial.print("count_day_curent_year: ");
- Serial.println(count_day_curent_year);
- Serial.print("Tekushchiy god visokosnay?: ");
- if(v_year == 365)Serial.println("No");
- if(v_year == 366)Serial.println("Yes");
- // Serial.print("next_year: "); //количество дней с 1970 года 1 яанваря, что бы начался новый год или закончился текущий
- // Serial.println(next_year);
- // Serial.print("next_month: ");// количество дней с начала текущего года, для того что бы начался новый месяц или закончился текущий
- // Serial.println(next_month);
- // Serial.print("year: "); //текущий год
- // Serial.println(year);
- //Serial.print("month: "); //текущий месяц
- // Serial.println(month);
- // Serial.print("day: "); //текущий день месяца
- // Serial.println(day);
- weekday = (count_day - 3) % 7;
- // Serial.print("weekday: "); //день недели
- // Serial.println(weekday);
- curent_time = "";
- // Serial.print(day);
- curent_time += String(day);
- curent_time += ".";
- // Serial.print(" / ");
- //curent_time += String(month);
- if(month == 1)curent_time += "яан.";
- if(month == 2)curent_time += "фев.";
- if(month == 3)curent_time += "март";
- if(month == 4)curent_time += "апр.";
- if(month == 5)curent_time += "май";
- if(month == 6)curent_time += "июнь";
- if(month == 7)curent_time += "июль";
- if(month == 8)curent_time += "авг.";
- if(month == 9)curent_time += "сен.";
- if(month == 10)curent_time += "окт.";
- if(month == 11)curent_time += "ноя.";
- if(month == 12)curent_time += "дек.";
- // Serial.print(month);
- curent_time += ".";
- // Serial.print(" / ");
- curent_time += String(year);
- // Serial.print(year);
- curent_time += " --";
- if(weekday == 0)curent_time += "Вс";
- if(weekday == 1)curent_time += "Пн";
- if(weekday == 2)curent_time += "Вт";
- if(weekday == 3)curent_time += "Ср";
- if(weekday == 4)curent_time += "Чт";
- if(weekday == 5)curent_time += "Пт";
- if(weekday == 6)curent_time += "Сб";
- curent_time += "-- ";
- // Serial.print(" ---- ");
- // вывод часов минут секунд:
- // Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
- // Serial.print((epoch % 86400L) / 3600); // вывод часов (86400 секунд в дне)
- curent_time += String((epoch % 86400L) / 3600);
- curent_time += ":";
- // Serial.print(':');
- if ( ((epoch % 3600) / 60) < 10 ) {
- // отображение нуля перед минутами, если их меньше 10
- curent_time += "0";
- // Serial.print('0');
- }
- curent_time += String((epoch % 3600) / 60);
- //Serial.print((epoch % 3600) / 60); // вывод минут (3600 секунд в одном часе)
- curent_time += ":";
- //Serial.print(':');
- if ( (epoch % 60) < 10 ) {
- // отображение нуля перед секундами, если их меньше 10
- curent_time += "0";
- // Serial.print('0');
- }
- curent_time += String(epoch % 60);
- curent_time += '\n';
- //Serial.println(epoch % 60); // вывод секунд
- Serial.println(String(curent_time));
- if (client.connected())client.publish(CURENT_TIME, String (curent_time));
- delay(10);
- }
- void RF_Reciver(){
- if (mySwitch.available()) {
- int value = mySwitch.getReceivedValue();
- if (client.connected())client.publish("relay/RF_code", String (value));
- delay(5);
- if (value == KEY_A) {// код клавиши А
- digitalWrite(16, !digitalRead(16)); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- mySwitch.resetAvailable();
- if (client.connected()) { // если подключен к mqtt
- if (digitalRead(16) == HIGH) {
- // client.publish("relay/stat1", String ("выкл."));
- client.publish(OUT1, String ("1"));
- if (timer_on1 == 1) {
- evTime1 = millis();
- timer_start1 = 0;
- }
- } else {
- // client.publish("relay/stat1", String ("вкл."));
- client.publish(OUT1, String ("0"));
- if (timer_on1 == 2) {
- evTime1 = millis();
- timer_start1 = 0;
- }
- }
- delay(100);
- }
- }
- if (value == KEY_B) {// код клавиши В
- digitalWrite(14, !digitalRead(14)); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- mySwitch.resetAvailable();
- if (client.connected()) { // если подключен к mqtt
- if (digitalRead(14) == HIGH) {
- // client.publish("relay/stat2", String ("выкл."));
- client.publish(OUT2, String ("1"));
- if (timer_on2 == 1) {
- evTime2 = millis();
- timer_start2 = 0;
- }
- } else {
- // client.publish("relay/stat2", String ("вкл."));
- client.publish(OUT2, String ("0"));
- if (timer_on2 == 2) {
- evTime2 = millis();
- timer_start2 = 0;
- }
- }
- delay(100);
- }
- }
- if (value == KEY_C) {// код клавиши С
- digitalWrite(12, !digitalRead(12)); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- mySwitch.resetAvailable();
- if (client.connected()) { // если подключен к mqtt
- if (digitalRead(12) == HIGH) {
- // client.publish("relay/stat3", String ("выкл."));
- client.publish(OUT3, String ("1"));
- if (timer_on3 == 1) {
- evTime3 = millis();
- timer_start3 = 0;
- }
- } else {
- //client.publish("relay/stat3", String ("вкл."));
- client.publish(OUT3, String ("0"));
- if (timer_on3 == 2) {
- evTime3 = millis();
- timer_start3 = 0;
- }
- }
- delay(100);
- }
- }
- if (value == KEY_D) { // код клавиши D
- digitalWrite(13, !digitalRead(13)); // включаем или выключаем светодиод в зависимоти от полученных значений данных
- mySwitch.resetAvailable();
- if (client.connected()) { // если подключен к mqtt
- if (digitalRead(13) == HIGH) {
- // client.publish("relay/stat4", String ("выкл."));
- client.publish(OUT4, String ("1"));
- if (timer_on4 == 1) {
- evTime4 = millis();
- timer_start4 = 0;
- }
- } else {
- // client.publish("relay/stat4", String ("вкл."));
- client.publish(OUT4, String ("0"));
- if (timer_on4 == 2) {
- evTime4 = millis();
- timer_start4 = 0;
- }
- }
- delay(100);
- }
- }
- if (value == KEY_AB){
- mySwitch.resetAvailable();
- ESP.reset(); // перезагрузка модуля
- delay(1000);
- }
- if (value == KEY_AC){
- mySwitch.resetAvailable();
- for(int i = 0; i < 32; i++)EEPROM.write(i, 255); //стирает ssid
- delay(100);
- for(int i = 0; i < 64; i++)EEPROM.write(i + 32, 255);// стирает pass
- delay(100);
- for(int i = 0; i < 100; i++)EEPROM.write(i + 400, 255);//стирает все ячейки памяти с 400 по 499, здесь хранятся настройки mqtt
- EEPROM.write(96, 255);// стирает длину ssid
- EEPROM.write(97, 255);// стирает длину pass
- EEPROM.commit();
- delay(1000);
- ESP.reset(); // перезагрузка модуля
- delay(1000);
- }
- mySwitch.resetAvailable();
- }
- delay(1);
- }
- void loop() {
- loop_start = millis();
- //=================при разрывах wi-fi и для подключения к wi-fi ===========================
- if (WiFi.status() != WL_CONNECTED && len_ssid < 33) { // при разрывах wi-fi подключения
- //WiFi.mode(WIFI_OFF);
- //WiFi.printDiag(Serial);
- WiFi.mode(WIFI_AP_STA);
- WiFi_STA();
- digitalWrite(led_r, LOW);
- }
- //==================для часов ======================================================================
- if ((millis() - evTimeClock) >= 9900 && state_clock == 1) {// через 10 сек повторяем все сначало.
- if(WiFi.status() == WL_CONNECTED){
- WiFi.hostByName(ntpServerName, timeServerIP);
- sendNTPpacket(timeServerIP); // запрашиваем у NTP сервера время
- }
- state_clock = 2;
- }
- if ((millis() - evTimeClock) >= 10000 && state_clock == 2) { //ждем секундачку пока NTP сервер ответит сколько время натикало :)
- receiv_time_clock();
- state_clock = 1;
- }
- //========================================================================================================
- RF_Reciver();
- //========для перевода установок слайдеров из часов + секунд + минут в милисекунды для таймеров =================
- //if(timer_on1 != 0){
- set_time1 = set_time1h * 3600000 + set_time1m * 60000 + set_time1s * 1000;
- delay(1);
- //}
- //if(timer_on2 != 0){
- set_time2 = set_time2h * 3600000 + set_time2m * 60000 + set_time2s * 1000;
- delay(1);
- //}
- //if(timer_on3 != 0){
- set_time3 = set_time3h * 3600000 + set_time3m * 60000 + set_time3s * 1000;
- delay(1);
- //}
- //if(timer_on4 != 0){
- set_time4 = set_time4h * 3600000 + set_time4m * 60000 + set_time4s * 1000;
- delay(1);
- //}
- //==================================================================================
- server.handleClient();
- // подключаемся к MQTT серверу
- if (WiFi.status() == WL_CONNECTED) {
- digitalWrite(led_g, HIGH);
- WiFi.mode(WIFI_STA);
- if (!client.connected()) {
- Serial.println("Connecting to MQTT server ....");// попытка подключится к MQTT брокеру
- delay(1);
- if (!client.connected() && len_mqtt_server != 255 && len_mqtt_server != 0){
- client.connect(MQTT::Connect("Wi-Fi_relay")
- .set_clean_session()
- .set_auth(mqtt_user, mqtt_pass)
- .set_keepalive(30)
- );
- }
- if (client.connected()){
- Serial.println("Connected to MQTT server");// удачно подключился к mqtt брокеру
- digitalWrite(led_r, HIGH);
- client.set_max_retries(8);//Установите максимальное число повторных попыток при ожидании пакетов ответа
- client.set_callback(callback);
- client.subscribe(OUT1); // подписывааемся по топик с данными для реле 1
- client.subscribe(OUT2); // подписывааемся по топик с данными для реле 2
- client.subscribe(OUT3); // подписывааемся по топик с данными для реле 3
- client.subscribe(OUT4); // подписывааемся по топик с данными для реле 4
- delay(1);
- client.subscribe(DEF1); // подписывааемся на топик с данными состояния розетки 1 "по умолчанию"
- client.subscribe(DEF2); // подписывааемся на топик с данными состояния розетки 2 "по умолчанию"
- client.subscribe(DEF3); // подписывааемся на топик с данными состояния розетки 3 "по умолчанию"
- client.subscribe(DEF4); // подписывааемся на топик с данными состояния розетки 4 "по умолчанию"
- delay(1);
- client.subscribe(TIMER_ON1); // подписатся на топик с данными для вкл \ выкл таймера
- client.subscribe(TIMER_ON2); // подписатся на топик с данными для вкл \ выкл таймера
- client.subscribe(TIMER_ON3); // подписатся на топик с данными для вкл \ выкл таймера
- client.subscribe(TIMER_ON4); // подписатся на топик с данными для вкл \ выкл таймера
- delay(1);
- client.subscribe(SET_TIME_1H); // подписатся на топик с данными для установки времени таймера 1
- client.subscribe(SET_TIME_2H); // подписатся на топик с данными для установки времени таймера 2
- client.subscribe(SET_TIME_3H); // подписатся на топик с данными для установки времени таймера 3
- client.subscribe(SET_TIME_4H); // подписатся на топик с данными для установки времени таймера 4
- delay(1);
- client.subscribe(SET_TIME_1M); // подписатся на топик с данными для установки времени таймера 1
- client.subscribe(SET_TIME_2M); // подписатся на топик с данными для установки времени таймера 2
- client.subscribe(SET_TIME_3M); // подписатся на топик с данными для установки времени таймера 3
- client.subscribe(SET_TIME_4M); // подписатся на топик с данными для установки времени таймера 4
- delay(1);
- client.subscribe(SET_TIME_1S); // подписатся на топик с данными для установки времени таймера 1
- client.subscribe(SET_TIME_2S); // подписатся на топик с данными для установки времени таймера 2
- client.subscribe(SET_TIME_3S); // подписатся на топик с данными для установки времени таймера 3
- client.subscribe(SET_TIME_4S); // подписатся на топик с данными для установки времени таймера 4
- delay(1);
- client.subscribe(WEEKDEY1); //подписка на топик установки дней недели 1-ого будильника
- client.subscribe(WEEKDEY2); //подписка на топик установки дней недели 2-ого будильника
- client.subscribe(WEEKDEY3); //подписка на топик установки дней недели 3-ого будильника
- client.subscribe(WEEKDEY4); //подписка на топик установки дней недели 4-ого будильника
- } else {
- Serial.println("Could not connect to MQTT server");
- digitalWrite(led_r, LOW);
- }
- }
- delay(1);
- }
- // RF_Reciver();
- if (red_led_blink == 1) { //мигаем красным, если настройки ssid и pass сохранены в eeprom
- digitalWrite(led_r, LOW);
- delay(1000);
- digitalWrite(led_r, HIGH);
- delay(1000);
- }
- delay(1);
- ////////////////////////////////////////////для старта всех таймеров.///////////////////////////////////
- if (timer_on1 > 0 && timer_on1 < 3) {
- if (digitalRead(16) == LOW && timer_on1 == 1 && timer_start1 == 0) { //запуск таймера на выключение розетки
- evTime1 = millis();
- timer_start1 = 1;
- }
- if (digitalRead(16) == HIGH && timer_on1 == 2 && timer_start1 == 0) { //запуск таймера на включение розетки
- evTime1 = millis();
- timer_start1 = 1;
- }
- }
- delay(1);
- if (timer_on2 > 0 && timer_on2 < 3) {
- if (digitalRead(14) == LOW && timer_on2 == 1 && timer_start2 == 0) { //запуск таймера на выключение розетки
- evTime2 = millis();
- timer_start2 = 1;
- }
- if (digitalRead(14) == HIGH && timer_on2 == 2 && timer_start2 == 0) { //запуск таймера на включение розетки
- evTime2 = millis();
- timer_start2 = 1;
- }
- }
- delay(1);
- if (timer_on3 > 0 && timer_on3 < 3) {
- if (digitalRead(12) == LOW && timer_on3 == 1 && timer_start3 == 0) { //запуск таймера на выключение розетки
- evTime3 = millis();
- timer_start3 = 1;
- }
- if (digitalRead(12) == HIGH && timer_on3 == 2 && timer_start3 == 0) { //запуск таймера на включение розетки
- evTime3 = millis();
- timer_start3 = 1;
- }
- }
- delay(1);
- if (timer_on4 > 0 && timer_on4 < 3) {
- if (digitalRead(13) == LOW && timer_on4 == 1 && timer_start4 == 0) { //запуск таймера на выключение розетки
- evTime4 = millis();
- timer_start4 = 1;
- }
- if (digitalRead(13) == HIGH && timer_on4 == 2 && timer_start4 == 0) { //запуск таймера на включение розетки
- evTime4 = millis();
- timer_start4 = 1;
- }
- }
- delay(1);
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////для остановки всех таймеров//////////////////////////////////
- if (digitalRead(16) == LOW && timer_on1 == 1 && timer_start1 == 1 && (millis() - evTime1 > set_time1)) { //
- digitalWrite(16, HIGH);
- if (client.connected()) {
- client.publish(STAT1, String ("выкл."));
- client.publish(MQTT::Publish(TIMER_ON1, String ("0"))
- .set_retain(1)
- //.set_qos(1)
- //.set_dup()
- );
- }
- //evTime1 = millis();
- timer_start1 = 0;
- timer_on1 = 0;
- }
- delay(1);
- if (digitalRead(16) == HIGH && timer_on1 == 2 && timer_start1 == 1 && (millis() - evTime1 > set_time1)) { //
- digitalWrite(16, LOW);
- if (client.connected()) {
- client.publish(STAT1, String ("вкл."));
- client.publish(MQTT::Publish(TIMER_ON1, String ("0"))
- .set_retain(1)
- );
- }
- //evTime1 = millis();
- timer_start1 = 0;
- timer_on1 = 0;
- }
- delay(1);
- if (digitalRead(14) == LOW && timer_on2 == 1 && timer_start2 == 1 && (millis() - evTime2 > set_time2)) { //
- digitalWrite(14, HIGH);
- if (client.connected()) {
- client.publish(STAT2, String ("выкл."));
- client.publish(MQTT::Publish(TIMER_ON2, String ("0"))
- .set_retain(1)
- );
- }
- //evTime2 = millis();
- timer_start2 = 0;
- timer_on2 = 0;
- }
- delay(1);
- if (digitalRead(14) == HIGH && timer_on2 == 2 && timer_start2 == 1 && (millis() - evTime2 > set_time2)) { //
- digitalWrite(14, LOW);
- if (client.connected()) {
- client.publish(STAT2, String ("вкл."));
- client.publish(MQTT::Publish(TIMER_ON2, String ("0"))
- .set_retain(1)
- );
- }
- //evTime2 = millis();
- timer_start2 = 0;
- timer_on2 = 0;
- }
- delay(1);
- if (digitalRead(12) == LOW && timer_on3 == 1 && timer_start3 == 1 && (millis() - evTime3 > set_time3)) { //
- digitalWrite(12, HIGH);
- if (client.connected()) {
- client.publish(STAT3, String ("выкл."));
- client.publish(MQTT::Publish(TIMER_ON3, String ("0"))
- .set_retain(1)
- );
- }
- //evTime3 = millis();
- timer_start3 = 0;
- timer_on3 = 0;
- }
- delay(1);
- if (digitalRead(12) == HIGH && timer_on3 == 2 && timer_start3 == 1 && (millis() - evTime3 > set_time3)) { //
- digitalWrite(12, LOW);
- if (client.connected()) {
- client.publish(STAT3, String ("вкл."));
- client.publish(MQTT::Publish(TIMER_ON3, String ("0"))
- .set_retain(1)
- );
- }
- //evTime3 = millis();
- timer_start3 = 0;
- timer_on3 = 0;
- }
- delay(1);
- if (digitalRead(13) == LOW && timer_on4 == 1 && timer_start4 == 1 && (millis() - evTime4 > set_time4)) { //
- digitalWrite(13, HIGH);
- if (client.connected()) {
- client.publish(STAT4, String ("выкл."));
- client.publish(MQTT::Publish(TIMER_ON4, String ("0"))
- .set_retain(1)
- );
- }
- //evTime4 = millis();
- timer_start4 = 0;
- timer_on4 = 0;
- }
- delay(1);
- if (digitalRead(13) == HIGH && timer_on4 == 2 && timer_start4 == 1 && (millis() - evTime4 > set_time4)) { //
- digitalWrite(13, LOW);
- if (client.connected()) {
- client.publish(STAT4, String ("вкл."));
- client.publish(MQTT::Publish(TIMER_ON4, String ("0"))
- .set_retain(1)
- );
- }
- //evTime4 = millis();
- timer_start4 = 0;
- timer_on4 = 0;
- }
- delay(1);
- //RF_Reciver();
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////для сработки всех будильников/////////////////////////////////////////////
- if(timer_on1 >= 3 && timer_start1 == 0 && ((epoch % 86400L) / 3600) == set_time1h && (epoch % 3600) / 60 == set_time1m){// будильник для упр. розетки 1
- if(weekday == 1 && alarm1_1 == 1 ){ //понедельник
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_1 = 0;
- if(EEPROM.read(124) != alarm1_1){
- EEPROM.write(124, alarm1_1);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- if(weekday == 2 && alarm1_2 == 1 ){ //вторник
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_2 = 0;
- if(EEPROM.read(125) != alarm1_2){
- EEPROM.write(125, alarm1_2);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- if(weekday == 3 && alarm1_3 == 1 ){ //среда
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_3 = 0;
- if(EEPROM.read(126) != alarm1_3){
- EEPROM.write(126, alarm1_3);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- if(weekday == 4 && alarm1_4 == 1 ){//четверг
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_4 = 0;
- if(EEPROM.read(127) != alarm1_4){
- EEPROM.write(127, alarm1_4);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- if(weekday == 5 && alarm1_5 == 1 ){// пятница
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_5 = 0;
- if(EEPROM.read(128) != alarm1_5){
- EEPROM.write(128, alarm1_5);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- if(weekday == 6 && alarm1_6 == 1 ){//суббота
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_6 = 0;
- if(EEPROM.read(129) != alarm1_6){
- EEPROM.write(129, alarm1_6);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- if(weekday == 0 && alarm1_0 == 1 ){//воскресенье
- if(timer_on1 == 3){
- digitalWrite(16, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("выкл."));
- }
- }
- if(timer_on1 == 4){
- digitalWrite(16, LOW); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT1, String ("вкл."));
- }
- }
- alarm1_0 = 0;
- if(EEPROM.read(123) != alarm1_0){
- EEPROM.write(123, alarm1_0);
- EEPROM.commit();
- }
- alarm1_stat();
- }
- }
- delay(1);
- if(timer_on2 >= 3 && timer_start2 == 0 && ((epoch % 86400L) / 3600) == set_time2h && (epoch % 3600) / 60 == set_time2m){// будильник для упр. розетки 2
- if(weekday == 1 && alarm2_1 == 1 ){ //понедельник
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_1 = 0;
- if(EEPROM.read(131) != alarm2_1){
- EEPROM.write(131, alarm2_1);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- if(weekday == 2 && alarm2_2 == 1 ){ //вторник
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_2 = 0;
- if(EEPROM.read(132) != alarm2_2){
- EEPROM.write(132, alarm2_2);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- if(weekday == 3 && alarm2_3 == 1 ){ //среда
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_3 = 0;
- if(EEPROM.read(133) != alarm2_3){
- EEPROM.write(133, alarm2_3);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- if(weekday == 4 && alarm2_4 == 1 ){//четверг
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_4 = 0;
- if(EEPROM.read(134) != alarm2_4){
- EEPROM.write(134, alarm2_4);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- if(weekday == 5 && alarm2_5 == 1 ){// пятница
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_5 = 0;
- if(EEPROM.read(135) != alarm2_5){
- EEPROM.write(135, alarm2_5);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- if(weekday == 6 && alarm2_6 == 1 ){//суббота
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_6 = 0;
- if(EEPROM.read(136) != alarm2_6){
- EEPROM.write(136, alarm2_6);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- if(weekday == 0 && alarm2_0 == 1 ){//воскресенье
- if(timer_on2 == 3){
- digitalWrite(14, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("выкл."));
- }
- }
- if(timer_on2 == 4){
- digitalWrite(14, LOW); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT2, String ("вкл."));
- }
- }
- alarm2_0 = 0;
- if(EEPROM.read(130) != alarm2_0){
- EEPROM.write(130, alarm2_0);
- EEPROM.commit();
- }
- alarm2_stat();
- }
- }
- delay(1);
- if(timer_on3 >= 3 && timer_start3 == 0 && ((epoch % 86400L) / 3600) == set_time3h && (epoch % 3600) / 60 == set_time3m){// будильник для упр. розетки 3
- if(weekday == 1 && alarm3_1 == 1 ){ //понедельник
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_1 = 0;
- if(EEPROM.read(138) != alarm3_1){
- EEPROM.write(138, alarm3_1);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- if(weekday == 2 && alarm3_2 == 1 ){ //вторник
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_2 = 0;
- if(EEPROM.read(139) != alarm3_2){
- EEPROM.write(139, alarm3_2);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- if(weekday == 3 && alarm3_3 == 1 ){ //среда
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_3 = 0;
- if(EEPROM.read(140) != alarm3_3){
- EEPROM.write(140, alarm3_3);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- if(weekday == 4 && alarm3_4 == 1 ){//четверг
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_4 = 0;
- if(EEPROM.read(141) != alarm3_4){
- EEPROM.write(141, alarm3_4);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- if(weekday == 5 && alarm3_5 == 1 ){// пятница
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_5 = 0;
- if(EEPROM.read(142) != alarm3_5){
- EEPROM.write(142, alarm3_5);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- if(weekday == 6 && alarm3_6 == 1 ){//суббота
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_6 = 0;
- if(EEPROM.read(143) != alarm3_6){
- EEPROM.write(143, alarm3_6);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- if(weekday == 0 && alarm3_0 == 1 ){//воскресенье
- if(timer_on3 == 3){
- digitalWrite(12, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("выкл."));
- }
- }
- if(timer_on3 == 4){
- digitalWrite(12, LOW); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT3, String ("вкл."));
- }
- }
- alarm3_0 = 0;
- if(EEPROM.read(137) != alarm3_0){
- EEPROM.write(137, alarm3_0);
- EEPROM.commit();
- }
- alarm3_stat();
- }
- }
- delay(1);
- if(timer_on4 >= 3 && timer_start4 == 0 && ((epoch % 86400L) / 3600) == set_time4h && (epoch % 3600) / 60 == set_time4m){// будильник для упр. розетки 4
- if(weekday == 1 && alarm4_1 == 1 ){ //понедельник
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_1 = 0;
- if(EEPROM.read(145) != alarm4_1){
- EEPROM.write(145, alarm4_1);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- if(weekday == 2 && alarm4_2 == 1 ){ //вторник
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_2 = 0;
- if(EEPROM.read(146) != alarm4_2){
- EEPROM.write(146, alarm4_2);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- if(weekday == 3 && alarm4_3 == 1 ){ //среда
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_3 = 0;
- if(EEPROM.read(147) != alarm4_3){
- EEPROM.write(147, alarm4_3);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- if(weekday == 4 && alarm4_4 == 1 ){//четверг
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_4 = 0;
- if(EEPROM.read(148) != alarm4_4){
- EEPROM.write(148, alarm4_4);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- if(weekday == 5 && alarm4_5 == 1 ){// пятница
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_5 = 0;
- if(EEPROM.read(149) != alarm4_5){
- EEPROM.write(149, alarm4_5);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- if(weekday == 6 && alarm4_6 == 1 ){//суббота
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //включаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_6 = 0;
- if(EEPROM.read(150) != alarm4_6){
- EEPROM.write(150, alarm4_6);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- if(weekday == 0 && alarm4_0 == 1 ){//воскресенье
- if(timer_on4 == 3){
- digitalWrite(13, HIGH); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("выкл."));
- }
- }
- if(timer_on4 == 4){
- digitalWrite(13, LOW); //выключаем 1 реле
- if(client.connected()){
- client.publish(STAT4, String ("вкл."));
- }
- }
- alarm4_0 = 0;
- if(EEPROM.read(144) != alarm4_0){
- EEPROM.write(144, alarm4_0);
- EEPROM.commit();
- }
- alarm4_stat();
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- if(timer_on1 == 0)timer_start1 = 0;
- if(timer_on2 == 0)timer_start2 = 0;
- if(timer_on3 == 0)timer_start3 = 0;
- if(timer_on4 == 0)timer_start4 = 0;
- //////////////////////////////////обратная связь для прошедшего времени таймеров ////////////////////////////////
- if (timer_start1 == 1) {
- buf_ss1 = (millis() - evTime1) / 1000 ; // секунды из миллисикунд
- time1 = "";// создаем пустую строку для вывода в ее часов: минут: секунд
- time1 += "Прошло.: ";
- time1 += String((buf_ss1 % 86400L) / 3600); //добовляем бит часов
- time1 += ": "; // добовляем ":"
- if (((buf_ss1 % 3600)/60) < 10 ) {
- time1 += '0';
- }
- time1 += String((buf_ss1 % 3600) / 60);// добовляем бит минут
- time1 += ": ";// добовляем ":"
- if ( (buf_ss1 % 60) < 10 ) {
- time1 += '0';
- }
- time1 += String(buf_ss1 % 60); // добовляем бит секунд
- time1 += '\n';// завершаем строку спецсимволом
- }
- delay(1);
- if (timer_start2 == 1) {
- buf_ss2 = (millis() - evTime2) / 1000; // секунды из миллисикунд
- time2 = "";
- time2 += "Прошло.: ";
- time2 += String((buf_ss2 % 86400L) / 3600); //добовляем бит часов
- time2 += ": "; // добовляем ":"
- if ( ((buf_ss2 % 3600) / 60) < 10 ) {
- time2 += '0';
- }
- time2 += String((buf_ss2 % 3600) / 60);// добовляем бит минут
- time2 += ": ";// добовляем ":"
- if ((buf_ss2 % 60) < 10 ) {
- time2 += '0';
- }
- time2 += String(buf_ss2 % 60); // добовляем бит секунд
- time2 += '\n';// завершаем строку спецсимволом
- }
- delay(1);
- if (timer_start3 == 1) {
- buf_ss3 = (millis() - evTime3) / 1000; // секунды из миллисикунд
- time3 = "";
- time3 += "Прошло.: ";
- time3 += String((buf_ss3 % 86400L) / 3600); //добовляем бит часов
- time3 += ": "; // добовляем ":"
- if (((buf_ss3 % 3600) / 60) < 10 ) {
- time3 += '0';
- }
- time3 += String((buf_ss3 % 3600) / 60);// добовляем бит минут
- time3 += ": ";// добовляем ":"
- if ( (buf_ss3 % 60) < 10 ) {
- time3 += '0';
- }
- time3 += String(buf_ss3 % 60); // добовляем бит секунд
- time3 += '\n';// завершаем строку спецсимволом
- }
- delay(1);
- if (timer_start3 == 1) {
- buf_ss4 = (millis() - evTime4) / 1000; // секунды из миллисикунд
- time4 = "";
- time4 += "Прошло: ";
- time4 += String((buf_ss4 % 86400L) / 3600); //добовляем бит часов
- time4 += ": "; // добовляем ":"
- if ( ((buf_ss4 % 3600) / 60) < 10 ) {
- time4 += '0';
- }
- time4 += String((buf_ss4 % 3600) / 60);// добовляем бит минут
- time4 += ": ";// добовляем ":"
- if ( (buf_ss4 % 60) < 10 ) {
- time4 += '0';
- }
- time4 += String(buf_ss4 % 60); // добовляем бит секунд
- time4 += '\n';// завершаем строку спецсимволом
- }
- delay(1);
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- if (timer_start1 == 0 || timer_on1 == 0) {
- evTime1 = millis();
- }
- if (timer_start2 == 0 || timer_on2 == 0) {
- evTime2 = millis();
- }
- if (timer_start3 == 0 || timer_on3 == 0) {
- evTime3 = millis();
- }
- if (timer_start4 == 0 || timer_on4 == 0) {
- evTime4 = millis();
- }
- delay(1);
- if (digitalRead(16) != EEPROM.read(116)) {
- EEPROM.write(116, digitalRead(16));
- EEPROM.commit();
- delay(1);
- }
- if (digitalRead(14) != EEPROM.read(118)) {
- EEPROM.write(118, digitalRead(14));
- EEPROM.commit();
- delay(1);
- }
- if (digitalRead(12) != EEPROM.read(120)) {
- EEPROM.write(120, digitalRead(12));
- EEPROM.commit();
- delay(1);
- }
- if (digitalRead(13) != EEPROM.read(122)) {
- EEPROM.write(122, digitalRead(13));
- EEPROM.commit();
- delay(1);
- }
- delay(1);
- loop_end = millis();
- if (client.connected()) { // если подключен к mqtt
- if ((millis() - eventTime) > 5000) { // обновлять текущие статусы реле каждые 5 сек.
- if(step_mqtt_send == 10){
- if (digitalRead(16) == HIGH) {
- client.publish(STAT1, String ("выкл."));
- } else {
- client.publish(STAT1, String ("вкл."));
- }
- delay(1);
- eventTime = millis();
- step_mqtt_send = 0;
- }
- if(step_mqtt_send == 9){
- if (digitalRead(14) == HIGH) {
- client.publish(STAT2, String ("выкл."));
- } else {
- client.publish(STAT2, String ("вкл."));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 8){
- if (digitalRead(12) == HIGH) {
- client.publish(STAT3, String ("выкл."));
- } else {
- client.publish(STAT3, String ("вкл."));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 7){
- if (digitalRead(13) == HIGH) {
- client.publish(STAT4, String ("выкл."));
- } else {
- client.publish(STAT4, String ("вкл."));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 6){
- client.publish(ONLINE, String ("1"));
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 5){
- client.publish("relay/heap", String (ESP.getFreeHeap()));
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 4){
- if (timer_on1 > 0 ) {
- client.publish(TIME1, time1);
- } else {
- client.publish(TIME1, String ("выкл"));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 3){
- if (timer_on2 > 0) {
- client.publish(TIME2, time2);
- } else {
- client.publish(TIME2, String ("выкл"));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 2){
- if (timer_on3 > 0 ) {
- client.publish(TIME3, time3);
- } else {
- client.publish(TIME3, String ("выкл"));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 1){
- if (timer_on4 > 0) {
- client.publish(TIME4, time4);
- } else {
- client.publish(TIME4, String ("выкл"));
- }
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- if(step_mqtt_send == 0){
- client.publish("relay/time_loop", String (loop_end - loop_start));
- delay(1);
- step_mqtt_send = step_mqtt_send + 1;
- }
- }
- if (client.connected()) {
- // delay(100);
- client.loop();
- }
- delay(50);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement