Как я сражался с умной розеткой и Raspberry Pi и проиграл

 Публичный пост
21 декабря 2025  2476

Дисклеймер: личная история. Лонгрид. Немного техники, много инженерного упрямства.

Счёт

Утро середины февраля. Я открываю почту и вижу счёт за электричество - 180 евро.

Я живу в квартире, где всё на электричестве. Плюс у меня plug-in гибрид, который я заряжаю от обычной розетки в гараже на -1 этаже. Это не бесплатно, я это понимаю. Но не настолько же.

Раньше счета были в районе 100–130 евро. Я на них смотрел, пожимал плечами и жил дальше. В этот раз что-то щёлкнуло.

Открываю детализацию.
800 кВт⋅ч за месяц.

Я реально округлил глаза. Живя раньше в России, я никогда не видел таких цифр. Даже близко. И в этот момент стало понятно: либо я чего-то не понимаю, либо кто-то в моей квартире тихо майнит биткоин.

Охота

Любопытство быстро перешло в азарт. Я решил устроить охоту на потребителей электричества.

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

Большой. Мощный. Формально энергоэффективный. Идеальный кандидат.

Я купил на Amazon простую умную розетку, воткнул в неё ТЭН и начал смотреть цифры.

И вот тут стало интересно.

В режиме поддержания температуры водонагреватель спокойно съедал до 300 кВт⋅ч в месяц. Мы сели, разобрали реальный режим использования горячей воды и перевели нагрев по расписанию.

Потребление упало примерно втрое - до 100 кВт⋅ч.

Отлично. Маленькая победа. Но счёт всё равно оставался слишком большим.

Машина

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

Батарея 15,6 кВт⋅ч. Заряжаю почти каждый день, иногда и не один раз. Пробег 140 000 км. В каком она состоянии - вопрос открытый.

«Ладно, у меня же есть мобильное приложение Mercedes-Benz», - подумал я.

Приложение показывает уровень заряда. Красиво. Наглядно.
И… всё.

Никаких данных о том, сколько энергии реально уходит в батарею. Вообще. Ни в каком виде.

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

Розетка против бетона

Решение напрашивалось само собой: поставлю умную розетку и буду собирать данные.

«Не будешь», - сказали бетонные перекрытия.

Оказалось, что моя розетка не хранит данные локально. Она просто шлёт их по Wi-Fi в облако, где всё и агрегируется. А Wi-Fi в гараже нет. Совсем. Даже призрачного.

На улице был апрель.

Я подумал, что наверняка существуют розетки, которые умеют накапливать данные у себя, а потом синхронизироваться, например, по Bluetooth. Нашёл такую - Shelly Plus Plug S. Стоила она около 20 евро, в два раза дороже моей.

Когда она приехала - она просто не включилась. Без спецэффектов.

Просто нет.

Я вернул её обратно. К тому моменту счета внезапно стали меньше, и задача ушла на дальний план.


Середина ноября. Утро. Я пью кофе.

Вы уже понимаете, что будет дальше.
Я снова открываю почту и вижу счёт - 180 евро. Проверяю водонагреватель - всё ок, около 100 кВт⋅ч. Смотрю детализацию - 800 кВт⋅ч.

Значит, возвращаемся.

Условия задачи

На этот раз я решил зафиксировать условия явно:

  • бетонный гараж, интернета нет
  • нужно понять,** сколько реально жрёт** зарядка машины
  • есть только розетка Я перебрал варианты.

Протянуть Ethernet из квартиры - не хочется сверлить.
Powerline по электросети - теоретически можно, но сигнал пойдёт через щиток, плюс комплект стоит около 50 евро.
Купить автономную розетку с локальным хранилищем - нашёл, 60 евро, жаба сказала «нет».

Оставался вариант, который выглядел одновременно разумным и опасным:
Raspberry Pi + уже имеющаяся умная розетка.

Raspberry Pi, входи

Я давно хотел поиграться с Raspberry Pi, но всё не было повода. А тут - реальный бытовой кейс с понятной целью и измеримым результатом.

От идеи до заказа платы и SD-карты на Amazon у меня ушло минут пять.

Розетку я вообще не анализировал:

  • «Она же как-то работает с телефоном. Значит, и я смогу».* Спойлер: нет.

План

План выглядел абсолютно адекватным:

  • поставить Linux
  • подключиться по Wi-Fi и SSH
  • получить доступ к данным розетки
  • написать небольшой Python-воркер
  • сохранить данные локально
  • показать статистику через простой веб-интерфейс
  • переключить Pi в режим точки доступа
  • переподключить розетку к этому Wi-Fi
  • унести всё в гараж

