Статья

Апгрейд стиральной машины или как не забыть развесить вещи

Предисловие

Практически в каждом доме есть стиральная машина, и если вы изначально не приобрели себе "умную", но хотите такую - можно сделать небольшой апгрейд вашей домашней помощницы при помощи пары подручных средств, а именно, умной розетки и датчика открытия двери. Можно сэкономить и сделать "слегка умную" машину только при помощи умной розетки. Сам апгрейд позволяет отображать процесс стирки в Home Assistant и использовать его при настройке автоматизаций и оповещений. Дальше мы разберем эволюцию стиральной машины от "заурядной" к "умной" через промежуточное звено.

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

Устройства

Для апгрейда потребуются:

Умная розетка. В виде "адаптера" или встроенная - не принципиально. Главное требование - мониторинг энергопотребления. Я использую Xiaomi ZNCZ04LM.

Датчик открытия двери/окна. Любой на ваш вкус и цвет, я использую Xiaomi Aqara MCCGQ11LM. Одну часть датчика клеим на корпус машины, другую - на дверцу или ручку. Конкретно куда - решит ваш дизайнерский Гений :)

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

Промежуточное звено

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

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

#configuration.yaml binary_sensor: - platform: template sensors: wm_status: friendly_name: "Стиральная машина" delay_off: minutes: (Параметр А) value_template: >- {{ states('sensor.wash_machine_power')|float > (Параметр Б) }}

Смысл этого бинарного сенсора следующий: когда энергопотребление, считываемое с sensor.wash_machine_power (умная розетка), становится выше Параметра Б, то binary_sensor.wm_status показывает, что идет процесс стирки (on). Когда энергопотребление ниже Параметра Б в течение определенного времени (Параметр А) - бинарный сенсор переходит в состояние выключено. Для создания этого сенсора необходимо несколько раз запустить стирку, проанализировать графики энергопотребления и выбрать оптимальные значения Параметров А и Б, которые будут гарантированно свидетельствовать об окончании стирки. В моем случае, значения этих параметров следующие:

  • Параметр А - 1 минута. Изначально я выставил 3 минуты, но после - снизил. Лаг в 1 минуту не вызывает никакого дискомфорта.
  • Параметр Б - 6 Ватт. У стиральных машин есть "мозги", экраны и световые индикаторы, которые всегда потребляют электроэнергию вне зависимости от режима стирки. Этот параметр определяется из графика энергопотребления и в общем случае может иметь любое другое значение.

Тут же ожидаю вопрос: "А зачем вообще нужны эти параметры? Потребляет энергию - стирает, не потребляет - не стирает".

Отвечу. Если выставить значение Параметра Б на 0 Ватт, то система может думать, что стирка идет до тех пор, пока вы вручную не выключите машинку. Смысла в этом особого нет и нужно отсечь "Ватты", не затрачивающиеся на саму стирку, и установить Параметр Б на значение повыше. При этом энергопотребление стиральной машины не постоянно и зависит от температуры воды, режима стирки, оборотов, загрузки, типа двигателя. При определенных условиях, энергопотребление может колебаться около значения Параметра Б, следовательно, мгновенной величиной энергопотребления нельзя гарантированно определить окончание стирки. Если прописать значение Параметра А нулевым или слишком маленьким, то бинарный сенсор может временами «дергаться» между состояниями "вкл" и "выкл" и не будет показывать настоящее положение дел. А если энергопотребление в течение достаточного времени меньше определенного значения, то завершение стирки можно определить однозначно. Вот, собственно, график энергопотребления из которого все выводится.

Энергопотребление в начале и конце стирки может при разных запусках отличаться. Поэтому этап калибровки индивидуален для каждой машины и занимает больше всего времени. Максимальное энергопотребление "на хвостах" ранее я фиксировал в районе 5 Ватт, но скрины тогда не делал.На этом этапе мы получаем рабочий бинарный сенсор, который отображает идет ли процесс стирки или нет. И его уже можно использовать в автоматизациях и оповещениях. Чтобы научить машину еще одному трюку, двигаемся дальше.

