Как создать Google Календарь и получить к нему доступ с ESP8266 / Arduino

Пошаговое руководство: как создать Google Календарь, опубликовать события в виде простой текстовой ленты (RSS-подобный вывод) и получить к нему доступ с любой платы — ESP8266, ESP32 или Arduino. Идеально для умного дома: включение света, полива, кофеварки или голосового оповещения по расписанию из вашего личного календаря. Всё без платных сервисов и сложных интеграций — только бесплатный Google Календарь + Google Apps Script.

Как создать гугл календарь и получить к нему доступ ESP8266

Что мы получим в итоге

  • Обычный Google Календарь, которым вы уже пользуетесь
  • Простую текстовую ленту всех событий за 7 дней
  • Формат вывода: день, время начала, длительность (целый день — TRUE/FALSE), напоминание (минуты), название события
  • Доступ по прямой ссылке — можно читать с ESP8266, ESP32, Arduino + Ethernet/Wi-Fi

Шаг 1. Создаём и наполняем Google Календарь

Заходите в calendar.google.com → создаёте события как обычно.
Примеры событий для теста:

  • Прошедшее событие (вчера)
  • Текущее событие (идёт прямо сейчас)
  • Будущее событие с напоминанием за 20 минут
  • Событие «На весь день»

Шаг 2. Создаём Google Apps Script

Переходите: script.google.com → Новый проект
Полностью замените код на этот:

function doGet() {
  var email = "ВАШ_EMAIL@gmail.com";        // ← ваш Google-аккаунт
  var cal = CalendarApp.getCalendarsByName("")[0]; // берём основной календарь
  
  var now = new Date();
  var start = new Date(now.getTime() - 7*24*60*60*1000); // 7 дней назад
  var end = new Date(now.getTime() + 30*24*60*60*1000);  // +30 дней вперёд
  
  var events = cal.getEvents(start, end);
  var result = "";
  
  for (var i = 0; i < events.length; i++) {
    var e = events[i];
    var title = e.getTitle();
    var startTime = e.getStartTime();
    var isAllDay = e.isAllDayEvent();
    var reminder = 0;
    if (e.getAllReminders().length > 0) {
      reminder = e.getAllReminders()[0].getMinutes();
    }
    
    result += Utilities.formatDate(startTime, "GMT+3", "EEE, dd MMM HH:mm") + 
              " | " + isAllDay + 
              " | " + reminder + 
              " | " + title + "\n";
  }
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.TEXT);
}
Берёт события из календаря за последние 7 дней и на 30 дней вперёд.
Формирует строку с датой, временем, флагом «весь день», напоминанием и названием события.
Возвращает все события в виде простого текста через веб-запрос doGet().

Шаг 3. Публикуем как веб-приложение

  1. Нажимаете «Развернуть» → «Новое развертывание»
  2. Выбираете «Веб-приложение»
  3. Кто имеет доступ: «Любой пользователь» (или «Любой, даже анонимно»)
  4. Развернуть → копируете полученную ссылку

Шаг 4. Проверяем результат

Вставляете ссылку в браузер — получаете чистый текст со всеми событиями!
Пример вывода:

Tue, 25 Mar 08:00 | false | 20 | Полить цветы
Wed, 26 Mar 00:00 | true  | 0  | Выходной день

Что дальше (во второй части)

  • Чтение этой ленты с ESP8266 (библиотека HTTPSRedirect)
  • Включение реле, света, полива, кофеварки по событиям
  • Голосовое оповещение за 20 минут до события
  • Telegram-уведомления из календаря

Итог

Теперь у вас есть полностью рабочий Google Календарь с открытым текстовым доступом — готов к интеграции в любой проект умного дома. Никаких платных IFTTT, никаких сложных API-ключей — всё бесплатно и работает мгновенно. Во второй части подключим ESP8266 и заставим устройства реагировать на ваши планы!

Ставьте лайк, если создали свой календарь-ленту, и пишите в комментариях — для чего будете использовать: полив, свет, кофе по утрам или что-то другое?

FAQ — Google Календарь для ESP8266 / Arduino

Можно ли использовать любой Google Календарь — или нужен новый?

Можно использовать любой календарь: основной, рабочий или созданный специально под проект. Скрипт получает события по имени календаря. Если имя пустое, берётся основной календарь аккаунта.

Сколько событий выводит скрипт?

Скрипт формирует ленту событий за последние 7 дней и на 30 дней вперёд. Эти параметры легко менять, корректируя переменные start и end.

Поддерживаются ли события «На весь день»?

Да. Для таких событий возвращается true в поле «целый день». Это можно использовать для особых сценариев, например отключения уведомлений ночью или включения праздничных режимов в умном доме.

Можно ли добавить больше данных: описание, место, участников?

Да. Google Apps Script позволяет получать полное содержимое события: описание, место, ссылки, участников, цвет и тип календаря. Эти значения можно добавить в вывод — достаточно расширить строку результата в цикле и вставить нужные методы CalendarApp.

Безопасно ли публиковать календарь как «Доступ для всех»?

Да. Веб-приложение отдаёт только текст событий, без доступа к аккаунту, настройкам или другим данным. Даже при знании прямой ссылки никто не сможет изменить ваш календарь: только прочитать события, включённые в диапазон.

Можно ли анализировать события прямо на ESP8266?

Да. Формат вывода — обычный текст, одна строка = одно событие. ESP8266 легко парсит строки через String.indexOf() и substring(). Это позволяет включать реле, свет, полив или голосовые оповещения по расписанию.

Можно ли использовать этот метод на Arduino без Wi-Fi?

Да. Подойдёт любая плата с доступом в интернет: Arduino UNO/MEGA с Ethernet Shield, ENC28J60 или ESP32. Достаточно выполнить обычный GET-запрос к опубликованному веб-сервису.

Почему в примере скрипта Reminder = 0?

Потому что в событии может не быть напоминаний. Если напоминание есть, скрипт считывает значение первого из них (например 20 минут) через getAllReminders()[0].getMinutes(). ESP8266 может использовать это значение, чтобы заранее включать устройства или отправлять уведомления.

📁 Скачать примеры