API-nøgler og tredjeparts-integration — hvad kan du bygge?
M-Bus Gateway REST API: authentication med API-nøgler, tilgængelige endpoints, webhook-events, rate limiting, og eksempler på hvad du kan bygge med forbrugsdata.
Af M-Bus Gateway
M-Bus Gateway eksponerer et fuldt REST API til tredjeparts-integration. Her er hvad du kan gøre med API-nøgler — fra simpel dataeksport til realtids-automatisering.
API-nøgle-oprettelse
API-nøgler oprettes i portalen under Indstillinger → API-nøgler.
Navn: "e-conomic integration"
Rettigheder: read:readings, read:settlements
Udløb: 365 dage (eller ingen udløb)
IP-whitelist: 10.0.0.0/8 (valgfrit)
→ Genereret nøgle: mbk_live_AbCdEf1234567890...
Nøglen vises kun én gang — gem den sikkert.
Authentication
# Alle API-kald kræver Authorization-header:
curl https://api.mbus-gateway.dk/api/v1/readings \
-H "Authorization: Bearer mbk_live_AbCdEf1234567890..."
# Eller som query parameter (ikke anbefalet):
curl "https://api.mbus-gateway.dk/api/v1/readings?api_key=mbk_live_..."
Nøgle-endpoints
Aflæsninger
# Seneste aflæsning pr. installation:
GET /api/v1/readings?property_id=EJD-001&limit=100
# Historik for én installation:
GET /api/v1/readings?meter_installation_id=MI-001&from=2025-01-01&to=2025-05-31
# Månedlig aggregering:
GET /api/v1/readings/monthly?property_id=EJD-001&year=2025
# Response:
{
"data": [
{
"meter_installation_id": "MI-001",
"unit_id": "U-3th",
"address": "Eksempelvej 3, 3. th.",
"meter_type": "hca",
"timestamp": "2025-05-23T06:15:00Z",
"value": 1847.3,
"unit": "units",
"battery_level_pct": 78,
"rssi_dbm": -82
}
],
"total": 847,
"page": 1
}
Afregninger
# Liste over årsafregninger:
GET /api/v1/settlements?property_id=EJD-001&status=sent
# Én afregning med alle linjer:
GET /api/v1/settlements/SET-2025-001
# OIOUBL-faktura:
GET /api/v1/settlements/SET-2025-001/oioubl
# → XML-fil download
# CSV-eksport:
GET /api/v1/export/readings?property_id=EJD-001&year=2025
# → CSV-fil download
Ejendomme og enheder
# Alle ejendomme:
GET /api/v1/properties
# Enheder i ejendom:
GET /api/v1/properties/EJD-001/units
# Aktive beboere:
GET /api/v1/properties/EJD-001/occupancies?active=true
Webhooks
Webhooks sender POST-requests til din URL ved hændelser:
# Registrér webhook:
POST /api/v1/webhooks
{
"url": "https://din-server.dk/webhook/mbus",
"events": ["settlement.sent", "reading.anomaly", "alarm.battery_low"],
"secret": "din-hemmelighed" # HMAC-SHA256 signatur
}
Tilgængelige events
| Event | Trigger | Payload |
|---|---|---|
settlement.sent | Afregning udsendt til lejere | settlement_id, lines, period |
reading.anomaly | Stuk/backwards/jump detekteret | meter_id, type, value |
alarm.battery_low | Batteri under 20% | meter_id, battery_pct |
alarm.silent | Ingen aflæsning i 72t | meter_installation_id, last_seen |
gateway.offline | Gateway offline i 24t | gateway_id, last_seen |
mid.expiry_soon | MID-certifikat udløber inden 6 mdr. | meter_id, mid_expiry_date |
Webhook-verifikation
import hmac, hashlib
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256,
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
# I din Flask-route:
@app.route("/webhook/mbus", methods=["POST"])
def handle_webhook():
sig = request.headers.get("X-MBus-Signature")
if not verify_webhook(request.data, sig, WEBHOOK_SECRET):
return "Unauthorized", 401
data = request.json
# Håndter event...
Rate limiting
| Plan | Rate limit |
|---|---|
| Basis | 60 requests/minut |
| Pro | 300 requests/minut |
| Enterprise | 3.000 requests/minut |
# Rate limit-headers i response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1716505260
Hvad kan du bygge?
1. Realtids-dashboard i Power BI
# Power BI REST API push dataset:
import requests
readings = fetch_from_mbus_api("/api/v1/readings/monthly?property_id=EJD-001&year=2025")
for row in readings:
requests.post(
"https://api.powerbi.com/beta/.../datasets/.../rows",
headers={"Authorization": f"Bearer {PBI_TOKEN}"},
json={"rows": [{"unit": row["address"], "kWh": row["value_kwh"], "month": row["month"]}]},
)
2. Automatisk bogføring i e-conomic
Se e-conomic integrations-guide.
3. Grafana-overvågning
# Grafana datasource via JSON API plugin:
url: https://api.mbus-gateway.dk/api/v1/readings
method: GET
headers:
Authorization: Bearer ${MBUS_API_KEY}
params:
property_id: EJD-001
limit: 1000
4. Telegram-alarm ved batteri
import requests
def check_batteries():
alarms = requests.get(
"https://api.mbus-gateway.dk/api/v1/alarms?type=battery_low&resolved=false",
headers={"Authorization": f"Bearer {API_KEY}"},
).json()
for alarm in alarms["data"]:
requests.post(
f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
json={
"chat_id": CHAT_ID,
"text": f"⚠️ Batteri lavt: {alarm['meter_id']} — {alarm['battery_pct']}%",
},
)
5. Automatisk á conto-regulering
# Hent anbefalede á conto fra API:
GET /api/v1/properties/EJD-001/a-conto-recommendations
# → [{unit_id, current_a_conto, recommended_a_conto, diff_pct}, ...]
# Send varslingsbrev automatisk via dit eget system
SDK-support
Officielle SDK'er er planlagt:
- Python SDK (Q3 2026)
- TypeScript/Node SDK (Q4 2026)
- PHP SDK (Q1 2027)
Indtil da: Brug standard HTTP-biblioteker (requests, axios, Guzzle).
Konklusion
API'et eksponerer alle platformens kernedata: aflæsninger, afregninger, alarmer, ejendomme og beboere. Med webhooks kan du bygge realtids-automatiseringer uden polling. Rate limiting er generøst på Pro-planen (300 req/min). API-nøgler oprettes direkte i portalen.