Platform live · v1.0 · NB-IoT + LoRaWAN

Advanced Metering
Infrastructure Platform

A self-hosted, vendor-independent AMI system bridging NB-IoT and LoRaWAN water meters to DLMS/COSEM, MDM, and billing — zero cloud dependency.

Read the Platform Guide Open HES Dashboard ↗
7
Vendor codecs
2
Radio protocols
3
Core services
<5s
Meter to billing
IEC 62056
DLMS/COSEM compliant

Architecture

End-to-End Data Flow

Every reading travels from physical meter to billing-ready interval in under 5 seconds.

💧
Meter
NB-IoT / LoRa
📡
LwM2M / NS
Leshan · ChirpStack
🔄
Bridge
MQTT canonical
🖥️
HES
Codecs · Alarms · OTA
DLMS
Virtual concentrator
📊
MDM
VEE · Billing · NRW
📈
Grafana
Ops dashboards

Services

All Platform Services

Click any card to open its dashboard. Default credentials are shown for the initial deployment.

🖥️
Head-End System (HES)
Device management · Alarms · FUOTA · DLMS polls
Open

Central device manager. Decodes vendor payloads via codec registry, stores canonical readings, manages alarms, OTA firmware updates, and acts as DLMS client polling the virtual concentrator.

Access
URLhes.meteringlab.com
AuthNone (behind proxy)
API port8100
📊
Meter Data Management (MDM)
VEE · Hourly/Daily aggregates · Billing · NRW
Open

Consumes canonical HES events, produces hourly and daily interval data, runs VEE (Validation, Estimation, Editing), generates billing determinants, and monitors Non-Revenue Water per DMA zone.

Access
URLmdm.meteringlab.com
AuthNone (behind proxy)
API port8200
DLMS Virtual Concentrator
IEC 62056-47 · COSEM · TCP port 4059
Protocol

Makes NB-IoT meters appear as native DLMS/COSEM devices to any DLMS-speaking HES or utility software. Caches readings in memory and serves COSEM attributes over TCP Wrapper.

Access
Dashboarddlms.meteringlab.com
DLMS TCPmeteringlab.com:4059
AuthNone (use VPN in prod)
📡
ChirpStack Network Server
LoRaWAN NS/AS/JS · gRPC · Basic Station LNS
Login

LoRaWAN Network Server. Handles gateway connections (Basic Station over WSS on port 3002), device activation (OTAA/ABP), uplink/downlink routing, and publishes events to MQTT for the HES bridge.

Credentials
URLns.meteringlab.com
Emailadmin@chirpstack.io
Passwordadmin
🔗
LwM2M Bridge
Leshan SSE → MQTT → HES canonical
Open

Bridges NB-IoT devices registered on Leshan to the HES MQTT pipeline. Streams Leshan events via SSE, normalizes LwM2M object values, and publishes canonical readings to the shared MQTT bus.

Access
URLlwm2m.meteringlab.com
AuthNone
CoAP5683 UDP / 5684 DTLS
📈
Grafana
Operational dashboards · TimescaleDB · Live MQTT
Login

Operational analytics and monitoring. Pre-configured with TimescaleDB data source for meter readings, and Mosquitto Live for real-time MQTT event streaming. Build custom dashboards for any metric.

Credentials
URLgrafana.meteringlab.com
Usernameadmin
Passwordadmin_secret
🗄️
MinIO Object Storage
S3-compatible · Firmware blobs · Cold storage
Login

S3-compatible object store for FUOTA firmware image storage. Stores binary firmware blobs referenced by FUOTA sessions. Also available as a cold-storage export target for interval data archives.

Credentials
Consoleminio.meteringlab.com
Usernameami_minio
Passwordami_minio_secret
🌐
Leshan LwM2M Server
OMA LwM2M · CoAP · NB-IoT device registry
Open

Eclipse Leshan is the OMA LwM2M server that NB-IoT meters register to. Provides the CoAP endpoint for device registration, observe/notify subscriptions, and firmware object (LwM2M /5) management.

Access
UIleshan.meteringlab.com
CoAPmeteringlab.com:5683 (UDP)
CoAPSmeteringlab.com:5684 (DTLS)

Device Identity

What is a Device EUI?

Every meter is uniquely identified by a 64-bit hardware address across all services and protocols.

A Device EUI (Extended Unique Identifier) is the 64-bit hardware address that uniquely identifies every IoT meter in this platform — analogous to a MAC address. It is assigned by the meter manufacturer, burned into the hardware, and never changes. In LoRaWAN the EUI is used during OTAA join; in NB-IoT/LwM2M it is the endpoint name. All data in the system — readings, alarms, DLMS poll records, billing intervals — is keyed on the EUI.

Context Field name Format Example Used by
LoRaWAN (ChirpStack) devEui 16 hex chars (8 bytes) a8610a3030303031 NS, ChirpStack UI, OTAA join
NB-IoT (LwM2M) Endpoint name String — often EUI or IMEI urn:imei:351234567890123 Leshan, LwM2M bridge
HES canonical device_eui 16 hex chars, lowercase deadbeef00000001 HES DB, MQTT topics, API
DLMS concentrator device_euilogical_address EUI mapped to WPORT (uint16) deadbeef000000012001 DLMS TCP, utility HES
MDM / Billing device_eui 16 hex chars, lowercase deadbeef00000001 Intervals, VEE flags, billing
MQTT topics Topic segment hes/reading/{tenant_id}/{device_eui} hes/reading/0000…/deadbeef… All services via Mosquitto
View Registered Devices ↗ View DLMS Mappings ↗ Onboarding Guide →