Следующая ступень эволюции

Для повышения IQ стиральной машины нужно связать работу описанного выше откалиброванного бинарного сенсора индикации процесса стирки с датчиком открытия дверцы. В этом хорошо поможет такая сущность Home Assistant, как insput_select, в которую я записал следующие три возможных состояния стиральной машины (названия могут быть произвольными):

  • Stopped - машина выключена;
  • Washing - идет процесс стирки;
  • Drying - стирка завершена, но вещи еще не выгружены.

#configuration.yaml input_select: wm_state: name: Washing machine options: - Stopped - Washing - Drying initial: Stopped icon: mdi:washing-machine

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

Отдельно нужно отметить, что в Lovelace сущность input_select отображается как кнопка с выпадающим окном выбора, что, конечно, не очень удобно - можно случайно переключить состояние и все сломать. Можно прописать отдельный сенсор (сенсоров много не бывает), который на основании значения input_select будет выводить его состояние и отображаться в Lovelace в привычном для всех виде. Я поступил иначе - прописал показания input_select в раздел custom_fields уже существующей для ванной комнаты custom:button-card, где и сделал русификацию состояний. Скорее всего, всю логику умной стиральной машины можно положить в один "большой" сенсор без создания "промежуточных", но я решил сделать по-понятному и по-простому (по крайней мере для себя). Как это выглядит в веб-интерфейсе:

input_select в Lovelace
custom:button-card

Логика

Для начала представлю логику определения состояния стиральной машины в виде блок-схемы:

Основной цикл. Вращаем по кругу состояния input_select в течение всего процесса стирки (Stopped – Washing – Drying - Stopped). Триггером для перехода в состояние Washing служит включение сенсора wm_state (учитывать закрытую дверцу тут не принципиально, ведь сама машина не даст запустить стирку с открытой дверцей). По выключению сенсора wm_status и при условии закрытой дверцы, input_select переключается в состояние Drying – стирка окончена, но вещи еще внутри машины. По открытию дверцы, input_select возвращается в состояние Stopped – вещи отправились на сушилку.Досрочное извлечение. Из-за того, что при описании бинарного сенсора wm_status используется временная задержка (привет Параметр А), существует момент времени, в котором стирка уже закончена, но система ее еще не зафиксировала. Если именно в это время вы оказались рядом с машиной и решили открыть дверцу чтобы развесить вещи, то система вас все равно поймет и input_select перейдет из состояния Washing в Stopped, минуя состояние Drying.Дозагрузка вещей. Еще одно следствие временной задержки. Допустим, вы решили докинуть вещи в машину во время стирки (при наличии такой функции у самой машины). Вы нажимаете соответствующую кнопку на панели, открываете дверцу (срабатывает предыдущая автоматизация), закидываете вещи, закрываете дверцу, продолжаете стирку. Если время между открытием дверцы и повторным запуском превысит значение Параметра А, то все будет в порядке – wm_status успеет перейти в состояние «выкл», а потом обратно в «вкл» и сработает автоматизация из основного цикла. Если же дозагрузка происходит быстрее, то необходима эта отдельная автоматизация, в которой триггером будет закрытие дверцы машины при условии состояния "вкл" сенсора wm_status.А теперь объясним эту логику системе на ее языке.