На бумаге всё сходилось.

Tuya. Внезапно

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

До этого момента я никогда с Tuya напрямую не сталкивался.

Выяснилось, что:

  • у них проприетарный протокол
  • для Python есть TinyTuya
  • но нужны API-ключи, секреты и локальный ключ устройства

Дальше был квест, о котором невозможно догадаться заранее:

  • выяснилось, что я вообще пользовался клоном Tuya-приложения
  • пришлось создать новый аккаунт в правильном приложении
  • переподключить розетку
  • создать отдельный аккаунт в IoT Cloud
  • создать проект
  • сгенерировать креды
  • связать мобильное приложение с проектом через QR-код
  • убедиться, что розетка появилась
  • и только потом получить Local Key

Нигде это нормально не описано. Всё пришлось собирать по кускам.
Но в итоге я победил.

Почти победа

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

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

В этот момент решение казалось завершённым процентов на девяносто.

Оставалась одна, последняя, почти формальная часть.
Перевести Raspberry Pi в режим точки доступа, переподключить к нему розетку - и можно уносить всё это хозяйство в гараж.
Самые простые шаги в инженерных проектах порой самые опасные.

USB - это лотерея

Чтобы переключить Raspberry Pi в режим точки доступа, мне нужен был стабильный доступ по USB. И тут выяснилось сразу несколько вещей.
Во-первых, USB-кабели бывают power и data.
Во-вторых, micro-USB - это отдельная форма боли.
В-третьих, надпись multimedia на кабеле - это художественный образ, а не гарантия.
В-четвертых, вы где-нибудь видели кабель USB C - micro USB? Нет? А он существует!

Вот только не у меня.
Я перебрал несколько кабелей USB A - micro USB c miniPC. Даже попросил у соседей в 23.00.

Первый просто не подавал признаков жизни.
Второй подавал питание, но данных не передавал.
Третий вызывал в Windows радостный звук подключения, но устройство нигде не появлялось.

В какой-то момент я понял, что у меня дома есть всё: Raspberry Pi, умная розетка, Python, Wi-Fi, SSH.
Но нет одного нормального USB-кабеля для мака.

На следующий день я купил один, тот который мифический. Оказался power. Мак им побрезговал.
Заказ на Амазоне. Этот наконец, оказался тем самым. Проверенным. С отзывами. Рабочим.

Я подключился по USB, поднял интерфейс, зашёл по SSH и подумал, что теперь-то всё под контролем.
Это было преждевременно.

Зомби-режим

Я начал настраивать точку доступа: hostapd, dnsmasq, сетевые интерфейсы. Всё шло нормально… до момента, когда Raspberry Pi внезапно перестала отвечать.

SSH завис.
Интерфейсы перестали реагировать.
Pi выглядела включённой, но вести диалог отказывалась.
Перезагрузка помогла ровно до следующего шага.

И тут я понял, что сделал классическую ошибку:
я отключил Wi-Fi, не обеспечив автоподъём USB-доступа после ребута.

Результат был предсказуем:
Wi-Fi выключен.
USB не поднят.
SSH недоступен.

У меня в руках была живая плата без единого канала связи.
Я посмотрел на часы, вздохнул и пошёл смотреть Stranger Things.

Хватило меня на двадцать минут, потом вернулся и начал всё сначала.

Зомби-режим, часть 2, теперь с macOS

Я решил переустановить систему и начать правильно: сначала стабильный доступ, потом точка доступа, потом всё остальное.

В этот раз я первым делом позаботился о USB: чтобы SSH по кабелю был постоянным. Потом поднял точку доступа, подключился к ней телефоном, всё сработало.

Осталось «простое» - подключить розетку к Wi-Fi, который раздаёт Pi.

И тут выяснилось важное: розетке недостаточно просто локальной сети, ей нужен интернет, чтобы зарегистрироваться в приложении.
Я отдаю ей SSID, пароль, крутится спиннер подключения… и ошибка. А Pi в этот момент снова превращается в зомби с зависаниями.

Окей. Тогда гениальный план: прокинуть интернет на Pi по USB и раздать его через Wi-Fi.

macOS ведь умеет: System Settings → Sharing → Internet → USB Gadget. Включаю, прописываю DNS и…

Pi зависает. Снова.

