Integration Guide

IOmeter Integration Guide

Dokumentation für Entwickler und Integratoren, die auf Basis von IOmeter eigene Systeme bauen — ob Home-Energy-Management, Batterie-/Wechselrichtersteuerung oder Backend-Plattform.

Introduction

This documentation is for developers and integrators building on top of IOmeter, whether that's a home energy management system, a battery/inverter controller, or a backend platform integration.

What is IOmeter?

IOmeter makes German electrical utility meter data — power, energy consumption, and energy production — available to other systems in real time. IOmeter is a hardware + cloud product made up of three parts:

Component What it does
IOmeter Core Attaches to the utility meter's optical port and transmits meter readings over a long-range 868 MHz RF link.
IOmeter Bridge Receives readings from the Core over RF and makes them available on the local IP network via 2.4 GHz WiFi.
IOmeter Cloud The backend service that IOmeter devices report to. It stores historical readings, and exposes them to backend partners through the Partner API.

The Core and Bridge together are what most people mean by "an IOmeter installation" — one Core per meter, talking to one Bridge, which is on the customer's home network and registered to their IOmeter account (and, through that account, to IOmeter Cloud).

Use cases

IOmeter data is commonly used to:

  • Display live power consumption and energy production to an end user
  • Bill or monitor energy usage
  • Control home battery storage systems and inverters — the live power reading is precise and fast enough to drive charge/discharge decisions, in particular to prevent feeding battery energy back to the grid

Three ways to get IOmeter data

There are three fundamentally different ways to integrate, and most integrations pick one:

  • Cloud integration — talk to the Partner API, a GraphQL backend-to-backend interface. You don't need access to the customer's local network; you link their IOmeter account once (with their consent) and then receive readings from IOmeter Cloud.
  • LAN integration — talk directly to the IOmeter Bridge over the customer's local network (HTTP or UDP multicast). No cloud dependency, but your integration needs to run on the same LAN as the device.
  • Push integration — the Bridge pushes readings and status updates directly to an HTTPS endpoint you host, no LAN adjacency or polling required. Requires a prior agreement with Neometer GmbH.

Read Choosing an Integration for a detailed comparison, or jump straight to Cloud Integration, LAN Integration, or Push Integration.

Terminology used throughout these docs (Core, Bridge, Installation, Device, OBIS code, ...) is collected in Key Concepts.

Key Concepts

Terminology used consistently across both the Cloud and LAN integration guides.

Term Meaning
IOmeter Core The device attached to the utility meter's optical port. Reads the meter and transmits readings over 868 MHz RF to the Bridge.
IOmeter Bridge The device on the customer's WiFi network. Receives readings from the Core and serves them locally (HTTP/UDP) and forwards them to IOmeter Cloud.
IOmeter Cloud IOmeter's backend service. Stores historical readings reported by Bridges and exposes them to backend partners via the Partner API.
IOmeter App IOmeters's companion mobile app. It is used to set up and manage an installation and to provision IOmeter Core / Bridge.
Installation A cloud-side concept: one customer's IOmeter setup (Core + Bridge + meter). Identified by an installation_id (UUID), obtained during device provisioning. Its the equivalent to an account.
Device An individual IOmeter Bridge / Core combination, identified by a device_id (UUID). One installation has one device.
Meter / meter number The physical utility meter. Identified by a human-readable serial number (DIN 43849 format, e.g. 1ESY1161338362; hex for some legacy meters) — see Meter Number Decoding for how this value is derived.
Partner A backend integrator authorized by Neometer GmbH to use the Partner API, identified by a partner_id. Only relevant to cloud integrations.
OBIS code A standardized identifier for a specific measurement register on the meter (e.g. total energy consumption, current power). Not every meter reports every register. The Local API and Partner API can represent OBIS codes in different string formats — see the OBIS Codes reference.

Choosing an Integration

IOmeter data can be consumed three ways. They are not mutually exclusive, but almost every integration is primarily one.

