Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted
Домашний энергомониторинг

Emoncms

Open-source приложение для учета и визуализации электроэнергии на своем сервере: счетчики, солнечные панели, тепловой насос и датчики в одной базе, графики и дашборды - без облака и без передачи данных о доме третьим лицам. Ставили docker-образ на чистый VPS и снимали замеры на рабочем экземпляре.

Сентябрь 2026 ~9 минут чтения Fatmetal Team
Энергомониторинг Лицензия: AGPL-3.0 Статус: запущен у нас, v11.12.3

Вердикт

Подходит
  • учет потребления дома со счетчиков и датчиков с импульсным выходом
  • солнечные панели, тепловой насос, EV-зарядка - сбор и графики в одной панели
  • прием телеметрии по MQTT с любых IoT-устройств
Не подходит
  • кто хочет готовую коробку из магазина без настройки входов и feeds
  • публичный доступ из интернета без прокси, TLS и разбора модели ключей
  • кому нужна аналитика бизнес-метрик, а не физических величин
Мин. тариф: CPU2-RAM4-DISK40 Рекомендуем: CPU2-RAM4-DISK40 Сложность: medium RAM в простое: ~150 MiB Главный риск: версия all-in-one образа отстает от upstream Прод-готовность: с оговорками (TLS + модель ключей)
Что это

Что это и какую задачу решает

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

Работает по модели входов и feeds. Вход (input) - точка приема данных: у него есть узел (node) и ключ (key), пишется только последнее значение. Чтобы копить историю, из входа создают feed - временной ряд на собственных движках PHPFina и PHPTimeSeries. Поверх feeds строятся графики, дашборды и прикладные приложения: MyElectric, MySolar, DemandShaper. Данные приходят по HTTP-API или по MQTT с любых устройств.

PHP 8.1MariaDBRedisApacheMQTT (Mosquitto)Docker
Сравнение

Чем отличается от облачных сервисов

Сравнение с облачным emoncms.org и типовыми сервисами энергомониторинга по тому, что влияет на выбор.

ПараметрEmoncms на своем сервереОблачный сервис
Модель ценыбесплатно, только стоимость VPSподписка или лимит на объем данных
Где данные о домена вашем серверена чужой платформе
Лимит на частоту записинет, ограничен только дискомчасто ограничен тарифом
Прием по MQTTсвой брокер на бортучерез посредника
Vendor lock-inэкспорт feeds, свой формат на дискевыгрузка на условиях сервиса
Под капотом

Тех-стек и архитектура

Ядро на PHP 8.1 под Apache, метаданные (пользователи, входы, feeds) в MariaDB. Временные ряды хранятся не в SQL, а в собственных движках PHPFina (фиксированный интервал) и PHPTimeSeries (переменный) - файлами на диске, это быстро и компактно.

Redis работает буфером записи (режим low-write): он копит значения и сбрасывает их на диск пачками, что резко снижает износ диска - критично для SD-карт Raspberry Pi, полезно и на SSD. Часть процессоров входов без Redis молча не работает, поэтому он рекомендован. Прием телеметрии обеспечивает MQTT-брокер Mosquitto, а фоновые воркеры (emoncms_mqtt, service-runner, feedwriter) разбирают входящие данные и пишут feeds.

Мы ставили all-in-one docker-образ, где MariaDB, Redis, Mosquitto, модули (graph, dashboard, app, sync) и воркеры уже собраны в один контейнер - самый короткий путь поднять рабочий экземпляр.

Конфигурация

Минимальная конфигурация

Реальные требования против официального минимума.

Официальный ориентирUbuntu VPS или Raspberry Pi
Реально в простое~150 MiB RAM
Рекомендуем тарифCPU2-RAM4-DISK40
Дискот объема и частоты feeds; 40 GB с запасом на историю
i

Важно: сам сервис в простое ест около 150 MiB, но объем диска растет вместе с числом feeds и частотой записи. Для домашнего сценария на десяток feeds 40 GB хватает надолго; при плотной телеметрии закладывайте запас.

