Zapytania i odpowiedzi MQTT#

GbbOptimizer obsługuje zapytania request/response przez MQTT. Zewnętrzny program wysyła zapytanie, a GbbOptimizer odpowiada z danymi.

Połączenie#

Zewnętrzny program powinien połączyć się z MQTT z parametrami:

ParametrWartość
AdresPatrz serwery MQTT
Port8883
Użytkownik{PlantId}
Hasło{PlantToken}
UseTLStrue
ClientIDmusi kończyć się na _{PlantId}

Tematy#

KierunekTemat
Zapytanie →{PlantId}/ha_gbb/dataserver/serverrequest
← Odpowiedź{PlantId}/ha_gbb/dataserver/serverresponse

Dla kompatybilności wstecznej program obsługuje też {PlantId}/dataserver/serverrequest i {PlantId}/dataserver/serverresponse (nie rekomendowane).

Odpowiedź z błędem#

Każde zapytanie może zwrócić błąd:

1
2
3
4
5
{
  "Operation": "xxx",
  "Status": "ERROR",
  "ErrDesc": "opis błędu"
}
PoleTypOpis
OperationstringOperacja z zapytania
Statusstring"ERROR"
ErrDescstringOpis błędu dla użytkownika

Dostępne operacje#

REQ RESBatteryForecast_GetChartData Pobierz dane prognozy baterii
REQ {PlantId}/ha_gbb/dataserver/serverrequest
RES {PlantId}/ha_gbb/dataserver/serverresponse

Zapytanie:

1
{"Operation": "BatteryForecast_GetChartData"}

Odpowiedź — tablica obiektów w polu BatteryForecast_GetChartData:

PoleTypOpis
DaydateDzień
Hourint (0-23)Godzina
StartBattery_PercdecimalSOC na początku godziny
StartBattery_kWhdecimalkWh na początku (DC)
StartBattery_kWhACdecimalkWh na początku (AC)
PVForecast_Percdecimal?Prognoza PV (%)
PVForecast_kWhdecimal?Prognoza PV (kWh DC)
PVForecast_kWhACdecimal?Prognoza PV (kWh AC)
Loads_Percdecimal?Zużycie (%)
Loads_kWhdecimal?Zużycie z ExtraLoad (kWh DC)
Loads_kWhACdecimal?Zużycie (kWh AC)
GridCharge_Percdecimal?Ładowanie z sieci (%)
GridCharge_kWhdecimal?Ładowanie z sieci (kWh DC)
GridCharge_kWhACdecimal?Ładowanie z sieci (kWh AC)
Discharge_Percdecimal?Rozładowanie (%)
Discharge_kWhdecimal?Rozładowanie (kWh DC)
Discharge_kWhACdecimal?Rozładowanie (kWh AC)
EndBattery_PercdecimalSOC na koniec godziny
EndBattery_kWhdecimalkWh na koniec (DC)
EndBattery_kWhACdecimalkWh na koniec (AC)
EndBattery_Pricedecimal?Wartość energii w baterii
Profit_Amountdecimal?Kwota zysku
FromGrid_kWhdecimal?Import z sieci
Purchase_Pricedecimal?Cena zakupu
Purchase_Amountdecimal?Kwota zakupu
ToGrid_kWhdecimal?Eksport do sieci
Sale_Pricedecimal?Cena sprzedaży
Sale_Amountdecimal?Kwota sprzedaży
Consumption_kWhdecimal?Zużycie (= Loads_kWh)
Consumption_Pricedecimal?Cena zużycia
Consumption_Amountdecimal?Kwota zużycia
ExtraLoadsKWdecimal?Extra Zużycie (łącznie)
ExtraLoadsKW_ElectricVehicledecimal?EV
ExtraLoadsKW_HeatingPumpdecimal?Pompa ciepła
ExtraLoadsKW_Generic1Generic6decimal?Inne 1–6
REQ RESHistory_GetHours Pobierz historię godzinową z modułu Zyski
REQ {PlantId}/ha_gbb/dataserver/serverrequest
RES {PlantId}/ha_gbb/dataserver/serverresponse

Zapytanie — forma 1 (zakres dat):

1
{"Operation": "History_GetHours", "FromDate": "2024-01-01", "ToDate": "2024-01-01"}
PoleTypOpis
Operationstring"History_GetHours"
FromDatedate?Domyślnie: dzisiaj
ToDatedate?Domyślnie: dzisiaj

Zapytanie — forma 2 (okres):

PoleTypOpis
Operationstring"History_GetHours"
Periodstring"curr_day", "prev_day" lub "today_yesterday"
AddPeriodToPropertyint?Jeśli 1 → klucz odpowiedzi z sufiksem, np. "History_Hours_curr_day"

Odpowiedź — tablica w History_Hours:

PoleTypOpis
HourdecimalGodzina
DaydateDzień
FromGrid_kWhdecimal?Import z sieci
FromGrid2_kWhdecimal?Import zbilansowany
PurchaseAmountdecimal?Kwota zakupu
ToGrid_kWhdecimal?Eksport do sieci
ToGrid2_kWhdecimal?Eksport zbilansowany
SaleAmountdecimal?Kwota sprzedaży
Consumption_kWhdecimal?Zużycie
ConsumptionAmountdecimal?Kwota zużycia
ProfitAmountdecimal?Kwota zysku
Solar_kWhdecimal?Produkcja PV
ToBattery_kWhdecimal?Do baterii
SOC_Min / SOC_Maxdecimal?Min/Max SOC
SOC_Start / SOC_Enddecimal?Początek / koniec SOC
BattChange_kWhdecimal?Zmiana baterii
LostPower_kWhdecimal?Straty
ChargeFromGrid_kWhdecimal?Ładowanie z sieci
ChargeFromPV_kWhdecimal?Ładowanie z PV
DischargeToGrid_kWhdecimal?Rozładowanie do sieci
DischargeToLoads_kWhdecimal?Rozładowanie do zużycia
Start_kWh / End_kWhdecimal?Początek / koniec kWh w baterii
ValueStartAmount / ValueEndAmountdecimal?Wartość początkowa / końcowa
ValueChangeAmountdecimal?Zmiana wartości
REQ RESHistory_GetDays Pobierz historię dzienną z modułu Zyski
REQ {PlantId}/ha_gbb/dataserver/serverrequest
RES {PlantId}/ha_gbb/dataserver/serverresponse

Zapytanie — forma 1:

1
{"Operation": "History_GetDays", "FromDate": "2024-01-01", "ToDate": "2024-01-03"}

Zapytanie — forma 2:

PoleTypOpis
Periodstring"curr_month", "prev_month", "curr_year" lub "prev_year"
AddPeriodToPropertyint?Jeśli 1 → sufiks w kluczu odpowiedzi

Odpowiedź — identyczna struktura jak History_GetHours, ale w tablicy History_Days.

REQ RESHistory_GetMonths Pobierz historię miesięczną z modułu Zyski
REQ {PlantId}/ha_gbb/dataserver/serverrequest
RES {PlantId}/ha_gbb/dataserver/serverresponse

Zapytanie — forma 1:

1
{"Operation": "History_GetMonths", "FromYear": 2024, "FromMonth": 1, "ToYear": 2024, "ToMonth": 2}
PoleTypOpis
FromYear / FromMonthint?Domyślnie: bieżący rok/miesiąc
ToYear / ToMonthint?Domyślnie: bieżący rok/miesiąc

Zapytanie — forma 2:

PoleTypOpis
Periodstring"curr_month", "prev_month", "curr_year" lub "prev_year"

Odpowiedź — identyczna struktura + pola Year i Month, w tablicy History_Months.