PWX-12-4422  ·  Cloud Portal API

API dokumentácia

Postavte si vlastný monitorovací systém pomocou PowerSentrix JSON REST API. Celá komunikácia prebieha cez štandardné HTTPS — žiadne proprietárne SDK.

HTTPS · TLS 1.2+ JSON REST API Verzia: v1 v2
Základná URL (v1): https://view.powersentrix.com/api/v1 — všetky cesty endpointov sú relatívne k tejto adrese.

0 Architektúra komunikácie

UPS zariadenie samo iniciuje spojenie so serverom — server na UPS nečaká, UPS sa samo hlási. Server môže zariadenie priamo ovládať cez HTTP volanie na IP adresu UPS, ktorú si server uložil pri registrácii.

UPS Zariadenie PWX-12-4422 WEB MANAGEMENT — NASTAVENIA Server URL https://view.powersentrix.com Company Identifier abc123 UPS Description Server Room UPS API Key •••••••••••••••• Odoslať počiatočnú požiadavku MCU: ESP32 (comm.) + STM32 (main) Sieť: Ethernet LAN8720 HTTPS · JSON · TLS 1.2+ Vlastný HTTP server: /api_actions fn=1: ident · fn=2: dáta · fn=3: port Auth: API Key (z web management) IP uložená serverom pri registrácii Monitorovací Server view.powersentrix.com Server backend · JWT auth HTTP klient (priame volania) Ukladá: IP UPS, API Key, históriu Relačná databáza REST API · /api/v1/ POST /api/setNewUps pri štarte / kliknutím na tlačidlo POST /api/setUpsData periodicky každých 5 minút POST /api/setUpsLog pri udalostiach a alarmoch GET /api_actions?apiKey=X&fn=N priamy HTTP na uloženú IP UPS (rovnaká sieť) UPS → Server (firmware odosiela dáta) Server → UPS (priame HTTP volanie)
Kľúčový princíp: UPS aktívne posiela dáta na server. Keď chce server ovládať UPS (napr. vypnúť port), volá priamo HTTP na adresu, z ktorej sa UPS zaregistrovala — nie cez žiadny cloud tunel. Ak je UPS za NAT, router v sieti zákazníka požiadavku preloží a doručí do vnútra siete.

Viac UPS zariadení — stačí jedna verejná IP adresa. Pre každú UPS nepotrebujete samostatnú verejnú IP. Stačí nakonfigurovať NAT presmerovanie portov na routri — každá UPS dostane iný port tej istej verejnej IP adresy:
// Nastavenie na routri (príklad)
XXX.XXX.XXX.XXX:500010.10.18.10:443   // UPS 1  (napr. serverovňa A)
XXX.XXX.XXX.XXX:500110.10.19.10:443   // UPS 2  (napr. serverovňa B)
XXX.XXX.XXX.XXX:500210.10.20.10:443   // UPS 3  (napr. pobočka)
// ...
Do konfigurácie každej UPS (Web Management → Server URL) zadáte jej pridelenú adresu: https://XXX.XXX.XXX.XXX:5000. Server si po registrácii uloží práve túto adresu a na nej bude zariadenie kontaktovať. NMS server tak jednou verejnou IP adresou obslúži ľubovoľný počet UPS zariadení.

1 Autentifikácia

Manažovacie API endpointy (sekcie 3 a 4) vyžadujú JWT bearer token. Token získate volaním /user/authenticate. Device API (sekcia 2) token nevyžaduje.

POST /user/authenticate Bez tokenu

Prihlásenie e-mailom a heslom. Vráti JWT token.

Telo požiadavky
{
  "email": "your@email.com",
  "password": "yourPassword"
}
Response 200 OK
{
  "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ1c2VyQGV4YW1...",
  "user": {
    "id": 42,
    "login": "your@email.com",
    "name": "Novak Jan",
    "role": "ROLE_USER",
    "avatar": "base64encodedImage..."
  }
}
Použitie tokenu — pri každej ďalšej požiadavke pridajte hlavičku:
Authorization: Bearer <token>
Response 400 — Chyba
{ "message": "invalidEmailOrPassword" }
// alebo / or: "disabledLoginFromWeb"

