Skip to content

ZiggyMeter REST API

Publiczne API ZiggyMeter.

Uwierzytelnianie

API ZiggyMeter używa uwierzytelniania HTTP Bearer. Pobierz krótkożyciowy token dostępu za pomocą punktu końcowego login, a następnie przesyłaj go w nagłówku Authorization w kolejnych żądaniach.

Uwagi

  • Tokeny wygasają po czasie określonym w expires_in_secs. Po tym czasie należy zalogować się ponownie.
  • Brakujący lub nieprawidłowy token skutkuje błędem 401 Unauthorized.
  • Zawsze używaj dokładnej nazwy nagłówka Authorization z wartością Bearer <token>.

Wyjątki

  • POST /api/v1/system/login nie wymaga tokena.
  • POST /api/v1/system/password nie wymaga tokena (weryfikuje old_password).

System API (/api/v1/system)

POST /api/v1/system/login

Logowanie. Zwraca token autoryzacyjny.

json
{
    "username": "username",
    "password": "password"
}
PoleTypOpis
usernamestringNazwa użytkownika
passwordstringHasło

Odpowiedź

json
{
    "token": "vKEsedeLOBqLoSYYiWVrOF9To8T2RNK0ZV91aUwW",
    "expires_in_secs": 3600
}
PoleTypOpis
tokenstringToken autoryzacyjny
expires_in_secsintegerPozostały czas ważności w sekundach

POST /api/v1/system/logout

Wylogowanie

Odpowiedzi

  • 200 OK z pustą treścią

GET /api/v1/system/version

Pobierz wersję oprogramowania.

Odpowiedź

json
{
    "firmware": {
        "version": "1.0.320",
        "date": "Jan  3 2026",
        "time": "11:50:00"
    },
    "frontend": {
        "version": "1.0.320",
        "date": "Jan  3 2026",
        "time": "11:36:31"
    },
    "build_number": 320,
    "upgrade_url": "https://fw.ziggymeter.com/"
}
PoleTypOpis
firmwareobjectSzczegóły wersji oprogramowania (firmware)
firmware.versionstringWersja oprogramowania
firmware.datestringData kompilacji oprogramowania
firmware.timestringGodzina kompilacji oprogramowania
frontendobjectSzczegóły wersji interfejsu (frontend)
frontend.versionstringWersja interfejsu
frontend.datestringData kompilacji interfejsu
frontend.timestringGodzina kompilacji interfejsu
build_numberintegerNumer kompilacji
upgrade_urlstringURL do aktualizacji oprogramowania

GET /api/v1/system/status

Pobierz status urządzenia.

Odpowiedzi

json
{
    "battery_voltage": 0,
    "usb_voltage": 5.146,
    "battery_powered": false,
    "battery_status": 0,
    "device_temperature": 26.6,
    "zigbee_enabled": false,
    "wifi_enabled": true,
    "home_assistant_enabled": false
}
PoleTypOpis
battery_voltagenumberNapięcie baterii
usb_voltagenumberNapięcie USB
battery_poweredbooleanCzy urządzenie jest zasilane z baterii
battery_statusintegerPoziom naładowania baterii w procentach
device_temperaturenumberTemperatura urządzenia (°C)
zigbee_enabledbooleanIntegracja Zigbee włączona
wifi_enabledbooleanWi-Fi włączone
home_assistant_enabledbooleanIntegracja Home Assistant włączona

POST /api/v1/system/reboot

Restart urządzenia.

Odpowiedzi

  • 200 OK z pustą treścią. Urządzenie zrestartuje się natychmiast, co spowoduje zerwanie obecnych połączeń.

POST /api/v1/system/factory_reset

Przywracanie ustawień fabrycznych. Czyści całą konfigurację, w tym Wi-Fi i hasło administratora, a następnie restartuje urządzenie.

Odpowiedzi

  • 200 OK z pustą treścią. Urządzenie zrestartuje się i powróci do stanu początkowej konfiguracji.

POST /api/v1/system/password

Zmiana hasła administratora.

Ten punkt końcowy nie wymaga tokena Bearer. Weryfikuje old_password.

Treść żądania

json
{
    "old_password": "old",
    "new_password": "new"
}
PoleTypOpis
old_passwordstringAktualne hasło administratora
new_passwordstringNowe hasło administratora

Odpowiedzi

  • 200 OK z pustą treścią
  • 400 Bad Request jeśli brakuje pól JSON
  • 403 Forbidden jeśli old_password jest nieprawidłowe

POST /api/v1/system/ota

