Иногда я живу один и ставлю с вечера кашу в мультиварке, чтобы она приготовилась к времени моего завтрака. 

И раньше я постоянно путался - какую отсрочку старта поставить вечером, чтобы каша была готова к определенному времени утром? 

В итоге составил табличку с формулами и написал код Google Apps Script, чтобы знать какое точное время отсрочки старта готовки задавать на старой мультиварке.

Проблема выбора времени для приготовления каши

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

Старая мультиварка
Старая мультиварка

Структурированный подход - таблица

Подумал, что для решения этой задачи можно использовать Google Таблицы и создать формулу, которая будет рассчитывать время отсрочки старта мультиварки в зависимости от времени, когда нужна готовая каша.

В первой колонке через формулу задаю текущее время:

=TIME(HOUR(NOW()); MINUTE(NOW()); SECOND(NOW()))

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

В третьей колонке пишу продолжительность приготовления каши в часах, например для гречки 00:40.

В последней колонке составил простую формулу, которая будет вычислять время отсрочки старта мультиварки.

Таблица тут: в ней две вкладки - вычисление на формулах и через скрипты. Часовой пояс таблицы Пермь, а это значит Москва +2 часа - это можно изменить в Вашей копии через меню Файл > Настройки таблицы.

Таблица "Отсрочка старта приготовления каши на завтра"
Таблица "Отсрочка старта приготовления каши на завтра"

Автоматизация процесса с помощью скрипта Google Apps

Функция CALCULATE_DELAY вычисляет необходимую задержку запуска мультиварки, чтобы каша была готова в указанное время. Требуется всего два параметра: желаемое время завершения и время приготовления. Распишу что делает код:

  1. Проверяю то, что ввод рассматривается как строка:

desiredCompletionTime = desiredCompletionTime.toString();
cookingTime = cookingTime.toString();

Функция начинается с преобразования входных параметров в строки, чтобы гарантировать их правильную дальнейшую обработку.

  1. Получение текущего времени

var currentDateTime = new Date();
var currentHours = currentDateTime.getHours();
var currentMinutes = currentDateTime.getMinutes();

Текущая дата и время извлекаются с помощью функции «new Date()». Это дает функции базовую линию для расчета задержки.

  1. Парсим желаемое время завершения

var desiredParts = desiredCompletionTime.split(':');
var desiredDateTime = new Date(currentDateTime);
desiredDateTime.setHours(parseInt(desiredParts[0], 10));
desiredDateTime.setMinutes(parseInt(desiredParts[1], 10));
desiredDateTime.setSeconds(0);

Желаемое время завершения разбито на часы и минуты. Эти значения затем используются для установки желаемого времени завершения для нового объекта даты («desiredDateTime»).

  1. При необходимости корректируем дату на завтра

if (desiredDateTime <= currentDateTime) {
  desiredDateTime.setDate(desiredDateTime.getDate() + 1);
}

Если желаемое время завершения раньше текущего времени, функция предполагает, что время завершения приходится на следующий день, и соответствующим образом корректирует дату.

  1. Парсим время приготовления

var cookingParts = cookingTime.split(':');
var cookingTimeMinutes = parseInt(cookingParts[0], 10) * 60 + parseInt(cookingParts[1], 10);

Время приготовления разбивается на часы и минуты, а затем преобразуется в общее количество минут для облегчения расчета.

  1. Рассчитываем время начала приготовления

var startCookingTime = new Date(desiredDateTime.getTime() - cookingTimeMinutes * 60000);

Функция рассчитывает точное время запуска мультиварки путем вычитания времени приготовления (в миллисекундах) из желаемого времени завершения.

  1. Рассчитываем необходимую задержку исходя из текущего времени в минутах

var delayMinutes = (startCookingTime - currentDateTime) / 60000;

Время задержки в минутах рассчитывается путем нахождения разницы между временем начала приготовления и текущим временем с последующим преобразованием этой разницы из миллисекунд в минуты.

  1. Преобразуем время отсрочки в часы и минуты

var delayHours = Math.floor(delayMinutes / 60);
var delayRemainingMinutes = Math.round(delayMinutes % 60);

Затем время задержки преобразуется в часы и минуты для облегчения интерпретации и настройки на мультиварке.

  1. Форматируем задержку как ЧЧ:ММ

