EnMo API v1

Príručka pre vývojára alebo programovacieho agenta. Strojovo čitateľný OpenAPI 3.1 opis je súčasťou dokumentácie.

Čo API poskytuje

Jeden denný prehľad zariadení priradených k oprávneným bytom a posledný platný odpočet každého zariadenia. Voda vrátane iPERL, PRVN a merače tepla. Každý záznam obsahuje evidovaný variabilný symbol (VS), bezpečne rozpoznané výrobné číslo merača a jeho posledných osem číslic. Interné ID bytu, mená, e-maily, adresy, stav batérie ani surové správy API neposiela. Alarmy a ďalšie hlásenia nie sú súčasťou v1.

Pri starších bytoch bez evidovaného VS má pole vs hodnotu null. Nenahrádzajte ho interným ID ani si nevymýšľajte VS; požiadajte EnMo o doplnenie. VS aj výrobné číslo sú textové reťazce: úvodné nuly sa nesmú stratiť. Ak názov zariadenia nie je spoľahlivo rozpoznaný ako výrobné číslo, obe polia výrobného čísla sú null; neodvodzujte ho z DevEUI.

Oprávnenia a vydanie kľúča

Oprávnený používateľ nájde po prihlásení správu kľúčov v časti Dokumenty → Vaše API kľúče. Správca si môže vytvoriť kľúč pre svoje pridelené byty. Prístup ku konkrétnemu bytu vyžaduje schválenie; po jeho sprístupnení si vlastník môže vytvoriť vlastný kľúč. Ak možnosť vytvoriť kľúč nevidíte, kontaktujte EnMo.

Tajný kľúč sa zobrazí len raz. Má platnosť najviac 365 dní, možno ho kedykoľvek zrušiť a po zmene priradenia bytu alebo účtu stratí prístup. Jeden používateľ môže mať najviac päť aktívnych kľúčov.

Požiadavka

GET https://app.enmo.sk/api/v1/devices
Authorization: Bearer enmo_v1_<id>_<secret>
Accept: application/json

Volajte iba cez HTTPS. Kľúč nikdy nevkladajte do URL, klientského JavaScriptu, repozitára, logu ani požiadavky na podporu. Uchovajte ho v tajnom úložisku integrácie. Denný limit je jedno úspešné volanie na kľúč a deň podľa UTC. Po úspechu si odpoveď uložte vo vlastnej aplikácii a odtiaľ ju čítajte aj opakovane. Pri chybe 429 použite hlavičku Retry-After; opakovaný pokus v ten deň nepomôže.

Odpoveď

{
  "schemaVersion": "1.1",
  "generatedAt": "2026-11-05T06:00:00.000Z",
  "timezone": "UTC",
  "scope": { "type": "flat" },
  "count": 2,
  "devices": [
    { "category": "water", "devEui": "0011223344556677", "vs": "009009001",
      "serialNumber": "8ZRI0114772344", "serialNumberLast8": "14772344",
      "type": "SV", "latestReading": { "value": "125.338", "measuredAt": "2026-11-04T05:59:00.000Z", "unit": "m3", "source": "legacy" } },
    { "category": "prvn", "devEui": "8899aabbccddeeff", "vs": "009009001",
      "serialNumber": null, "serialNumberLast8": null,
      "latestReading": null }
  ]
}

Príklad používa vymyslené identifikátory a hodnoty. value je stav počítadla, nie denná spotreba. Pri výpočte rozdielu používajte dva skutočné odpočty toho istého zariadenia a kontrolujte ich čas a reset/výmenu. null znamená, že platný odpočet nie je dostupný; nie je to nula. Čas measuredAt môže byť starší než generatedAt. Jednotka device_unit pri PRVN nie je kWh.

Chyby a správanie klienta

HTTPVýznamPostup
200Úplný prehľadUložiť na deň do lokálnej cache.
401Neplatný, expirovaný alebo zrušený kľúčVytvoriť nový v portáli; starý nepoužívať.
403Zmenené oprávnenie, účet alebo vlastník bytuOveriť aktuálne priradenie v portáli.
429Denné volanie už prebehloČítať vlastnú cache, ďalšie volanie až po Retry-After.
503Dočasná chyba alebo priveľký výsledokOpakovať s odstupom; denný limit sa nespotrebuje.

Home Assistant a iní agenti

Pre Home Assistant je pripravená vlastná integrácia EnMo s návodom a ZIP balíkom. Po zadaní samostatného API kľúča vytvára senzory meračov, uchováva posledný platný prehľad a dodrží denné volanie aj po reštarte. Kľúč sa ukladá v konfigurácii Home Assistanta; chráňte prístup k nej a k zálohám.

Iný programovací agent nech použije OpenAPI opis, obmedzí čítanie na raz denne a uloží posledný platný prehľad lokálne. Pri štarte, opätovnom načítaní konfigurácie a prekročení limitu nesmie mazať posledný platný stav. Každá integrácia má mať vlastný kľúč, aby sa dala samostatne odvolať.

Minimalistický príklad pre serverový Python (štandardná knižnica):

import json, os, urllib.request
key = os.environ["ENMO_API_KEY"]
request = urllib.request.Request(
    "https://app.enmo.sk/api/v1/devices",
    headers={"Authorization": "Bearer " + key, "Accept": "application/json"})
with urllib.request.urlopen(request, timeout=30) as response:
    data = json.load(response)
assert data["schemaVersion"] == "1.1"
print(data["count"])

Pri produkčnej integrácii pridajte chránené úložisko kľúča, lokálnu cache, ošetrenie chýb a kontrolu formátu podľa OpenAPI. S odpoveďou zaobchádzajte ako s osobným údajom tam, kde sa dá priradiť ku konkrétnemu bytu. Odovzdajte kľúč len zmluvne poverenému spracovateľovi.