Wysyła obraz aktualizacji oprogramowania. Po pomyślnym przesłaniu urządzenie zrestartuje się i zaktualizuje. Urządzenie zostaje zaktualizowane tylko wtedy, gdy przesłany zostanie cały obraz. Nieudana transmisja jest ignorowana i nie powoduje uszkodzenia urządzenia.

TIP

Ogranicz prędkość transmisji w przypadku problemów z połączeniem. Zobacz API.

Treść żądania

Dane binarne obrazu oprogramowania (raw binary, nie JSON).

Odpowiedzi

  • 200 OK z pustą treścią po udanej transmisji i rozpoczęciu aktualizacji.
  • 401 Unauthorized jeśli brakuje tokena lub jest on nieprawidłowy.
  • 500 Internal Server Error jeśli aktualizacja się nie powiedzie.

Network API (/api/v1/network)

GET /api/v1/network/status

Pobierz status sieci.

Odpowiedzi

json
{
    "ip": "192.168.20.242",
    "netmask": "255.255.255.0",
    "gateway": "192.168.20.1",
    "hostname": "ZiggyMeter-1234",
    "dhcp": true,
    "ssid": "wifinetname",
    "rssi": -89,
    "channel": 4,
    "authmode": 3,
    "ap_mode": false
}
PoleTypOpis
ipstringAdres IP
netmaskstringMaska podsieci
gatewaystringAdres IP bramy
hostnamestringNazwa hosta urządzenia
dhcpbooleanDHCP włączone
ssidstringSSID sieci Wi-Fi
rssiintegerSiła sygnału
channelintegerKanał Wi-Fi
authmodeintegerTryb uwierzytelniania
ap_modebooleanTryb Punktu Dostępowego

GET /api/v1/network/scan

Skanowanie sieci Wi-Fi.

Odpowiedź

json
{
    "hostname": "ZiggyMeter-1234",
    "networks": [
        {
            "ssid": "Star-XYZ123",
            "bssid": "A1B2C3D4E5F6",
            "rssi": -87,
            "channel": 4,
            "authmode": 7
        },
        {
            "ssid": "HomeNet-5G",
            "bssid": "F0E1D2C3B4A5",
            "rssi": -88,
            "channel": 4,
            "authmode": 3
        },
        {
            "ssid": "GuestWiFi",
            "bssid": "9A8B7C6D5E4F",
            "rssi": -93,
            "channel": 6,
            "authmode": 3
        },
        {
            "ssid": "OfficeSecure",
            "bssid": "1F2E3D4C5B6A",
            "rssi": -94,
            "channel": 13,
            "authmode": 3
        }
    ]
}
PoleTypOpis
hostnamestringNazwa hosta urządzenia
networksarrayLista dostępnych sieci Wi-Fi
networks[].ssidstringSSID sieci
networks[].bssidstringBSSID sieci (adres MAC)
networks[].rssiintegerSiła sygnału (RSSI)
networks[].channelintegerKanał Wi-Fi
networks[].authmodeintegerTryb uwierzytelniania

POST /api/v1/network/wifi

Ustawienia konfiguracji Wi-Fi.

Treść żądania

PoleTypOpis
ssidstringSSID sieci Wi-Fi (wymagane, 1-31 znaków)
passwordstringHasło Wi-Fi (wymagane, do 63 znaków)
dhcpbooleanWłącz DHCP (wymagane)
hostnamestringNazwa hosta (opcjonalne, do 31 znaków)
ipstringStatyczny adres IP (wymagane jeśli DHCP wyłączone)
netmaskstringMaska podsieci (wymagane jeśli DHCP wyłączone)
gatewaystringAdres IP bramy (wymagane jeśli DHCP wyłączone)
applybooleanZastosuj ustawienia natychmiast (opcjonalne, domyślnie false)

Odpowiedzi

json
{
    "ssid": "iot-net",
    "dhcp": true,
    "hostname": "ziggymeter1",
    "ip": "192.168.8.177",
    "netmask": "255.255.255.0",
    "gateway": "192.168.8.1"
}
PoleTypOpis
ssidstringSkonfigurowany SSID
dhcpbooleanStatus DHCP
hostnamestringSkonfigurowana nazwa hosta
ipstringAktualny/Statyczny adres IP
netmaskstringAktualna/Statyczna maska sieci
gatewaystringAktualna/Statyczna brama IP

WARNING

Jeśli apply jest ustawione na true, urządzenie natychmiast spróbuje połączyć się z nową siecią. Spowoduje to zerwanie obecnej sesji.

POST /api/v1/network/ap

Ustawienia Punktu Dostępowego (AP).

Treść żądania