Logger.log(`Результат:\n${('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2)}`)
return ('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2);

Время задержки форматируется в формате «ЧЧ:ММ» и регистрируется в целях отладки.

Тестирую функцию CALCULATE_DELAY:

function test() {
  CALCULATE_DELAY("05:20:00", "00:40:00")
}

В этом тестовом примере рассчитывается время задержки начала для каши, которая должна быть готова к 05:20 утра, а приготовление занимает 40 минут.

Таблица тут: в ней две вкладки - вычисление на формулах и через скрипты.

Скриншот сделан утром
Скриншот сделан утром

Полностью весь код выглядит следующим образом:

/**
 * Расчет времени отсрочки старта для мультиварки
 * 
 * https://habr.com/ru/articles/833648/
 */

function CALCULATE_DELAY(desiredCompletionTime, cookingTime) {
  desiredCompletionTime = desiredCompletionTime.toString();
  cookingTime = cookingTime.toString();
  var currentDateTime = new Date();
  var currentHours = currentDateTime.getHours();
  var currentMinutes = currentDateTime.getMinutes();
  var desiredParts = desiredCompletionTime.split(':');
  var desiredDateTime = new Date(currentDateTime);
  desiredDateTime.setHours(parseInt(desiredParts[0], 10));
  desiredDateTime.setMinutes(parseInt(desiredParts[1], 10));
  desiredDateTime.setSeconds(0);
  if (desiredDateTime <= currentDateTime) {
    desiredDateTime.setDate(desiredDateTime.getDate() + 1);
  }
  var cookingParts = cookingTime.split(':');
  var cookingTimeMinutes = parseInt(cookingParts[0], 10) * 60 + parseInt(cookingParts[1], 10);
  var startCookingTime = new Date(desiredDateTime.getTime() - cookingTimeMinutes * 60000);
  var delayMinutes = (startCookingTime - currentDateTime) / 60000;
  var delayHours = Math.floor(delayMinutes / 60);
  var delayRemainingMinutes = Math.round(delayMinutes % 60);
  Logger.log(`Результат:\n${('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2)}`)
  return ('0' + delayHours).slice(-2) + ':' + ('0' + delayRemainingMinutes).slice(-2);
}

function test() {
  CALCULATE_DELAY("05:20:00", "00:40:00")
}

Итоги

В быстро меняющемся мире, в котором мы живем, автоматизация повседневных задач может сэкономить драгоценное время и усилия. Этот код, написанный на языке Google Apps Script, поможет рассчитать точное время отсрочки запуска мультиварки.

Автор: Михаил Шардин

5 августа 2024 г.

Комментарии (35)


  1. Javian
    05.08.2024 03:09
    +1

    Я так точно не высчитываю - мультиварка останавливается когда выкипает вода. Мне важнее залить воды в количестве необходимом для готовности. Выкипит раньше - будет каша недоваренная. Будет немного больше необходимого - лишнее выкипит пока она будет стоять на подогреве после окончания программы варки.


    1. empenoso Автор
      05.08.2024 03:09
      +1

      Это видимо от каши зависит, я литра полтора наливаю и вроде проблем ни разу не было.


      1. Javian
        05.08.2024 03:09
        +1

        У меня ориентир - не ниже чем "на палец над уровнем крупы".


      1. MarijQA
        05.08.2024 03:09

        От каши, конечно. Гречку вот вообще варить не надо. С вечера залить, утром разогреть)


        1. McKinseyBA
          05.08.2024 03:09
          +2

          С вечера залить, утром разогреть)

          А через 10 лет рассказывать гастроэнтерологу/онкологу, что

          Гречку вот вообще варить не надо

          На пабмеде (пару лет назад так точно) легко гуглились статьи и даже метанализы исследований на тему "каши, которые требуют варки - надо варить, а хлопья не требующие варки - не надо потреблять". Не врач и не ставлю диагнозы, но если у вас прокатило - это не значит, что прокатит у других


          1. MarijQA
            05.08.2024 03:09

            Как раз относительно гречки гастроэнтерологи и не настаивают на варке. Коричневая, не зеленая!, гречка уже после тепловой обработки продаётся, поэтому она и коричневая. Так что залить кипятком и оставить на несколько часов или варить - разница только во вкусе.


  1. slog2
    05.08.2024 03:09
    +1

    Для каши не надо ничего высчитывать. Вечером засыпал крупы, залил воды, нажал старт. Когда программа приготовления завершится мультиварка сама переходит в режим "подогрев" и стоит с горячей кашей до утра. Каша только лучше становится.


    1. empenoso Автор
      05.08.2024 03:09
      +1

      Слишком долго подогревать будет - потратит электроэнергию?

      А так старт готовки прямо перед завтраком, и крупа заодно разбухнет - больше станет.


      1. berez
        05.08.2024 03:09
        +1

        Слишком долго подогревать будет - потратит электроэнергию?

        Корпус мультиварки достаточно неплохо теплоизолирует, да и температуру на подогреве держат не очень большой - на моей, например, градусов 60. Так что энергии там уходит не сильно больше, чем когда она просто индикаторным табло светит в пустоту.

        Опять же, не обязательно запускать ее прямо с вечера. Можно поставить задержку в 2-3 часа, чтобы она начала готовить ночью и к утру гарантированно закончила. Ну постоит на подогреве пару часиков, это не страшно. Заодно попадаем в ночной тариф, если тарификация ЭЭ раздельная (день-ночь).

        А так старт готовки прямо перед завтраком, и крупа заодно разбухнет - больше станет.

        Если дома жарко, за ночь крупа вполне может начать бродить. Ну и есть горячущую, только что приготовленную кашу - так себе удовольствие. Постояв на подогреве, она слегка остынет и температура будет более комфортная для поедания.

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


  1. CitizenOfDreams
    05.08.2024 03:09
    +8

    Високосные секунды не забыли учесть?


    1. empenoso Автор
      05.08.2024 03:09
      +4

      Ой


  1. sasha_semen
    05.08.2024 03:09
    +1

    В приложении Sky, в котором можно мультиваркой Redmont по Bt управлять именно время окончания программы задается, задержка рассчитывается сама. И еще опцию подогрева по окончании можно отключить.

    Но я всё равно "в уме" прикидываю, не особо сложно.


    1. empenoso Автор
      05.08.2024 03:09

      У меня древняя


  1. DeFANCE
    05.08.2024 03:09
    +3

    У меня раньше, до того как выгорели датчики температуры, была R., там отсрочка означала, через сколько начнётся готовка, ровно как у автора. Теперь P., у которой отсрочка означает, через какое время будет готово, а по умолчанию оно равно времени приготовлении, и это гораздо удобнее. Это ещё один пример современности, когда дизайнеры интерфейсов обычно не пользуются своими же дизайнами.


    1. randomsimplenumber
      05.08.2024 03:09
      +3

      дизайнеры интерфейсов обычно не пользуются своими же дизайнами

      Понимаю. Бесит. Иногда сколько неочевидной магии напихают, что просто удивляешься. RGB индикатор степени готовности. Чуваки, выведите цифры, можно проценты, можно время, можно даже прогресс бар, я пойму, правда. Индикация окончания программы - только звуковая. У вас не нашлось лишнего светодиода, и теперь нужно внимательно слушать чтобы не пропустить? Вид программы подписать не буквами а иконкой? Используй фантазию, бро. Мы смогли и ты сможешь. Таймер отсрочки начала программы? Да всем пофигу когда она начнется. Интересно когда закончится. Код ошибки изобразить светодиодами, пусть некоторые светятся, некоторые мигают, а некоторые красные. Привет из 80-х?


    1. juray
      05.08.2024 03:09

      Самое удобное - это ввод непосредственно целевого момента времени, к которому блюдо должно быть готово. Вот требуется готовая каша в 6:30 - так и вводить 06:30, и ничего не высчитывать.

      Отсрочка от текущего момента программирования - выглядит каким-то легаси, оставшимся от времен, когда таймеры были механические, с обратным отсчетом.


      1. empenoso Автор
        05.08.2024 03:09

        В данном случае мультиварке лет 15 наверное, а то и больше, так что точно - легаси.


        1. randomsimplenumber
          05.08.2024 03:09
          +1

          15 лет назад микроконтроллеры уже были.


          1. Iv38
            05.08.2024 03:09

            Но большинство производителей кухонной техники и до сих пор почему-то считает, что часов реального времени не существует.


            1. CitizenOfDreams
              05.08.2024 03:09

              Есть и худший вариант - когда производитель считает, что десять строчек в программе микроконтроллера это и есть часы реального времени. В результате все бытовые приборы в доме показывают разное время или мигают 12:00.


  1. PavelBelyaev
    05.08.2024 03:09
    +3

    Идея у вас есть и это прекрасно, а теперь можете написать бота в телеге, которому пишите надо включить в 6-30, а он спрашивает сколько готовить (выкидывает значения на выбор) и отвечает сколько отсрочку ставить, а если дальше пойти, то прям будет для каждой каши считать своё время.
    Я тоже по бытовой ситуации начал свой проект, учет бюджета, включать и выключать домашний сервер через телегу, но уже полгода его пишу по выходным чисто для души...


    1. empenoso Автор
      05.08.2024 03:09

      Да нет, именно в этом случае кажется что одной табличке именно мне хватит


  1. Lelant0s
    05.08.2024 03:09
    +5

    Что за каша готовится 40 минут и в каких объемах вы ее потребляете ежедневно, учитывая, что воды на сухую массу берете 1.5 литра?


    1. empenoso Автор
      05.08.2024 03:09
      +1

      Я люблю гречку


  1. yurikmellon
    05.08.2024 03:09

    У меня древняя Мультиварка Panasonic SR-TMH18. Там не надо ничего высчитывать. Для пшёнки 1 к 4 (4,5) и время отсрочки, это время когда каша готова. Например, в 23:00 надо выставить отсрочку на 7 часов, чтобы каша была готова к 6:00 следующего утра.

    Всё настолько просто, что я удивлён: а разве у других мультиварок отсрочка работает по другому?


    1. randomsimplenumber
      05.08.2024 03:09
      +3

      я удивлён: а разве у других мультиварок отсрочка работает по другому?

      Вы не поверите.. ;)


    1. juray
      05.08.2024 03:09

      не надо ничего высчитывать.

      Например, в 23:00 надо выставить отсрочку на 7 часов, чтобы каша была готова к 6:00

      Кажется, эти две фразы противоречат руг другу.
      А если готовность нужна в 6:15, а сейчас 22:37?
      Таки минимум одно действие высчитывания требуется - вычисление разности между текущим моментом и моментом готовности. Еще и на часы посмотреть сначала (что, в ринципе, не проблема - они ж на мультиварке выводятся?)

      В идеале, хорошо бы и это вычитание не надо было делать - ввёл "6:00" и неважно, сколько сейчас на часах - прибор сам всё высчитает.


      1. esaulenka
        05.08.2024 03:09
        +1

        А если готовность нужна в 6:15, а сейчас 22:37?

        Те же 7 часов. И пусть полчасика на подогреве постоит. Во-первых, считать надо, а во-вторых, вводить неудобно.

        хорошо бы и это вычитание не надо было делать - ввёл "6:00"

        Героев, которые напишут свою прошивку под мультиварку, я что-то не видел, а до инженеров-дизайнеров редмонда это что-то не доходит. Или, как минимум, не доходило три-пять лет назад - с последними их творениями не знаком. А так - я только за, в уме действительно считать неудобно (особенно когда уже собрался спать, и только потом вспомнил, что завтрака-то и нет).


  1. sdelaypausu
    05.08.2024 03:09

    Я не завтракаю. Поэтому не мучаюсь с тем, насколько выставить мультиварку, чтобы откушать кашку. И судя по комментам, я скучно живу :)


    1. randomsimplenumber
      05.08.2024 03:09
      +2

      Я не завтракаю

      Лекция для колхозников (:


  1. primedia
    05.08.2024 03:09
    +1

    а что, никто не готовит кашу на молоке? просто, насколько я понимаю, на молоке на ночь не оставишь. оно ж испортится.


    1. Javian
      05.08.2024 03:09
      +2

      Сейчас такое молоко, что быстрее испортится упаковка /s


    1. Flashget
      05.08.2024 03:09

      Читал лайфхак, что вечером вместе с холодным молоком в мультиварку кидаешь ещё несколько кубиков льда, это помогает молоку продержатся до того как утром включится готовка. Сам правда не пробовал, не люблю молочные каши :-)


  1. boroda_el
    05.08.2024 03:09

    Крутейшая программа которая складывает 3 числа.


    1. empenoso Автор
      05.08.2024 03:09

      Это не программа, а облегчение самому себе жизни для взаимодействия со старой мультиваркой.