Развертывание

Установка Emoncms на VPS

Базовый путь - Cloud Server + Ubuntu 24.04 + Docker + обратный прокси Caddy для TLS.

  1. Создать VM и поставить Docker

    Тариф CPU2-RAM4-DISK40, Ubuntu 24.04. Установка Docker: curl -fsSL https://get.docker.com | sh.

  2. Забрать образ (с ретраями)

    Из РФ-сети pull с Docker Hub иногда обрывается по таймауту на одном слое - не блокировка, сетевой флап. Ставим цикл с повтором:

    IMG=alexjunk/emoncms:alpine3.20_emoncms11.12.3
    for i in $(seq 1 8); do docker pull "$IMG" && break; sleep 8; done
  3. Поднять контейнер на localhost

    Публикуем порт только на loopback, наружу его выставит прокси:

    docker run -d --name emoncms --restart unless-stopped \
      -p 127.0.0.1:8080:80 "$IMG"

    Проверка: curl -s -o /dev/null -w '%{http_code}' localhost:8080/emoncms/ должен вернуть 200.

  4. Домен и TLS через Caddy

    Caddy сам выпустит Let's Encrypt на ваш домен. /etc/caddy/Caddyfile:

    ваш-домен {
        reverse_proxy 127.0.0.1:8080
    }

    Дальше systemctl restart caddy - и сервис доступен по HTTPS.

  5. Создать аккаунт

    Первый вход в веб-интерфейсе создает администратора. После этого можно заводить входы, feeds и графики.

https://ваш-домен/emoncms/feed/list
Список feeds Emoncms: потребление, солнце и температура с последними значениями
Список feeds на нашем экземпляре (v11.12.3): потребление 527.7 W, солнце 409.7 W, температура 18.2 C.
Визуализация

Как выглядят данные

Мы засеяли сутки демо-данных (потребление, солнечная генерация, температура) и построили графики штатным модулем.

https://ваш-домен/emoncms/vis/rawdata
График потребления электроэнергии в Emoncms с утренним и вечерним пиком
Потребление за сутки: утренний и вечерний пик, max 1003 W, среднее 406 W.
https://ваш-домен/emoncms/vis/rawdata
График солнечной генерации в Emoncms: дуга с пиком в полдень
Солнечная генерация: дневная дуга с пиком в полдень, max 2600 W, ночью ноль.
https://ваш-домен/emoncms/vis/rawdata
График температуры в Emoncms за сутки
Температурный feed за сутки - суточный ход.
Замеры

Что измерили после запуска

Цифры со свежей установки, без нагрузки. Только реальные замеры.

RAM в простое (весь контейнер)~148 MiB
CPU в простое~0.35 %
Образ на диске~828 MB
Отклик (TTFB по HTTPS)~0.49 c
Версия на стендеemoncms 11.12.3 (low-write)
i

Главное: сервис легкий - один контейнер со всем стеком укладывается в ~150 MiB RAM. Основной ресурс, за которым нужно следить, это не память, а диск: он растет вместе с историей feeds.

Проверено на версии 11.12.3, сентябрь 2026. На новых версиях результаты могут отличаться.

Подводные камни

Где может сломаться

Реальные грабли, на которые наткнулись при запуске.

!

Порт-конфликт с прокси. Контейнер по умолчанию занимает порт 80 на всех интерфейсах, и Caddy тогда не может подняться (порт 80 нужен ему для ACME и проксирования). Решение: публиковать контейнер на 127.0.0.1:8080, а 80 и 443 отдать Caddy.

!

Redis в режиме low-write. Без Redis часть процессоров входов молча не пишет данные. В all-in-one образе Redis уже на борту, но если собираете стек вручную - не пропускайте его.

docker: net/http: timeout awaiting response headers

Причина. Из РФ-сети скачивание слоев с Docker Hub периодически обрывается по таймауту. Это сетевой флап, не блокировка.

Решение. Повторять pull в цикле с паузой (см. шаг 2 установки) - обычно образ дотягивается за несколько попыток.

