This commit is contained in:
Alex
2021-02-03 23:34:17 +03:00
parent 9be9c966d7
commit 3439e5cd3d
193 changed files with 35322 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
void setupTime() {
ntp.setUpdateInterval(NTP_UPD_PRD / 2 * 60000ul); // меньше в два раза, ибо апдейт вручную
ntp.setTimeOffset((cfg.GMT - 13) * 3600);
ntp.setPoolServerName(NTPservers[cfg.NTP - 1]);
if (cfg.WiFimode) {
// если подключены - запрашиваем время с сервера
ntp.begin();
if (ntp.update() && !gotNTP) gotNTP = true;
}
}
// сохраняет счёт времени после обрыва связи
void timeTicker() {
static timerMillis tmr(10, true);
if (tmr.isReady()) {
updateTime(); // обновляем время
sendTimeToSlaves(); // отправляем время слейвам
trnd.update(now.hour, now.min, now.sec); // обновляем рандомайзер
if (gotNTP) checkWorkTime(); // проверяем расписание, если подключены к Интернет
checkTurnoff(); // проверяем таймер отключения
}
}
void updateTime() {
if (cfg.WiFimode && WiFi.status() == WL_CONNECTED) { // если вайфай подключен
now.sec = ntp.getSeconds();
now.min = ntp.getMinutes();
now.hour = ntp.getHours();
now.day = ntp.getDay();
now.day = (now.day == 0) ? 6 : (now.day - 1); // перевод из вс0 в пн0
now.weekMs = now.getWeekS() * 1000ul + ntp.getMillis();
now.setMs(ntp.getMillis());
if (now.min % NTP_UPD_PRD == 0 && now.sec == 0) {
// берём время с интернета каждую NTP_UPD_PRD минуту, ставим флаг что данные с NTP получены, значит мы онлайн
if (ntp.update() && !gotNTP) gotNTP = true;
}
} else { // если нет
now.tick(); // тикаем своим счётчиком
}
}
void sendTimeToSlaves() {
if (!cfg.WiFimode) { // если мы AP
static byte prevSec = 0;
if (prevSec != now.sec) { // новая секунда
prevSec = now.sec;
if (now.min % 1 == 0 && now.sec == 0) sendTime(); // ровно каждые 5 мин отправляем время
}
}
}
void checkTurnoff() {
if (turnoffTmr.isReady()) {
turnoffTmr.stop();
setPower(0);
}
}
void checkWorkTime() {
if (!isWorkTime(now.hour, cfg.workFrom, cfg.workTo)) {
if (cfg.state) {
cfg.state = false;
FastLED.clear();
FastLED.show();
}
} else {
if (!cfg.state && !cfg.manualOff) {
cfg.state = true;
}
}
}
void sendTime() {
IPAddress ip = WiFi.localIP();
ip[3] = 255;
char reply[20] = GL_KEY;
byte keylen = strlen(GL_KEY);
reply[keylen++] = ',';
reply[keylen++] = 0 + '0';
reply[keylen++] = ',';
char hours[4];
itoa(now.hour, hours, DEC);
strncpy(reply + keylen, hours, 3);
keylen += strlen(hours);
reply[keylen++] = ',';
char mins[4];
itoa(now.min, mins, DEC);
strncpy(reply + keylen, mins, 3);
keylen += strlen(mins);
reply[keylen++] = NULL;
DEBUG("Sending time: ");
DEBUGLN(reply);
Udp.beginPacket(ip, 8888);
Udp.write(reply);
Udp.endPacket();
}
bool isWorkTime(byte t, byte from, byte to) {
if (from == to) return 1;
else if (from < to) {
if (t >= from && t < to) return 1;
else return 0;
} else {
if (t >= from || t < to) return 1;
else return 0;
}
}