#include <Wire.h>
//#include <TimeLib.h>
#include <ESP8266WiFi.h>
#include <TimeLord.h>
//#include <WiFiClientSecure.h>
#include <ESP8266TelegramBOT.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire> rtcObject(Wire);
ADC_MODE(ADC_VCC); //измерение АКК
//В этом блоке все настройки!
/////////////////////////////////////////////////////////////////////////////////////////
#define REL 5 // выход управления светодиодом
#define BOTtoken "xxx xxx:xxxxxxxxxxx //Токен бота полученного от @BotFather
#define BOTname "пк1" // Имя бота
#define BOTusername "pcam1_bot" // Логин бота
TelegramBOT bot(BOTtoken, BOTname, BOTusername);
//Данные WIFI
const char* ssid = "Power";
const char* password = "111111111";
const int TIMEZONE = +2; // установка часового пояса
const float LATITUDE = 50, LONGITUDE = 30; // установка координат: широта, долгота
////////////////////////////////////////////////////////////////////////////////////////////////////
TimeLord myLord; // переменные TimeLord
byte sunTime[6];
int minNow, minLast = -1, hourNow, hourLast = -1, minOfDay; // -1 отрабатывает при первом запуске
int mSunrise, mSunset; //время рассвета и заката в минутах от начала дня (0-1439)
void setup() {
Serial.begin(115200); //Запуск последовательного подключения
rtcObject.Begin(); //Запуск I2C
Wire.begin(12, 14); // due to limited pins, use pin 0 and 2 for SDA, SCL
// RtcDateTime currentTime = RtcDateTime(22, 02, 03, 00, 17, 0); //2022/02/03 00:17:0
// rtcObject.SetDateTime(currentTime); //Сохраняем время
pinMode(REL, OUTPUT); // инициализируем порт для канала реле как выход
//digitalWrite(REL ,HIGH); // устанавливаем на входе релейного модуля высокий уровень — реле выключено
//pinMode(LED_BUILTIN, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
delay(15000);
// Serial.println("");
// Serial.println("WiFi connected");
// Serial.println("IP address: ");
// Serial.println(WiFi.localIP());
RtcDateTime currentTime = rtcObject.GetDateTime();
// Rtc.Enable32kHzPin(false);
// Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone);
char buffer[70];
sprintf(buffer, "👷🏻<Время %d:%d %d-%d-%d> 🔋%d%%", currentTime.Hour(), currentTime.Minute(), currentTime.Day(), currentTime.Month(), currentTime.Year(), ESP.getVcc()/25);
Serial.println(buffer);
bot.sendMessage("350949067", buffer , "");
WiFi.mode(WIFI_OFF);
wifi_set_opmode(NULL_MODE);
myLord.TimeZone(TIMEZONE * 60);
myLord.Position(LATITUDE, LONGITUDE);
}
void loop() {
RtcDateTime currentTime = rtcObject.GetDateTime(); //получаем время от RTC
myLord.SunRise(sunTime); // расчетные данные рассвета из TimeLord
mSunrise = sunTime[2] * 60 + sunTime[1] - 20; // где "-20" задержка выключения реле утром в минутах
myLord.SunSet(sunTime); // расчетные данные заката из TimeLord
mSunset = sunTime[2] * 60 + sunTime[1] + 20; // +20 задержка вкл реле вечером
minOfDay = currentTime.Hour() * 60 + currentTime.Minute(); //текущая минута дня 0-1439
//Serial.print(" SUNRISE OFF:");
//Serial.print(mSunrise);
//Serial.print(" SUNSET ON:");
//Serial.print(mSunset);
// char buffer[70];
// sprintf(buffer, "👷🏻<Время %d:%d %d-%d-%d> 🔋%d%%", currentTime.Hour(), currentTime.Minute(), currentTime.Day(), currentTime.Month(), currentTime.Year(), ESP.getVcc()/25);
// Serial.println(buffer);
// Serial.println(" - - - - - - - - - - - - - - - - - - - - -");
//delay(10000);
if (minOfDay < mSunrise || minOfDay >= mSunset) // если минут с начала суток меньше, чем время рассвета, но больше, чем время заката
{
// digitalWrite(LED_BUILTIN, LOW); //светодиод на плате
digitalWrite(REL,HIGH);
}
else
{
digitalWrite(REL,LOW);
//digitalWrite(LED_BUILTIN, HIGH);//светодиод на плате
}
}