MeterMaster

Receives meter readings from the MeterMaster Android app and manages ESP32 display nodes

Current Release
0.9.10
Developer
MPunktBPunkt
License
MIT

Bring meter readings from your phone into ioBroker — automatically.

MeterMaster is the bridge between the MeterMaster Android app and your smart home. Record electricity, gas, water or heat meters on your smartphone; the adapter stores them as ioBroker states with correct timestamps and full history — ready for scripts, visualizations and billing workflows.

No cloud account. Readings stay in your network.

Get it on Google Play


Why use this adapter?

Without MeterMasterWith MeterMaster
Manual entry into ioBroker or spreadsheetsOne tap in the app → state updated
Guessed timestampsState ts = real reading date
No history per meterFull readings.history array
Separate tools for charts/CSVBuilt-in Web UI with charts and export

Typical users: homeowners, landlords and property managers who already read meters on site and want those values in ioBroker without retyping.


Quick start

  1. Install MeterMaster from the official ioBroker adapter list and create an instance.
  2. Note the HTTP port (default 8089) and set a Basic Auth password.
  3. Install the Android appSettings → ioBroker → MeterMaster adapter.
  4. Enter your ioBroker host, port, username and password → Test connection.
  5. Record a reading in the app — it appears under metermaster.0.… and in the Web UI.
Android app  ──HTTP──►  MeterMaster adapter  ──►  ioBroker states + history + Web UI

Open the Web UI anytime at http://{ioBroker-IP}:8089/ (no password required for viewing).


Features

  • HTTP receiver — accepts readings from the MeterMaster Android app (single or batch)
  • Automatic states — house / apartment / meter objects are created on first sync
  • Correct timestampsreadings.latest uses the actual reading date as state ts
  • Full history — every meter keeps a readings.history JSON array
  • Basic Auth — optional username/password protection for write endpoints
  • Built-in Web UI — Data, Import, Logs and System tabs in DE/EN
  • Delete in Web UI — remove apartments/meters from ioBroker (password confirm)
  • Collapsible sections — fold house/apartment blocks in the Data tab
  • Charts & CSV — history charts, monthly consumption and per-meter CSV export
  • Backup import — restore MeterMaster app backups (schema 2.0) via drag & drop

Optional: ESP32 OLED display nodes can show selected meter values on a small display.


MeterMaster Android app

The adapter is the ioBroker side of MeterMaster — a local-first Android app for utility meters.

  • Manage properties, apartments and meters (electricity, gas, water, heat, custom)
  • Record readings with date/time and optional photos
  • Consumption charts and annual billing / CSV / HTML export
  • Local storage only — no cloud, no account, no tracking
  • Optional integrations: ioBroker (this adapter), MQTT, Google Sheets, InfluxDB
Google PlayMeterMaster
Source & docsMPunktBPunkt/MeterMaster

Screenshots

Data — meter cards, KPI, history, chart & CSVChart — linear time axis & monthly consumption
Data tabChart modal
Import — app backup via drag & dropLogs — live filter & export
Import tabLogs tab
System — statistics & version checkNodes — optional ESP32 status
System tabNodes tab

Installation

Install from the official ioBroker adapter list:

  1. Open ioBroker AdminAdapters
  2. Search for MeterMaster
  3. Click Install and create an instance

From the command line on the ioBroker host:

iobroker add metermaster
iobroker start metermaster

If the app cannot reach the adapter, open the firewall for the configured port, e.g. sudo ufw allow 8089/tcp.

More notes: INSTALLATION.md


Instance configuration

ioBroker Admin → Adapters → MeterMaster → instance settings

SettingDefaultDescription
HTTP port8089Port the adapter listens on
UsernamemetermasterBasic Auth username
PasswordBasic Auth password (set a strong one)
Verbose loggingenabledShow DEBUG entries in the log viewer
Log buffer500Maximum stored log entries
Keep history00 = unlimited readings per meter

Configure the Android app

Settings → ioBroker → MeterMaster adapter

FieldValue
Enable ioBrokeron
IP / hostnameIP address of the ioBroker server
Adapter port8089 (or your configured port)
Usernameas in the adapter instance
Passwordas in the adapter instance

Use Test connection. Success looks like: MeterMaster adapter reachable ✓


Web UI

http://{ioBroker-IP}:8089/
TabContent
DataMeters grouped by house/apartment — history, charts, CSV
ImportMeterMaster app backup (JSON schema 2.0) via drag & drop
LogsReal-time log with filter, auto-scroll and export
SystemStatistics and update check
NodesOptional ESP32 displays (see below)

Language switch: DE / EN in the Web UI.


Created data points

metermaster.0.
├── info.connection        bool    Adapter connected
├── info.lastSync          number  Timestamp of last sync (ms)
├── info.readingsReceived  number  Total readings received
│
├── {House}/{Apartment}/{Meter}/
│   ├── readings.latest      number  Latest value (ts = reading date)
│   ├── readings.latestDate  string  ISO-8601 date
│   ├── readings.history     string  JSON array of all readings
│   ├── name                 string
│   ├── unit                 string
│   └── typeName             string
│
└── nodes/{MAC}/             (only if ESP32 nodes are used)
    ├── ip, name, version, lastSeen
    ├── config, configAck, cmd