invalid characters in feed name

Причина. Emoncms запрещает часть символов в имени feed, в том числе запятую.

Решение. Имя без запятых, а единицу измерения задавать отдельным полем (unit), например W или C.

Безопасность

Безопасность и обновления

Emoncms активно развивается, релизы и security-заметки - на странице релизов GitHub. Обновление образа:

docker pull alexjunk/emoncms:НОВЫЙ_ТЕГ
docker rm -f emoncms && docker run -d --name emoncms --restart unless-stopped \
  -p 127.0.0.1:8080:80 alexjunk/emoncms:НОВЫЙ_ТЕГ

Следите за версией образа

Готовый all-in-one образ отстает от upstream: на момент разбора его потолок - 11.12.3, тогда как в 11.16.8 закрыли важную уязвимость (read-ключ позволял добраться до write-ключа и захватить аккаунт). Пока образ не подтянут до 11.16.8 и выше, не выставляйте экземпляр в открытый интернет с расшаренным read-ключом; для полностью свежей версии собирайте стек из официального репозитория.

Бэкап - это каталог с данными emoncms (feeds на диске) и дамп MariaDB. У проекта есть штатные модули backup и sync для переноса и восстановления feeds.

Рядом

Связь с другими стеками

  • Обратный прокси - Caddy или Nginx Proxy Manager для домена и TLS.
  • Умный дом - Home Assistant умеет отдавать данные в Emoncms, а Emoncms - принимать телеметрию по MQTT.
  • Мониторинг инфраструктуры - Uptime Kuma или Beszel, если нужно следить за самим сервером, а не за энергией.
Трезво

Когда это НЕ ваш выбор

Нужна коробка без настройки

Emoncms требует завести входы, feeds и процессоры под свои устройства. Если хочется готовое решение из магазина, которое само все покажет, это не оно.

Аналитика бизнес-метрик

Это инструмент для физических величин - ватты, киловатт-часы, градусы. Для веб-аналитики или продуктовых метрик берите Plausible или Umami.

FAQ

Частые вопросы

Хватит ли 4 GB RAM?

С запасом. На нашем стенде весь контейнер в простое занимает около 150 MiB, 4 GB достаточно и под нагрузкой домашнего сценария.

Можно поставить без Docker?

Да, проект штатно ставится на Ubuntu или Raspberry Pi OS через emonScripts. Docker-образ - самый быстрый путь получить рабочий экземпляр.

Как передавать данные со своих устройств?

Двумя способами: HTTP-API (input/post с ключом записи) или MQTT - брокер Mosquitto уже в образе.

Зачем нужен Redis?

Он буферизует запись (режим low-write), снижает износ диска и требуется части процессоров входов. В all-in-one образе уже установлен.

Можно выставлять в интернет?

Только за обратным прокси с TLS и с пониманием модели ключей. Учтите замечание про версию образа и уязвимость, закрытую в 11.16.8.

Как обновлять?

Подтянуть новый тег образа и пересоздать контейнер. Данные feeds хранятся на диске, метаданные - в MariaDB.

Какая лицензия?

AGPL-3.0: свободное использование, включая домашнее и коммерческое. Сетевое копилефт задевает только тех, кто модифицирует код и отдает его как сетевой сервис третьим лицам; для домашнего учета это неактуально.

Итог

Emoncms - зрелый и легкий инструмент для учета электроэнергии дома: один контейнер в ~150 MiB RAM собирает данные со счетчиков, солнечных панелей и датчиков, копит историю и рисует графики - все на своем сервере. Главное, за чем стоит следить, это версия готового образа: держите ее не ниже 11.16.8 из-за закрытой уязвимости, а для полностью свежей сборки берите официальный репозиторий.

Анонсы новых разборов в Telegram-канале Новые гайды и карточки в маркетплейсе первыми @fatmetal_channel →

Этот стек у нас запущен на тарифе CPU2-RAM4-DISK40. Нашли баг в гайде - напишите, поправим в течение дня.