Emoncms
Open-source приложение для учета и визуализации электроэнергии на своем сервере: счетчики, солнечные панели, тепловой насос и датчики в одной базе, графики и дашборды - без облака и без передачи данных о доме третьим лицам. Ставили docker-образ на чистый VPS и снимали замеры на рабочем экземпляре.
Вердикт
- учет потребления дома со счетчиков и датчиков с импульсным выходом
- солнечные панели, тепловой насос, EV-зарядка - сбор и графики в одной панели
- прием телеметрии по MQTT с любых IoT-устройств
- кто хочет готовую коробку из магазина без настройки входов и feeds
- публичный доступ из интернета без прокси, TLS и разбора модели ключей
- кому нужна аналитика бизнес-метрик, а не физических величин
Что это и какую задачу решает
Emoncms - веб-приложение проекта OpenEnergyMonitor для сбора, логирования и визуализации данных об энергии, температуре и окружающей среде. Задача простая и понятная любому владельцу дома: собрать в одном месте, сколько электричества уходит, сколько дает солнечная панель, как работает тепловой насос, и увидеть это графиком, а не строчкой в квитанции.
Работает по модели входов и feeds. Вход (input) - точка приема данных: у него есть узел (node) и ключ (key), пишется только последнее значение. Чтобы копить историю, из входа создают feed - временной ряд на собственных движках PHPFina и PHPTimeSeries. Поверх feeds строятся графики, дашборды и прикладные приложения: MyElectric, MySolar, DemandShaper. Данные приходят по HTTP-API или по MQTT с любых устройств.
Чем отличается от облачных сервисов
Сравнение с облачным 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 с запасом на историю |
Важно: сам сервис в простое ест около 150 MiB, но объем диска растет вместе с числом feeds и частотой записи. Для домашнего сценария на десяток feeds 40 GB хватает надолго; при плотной телеметрии закладывайте запас.
Установка Emoncms на VPS
Базовый путь - Cloud Server + Ubuntu 24.04 + Docker + обратный прокси Caddy для TLS.
Создать VM и поставить Docker
Тариф CPU2-RAM4-DISK40, Ubuntu 24.04. Установка Docker:
curl -fsSL https://get.docker.com | sh.Забрать образ (с ретраями)
Из РФ-сети 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Поднять контейнер на 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.Домен и TLS через Caddy
Caddy сам выпустит Let's Encrypt на ваш домен.
/etc/caddy/Caddyfile:ваш-домен { reverse_proxy 127.0.0.1:8080 }Дальше
systemctl restart caddy- и сервис доступен по HTTPS.Создать аккаунт
Первый вход в веб-интерфейсе создает администратора. После этого можно заводить входы, feeds и графики.
Как выглядят данные
Мы засеяли сутки демо-данных (потребление, солнечная генерация, температура) и построили графики штатным модулем.
Что измерили после запуска
Цифры со свежей установки, без нагрузки. Только реальные замеры.
| RAM в простое (весь контейнер) | ~148 MiB |
| CPU в простое | ~0.35 % |
| Образ на диске | ~828 MB |
| Отклик (TTFB по HTTPS) | ~0.49 c |
| Версия на стенде | emoncms 11.12.3 (low-write) |
Главное: сервис легкий - один контейнер со всем стеком укладывается в ~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 Hub периодически обрывается по таймауту. Это сетевой флап, не блокировка.
Решение. Повторять pull в цикле с паузой (см. шаг 2 установки) - обычно образ дотягивается за несколько попыток.
Причина. 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.
Частые вопросы
Хватит ли 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 из-за закрытой уязвимости, а для полностью свежей сборки берите официальный репозиторий.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK40. Нашли баг в гайде - напишите, поправим в течение дня.