HTTP API

Without authentication

MethodPathDescription
GET/Web UI
GET/api/versionVersion + GitHub check
GET/api/statsStatistics
GET/api/dataAll cached readings
GET/api/logsLog buffer (?level=&category=&text=)
GET/api/nodesRegistered ESP32 nodes
GET/api/discoverKnown meter state IDs
POST/api/registerESP32 heartbeat

With Basic Auth

MethodPathDescription
GET/api/pingConnection test
POST/api/readingStore a single reading
POST/api/readingsStore batch readings
POST/api/importImport app backup
DELETE/api/apartment/{house}/{apartment}Delete apartment channel tree
DELETE/api/meter/{house}/{apartment}/{meter}Delete single meter
GET/POST/api/nodes/{MAC}/configGet / set ESP32 config
POST/api/nodes/{MAC}/configAckConfig acknowledgement
POST/api/nodes/{MAC}/cmdImmediate command (e.g. LED)

Example: single reading

POST http://host:8089/api/reading
Authorization: Basic base64(user:password)
Content-Type: application/json

{
  "house": "MyHouse",
  "apartment": "West",
  "meter": "HotWater",
  "value": 128.75,
  "unit": "m³",
  "typeName": "HotWater",
  "readingDate": "2024-02-12T09:30:00.000Z"
}

Optional: ESP32 display nodes

As an optional add-on, the adapter can manage MeterMaster ESP32 nodes that show selected meter values on a small OLED.

  • Nodes register via heartbeat (POST /api/register) and poll config every 15 s
  • States under metermaster.0.nodes.{MAC}.*
  • Web UI Nodes tab: online status, IP link, meter selection, LED control, firmware

You do not need an ESP32 to use the adapter or the Android app.


Update

Web UI: http://IP:8089/System → Check for updates (install via CLI).

Command line:

iobroker upgrade metermaster
iobroker restart metermaster.0

Changelog

WORK IN PROGRESS

  • (ioBroker-Bot) Adapter requires admin >= 7.8.23 now.

0.9.10

  • Repo checker (E2004/E6029): remove unpublished 0.9.5 from common.news
  • Trim common.news to 7 entries
  • Document releases 0.9.6–0.9.10 in README changelog

0.9.9

  • Web UI: delete apartment/meter with password confirmation (DELETE API)
  • Collapsible house/apartment sections in the Data tab (localStorage)

0.9.8

  • Log MeterMaster app connection tests from User-Agent on /api/ping at info level

0.9.7

  • Print fix (Blob URL revoke)
  • ESP32 discover proxy (getStates / node-discover)
  • Node heartbeat/ack logs moved to debug

0.9.6

  • Assign display nodes via chips on meter cards in the Data tab
  • Correct history on re-sync; edit values in Web UI; print chart and apartment/house latest readings

0.9.4

  • All adapter log messages and API JSON error responses in English
  • State common names and roles corrected (readings channel, date/text/json roles, info.firmware for nodes)
  • Web UI i18n: full DE/EN coverage, English default HTML
  • Config validation: clamped port (1024–65535), logBufferSize (50–5000), keepHistory (0–100000)
  • Removed /api/update endpoint and one-click Web UI update (CLI commands card retained)
  • migrateStateRoles() uses getAdapterObjectsAsync (own adapter states only)
  • Removed dead houseName config; import default house is MyHouse
  • Fixed redundant state check in stateChange handler
  • @types/node pinned to ^22.0.0

0.9.3

  • Fix state roles for ioBroker object structure check (repochecker E1008/E1009/E1011)
  • Migration of existing objects on adapter start

0.9.2

  • Adapter checker compliance: npm news cleanup, devDependencies, trusted publishing
  • npm publish via GitHub Actions with provenance

0.9.1

  • Lowered admin dependency to >=7.6.20 (fixes startup when admin 7.7.x is installed)

0.9.0

  • Finalized for ioBroker repository: CI/CD testing, adapter checker compliance
  • English README, updated dependencies (Node.js >= 22, adapter-core 3.4.x)
  • Admin config i18n, encrypted password storage
  • Requires js-controller >= 6.0.11 and admin >= 7.6.20

0.8.3

  • Chart: linear time axis, yearly consumption projection toggle, README screenshots

0.8.2

  • Bugfix: chart modal close button and range filters

0.8.1

  • Bugfix: literal newline in CSV export JS broke Web UI

0.8.0

  • Charts per meter, consumption KPI, CSV export, DE/EN language switch

See io-package.json common.news for full history. Older entries: CHANGELOG_OLD.md.


License

MIT License

Copyright (c) 2026 MPunktBPunkt

See LICENSE for the full license text.