#automations.yaml ### ОСНОВНОЙ ЦИКЛ ### # Stopped - Washing - alias: wm_washing trigger: platform: state entity_id: binary_sensor.wm_status to: 'on' condition: - condition: state entity_id: input_select.wm_state state: 'Stopped' action: service: input_select.select_option data: entity_id: input_select.wm_state option: Washing # Washing - Drying - alias: wm_drying trigger: platform: state entity_id: binary_sensor.wm_status to: 'off' condition: - condition: state entity_id: binary_sensor.wm_door_contact state: 'off' - condition: state entity_id: input_select.wm_state state: 'Washing' action: - service: input_select.select_option data: entity_id: input_select.wm_state option: Drying # Drying - Stopped - alias: wm_stopped trigger: platform: state entity_id: binary_sensor.wm_door_contact to: 'on' condition: - condition: state entity_id: input_select.wm_state state: 'Drying' action: - service: input_select.select_option data: entity_id: input_select.wm_state option: Stopped ### ДОСРОЧНОЕ ИЗВЛЕЧЕНИЕ ### - alias: wm_extract trigger: platform: state entity_id: binary_sensor.wm_door_contact to: 'on' condition: - condition: state entity_id: input_select.wm_state state: 'Washing' action: - service: input_select.select_option data: entity_id: input_select.wm_state option: Stopped ### ДОЗАГРУЗКА ВЕЩЕЙ ### - alias: wm_add_load trigger: platform: state entity_id: binary_sensor.wm_door_contact to: 'off' condition: - condition: state entity_id: input_select.wm_state state: 'Stopped' - condition: state entity_id: binary_sensor.wm_status state: 'on' action: - service: input_select.select_option data: entity_id: input_select.wm_state option: Washing

Монологи от стиралки

Рассмотренные выше автоматизации позволяют обеспечить корректное переключение сущности input_select.wm_state и отображать в системе текущее состояние процесса стирки. В связке с другими различными компонентами Home Assistant можно настроить гибкую систему автоматизаций и оповещений. Я использую input_select в связке с девайс трекером, таймером и умным выключателем около входной двери, по длительному нажатию которого выключается весь свет в квартире, увлажнители и кондиционеры. До кучи сюда еще можно привязать tts с вашим любимым диктором домашних новостей и окрашивать любую rgb подсветку в зависимости от режима стирки (информативно и стильно). Для примера, приведу кейсы, в которых моя семья использует умную стиральную машину.

Окончание стирки (дома кто-то есть). По окончании стирки приходит сообщение «Стирка окончена, развесьте вещи!», затем включается таймер и каждые 5 минут система напоминает о том, что неплохо было бы развесить вещи и приводит время, как давно стирка была завершена. По открытию дверцы таймер останавливается.Окончание стирки (дома никого нет). Событие довольно редкое, но случается. По окончании стирки приходит сообщение «Стирка окончена, не забудьте развесить вещи, когда вернетесь домой!».Возвращение домой. Является логическим продолжением предыдущей автоматизации. Когда кто-то приходит домой, система сообщает о завершенной стирке с указанием прошедшего времени и каждые 5 минут напоминает об оставленных в машине вещах.Напоминание о завершенной стирке перед уходом из дома. По долгому нажатию выключателя около входной двери, система присылает сообщение «Не уходите! Стирка окончена! Развесьте вещи!» с указанием прошедшего времени после стирки, таймер останавливается.Напоминание об идущей стирке перед уходом из дома. Работает по аналогии с предыдущей автоматизацией – система предостерегает от долгих прогулок и указывает, как давно стирка была запущена. 

Заключение

В данной статье я рассказал о своем способе интеграции стиральной машины в систему умного дома, на примере Home Assistant. Этот способ можно использовать в том случае, если вы хотите приобрести себе умную стиральную машину, но она не подходит вам по техническим характеристикам или не вписывается в бюджет, а может, вы недавно купили обычную и менять ее на новую – дурацкая идея. Для отслеживания начала и окончания стирки достаточно использовать лишь умную розетку, что может пригодиться еще и в том случае, если вам не слышны трели стиральной машины об окончании ее работы (например, тихий или вышедший из строя динамик, большая квартира или дом). Дооснащение вашей помощницы датчиком открытия дверцы позволяет еще больше расшить ее функционал и способы взаимодействия с элементами умного дома, а также настроить гибкую и удобную систему автоматизаций и оповещений.

Спасибо за внимание! Буду рад почитать о ваших идеях по использованию умных стиральных машин в системах умного дома!


Отличный материал! Лойс улетел!

Потрясающе , эхх.. в ноде ред бы)

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

Моя версия, 2015 год ... https://modkam.ru/?p=8">https://modkam.ru/?p=8

Умно и просто. Давайте на СХ такое реализуем! 😁



Отличная статья


ХА правда ругается на конфиг: Invalid config for [sensor.template]: [delay_off] is an invalid option for [sensor.template]. Check: sensor.template->sensors->wm_status->delay_off.