Перезагружаю. И замечаю странное: USB Gadget на Mac остался активным даже после отключения устройства. Подключаю Pi, и он не поднимается по USB. Отключаю - USB Gadget всё ещё активен. Жму Make inactive, потом Make active, Mac как будто ждёт подключения, но Pi не появляется.

При этом к самой Pi я могу подключиться по поднятому Wi-Fi (точка доступа же работает) и видеть, что она реально ждёт USB, но «рукопожатия» нет. Без USB я не могу шарить интернет. Без интернета розетка не регистрируется. Замкнутый круг.

ChatGPT подсказал неприятную вещь: Inactive/Active на macOS может убить прошлые настройки соединения, и система перестаёт видеть устройство как раньше. Я удаляю Gadget-сервис, перезагружаю Mac, подключаю Pi - я снова в игре. Но SSH по USB не работает, пакеты не ходят.

Оказалось, включенный Sharing мешает нормальному подключению… хотя минуту назад «вроде работало». Пришлось потанцевать с бубном:

  • выключить Sharing
  • подключиться и убедиться, что SSH живой
  • включить Sharing
  • докрутить DNS
  • только потом пытаться регистрировать розетку

И это реально заработало. На короткое время.

Пробую добавить розетку - снова ошибка. Pi снова уходит в зомби. На Mac снова подвисает gadget/sharing. Я начинаю подозревать всё подряд: может, у меня 5 GHz, и ей не подходит? Окей, режу совместимость на максимум, отключаю лишние фичи, упрощаю Wi-Fi как для самого тупого IoT.

Пробую ещё раз - тот же результат.

И вот тут у меня впервые за вечер включился нормальный разработческий инстинкт. До этого я действовал в режиме «да что тут сложного, это же розетка», и пытался перебором выехать на удаче. Усталость + ожидание быстрого финала = отключенный мозг.

Я полез в логи: kernel, Wi-Fi, hostapd, live-трейс в момент подключения розетки.

И почти сразу увидел это:

Segmentation fault
pc : brcmf_p2p_send_action_frame+0x234/0xc98 \[brcmfmac]
Unable to handle kernel NULL pointer dereference

Фиаско

Картинка сложилась.

Розетка в момент подключения отправляет P2P / GAS action frames:

RX_ACTION category 4
GAS Initial Request
ANQP: HS 2.0 Query List

А драйвер brcmfmac на Raspberry Pi Zero 2 W в режиме точки доступа не умеет это обрабатывать.

Точнее, умеет - один раз. После чего падает.

Это не баг конфигурации.
Не проблема dnsmasq.
Не мой кривой Wi-Fi.
Это kernel crash.

Я нашёл, что проблема даже оформлена как CVE:
https://nvd.nist.gov/vuln/detail/CVE-2025-40321

В этот момент стало понятно: я проиграл не потому, что сделал что-то неправильно.
А потому что дальше упираться некуда.

02:00. Пора спать.

Эпилог

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

Но инженерное любопытство и желание поиграть с Raspberry Pi подарили мне полный спектр эмоций - от «сейчас за вечер сделаю» до «это Kernel error, я ничего не могу».

Но эту битву я проиграл.
А вы как бы решили мою задачку?

39 комментариев 👇
Egor Suvorov Программист/преподаватель C++ 21 декабря 2025

Неумный ваттметр, 10-30 евро. Воткнул — работает. Можно подойти и посмотреть потребление.

@yeputons, Да! Я как раз его и заказал когда закончил статью) Еще не приехал.

  Развернуть 1 комментарий

@yeputons, я тоже таким пользуюсь! Он сохраняет данные даже между перетыкиваниями в розетку (там небольшая батарейка внутри), может показать за последние 24 часа или с последнего сброса, а еще в него можно записать цену за кВт и он будет сразу показывать "за последние 24 часа ты нагрел себе еды на полевро" (про евро он ничего не знает будет показывать "нагрел на 0.5 тугриков).

Стоил он только 6 евро, розетка у моего другая (британская) и логотипа нет, но кнопки такие же. Короче, берите, даже если выглядит китайской подделкой (они все на одном заводе собираются)

  Развернуть 1 комментарий
Egor Vishnyakov Разработчик на C++ 21 декабря 2025

Читал как триллер, офигенно, спасибо =)

  Развернуть 1 комментарий

@OrangeMan, а я в нём жил 😂

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

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

Если управление нагрузкой не нужно, можно взять устройство, специально предназначение для измерения энергопотребления, лучше на Zigbee и подключать в Home Assistant или SprutHub.

