У меня есть холодильник с очень крутой «фичей»: он пищит, если дверца открыта дольше, чем 60 секунд. В 95% случаев это больше раздражает, чем помогает. На мой взгляд, он просто должен заткнуться и считать, что мне виднее.
Чтобы поменять его поведение, я сначала попытался добраться до пьезодинамика, чтобы вырвать его с корнем. Оказалось, что это довольно бесплодное занятие, потому что основная плата встроена глубоко в холодильник. Я не особо готов отодвигать его от стены, чтобы добраться до платы, хоть и попробовал проползти к ней через панель управления, но без особого успеха:

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

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

Этот разъём — последовательный интерфейс, позволяющий управлять двумя восьмибитными сдвиговыми регистрами (74HC595) на материнской плате:

Такая система позволяет холодильнику контролировать до 16 бит на дочерней плате; часть этих битов привязана к конкретным светодиодам на плате, другая часть используется для считывания состояния кнопок.
Каждая кнопка напрямую соединена с контактом OUT
. Сначала это сбило меня с толку, потому что холодильник как будто не сможет определить, какая кнопка нажата в конкретный момент времени. Но здесь на помощь приходят сдвиговые регистры: кнопка не создаёт сигнала на OUT
, если её бит в текущий момент не включен в сдвиговом регистре:

Таким образом, последовательность считывания кнопки имеет следующий вид:
Нажатие кнопок включает бит сдвигового регистра.
Считываем состояние контакта OUT.
Повторяем для каждой кнопки.
Мне удалось доказать это при помощи Raspberry Pi, притворившейся холодильником: я смог управлять светом:
И распознавать состояние кнопок:
Создание модчипа
После изучения панели управления я придумал пару способов потенциального отключения сигнала:
Автоматическое нажатие на отключение сигнала при его включении.
Убедить электромагнитный датчик, что холодильник закрыт.
Управление кнопкой отключения сигнала завело бы меня в тупик по следующим причинам:
Кнопка отключения сигнала не работает, пока не зазвучит сигнал.
При нажатии кнопка издаёт собственный звук, то есть если бы мы нажимали её по таймеру, то просто поменяли бы один шум на другой.
У панели управления нет обратной связи о том, когда звучит сигнал, поэтому мы не можем распознать его и нажимать на кнопку.
Перехват электромагнитного датчика выглядел более перспективно, но один из недостатков такого способа заключается в том, что когда холодильник находится в состоянии «дверца закрыта», его внутреннее освещение отключается.
Чтобы обойти эту проблему, я решил ждать максимально долго (примерно 59 секунд), а затем просто примерно 100 мс сообщать холодильнику, что дверцу закрыли.
Изначально я хотел использовать для модчипа микроконтроллер, но описанная выше система — это, по сути, цепь таймера. Поэтому нужную нам функциональность можно реализовать на простом таймере 555.
Таймер 555
Таймер 555 в автоколебательном режиме — это именно то, что нам нужно. Под «автоколебательностью» подразумевается, что 555 колеблется в цикле между включенным и отключенным состоянием. Временем, проводимым во включенном и отключенном состоянии, можно управлять при помощи пары резисторов ( и
) и конденсатора (
).

Для вычисления времени в отключенном состоянии () можно использовать формулу:
Время во включенном состоянии () вычисляется так:
В идеале нам нужно следующее:
Но приведённые выше вычисления демонстрируют проблему: по умолчанию схема позволяет выбирать рабочий цикл в интервале 50% - 100%. Даже если сделать минимальным (220 Ом), то мы получим рабочий цикл примерно 50%:


Решить эту проблему можно, добавив параллельно диод, который позволит нам достичь рабочего режима в интервале от 0% до 50%:



Добавление диода меняет формулу вычисления и
:
Обратите внимание, что теперь больше не зависит от значения
.
Я остановился на следующих значениях резисторов и конденсатора:
Подставив эти значения в формулу, мы получим:
Это достаточно близко к тому, что нам нужно, поэтому я изготовил модчип с теми же значениями ,
и
:


Затем я написал короткий скрипт time-delta.py
для определения реального времени в отключенном состоянии в тестовой цепи. На самом деле, получилось даже ближе к нужному нам времени (около 59 секунд):
> python3 time-delta.py
avg=56.970 min=55.283 max=58.160
Идеально! Осталось только хорошенько обернуть всё это каптоновой лентой и снова засунуть в холодильник:


Вот видео того, как модчип на короткий промежуток времени подаёт высокий сигнал на электромагнитный датчик:
Победа! Мы научились общаться с холодильником и приказали ему перестать выполнять одну задачу.
Дополнительные ресурсы
Комментарии (0)
almirus
24.09.2025 10:40У меня пищалки нет, добавил
alias: Оставили открытой дверь холодильника description: более 55 сек, произносит фразу 3 раза triggers: - entity_id: - binary_sensor.0xa4c138fc8e834dc9_contact to: "on" for: hours: 0 minutes: 0 seconds: 55 trigger: state actions: - repeat: while: - condition: state entity_id: binary_sensor.0xa4c138fc8e834dc9_contact state: "on" - condition: template value_template: "{{ repeat.index <= 3 }}" sequence: - data: message: дверь холодильника осталась открытой action: script.play_text - delay: hours: 0 minutes: 0 seconds: 54 milliseconds: 0 mode: restart
n0isy
24.09.2025 10:40Ночной дожор?!
almirus
24.09.2025 10:40Есть и такое
alias: Сколько раз открыли холодильник description: Издевательства Алисы triggers: - entity_id: - binary_sensor.0xa4c138fc8e834dc9_contact to: "on" trigger: state actions: - target: entity_id: counter.door_open_counter data: {} action: counter.increment - choose: - conditions: - condition: time after: "20:20:00" before: "01:00:00" sequence: - data: message: >- {{ [ "В холодильнике так ничего нового и не появилось", "Хватит говорю", "Помни: после шести вечера каждая калория становится врагом твоей формы!", "Холодильник не отдыхает, а ты должен! Лучше выпей воды.", "Установлен запрет", "Лёгкость в теле — лучший результат вечернего воздержания!", "Закрой холодильник, открой путь к стройности!", "Сильные люди не едят на ночь, будь среди них!", "Кстати, а когда вы взвешивались?", "«не есть после шести» быстрый способ сбросить лишний вес", "я устала повторять", "(закатываю глаза)", "Еще один бутерброд? Ладно, но не жалуйся потом на тесные джинсы!", "Кстати, в морозильнике есть мороженое или уже нет?", "Вы ж за миниралкой?", "Может похрустим морковкой?", "А может сделаем салатик?", "Пора спать", "у датчика открывания двери скоро сядет батарейка", "Сегодня Вы открывали дверь холодильника " ~ states("counter.door_open_counter") ~ " раз" ] | random }} action: script.play_text - conditions: [] sequence: [] mode: restart
Dmitry_604
24.09.2025 10:40А что делать более 60 секунд с открытой дверцей? Ну кроме уборки какой-нибудь?
hira
24.09.2025 10:40Да ну.
Когда не один живёшь, холодильник хорошо так заполнен.
И иногда его закрывают, а что-то чуток выпирает и поддавливает дверь. И вроде выглядит, как нормально закрытое, а по факту щель есть.
Писк помогает обнаружить и устранить косяк.
Пару-тройку раз в месяц происходит.
JohnDoe_71Rus
24.09.2025 10:40а у меня в холодильнике такая пищалка просто выключается кнопкой, если не нужна.
alan008
А мне так не хватает такой пищалки в холодильнике!
backfield9818
Я на Озоне покупал и ставил, только было давно и не помню, как именно оно называлось. А, вот: Магнитная дверная/оконная сигнализация ALFA MC-03(батарейки в комплекте) 4 шт. купить на OZON по низкой цене (1659479218)
Только так и не смог настроить, чтобы пищало не сразу.
alan008
Спасибо, добрый человек!
viktoriaklishevs
Согласна, отключать её это какое-то варварство. Однажды, пищалка привлекла моё внимание, и я пошла проверить что не так, оказалось, что бутылка с полки слегка выпирала в ящичек, который вверху дверцы, и она закрылась не полностью, а я даже не заметила, выходит она помогла. Однажды...