Cloud (Partner API) LAN (Local API) Push (HTTP Push)
Where your code runs Your backend, anywhere with internet access On the same local network as the IOmeter Bridge Your backend, anywhere reachable via HTTPS from the Bridge
Requires A prior agreement with Neometer GmbH and an API key issued by Neometer GmbH Nothing from Neometer GmbH beyond the device itself; discovery via mDNS A prior agreement with Neometer GmbH to provision your endpoint URL and credentials per device
Historical data Yes — queryable from IOmeter Cloud's database No — device only ever reports the current reading No — device pushes each reading once as it occurs; no backfill or replay
Multi-consumer N/A (cloud, no local fan-out concern) Best via UDP multicast; HTTP/SSE is capacity-limited (see Connection Management) Up to 4 push targets per device.
Typical use case Backend platform integration, billing, multi-site monitoring, mobile apps that already talk to your backend Home energy management systems, battery/inverter controllers, local dashboards Backend integrations that want cloud-independent, near-real-time delivery without operating a poller or being on the customer's LAN

Guidance

  • Choose Cloud if you're building a backend service or SaaS platform that needs data from IOmeter installations you don't have physical/network access to, or if you need historical (backfill) data.
  • Choose LAN if your integration runs on-premises (e.g. an inverter or home automation hub on the customer's network) and needs the lowest-latency near realtime power reading, or needs to work with limited internet connectivity.
  • Choose Push if you want the meter readings not routed through the IOmeter Cloud. Best for privacy and compliance.
  • Combine methods if, for example, your backend uses the Partner API for historical/billing data while an on-site device of yours also reads live power locally for fast control loops, or while Push delivers the same data to your backend without polling.

OBIS Codes Reference

OBIS codes identify individual measurement registers on the utility meter. Not every meter provides every register — a reading only ever contains what the meter actually reported.

IOmeter represents OBIS codes differently depending on which API you're using:

  • The Local API, HTTP Push uses the raw hex form the meter reports, e.g. 01-00:01.08.00*ff.
  • The Partner API can normalize it to the shorter decimal form, e.g. 1-0:1.8.0
Local API (hex) Partner API (decimal) Description Unit
01-00:01.08.00*ff 1-0:1.8.0 Total energy consumption (all tariffs) Wh
01-00:01.08.01*ff 1-0:1.8.1 Energy consumption — tariff 1 Wh
01-00:01.08.02*ff 1-0:1.8.2 Energy consumption — tariff 2 Wh
01-00:02.08.00*ff 1-0:2.8.0 Total energy production Wh
01-00:10.07.00*ff 1-0:16.7.0 Current active/net power (positive = consumption, negative = production) W
01-00:24.07.00*ff 1-0:36.7.0 Current power — phase L1* W
01-00:38.07.00*ff 1-0:56.7.0 Current power — phase L2 W
01-00:4C.07.00*ff 1-0:76.7.0 Current power — phase L3 W

* 1-0:36.7.0 is reported by some older meter models in place of 1-0:16.7.0 for the same measurement (current active power).

Meter Number Decoding

The meter.number field (present across the Local API, Push Integration, and Partner API) is the meter's serial number, normally in DIN 43849 format, e.g. 1ESY1161338362. This page explains where that value comes from and when it can't be produced.

The German digital meter identifier system has gone through many changes during the German smart-meter rollout. In particular, early-installed smart meters may have meter numbers that IOmeter's firmware cannot translate to the value printed on the meter itself.

This is rare, but worth planning for: if you link meter numbers to user accounts, be aware a small fraction may not match the printed serial. The installation_id and device_id provided by IOmeter Cloud are stable regardless of meter-number decoding, and can be used as a fallback key if you need to manually reconcile a meter number to an account.

How IOmeter Core decodes meter numbers

SML

The meter number is normally taken from OBIS code 01-00:00.00.09*ff, or 01-00:60.01.00*ff for older, legacy meters.

The value of this OBIS code is used inconsistently across meter manufacturers, and is even configurable on some meter models. IOmeter attempts to interpret the raw value and translate it into the unified identifier format specified by DIN 43849, e.g.:

1ESY1161338362

If translation isn't possible, meter.number contains the raw octet string in hexadecimal instead, e.g.:

080535342d4ca011

IEC 1107 / DIN EN 62056-21 Mode D

The meter number is taken from one of 01-00:60.01.00*ff, 01-00:00.00.09*ff, or 01-00:00.00.00*ff. Since Mode D uses ASCII, no decoding is performed — the value is copied as-is into reading and status payloads.