Учёт показаний счётчиков, начислений и оплат для дома и небольших коммерческих помещений. Один статический бинарник: внутри SQLite, формирование PDF и веб-интерфейс для телефона и ПК. Запускается и на Windows, и на роутере Keenetic (Entware, aarch64).
MeterZone by OGNIS.
Компьютер
| Показания | Журнал |
|---|---|
![]() |
![]() |
| Объект и приборы | Ведомость начислений |
|---|---|
![]() |
![]() |
Документы для печати
| Сведения о показаниях | Ведомость показаний |
|---|---|
![]() |
![]() |
Телефон
Готовые сборки и пошаговые инструкции — в отдельном репозитории ognis163/meterzone-dist:
| Куда | Инструкция |
|---|---|
| Synology DSM 7 (Docker, Container Manager) | INSTALL_DSM.md |
| Keenetic / Entware (aarch64) | INSTALL_KEENETIC.md |
Здесь, в MeterZone, — исходный код. Собирать самому нужно, только если вы вносите изменения; см. раздел «Сборка» ниже.
На iPhone откройте сайт в Safari, нажмите «Поделиться» → На экран «Домой». Приложение откроется без панелей и кнопок Safari — как обычное приложение. На Android: меню браузера → Установить приложение.
Если ярлык был добавлен раньше, удалите его и добавьте заново — старый ярлык открывает Safari с панелями.
- Объекты — дома, магазины, офисы: собственник, адрес, лицевые счета, почта водоканала и энергосбыта.
- Приборы учёта — холодная и горячая вода, электроэнергия: марка, заводской номер, место, начальное показания, дата установки. Замена счётчика — архив старого плюс новый.
- Дублирующий счётчик — прибор привязывается к основному и повторяет его показания. MeterZone показывает смещение и значение, которое нужно отправить в ресурсную организацию.
- Ввод показаний — на главной: выбранный объект и месяц, все счётчики объекта, автоматическое сохранение и мгновенный пересчёт расхода и итогов.
- Начисления — по каждому счёту: аванс, счёт и отметка оплаты. В журнале одна таблица на все ресурсы (только при включённом финучёте): месяц, ресурс, аванс, счёт и итого; оплата отмечается галочкой у аванса или счёта отдельно, а «Итого» — сразу за оба. Режим задаётся у счётчика: только аванс, только счёт или оба.
- Журнал — один раздел: произвольный диапазон месяцев, по каждому счётчику показания и расход, итоги и начисления. Выгрузка выбранного периода: CSV, PDF и печать.
- Документы — «Сведения о показаниях», «Ведомость показаний» и «Ведомость начислений» открываются одной страницей: PDF, печать и отправка на почту.
- Почта — SMTP с SSL или STARTTLS, проверка подключения, быстрые адреса получателей.
- Резервные копии — копия раз в месяц, хранение последних 14, восстановление и выгрузка CSV.
- Тёмная тема и смена порта без перезапуска.
Нужен Go 1.23 или новее.
go build -o meterzone.exe .Для роутера (Linux, arm64):
$env:GOOS='linux'; $env:GOARCH='arm64'; $env:CGO_ENABLED='0'
go build -trimpath -ldflags "-s -w" -o meterzone ..\meterzone.exe -port 8099 -db .\data\meterzone.dbОткройте http://localhost:8099.
Параметры: -port, -host, -db, -backups, -demo (заполнить пустую базу примерами), -version.
Часть параметров можно задать переменными окружения: PORT, HOST, APP_DB, APP_BACKUP_DIR, APP_TZ.
При первом запуске база создаётся автоматически — она пустая, без примеров. Каталог с базой и резервными копиями создаётся рядом с программой.
На Keenetic с Entware, по SSH под root:
curl -fsSL https://github.com/ognis163/meterzone-dist/releases/latest/download/install-keenetic.sh | shСкрипт скачает последний бинарник для aarch64, установит его в /opt/meterzone,
настроит автозапуск /opt/etc/init.d/S99meterzone, запустит сервис и покажет адрес.
Существующая база data/meterzone.db не удаляется.
Другой порт и часовой пояс:
curl -fsSL https://github.com/ognis163/meterzone-dist/releases/latest/download/install-keenetic.sh \
| PORT=8090 APP_TZ=Europe/Moscow shНужен Keenetic Hopper (aarch64) с Entware и доступом в интернет.
Если нет curl, используйте wget -qO- <тот же адрес> | sh.
Пошагово, вручную — в INSTALL_KEENETIC.md.
Готовый образ собирается автоматически и раздаётся отдельным репозиторием ognis163/meterzone-dist — компилировать на NAS ничего не нужно.
docker run -d --name meterzone -p 8099:8099 -v "$PWD/data:/data" \
ghcr.io/ognis163/meterzone-dist:latestОткройте http://адрес-устройства:8099. База и копии — в папке data/,
она переживает обновление образа. Для Synology удобнее
docker-compose.yml из того же репозитория.
Все параметры задаются переменными: PORT, HOST, APP_DB,
APP_BACKUP_DIR, APP_TZ. В контейнере порт меняется только снаружи
(PORT_FIXED=1 отключает смену порта из интерфейса, иначе приложение
уедет на непроброшенный порт).
main.go, portbinder.go точка входа и управление портом
internal/model типы, периоды, форматирование, деньги
internal/store SQLite: объекты, приборы, показания, деньги, копии, импорт
internal/report расчёты расхода и отчётов
internal/docgen документы: общая модель, PDF через gpdf и сетка печати
internal/third_party форк раскладки и отрисовки gpdf с исправлением позиций
internal/web HTTP, шаблоны, стили, скрипты
internal/mail отправка писем по SMTP
deploy автозапуск и инструкция для Keenetic
«Сведения о показаниях» и «Ведомость показаний» описываются один раз —
в internal/docgen (тип Document): заголовок, реквизиты, разделы
с таблицами и подпись. Из этой модели собираются оба вывода:
- PDF —
docgen.PDF, собирается библиотекой gpdf (чистый Go, без зависимостей); это основной файл для печати и отправки на почту; - HTML-предпросмотр —
templates/document.htmlиassets/doc.css.
Сетка общая: A4, поля 22 мм, DejaVu Sans, кегли 7–19 pt, только волосяные линии — без рамок, заливок и полужирного. Поэтому лист в браузере и PDF совпадают по типографике.
go test ./...
go vet ./...MIT, см. LICENSE.