PoleTypOpis
ap_ssidstringSSID Punktu Dostępowego (opcjonalne, 1-31 znaków)
ap_passwordstringHasło Punktu Dostępowego (opcjonalne, 8-63 znaki)
ap_enabledbooleanWłącz tryb AP (opcjonalne)
applybooleanZastosuj ustawienia natychmiast (opcjonalne, domyślnie false)

Odpowiedzi

json
{
    "ap_ssid": "ZiggyMeter-1234",
    "ap_enabled": true
}
PoleTypOpis
ap_ssidstringSkonfigurowany SSID AP
ap_enabledbooleanStatus trybu AP

Zigbee API (/api/v1/zigbee)

GET /api/v1/zigbee/config

Pobierz konfigurację Zigbee.

Odpowiedź

json
{
    "enabled": false,
    "channel": 11,
    "short_address": 0,
    "extended_pan_id": "00124b0000000000",
    "pan_id": 0
}
PoleTypOpis
enabledbooleanZigbee włączone/wyłączone w zapisanej konfiguracji
channelintegerAktualny kanał Zigbee
short_addressintegerAktualny adres krótki Zigbee
extended_pan_idstringAktualny Extended PAN ID Zigbee (16 znaków hex)
pan_idintegerAktualny PAN ID Zigbee

POST /api/v1/zigbee/config

Ustaw konfigurację Zigbee.

Treść żądania

json
{
    "enabled": true
}
PoleTypOpis
enabledbooleanWłącz lub wyłącz obsługę Zigbee

Odpowiedzi

  • 200 OK z pustą treścią

POST /api/v1/zigbee/reset

Wywołuje reset Zigbee. Po resecie wewnętrzny moduł Zigbee jest czyszczony i gotowy do dołączenia do nowej sieci.

Odpowiedzi

  • 200 OK z pustą treścią. Obecne sparowanie Zigbee zostanie utracone.

POST /api/v1/zigbee/map

Ustawia mapowanie punktów danych Zigbee do kodów OBIS licznika.

Treść żądania

json
{
    "mapping": [
        {
            "obis": "1-0:15.8.0",
            "mode": 0,
            "mapping_id": "07020000"
        },
        {
            "obis": "15.8.2",
            "mode": 1,
            "mapping_id": "07020001"
        }
    ]
}
PoleTypOpis
mappingarrayLista wpisów mapowania OBIS-do-Zigbee
mapping[].obisstringKod OBIS do zamapowania (np. 1.8.0 lub 1-0:15.8.0)
mapping[].modeintegerTryb dopasowania: 0 (pełny kod OBIS), 1 (krótki kod OBIS)
mapping[].mapping_idstringID mapowania Zigbee (8 znaków hex, np. 07020000; cluster + ID)

Odpowiedzi

  • 200 OK z pustą treścią
  • 401 Unauthorized jeśli brakuje tokena lub jest on nieprawidłowy
  • 400 Bad Request jeśli struktura JSON jest nieprawidłowa

Home Assistant API (/api/v1/hass)

GET /api/v1/hass

Pobierz konfigurację Home Assistant.

Odpowiedź

json
{
    "enabled": false,
    "url": "https://home-assistant.local:8123",
    "cert_max_size": 10239
}
PoleTypOpis
enabledbooleanCzy integracja Home Assistant jest włączona
urlstringURL Home Assistant (obecny tylko gdy włączone)
cert_max_sizeintegerMaksymalny rozmiar certyfikatu Home Assistant w bajtach

POST /api/v1/hass

Ustaw konfigurację Home Assistant.

Treść żądania

PoleTypOpis
enabledbooleanWłącz lub wyłącz integrację Home Assistant
urlstringURL serwera Home Assistant (wymagane jeśli włączone)
tokenstringDługoterminowy token dostępu HA (wymagane jeśli włączone)
langstringJęzyk opisów OBIS (opcjonalne, domyślnie 'en')
certstringCertyfikat PEM dla HTTPS (opcjonalne)

Odpowiedzi

json
{
    "enabled": true,
    "url": "https://home-assistant.local:8123",
    "cert_max_size": 10239
}
PoleTypOpis
enabledbooleanCzy integracja jest włączona
urlstringDocelowy URL Home Assistant
cert_max_sizeintegerMaksymalny obsługiwany rozmiar certyfikatu

GET /api/v1/hass/send

Wyślij testową publikację do Home Assistant.

Odpowiedź

json
{
    "retcode": 0,
    "http_status_code": 200
}
PoleTypOpis
retcodeintegerkod zwrotny (0 oznacza sukces)
http_status_codeintegerkod statusu HTTP zwrócony przez Home Assistant

Błędy

  • 400 Bad Request jeśli Home Assistant nie jest włączony