Есть хорошая статья про все варианты измерения энергопотребления в Home Assistant: https://www.home-assistant.io/docs/energy/electricity-grid/

  Развернуть 1 комментарий

@DKvasnikov, 🤔

  Развернуть 1 комментарий

Это kernel crash.

В этот момент стало понятно: я проиграл не потому, что сделал что-то неправильно.
А потому что дальше упираться некуда.

Ну kernel это тоже не приговор, драйвер даже опенсорцный. Особенно сейчас с LLM.

У меня когда-то была похожая проблема в 2020. На отдельный пост не тянет, расскажу здесь.

Долго выбирал и купил роутер ASUS RT-AC65P под OpenWRT. На штатной прошивке всё работало нормально. Сразу после перепрошивки тоже. Но если перезагрузить разок — уходил в crash loop, больше не загружался.

Дано: указанная проблема и желание её починить, опыт в разнородном дебаге, поверхностные представления о Си и ядре, отсутствие паяльника, RS-252 адаптера и желания вскрывать только что купленный девайс, длинные ковидные вечера. До изобретения ChatGPT 2 года, посоветоваться не с кем.

В итоге (уже не помню точно шаги дебага) оказалось:

  • флеш немного битый, и это нормально для NAND
  • битый он в конкретном секторе
  • при изначальной прошивке этот сектор не используется, файл меньше чем смещение до него
  • при первой загрузке OpenWRT создаёт на не используемом пространстве раздел для пользовательских данных
  • при первой перезагрузке проверяет целостность этого раздела, находит битый блок, что-то ломается и перезагружается, перезагружается, перезагружается…

Когда добрался до этого, стало понятно что отступать некуда, впереди ядро. Научился пересобирать ядро и паковывать в прошивку. Но как дебажить неинтерактивно, без монитора, даже COM-порта?

Затея была такая — в подозрительные места кода ядра вставить sleep(20), sleep(50), sleep(90) и тд. И посмотреть наступит ли краш через X + 50, X + 110 или X + 140 секунд. Ну и дальше двигаться туда-сюда.

К счастью это не пригодилось, я умудрился вызвать краш во время первой загрузки, копаясь в SSH. К счастью, помирая, ядро успело напечатать panic, просунуть его через SSH и сетевой стек до полной остановки.

Дальше уже просто читал сорцы, "компилировал в голове", нашёл багу, починил себе и в апстриме

  Развернуть 1 комментарий

@AntonR, Это агонь! 🔥

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Мне кажется изначально 60 евро за новую розетку < Raspberry Pi + имеющаяся розетка + минимум 3-4 часа времени на разработку. Но я могу ошибаться и в целом, подобный путь, кмк, проходит каждый энтузиаст.

  Развернуть 1 комментарий

@i2gor87, а бульйон? тогда бы не было никакого поста!

  Развернуть 1 комментарий

@i2gor87, ну я купил Pi Zero 2 W за 25 евро, так что за всё как раз и вышло около 60 ))

  Развернуть 1 комментарий

@azaikin, так я как раз про то, что хорошо бы при расчете учитывать собственное время на разработку, я к этому сам недавно пришел) Даже если считать минимум 3 часа и 10 долларов в час, то решение с малиной уже на 30 долларов дороже =)

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Eugene Kubesh Senior software engineer, mentor, FPV drone pilot 21 декабря 2025

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

По поводу розеток, я взял Meross Smart Wi-Fi Plug MSS315, оно умеет работать по протоколу matter, что само по себе на будущее очень хорошо. Обошлось это дело в 77 ойро за 4 розетки, пока использую стандартное приложение, но позже думаю подвязать к своему решению, пока не придумал зачем, кроме интереса 😁

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

В твоём случае я бы собрал наверное что-то на esp32 с флешкой, чтобы оно туда сгружало данные в гараже, а ты потом мог это синхронизировать с телефона. Но вообще идея интересная!

  Развернуть 1 комментарий
Andrey Oshev ios разнорабочий 23 декабря 2025

В голове было: подозрительное знакомые цифры за электричество... А, ага, Лиссабон :))

У меня также выжирается 800 кв в месяц. Думаю, действительно дохера жрет водонагреватель, машина у нас полностью электрическая тоже поджирает, ну, и начали теплые полы включать.

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

  Развернуть 1 комментарий

@andrey_oshev, у нас такая же система) нихрена она не умная)) мы на 1 этаже, в баки на 7. Расход тепла пока вода дотечет до нас - адский. У людей на 5-6 этаже такой проблемы нет))

  Развернуть 1 комментарий