2 Device API (UPS firmware → server)

Tieto endpointy volá priamo firmware UPS zariadenia. Potrebujete ich len ak prevádzkujete vlastný monitorovací server namiesto cloudového portálu PowerSentrix.

Autentifikácia: Tieto endpointy nevyžadujú JWT. Identifikácia prebieha cez companyId — uchovajte ho v tajnosti.
POST /api/setNewUps companyId + cmm

Zaregistruje novú UPS na serveri. Firmware volá tento endpoint pri prvom štarte alebo po továrenskom resete. Server automaticky zachytí IP adresu zariadenia.

Query parametre
ParameterTypPopis
companyId *stringID spoločnosti (z portálu)
cmm *stringJedinečný identifikátor UPS (pole upsId v config)
upsDescriptionstringVoliteľný popis zariadenia
Telo požiadavky — Ident
{
  "sn":           "PSX-2024-001234",  // sériové číslo / serial number
  "type":         "PWX-12-4422",     // model (musí existovať na serveri)
  "comFirmware":  "v3.2.1",          // firmware ESP32 (komunikačný modul)
  "mainFirmware": "v2.1.0",          // firmware STM32 (hlavný kontrolér)
  "comUptime":    "2d 14h 33m",      // uptime ESP32
  "mainUptime":   "5d 02h 11m",      // uptime STM32
  "cpuLoad":      12,                // zaťaženie CPU v %
  "totalRamSize": 327680,           // celková heap pamäť (bytes)
  "freeRamSize":  218340,           // voľná heap pamäť (bytes)
  "info":         ""                 // voliteľný doplňujúci text
}
POST /api/setUpsData companyId + cmm

Odošle kompletný stav zariadenia na server. Firmware volá periodicky (predvolene každých 5 minút).