Meter API (IEC 62056-21) (/api/v1/iec62056)

GET /api/v1/iec62056/read

Wymusza odczyt licznika i zwraca dane.

Odpowiedzi

200

Zwraca strukturę JSON ze szczegółami licznika i tablicą odczytów OBIS.

json
{
    "protocol": "IEC62056-21",
    "meter_id": "/XXX6\\2YYYYYY",
    "mode": "C",
    "baudrate": 9600,
    "timestamp": 293209783,
    "status": 1,
    "readings": [
        {
            "obis_long": "0-0:C.1.0",
            "obis": "C.1.0",
            "value1": "12345678",
            "value2": "",
            "value1_number": null,
            "value1_unit": "",
            "medium": 0,
            "channel": 0,
            "billing_period": null,
            "mapping_id": "00000000",
            "en": "Meter serial number"
        },
        {
            "obis_long": "1-0:15.8.0",
            "obis": "15.8.0",
            "value1": "00000001000.657*kWh",
            "value2": "",
            "value1_number": 1000.657,
            "value1_unit": "kWh",
            "medium": 1,
            "channel": 0,
            "billing_period": null,
            "mapping_id": "07020000",
            "en": "Absolute active energy total"
        }
    ]
}
PoleTypOpis
protocolstringUżyty protokół (IEC62056-21)
meter_idstringIdentyfikator licznika z telegramu powitalnego
modestringTryb komunikacji (np. 'C' lub 'D')
baudrateintegerPrędkość transmisji (baudrate)
timestampintegerznacznik czasu odczytu
statusintegerKod statusu odczytu (0 = sukces, inne = błędy)
readingsarrayTablica odczytów OBIS
readings[].obis_longstringPełny kod OBIS (np. 1-0:1.8.0)
readings[].obisstringKrótki kod OBIS (np. 1.8.0)
readings[].value1stringWartość podstawowa otrzymana z licznika
readings[].value2stringWartość dodatkowa (np. znacznik czasu maksimum)
readings[].value1_numbernumber|nullPrzetworzona wartość numeryczna value1
readings[].value1_unitstringJednostka dla value1 (np. 'kWh', 'kW', 'V')
readings[].mediuminteger|nullIdentyfikator medium
readings[].channelinteger|nullIdentyfikator kanału
readings[].billing_periodinteger|nullIdentyfikator okresu rozliczeniowego
readings[].mapping_idstringID mapowania Zigbee (8 znaków hex), 00000000 jeśli nie zamapowano
readings[].enstring|nullAngielski opis kodu OBIS
500
  • Meter timeout: Odczyt nie zakończył się w oczekiwanym czasie (~45s).
  • Meter error: Licznik zwrócił odpowiedź z błędem.

GET /api/v1/iec62056/last

Pobiera ostatnie dostępne odczyty (nie wyzwala nowego odczytu).

Odpowiedzi

200

Taki sam schemat odpowiedzi jak GET /api/v1/iec62056/read.

GET /api/v1/iec62056/config

Pobierz konfigurację licznika.

Odpowiedzi

json
{
    "mode_d_enabled": false,
    "mode_d_baudrate": 2400,
    "baudrate_max": 9600,
    "schedule_min": 1,
    "battery": false
}
PoleTypOpis
mode_d_enabledbooleanCzy tryb IEC 62056 D jest włączony
mode_d_baudrateintegerPrędkość transmisji dla trybu D
baudrate_maxintegerMaksymalna obsługiwana prędkość
schedule_minintegerMinimalny interwał harmonogramu odczytów (minuty)
batterybooleanCzy licznik jest zasilany bateryjnie

POST /api/v1/iec62056/config

Ustaw konfigurację licznika.

Treść żądania

PoleTypOpis
mode_d_enabledbooleanWłącz lub wyłącz tryb IEC 62056 D
mode_d_baudrateintegerPrędkość transmisji dla trybu D
baudrate_maxintegerMaksymalna obsługiwana prędkość
batterybooleanCzy licznik jest zasilany bateryjnie
schedule_minintegerInterwał harmonogramu odczytów w minutach (minimum -1)

Odpowiedzi

json
{
    "mode_d_enabled": false,
    "mode_d_baudrate": 2400,
    "baudrate_max": 9600,
    "schedule_min": 5,
    "battery": false
}
PoleTypOpis
mode_d_enabledbooleanStatus trybu IEC 62056 D
mode_d_baudrateintegerSkonfigurowany baudrate trybu D
baudrate_maxintegerMaksymalny baudrate komunikacji
schedule_minintegerInterwał harmonogramu odczytów (minuty)
batterybooleanFlaga zasilania bateryjnego