@azaikin, мы на 3, баки на 14 😭😭😭 блин, в натуре ерунда? Я верил в нее))

А какое ты расписание настроил? Якобы, ночью не греть или как?

  Развернуть 1 комментарий

Я бы модем с симкой в гараж воткнул)

  Развернуть 1 комментарий

@Volodya262, в гараже нет сети вообще никакой

  Развернуть 1 комментарий

Привет! Офигенная история, спасибо за пост!

А расскажи пожалуйста подробнее про вот эту часть:

P2P / GAS action frame

Как понять, что это именно они? Я знаю что если подключить Raspberry Pi то ли 4 то ли 5 версии к хотспоту Samsung, у нее крашится модуль ядра WiFi. Мне интересно, там та же проблема, или нет

  Развернуть 1 комментарий

@vikeyer, Тут как раз дело в режиме когда плата сама становится точкой(AP) и когда к ней подключается именно эта розетка WiFi чип со своим драйвером решает что это ниже его достоинства и уходит в красный закат в терминале. Я подключал к точке на плате телефоны и всё было окей. Видимо вот эти запросы которые розетка хочет и не может переварить драйвер.

  Развернуть 1 комментарий

У меня похожая ситуация - в гараже не ловит WiFi.

Я пошел по пути создания цепочки из Zigbee-устройств до этой розетки в гараже (умная лампа, умная розетка и т.п.) и поэтому:

  1. за счет этого я создаю Zigbee-сеть в доме, т.к. Zigbee-устройства, которые запитаны от сети - являются хабами, а значит я могу через эту сеть дотянуться до этой Zigbee-розетки в гараже и добавить ее в HomeAssistant (HA). Могу смотреть расход в HA на красивых графиках (понятно, что оно немного привирает, но хотя бы порядок расхода понятен).
  2. Но я пошел дальше. Через HA я могу включать/выключать эту розетку по расписанию. Я выбрал тариф у своего проавайдера электричества, когда ночью и выходные электричество ощутимо дешевле, чем днем в будни. Настроил примитивную логику: включаю розетку в 00:00 часов (всегда) и выключаю в 8:00 (только в рабочие дни)
  3. Ну и заодно накинул несколько датчиков движения и открытия ворот/двери и у меня загарается свет в гараже и на лестнице в гараж, когда я спускаюсь в гараж/заезжаю в ворота на машине. Удобненько! Ну и к тому же иногда забывали выключать свет в гараже и он так и горел всю ночь. Теперь нет )

Однако, все это требует затрат в виде железки под сервачек (в моем случае это NUC на N100) и Zigbee хаба.
Ну и, конечно же, некоторого количества времени на настройку и поддержания этого всего добра. Однако, кмк, это окупается.
Ну и далее туда можно цеплять что-то еще. Уже в другую умную розетку, я подключил обогреватель и выключаю его по расписанию/или когда уйду из дома, т.к. частенько забывал его выключать.
В общем, профит в счетах на электричество однозначно есть :)

  Развернуть 1 комментарий

Powerline более чем достаточно для розетки и работало бы даже через щиток.
Плюс вайфай в гараже бы появился.

  Развернуть 1 комментарий

@citius, угу, согласен

  Развернуть 1 комментарий

Зарядка авто звучит довольно стабильно по энергопотреблению. Как будто можно включить на телефоне мобильный интернет + Wi-Fi Hotspot, чтобы дать розетке доступ в интернет, постоять немного в гараже, посмотреть расход за 10-15 минут и экстраполировать

  Развернуть 1 комментарий

@zakharbilyy, Неа, в гараже - бункер. Вообще нет никакой сети. И розетка не накапливает данные))

  Развернуть 1 комментарий

@azaikin, взять длинный ethernet и дотащить ы гараж роутер на полчасика

  Развернуть 1 комментарий

@underlow, это ж надо где то взять такой длины кабель! Та еще и роутер где то взять xD Домашний роутер туда не потащишь, так как оптоволокно короткое )

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Анатолий Егоров IT-специалист общего назначения 6 января в 06:46

Если линии нагрузки (относительно) независимые, можно на каждую линию поставить по компактному счетчику с RS485 (есть размером с обычный автомат) и через ту же RasberryPI сливать архив.
Достаточно взять модель для технического учета.

Впрочем, это несколько более комплексная и масштабная задача, чем "просто померять потребление", но в перспективе может дать очень точное понимание потребления в зависимости от внешних обстоятельств.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб