Иногда я живу один и ставлю с вечера кашу в мультиварке, чтобы она приготовилась к времени моего завтрака.
И раньше я постоянно путался - какую отсрочку старта поставить вечером, чтобы каша была готова к определенному времени утром?
В итоге составил табличку с формулами и написал код Google Apps Script, чтобы знать какое точное время отсрочки старта готовки задавать на старой мультиварке.
Проблема выбора времени для приготовления каши
Время завтрака очень важно и я никогда его не пропускаю. Обычно завтракаю довольно рано. Проблема расчёта времени действительно актуальна для меня. Пытался считать отсрочку старта приготовления каши на завтра на калькуляторе - как-то странно и долго.
Структурированный подход - таблица
Подумал, что для решения этой задачи можно использовать Google Таблицы и создать формулу, которая будет рассчитывать время отсрочки старта мультиварки в зависимости от времени, когда нужна готовая каша.
В первой колонке через формулу задаю текущее время:
=TIME(HOUR(NOW()); MINUTE(NOW()); SECOND(NOW()))
Во второй указываю время, когда каша уже должна быть готова, например, 06:00.
В третьей колонке пишу продолжительность приготовления каши в часах, например для гречки 00:40.
В последней колонке составил простую формулу, которая будет вычислять время отсрочки старта мультиварки.
Таблица тут: в ней две вкладки - вычисление на формулах и через скрипты. Часовой пояс таблицы Пермь, а это значит Москва +2 часа - это можно изменить в Вашей копии через меню Файл > Настройки таблицы.
Автоматизация процесса с помощью скрипта Google Apps
Функция CALCULATE_DELAY
вычисляет необходимую задержку запуска мультиварки, чтобы каша была готова в указанное время. Требуется всего два параметра: желаемое время завершения и время приготовления. Распишу что делает код:
Проверяю то, что ввод рассматривается как строка:
desiredCompletionTime = desiredCompletionTime.toString();
cookingTime = cookingTime.toString();
Функция начинается с преобразования входных параметров в строки, чтобы гарантировать их правильную дальнейшую обработку.
Получение текущего времени
var currentDateTime = new Date();
var currentHours = currentDateTime.getHours();
var currentMinutes = currentDateTime.getMinutes();
Текущая дата и время извлекаются с помощью функции «new Date()
». Это дает функции базовую линию для расчета задержки.
Парсим желаемое время завершения
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
»).
При необходимости корректируем дату на завтра
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);
Время задержки форматируется в формате «ЧЧ:ММ» и регистрируется в целях отладки.
Тестирую функцию 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 г.
Комментарии (65)
slog2
05.08.2024 03:09+2Для каши не надо ничего высчитывать. Вечером засыпал крупы, залил воды, нажал старт. Когда программа приготовления завершится мультиварка сама переходит в режим "подогрев" и стоит с горячей кашей до утра. Каша только лучше становится.
empenoso Автор
05.08.2024 03:09+1Слишком долго подогревать будет - потратит электроэнергию?
А так старт готовки прямо перед завтраком, и крупа заодно разбухнет - больше станет.berez
05.08.2024 03:09+2Слишком долго подогревать будет - потратит электроэнергию?
Корпус мультиварки достаточно неплохо теплоизолирует, да и температуру на подогреве держат не очень большой - на моей, например, градусов 60. Так что энергии там уходит не сильно больше, чем когда она просто индикаторным табло светит в пустоту.
Опять же, не обязательно запускать ее прямо с вечера. Можно поставить задержку в 2-3 часа, чтобы она начала готовить ночью и к утру гарантированно закончила. Ну постоит на подогреве пару часиков, это не страшно. Заодно попадаем в ночной тариф, если тарификация ЭЭ раздельная (день-ночь).
А так старт готовки прямо перед завтраком, и крупа заодно разбухнет - больше станет.
Если дома жарко, за ночь крупа вполне может начать бродить. Ну и есть горячущую, только что приготовленную кашу - так себе удовольствие. Постояв на подогреве, она слегка остынет и температура будет более комфортная для поедания.
В общем, точность в вычислениях нужна только в случае, если у вас мультиварка без режима подогрева или если он глючный и на нем каша подгорает.
vvzvlad
05.08.2024 03:09Так что энергии там уходит не сильно больше, чем когда она просто индикаторным табло светит в пустоту.
Ну сильно больше, на самом деле, индикатор это 1-2 ватта, а подогрев ватт 15-20, на порядок больше. Другое дело, что даже 24/7 эти 20вт это 50р/месяц(по одному тарифу 5р/квтч), а час в день это рубля 2 в месяц.
BITniki
05.08.2024 03:09А на подогреве она бродит не станет?
berez
05.08.2024 03:09+1На подогрев она становится после приготовления. Приготовление - это термообработка. Термообработка, в частности, убивает всякую микрофлору (впрочем, споры остаются).
Но даже если оставить на подогреве на месяц, там будет держаться температура около 60 градусов - для дрожжей это многовато. Не забродит.
sasha_semen
05.08.2024 03:09+1В приложении Sky, в котором можно мультиваркой Redmont по Bt управлять именно время окончания программы задается, задержка рассчитывается сама. И еще опцию подогрева по окончании можно отключить.
Но я всё равно "в уме" прикидываю, не особо сложно.
DeFANCE
05.08.2024 03:09+3У меня раньше, до того как выгорели датчики температуры, была R., там отсрочка означала, через сколько начнётся готовка, ровно как у автора. Теперь P., у которой отсрочка означает, через какое время будет готово, а по умолчанию оно равно времени приготовлении, и это гораздо удобнее. Это ещё один пример современности, когда дизайнеры интерфейсов обычно не пользуются своими же дизайнами.
randomsimplenumber
05.08.2024 03:09+4дизайнеры интерфейсов обычно не пользуются своими же дизайнами
Понимаю. Бесит. Иногда сколько неочевидной магии напихают, что просто удивляешься. RGB индикатор степени готовности. Чуваки, выведите цифры, можно проценты, можно время, можно даже прогресс бар, я пойму, правда. Индикация окончания программы - только звуковая. У вас не нашлось лишнего светодиода, и теперь нужно внимательно слушать чтобы не пропустить? Вид программы подписать не буквами а иконкой? Используй фантазию, бро. Мы смогли и ты сможешь. Таймер отсрочки начала программы? Да всем пофигу когда она начнется. Интересно когда закончится. Код ошибки изобразить светодиодами, пусть некоторые светятся, некоторые мигают, а некоторые красные. Привет из 80-х?
juray
05.08.2024 03:09Самое удобное - это ввод непосредственно целевого момента времени, к которому блюдо должно быть готово. Вот требуется готовая каша в 6:30 - так и вводить 06:30, и ничего не высчитывать.
Отсрочка от текущего момента программирования - выглядит каким-то легаси, оставшимся от времен, когда таймеры были механические, с обратным отсчетом.empenoso Автор
05.08.2024 03:09В данном случае мультиварке лет 15 наверное, а то и больше, так что точно - легаси.
randomsimplenumber
05.08.2024 03:09+115 лет назад микроконтроллеры уже были.
Iv38
05.08.2024 03:09Но большинство производителей кухонной техники и до сих пор почему-то считает, что часов реального времени не существует.
CitizenOfDreams
05.08.2024 03:09+1Есть и худший вариант - когда производитель считает, что десять строчек в программе микроконтроллера это и есть часы реального времени. В результате все бытовые приборы в доме показывают разное время или мигают 12:00.
esaulenka
05.08.2024 03:09Вообще-то, так оно и есть. Кварц, приделанный к любому контроллеру, и кварц, приделанный к DS1307, дадут абсолютно одинаковую точность.
Батарейки для бэкапа в духовки и стиральные машины всё равно ставить никто не будет, так что вопрос энергопотребления тут не важен.randomsimplenumber
05.08.2024 03:09А жаль. Цена батарейки роли не играет, а удобства добавляет.
esaulenka
05.08.2024 03:09+1Ну так батарейка помрёт в любом случае через несколько лет. Т.е. надо аккумулятор ставить со схемой заряда.
Тоже, конечно, не особо большая проблема - в компьютерах 30 лет назад ведь ставили, и если подобрать не такую ядрёную жижу (стандартная проблема 386 материнок в XXI веке - NiCd аккумулятор протёк и проел дырку во всех ближайших дорожках), то оно и работать будет.
У меня, кстати, часы касио на одном единственном аккумуляторе уже больше 10 лет работают. Они, правда, стоили как не самая дешёвая стиралка :-))randomsimplenumber
05.08.2024 03:09Ну так батарейка помрёт в любом случае через несколько лет
Стиралка, скорее всего, помрёт раньше. Хотя батарейку можно и поменять. А можно и не менять, если не напрягает.
CitizenOfDreams
05.08.2024 03:09+2Кварц, приделанный к любому контроллеру, и кварц, приделанный к DS1307, дадут абсолютно одинаковую точность.
Только если специально озаботиться согласованием кварца и подгонкой частоты. Ну и DS1307 - это так себе планка, термокомпенсации у него нет.
Батарейки для бэкапа в духовки и стиральные машины всё равно ставить никто не будет
Ну вот и получаются "часы", которые показывают точное время два раза в сутки, в 12:00AM и в 12:00PM. К счастью, разработчик моей кухонной плиты предусмотрел опцию "погасить часы на хрен", разработчики стиральной и сушильной машины были достаточно умными, чтобы удержаться от имплементации "часов из десяти строчек кода", а разработчик микроволновки поставил в нее старый добрый суперудобный и неубиваемый механический таймер.
sappience
05.08.2024 03:09+1Удивительно, но многие производители бытовой техники до сих пор тактируют внутренние часы от сети. Нет, не от интернета, от осветительной сети 50Hz или 60Hz.
esaulenka
05.08.2024 03:09Я тут изучал вопрос. По моим расчётам выходит, что в российской розетке частота стабильнее, чем отклонение 1/20e6 среднестатистического кварца (это если верить документации и допустить, что кварц имеет комнатную температуру, а не разогревается со всей духовкой. Может быть и сильно хуже).
По форумам любителей японских Flip Clock (рекомендую сразу искать это слово на ютубе - залипательное зрелище) аналогично - 50 герц выдерживается довольно хорошо.randomsimplenumber
05.08.2024 03:09кварц стоит дешевле отдельной обмотки трансформатора.
slog2
05.08.2024 03:09+1Трансформатор в принципе не нужен, можно через оптрон получить сетевые 50гц. Тут уже не однозначно что будет дешевле.
Javian
05.08.2024 03:09Там не отдельная обмотка. Ремонтировал свою микроволновку после аварии в электросети, которая повысила напряжение и несколько ночных часов жарила мои приборы. Трансформатор в конце концов сгорел, закоротил цепь и отключил сеть. Кроме микроволновки никто не пострадал. Познакомился с конструкцией. Две обмотки трансформатора. Одна для питания реле, вторая для питания микроконтроллера и с нее же до диодного моста берутся импульсы для часов.
За оригинальный трансформатор хотят ненормальных денег - около 1000 руб.
Купил за 300 руб однообмоточный, с которого запитал и реле и микроконтроллер.
Что интересно, если вместо переменного подать постоянный ток, то микроволновка включается, но не реагирует на кнопки. Импульсы часов как-то используются для работы микроконтроллера.
CitizenOfDreams
05.08.2024 03:09Что интересно, если вместо переменного подать постоянный ток, то микроволновка включается, но не реагирует на кнопки. Импульсы часов как-то используются для работы микроконтроллера.
Да скорее всего макак-программист написал там "while (ждем_импульс)".
Javian
05.08.2024 03:09Подозреваю, что это импульс вызывает прерывание, в котором много чего обрабатывается т.к. функционирование микроволновки связано с отсчетом времени.
CitizenOfDreams
05.08.2024 03:09Ну, лично я бы написал внутренний таймер, который синхронизируется с сетью. Там арифметики будет на десяток строк, зато случайную помеху или короткое пропадание сети отфильтрует.
Javian
05.08.2024 03:09Случайная помеха - это 0,02 секунды. Вероятность события очень низкая. Часы не отсчитывают секунды поэтому уйти далеко не смогут. Скорее сам владелец раз в год свет выключит для каких-то работ.
PavelBelyaev
05.08.2024 03:09+3Идея у вас есть и это прекрасно, а теперь можете написать бота в телеге, которому пишите надо включить в 6-30, а он спрашивает сколько готовить (выкидывает значения на выбор) и отвечает сколько отсрочку ставить, а если дальше пойти, то прям будет для каждой каши считать своё время.
Я тоже по бытовой ситуации начал свой проект, учет бюджета, включать и выключать домашний сервер через телегу, но уже полгода его пишу по выходным чисто для души...empenoso Автор
05.08.2024 03:09Да нет, именно в этом случае кажется что одной табличке именно мне хватит
yurikmellon
05.08.2024 03:09У меня древняя Мультиварка Panasonic SR-TMH18. Там не надо ничего высчитывать. Для пшёнки 1 к 4 (4,5) и время отсрочки, это время когда каша готова. Например, в 23:00 надо выставить отсрочку на 7 часов, чтобы каша была готова к 6:00 следующего утра.
Всё настолько просто, что я удивлён: а разве у других мультиварок отсрочка работает по другому?
randomsimplenumber
05.08.2024 03:09+3я удивлён: а разве у других мультиварок отсрочка работает по другому?
Вы не поверите.. ;)
juray
05.08.2024 03:09не надо ничего высчитывать.
Например, в 23:00 надо выставить отсрочку на 7 часов, чтобы каша была готова к 6:00
Кажется, эти две фразы противоречат руг другу.
А если готовность нужна в 6:15, а сейчас 22:37?
Таки минимум одно действие высчитывания требуется - вычисление разности между текущим моментом и моментом готовности. Еще и на часы посмотреть сначала (что, в ринципе, не проблема - они ж на мультиварке выводятся?)
В идеале, хорошо бы и это вычитание не надо было делать - ввёл "6:00" и неважно, сколько сейчас на часах - прибор сам всё высчитает.esaulenka
05.08.2024 03:09+2А если готовность нужна в 6:15, а сейчас 22:37?
Те же 7 часов. И пусть полчасика на подогреве постоит. Во-первых, считать надо, а во-вторых, вводить неудобно.
хорошо бы и это вычитание не надо было делать - ввёл "6:00"
Героев, которые напишут свою прошивку под мультиварку, я что-то не видел, а до инженеров-дизайнеров редмонда это что-то не доходит. Или, как минимум, не доходило три-пять лет назад - с последними их творениями не знаком. А так - я только за, в уме действительно считать неудобно (особенно когда уже собрался спать, и только потом вспомнил, что завтрака-то и нет).
Maxik12
05.08.2024 03:09+1Героев, которые напишут свою прошивку под мультиварку, я что-то не видел
Не мультиварка, да и прошивкой дело не ограничилось, но всё же: https://youtube.com/watch?v=ple5knuPTKQ
esaulenka
05.08.2024 03:09Чем хороши неумные бытовые устройства - к ним не нужно никаких мобильных приложений, никакой JS лабуды. Несколько кнопок и экранчик - этого достаточно, чтобы включить подогрев до N градусов на T минут через D часов. Не у всех, правда, хорошо получается (это я про редмонд).
Ну а этому товарищу повезло, что там унутре у ейнеонкаатмега. Обычно в такой простой бытовухе что-то совсем тупое и довольно экзотическое. Т.е. извольте сами найти документацию, компилятор, сваять из спичек с желудями программатор (какой ещё отладчик?!).
sdelaypausu
05.08.2024 03:09Я не завтракаю. Поэтому не мучаюсь с тем, насколько выставить мультиварку, чтобы откушать кашку. И судя по комментам, я скучно живу :)
primedia
05.08.2024 03:09+1а что, никто не готовит кашу на молоке? просто, насколько я понимаю, на молоке на ночь не оставишь. оно ж испортится.
Flashget
05.08.2024 03:09Читал лайфхак, что вечером вместе с холодным молоком в мультиварку кидаешь ещё несколько кубиков льда, это помогает молоку продержатся до того как утром включится готовка. Сам правда не пробовал, не люблю молочные каши :-)
esaulenka
05.08.2024 03:09Если молоко пастеризованное (т.е. хранится несколько месяцев в закрытом пакете), ничего с ним за ночь не случается, даже в тёплой мультиварке.
А непастеризованное может и в холодильнике скиснуть...
muxa_ru
05.08.2024 03:09Программа хрень и не решает поставленной задачи.
У нас в условиях "пользователь-идиот", а раз он идиот, то мы не можем быть уверены в том, что он введёт правильно вычисленное время.
То есть, нужно приложение, которому будет скармливаться фотография запущенного таймера, а приложение будет сверяться с текущим временем и убеждаться что таймер установлен верно.
randomsimplenumber
05.08.2024 03:09+2скармливаться фотография запущенного таймера
Нужно упрощать жизнь а не усложнять.
muxa_ru
05.08.2024 03:09+2По условиям задачи, пользователь склонен к путанице и мы делаем решение которое не даёт ему эту путаницу совершить.
Javian
Я так точно не высчитываю - мультиварка останавливается когда выкипает вода. Мне важнее залить воды в количестве необходимом для готовности. Выкипит раньше - будет каша недоваренная. Будет немного больше необходимого - лишнее выкипит пока она будет стоять на подогреве после окончания программы варки.
empenoso Автор
Это видимо от каши зависит, я литра полтора наливаю и вроде проблем ни разу не было.
Javian
У меня ориентир - не ниже чем "на палец над уровнем крупы".
MarijQA
От каши, конечно. Гречку вот вообще варить не надо. С вечера залить, утром разогреть)
McKinseyBA
А через 10 лет рассказывать гастроэнтерологу/онкологу, что
На пабмеде (пару лет назад так точно) легко гуглились статьи и даже метанализы исследований на тему "каши, которые требуют варки - надо варить, а хлопья не требующие варки - не надо потреблять". Не врач и не ставлю диагнозы, но если у вас прокатило - это не значит, что прокатит у других
MarijQA
Как раз относительно гречки гастроэнтерологи и не настаивают на варке. Коричневая, не зеленая!, гречка уже после тепловой обработки продаётся, поэтому она и коричневая. Так что залить кипятком и оставить на несколько часов или варить - разница только во вкусе.