при записи в сенсорах (отдельный yaml фаил):


https://sprut.ai/static/media/cache/00/58/02/5/4091736/60491/1000x_image.png?1592023654" alt="1000x_image.png?1592023654" />

Вы точно в секции бинарников его прописываете?

Полное описание бинарного сенсора можно почитать https://www.home-assistant.io/integrations/binary_sensor.template/">тут.

Да, ступил. В сенсорах разместил)

Подскажите, правильно ли я понимаю, что в строке вместо binary_sensor.wm_door_contact указывается имя датчика дверей, а вот entity самой умной розетки не совсем понял куда вводить нужно, или она в принципе не нужна в данном контексте, достаточно только sensor.wash_machine_power?

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

https://m.habr.com/ru/post/409341/">https://m.habr.com/ru/post/409...

вот тут более хардкорный вариант с собственным блоком управления. 

Супер! Как раз думал куда применить пару розеток, ещё можно 3д принтер мониторить.. да и много чего еще!

Колхоз, если честно. Просто вскрываешь машинку, подключаешь в debug port плату esp8266, пишешь код и получаешь полный доступ к машинке.

Вятка-автомат 18. Покажи, где там debug port? ;-))) 

А это решение работать будет. 



https://sprut.ai/static/media/cache/00/52/09/5/4099282/61302/1000x_image.jpg?1593019397" alt="1000x_image.jpg?1593019397" />

Так видно ??

А на Вятке? ;-) с механическим контроллером))))) у меня на работе по сих пор есть такая.

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

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

Просто... зачем? Она и так оповещает об окончании стирки и далее мигает индикаторами. Да и если забыть в машинке вещи на пару часов ничего страшного не случится 😐На изменения в автоматизациях состояние машинки никак не вызывает, в общем, бессмысленно. 

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

Спасибо, не хватает только установки статуса при старте системы.

Не придумал ничего лучше такого 

https://paste.ofcode.org/P9j7gztYdhuyyGZ8BEfJeY">https://paste.ofcode.org/P9j7gztYdhuyyGZ8BEfJeY Не все статусы конечно обрабатывает...

В комментариях нужна возможность вставки кода


Параметр https://www.home-assistant.io/integrations/input_select/">initial как раз для этого и служит. При старте системы всегда будет Stopped. 



А зачем машинке статус Stopped если она в это время работает?



Забавно вышло. У меня только кусок кода отобразился, который один в один выполняет функцию initial.https://sprut.ai/static/media/cache/00/52/36/5/4206945/61323/1000x_image.jpeg?1593035377" alt="1000x_image.jpeg?1593035377" />

Спасибо за полезную автоматизацию, возьму на вооружение!

Ну а так как у нас Stopped и так есть на старте системы, тогда автоматизацию надо сделать так: 

https://paste.ofcode.org/LmT3cVAYb8M4h8E9ZVfhbR">https://paste.ofcode.org/LmT3cVAYb8M4h8E9ZVfhbR

Уже пропал код, error 404... 


А жаль, я подобное мыслю сотворить на базе wemos d1 mini, pzem004, смк-01; вот жду, пока придут, а тут куски полезного пропадают...

Есть еще такая идея как узнать что стирка закончилась. Например стиралка BEKO на кнопки открытия двери есть светодиод который сигнализирует что стрика закончилась и дверь можно открывать. Так на этот светодиод можно повесить еще оптопару к которой подключить ESP или датчик открытия двери.

Кстати я так же как-то добрался до этого кейса, вспомнил, что была статейка хорошая, решил поделиться своим текстом, у меня всё проще в плане - люблю в общем чуз :))) Поэтому вместо кучи автоматиций используется 1 универсальная. Думаю, кому-то может пригодится: https://pastebin.com/UAq2trQq">https://pastebin.com/UAq2trQq

Ваш скрипт отлично работает. Спасибо!

Поделитесь пожайлуста кодом button card 

а для спрутхаб есть реализация?

Вернуться назад

Устройства


Вернуться назад