Query parametre
ParameterTypPopis
companyId *stringID spoločnosti
cmm *stringIdentifikátor UPS
Telo požiadavky — UpsComplexObject
{
  "config": {
    "settings": {
      "dhcp": 1, "ip": "192.168.1.100", "netmask": "255.255.255.0",
      "gateway": "192.168.1.1", "dns": "8.8.8.8",
      "ntpServer": "pool.ntp.org", "timezone": "CET-1CEST,M3.5.0,M10.5.0/3",
      "forcePowerFromBatteries": 0,
      "remoteServer": { "serverUrl": "https://view.powersentrix.com", "companyId": "abc123", "upsId": "ups-01" }
    },
    "outputs": [
      { "id": 0, "description": "Router", "status": "ON", "voltage": 4810 },
      // ... celkom 12 výstupov (id 0–11) / 12 outputs total (id 0–11)
    ],
    "extraActions": [
      { "id": "0", "event": 1, "baseStatus": 0, "action": 1 }
    ],
    "ident": { /* Ident objekt — rovnaký ako pri setNewUps */ }
  },
  "upsData": {
    "voltages": [4810, 4805, 2410, 2408, 1205, 1202, 502, 501, 0, 0, 0, 0],
    // napätia v mV×10 (napr. 4810 = 48.10 V) / voltages in mV×10 (e.g. 4810 = 48.10 V)
    "currents": [150, 320, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    // prúdy v mA (napr. 150 = 1.50 A) / currents in mA (e.g. 150 = 1.50 A)
    "outputs": [1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0],
    // 1 = ZAP/ON, 0 = VYP/OFF
    "ventilation": 0,
    "uptime": "5d 02h 11m",
    "temps": { "board": 42, "mcu": 51 },
    // teploty v °C (integer) / temperatures in °C
    "ps": [
      {
        "main": 5410, "load": 4810, "batt": 5220, "buv": 4800,
        "cell": [1305, 1308, 1302, 1305],
        "status": { "h": { "hb": [1], "lb": [0] }, "l": { "hb": [0], "lb": [1] } }
      }
      // druhý PSU má rovnakú štruktúru / second PSU has the same structure
    ]
  }
}
POST /api/setUpsLog companyId + cmm

Odošle jeden záznam udalosti (zmena stavu výstupu, alarm, výpadok napájania…).

Telo požiadavky — UpsLogRecord
{
  "ord":         1234,                        // sekvenčné číslo záznamu
  "code":        "I/E01",                     // kód udalosti
  "cmm":         "ups-01",                    // identifikátor UPS
  "description": "Output 1 turned ON",       // popis udalosti
  "params":      "",                          // voliteľné parametre
  "timestamp":   "2026-05-08 14:32:01"        // formát: yyyy-MM-dd HH:mm:ss
}

3 Monitorovacie API

Endpointy pre čítanie dát UPS z monitorovacieho servera — pre vlastné dashboardy a integrácie.

Všetky endpointy v tejto sekcii vyžadujú: Authorization: Bearer <token>
GET /ups/getUpsComplexObject JWT

Vráti kompletný stavový objekt UPS — live dáta, konfiguráciu, výstupy, teploty, napájacie zdroje. Rovnaká štruktúra ako telo setUpsData.

ParameterTypPopis
id *stringInterné DB ID UPS (z getUpsList alebo portálu)
Response
{ "responseMessage": "OK", "responseObject": { /* UpsComplexObject */ } }
GET /ups/getUpsLogs JWT

Vráti záznamy udalostí pre UPS zariadenie. Podporuje stránkovanie.

ParameterTypPopis
id *stringID UPS
pageintegerČíslo stránky (0-based, predvolene 0)
limitintegerMax. záznamov na stránku (predvolene 50)
Response
[
  {
    "id": 9901,
    "upsId": "42",
    "cmm": "ups-01",
    "code": "I/E01",
    "description": "Output 1 turned ON",
    "params": "",
    "timestamp": "2026-05-08T14:32:01"
  }, // ...
]
GET /ups/getBasicInfo JWT

Základné informácie o UPS — meno, model, firmware, uptime, teploata, lokalita.

ParameterTypPopis
id *stringUPS ID
Response
{
  "name": "Server Room UPS",   "ip": "192.168.1.100",
  "model": "PWX-12-4422",       "serialNumber": "PSX-2024-001234",
  "comFirmware": "v3.2.1",    "mainFirmware": "v2.1.0",
  "comUptime": "2d 14h 33m",  "mainUptime": "5d 02h 11m",
  "onOffLine": "online",       "temperature": 42,
  "description": "...",        "location": "Rack A",
  "company": "Acme Corp",     "cmm": "ups-01",
  "timestamp": "2026-05-08T14:30:00.000+0000"
}
GET /ups/getUpsList JWT

Zoznam UPS zariadení prístupných prihlásenému používateľovi.

ParameterTypPopis
searchTextstringFilter podľa mena alebo popisu
searchTypestringFilter podľa názvu modelu
Response
{ "responseMessage": "OK", "responseObject": [ /* pole Ups objektov */ ] }

4 Ovládanie UPS

Vzdialené ovládanie výstupných portov UPS. Server nečaká na UPS — keď dostane príkaz, zavolá priamo na HTTP server UPS zariadenia na adrese uloženej pri registrácii.

Ako funguje ovládanie UPS:

1. UPS sa zaregistruje volaním POST /api/setNewUps — server si uloží IP adresu UPS a API Key.
2. Keď vy zavoláte GET /ups/changePortState, server okamžite vykoná:
GET http://{ups.ip}/api_actions?apiKey={key}&fn=3&param1={port}
// priame HTTP volanie na IP adresu UPS
3. UPS spracuje príkaz a odpovie. Server výsledok vráti volajúcemu.
Sieťová dostupnosť: Monitorovací server kontaktuje adresu, ktorú si uložil pri registrácii UPS (tá, na ktorej UPS zavolala setNewUps). Ak je UPS za NAT, router v sieti zákazníka požiadavku preloží a doručí do vnútra siete — server sa o prenos nemusí starať, stačí že je daná adresa a port dostupná z internetu.

API Key — kde ho získať: API Key sa generuje automaticky pri vytvorení používateľského účtu na UPS (Web Management → Users). Každý používateľ má vlastný unikátny API Key. Aby bolo možné cez API aj ovládať UPS (nielen čítať dáta), musí byť v karte daného používateľa zaškrtnuté políčko Enable API Write Actions. Bez tohto práva server požiadavky na zmenu stavu portu odmietne.

UPS /api_actions — referencia fn parametra

fnAkciaĎalší parameterPoužitie serverom
1Identifikácia zariadeniatestConnection, getBasicInfo
2Kompletné dáta UPSgetUpsComplexObject
3Prepnutie stavu portu (ZAP↔VYP)param1=N (port 0–11)changePortState
4Reštart portu — VYP na 5 s, potom ZAPparam1=N (port 0–11)restartPort
5Zmena popisu výstupného portuparam1=N  param2=text (URL-kódovaný)
fn=4 (Reštart portu) — Port sa okamžite vypne a po 5 sekundách automaticky znova zapne. Funguje len ak je port aktuálne ZAP (status=ON). Reštart beží asynchrónne (FreeRTOS task) — odpoveď {info:1} znamená že bol reštart spustený, nie že bol dokončený.

fn=5 (Zmena popisu) — URL-dekóduje hodnotu param2 (%20→medzera, +→medzera). Max. 128 znakov. Zmena sa ihneď uloží do SPIFFS konfigurácie.
GET /ups/changePortState JWT

Prepne stav výstupného portu (ZAP→VYP alebo VYP→ZAP). Server zavolá UPS cez GET /api_actions?fn=3&param1={port} na uloženom IP.

Endpoint prepína aktuálny stav — nie nastavuje konkrétnu hodnotu. Pred volaním overte aktuálny stav portu cez getUpsComplexObject.
ParameterTypPopis
id *stringInterné DB ID UPS (z getUpsList)
port *integerIndex výstupného portu (0–11)
Príklad volania
GET /ups/changePortState?id=42&port=0
Authorization: Bearer eyJhbGci...

// server potom zavolá:
GET http://192.168.1.100/api_actions?apiKey=mykey&fn=3&param1=0

5 Dátové modely

Output

{
  "id": 0,                   // 0–11
  "description": "Router",   // používateľský názov / user label
  "status": "ON",            // "ON" alebo "OFF"
  "voltage": 4810           // mV×10  →  48.10 V
}

ExtraAction

{
  "id": "0",          // slot "0"–"3"
  "event": 1,        // 0=žiadna, 1=IN1↑, 2=IN1↓, 3=IN2↑, 4=IN2↓
  "baseStatus": 0,  // index výstupu (0–11)
  "action": 1        // 0=vypnúť výstup, 1=zapnúť výstup
}

PowerSupply

{
  "main": 5410,                           // vstupné napätie zo siete (mV×10)
  "load": 4810,                           // napätie 48V zbernice (mV×10)
  "batt": 5220,                           // napätie batériového bloku (mV×10)
  "buv": 4800,                            // podpäťová ochrana batérie (mV×10)
  "cell": [1305, 1308, 1302, 1305],      // napätia jednotlivých článkov (mV×10)
  "status": { "h": { "hb": [1], "lb": [0] }, "l": { "hb": [0], "lb": [1] } }
}
Jednotky napätia a prúdu:
Napätia: integer × 10 = mV (napr. 4810 = 48.10 V)  ·  Prúdy: integer = mA (napr. 150 = 1.50 A)  ·  Teploty: integer = °C

6 Chybové kódy

HTTPKedy nastane
200 OKPožiadavka úspešná. Skontrolujte pole responseMessage.
400 Bad RequestNeplatné prihlasovacie údaje alebo nesprávny formát.
401 UnauthorizedChýbajúci / neplatný JWT token, alebo companyId neexistuje.
404 Not FoundPožadovaný zdroj (UPS, spoločnosť) nebol nájdený.

Kódy správ v poli message

KódPopis
invalidEmailOrPasswordNesprávny e-mail alebo heslo.
disabledLoginFromWebWebové prihlásenie je zakázané pre tento účet.
Invalid authorization tokenJWT token chýba, vypršal alebo je neplatný.