Telegram API

Az ADA P1 Meter az okosmérő eredeti, nyers telegram formátumát is szolgáltatja. Ez a DSMR szabvány szerinti strukturált szöveges formátum, amit szinte minden európai okosmérő és a legtöbb energiafigyelő szoftver (DSMR-logger, OpenDatalogger, Python/Node.js parserek) natívan megért.

Végpont

GET http://okosvillanyora.local:8989/telegram

Vagy IP-vel:

GET http://192.168.x.x:8989/telegram

Mikor használd?

Használd a Telegram végpontot, ha:

  • Már van DSMR-kompatibilis feldolgozó szoftvered
  • Saját parsert akarsz írni, és a nyers OBIS kódokkal szeretnél dolgozni
  • Debuggolsz, és látni akarod, pontosan mit küld a mérő
  • Olyan eszközbe integrálsz, ami nem ért JSON-t, csak soros szöveget

Minden más esetben a JSON végpont egyszerűbb.

Frissítési gyakoriság

A Telegram szöveg 10 másodpercenként frissül, minden kérésnél a legfrissebbet kapod.

Példakimenet

/AUX5440252420024796

0-0:1.0.0(250329112720W)
0-0:42.0.0(AUX1020320024796)
0-0:96.1.0(440252420024796)
0-0:96.14.0(0002)
0-0:96.50.68(ON)
1-0:1.8.1(012345.678*kWh)
1-0:1.8.2(009876.543*kWh)
1-0:2.8.1(000123.456*kWh)
1-0:2.8.2(000078.901*kWh)
1-0:1.7.0(01.234*kW)
1-0:2.7.0(00.000*kW)
1-0:21.7.0(00.432*kW)
1-0:41.7.0(00.401*kW)
1-0:61.7.0(00.401*kW)
1-0:32.7.0(231.1*V)
1-0:52.7.0(230.8*V)
1-0:72.7.0(231.0*V)
1-0:31.7.0(001*A)
1-0:51.7.0(001*A)
1-0:71.7.0(001*A)
0-1:24.1.0(003)
0-1:96.1.1(4730313233343536)
0-1:24.2.3(250329110000W)(04321.987*m3)
!A1B2

Formátum áttekintés

Minden sor egy mérési érték, a következő felépítéssel:

<OBIS-kód>(<érték>[*<mértékegység>])
  • Az OBIS kód (pl. 1-0:1.8.1) az adott mérés nemzetközi azonosítója
  • Az érték lehet szám, időbélyeg vagy szöveg
  • A mértékegység csillag után jön: *kWh, *kW, *V, *A, *m3
  • A telegram első sora (/...) a gyártói azonosító
  • Az utolsó sor (!XXXX) egy CRC16 ellenőrzőösszeg

Gyakoribb OBIS kódok

OBIS kódJelentés
0-0:1.0.0Időbélyeg (YYMMDDhhmmssXS=nyári, W=téli idő)
0-0:42.0.0COSEM logikai eszköznév
0-0:96.1.0Mérő gyári száma
0-0:96.14.0Aktuális tarifa
0-0:96.50.68Kismegszakító állapota
1-0:1.8.0Összes import energia (kWh)
1-0:1.8.1 / 1-0:1.8.2T1 / T2 tarifa import
1-0:2.8.0Összes export energia
1-0:2.8.1 / 1-0:2.8.2T1 / T2 tarifa export
1-0:1.7.0 / 1-0:2.7.0Pillanatnyi import / export (kW)
1-0:21.7.0 / 41.7.0 / 61.7.0Fázisonkénti import
1-0:22.7.0 / 42.7.0 / 62.7.0Fázisonkénti export
1-0:32.7.0 / 52.7.0 / 72.7.0L1 / L2 / L3 feszültség (V)
1-0:31.7.0 / 51.7.0 / 71.7.0L1 / L2 / L3 áram (A)
0-1:24.2.3Gáz fogyasztás időbélyeggel
0-2:24.2.1Víz fogyasztás (MBus 2. csatorna)

Használat Python-nal

A dsmr-parser csomaggal minden telegram automatikusan feldolgozható:

import requests
from dsmr_parser.parsers import TelegramParser
from dsmr_parser import telegram_specifications

# A legtöbb magyar/holland mérőhöz:
parser = TelegramParser(telegram_specifications.V5)

raw = requests.get('http://okosvillanyora.local:8989/telegram').text
telegram = parser.parse(raw)

print("Import T1:", telegram.ELECTRICITY_USED_TARIFF_1.value, "kWh")
print("Most:", telegram.CURRENT_ELECTRICITY_USAGE.value * 1000, "W")

Használat Node.js-szel

const fetch = require('node-fetch');

async function read() {
  const raw = await fetch('http://okosvillanyora.local:8989/telegram').then(r => r.text());
  const lines = raw.split('\n');

  const line = lines.find(l => l.startsWith('1-0:1.7.0'));
  if (line) {
    const match = line.match(/\(([\d.]+)\*kW\)/);
    if (match) console.log('Import:', parseFloat(match[1]), 'kW');
  }
}
read();

Használat Bash-sel

# Pillanatnyi import egyetlen sorból
curl -s http://okosvillanyora.local:8989/telegram \
  | grep '1-0:1.7.0' \
  | grep -oE '[0-9]+\.[0-9]+'

Saját feldolgozó

Ha saját parsert írsz, érdemes tudni, hogy:

  • A sorok \n végűek, a telegram többsoros
  • Az első sor / karakterrel kezdődik, ez az azonosító
  • Az utolsó sor ! karakterrel kezdődik, utána jön a CRC16
  • Az értékek zárójelben vannak
  • Egy sorban több zárójel is lehet (pl. gáz: (timestamp)(érték*m3))
  • Az időbélyeg formátuma: YYMMDDhhmmss + S (nyári) vagy W (téli)