Procedury C# IoT#

GbbOptimizer pozwala tworzyć własne procedury w języku C#, które sterują urządzeniami IoT na podstawie prognoz, cen energii i historii zużycia.

Procedura musi działać nie dłużej niż 100 ms i nie może zakłócać pracy programu. W przeciwnym razie zostanie zawieszona.

Obiekt App#

Każda procedura IoT otrzymuje obiekt App jako parametr. Poniżej lista dostępnych właściwości.

Właściwości główne#

WłaściwośćTypOpis
App.CurrDateDateTime?Data, dla której urządzenie ma być włączone/wyłączone
App.CurrHourdecimal?Godzina (12:30 = 12.5; 12:45 = 12.75)
App.CurrForecastIndexint?Indeks w App.Forecast dla bieżącej daty i godziny
App.StringVariablesDictionary<string, string?>Zmienne tekstowe użytkownika (trwałe między wywołaniami)
App.DecimalVariablesDictionary<string, decimal?>Zmienne liczbowe użytkownika (trwałe między wywołaniami)

Prognoza (Forecast)#

WłaściwośćTypOpis
App.ForecastIForecast[]Tablica prognozy baterii. [0] = bież. godzina, [1] = nast. godzina itd.
.DateDateTimeData prognozy
.DateNoint0 = dzisiaj, 1 = jutro itd.
.HourdecimalGodzina prognozy
.HourNodecimalGodzina licząc od początku prognozy ([0].HourNo == 0 zawsze)
.StartBattery_kWhACdecimalkWh w baterii (AC) na początku godziny
.StartBattery_kWhdecimalkWh w baterii (DC) na początku godziny
.Prod_KWhACdecimal?Produkcja (PV + wiatr) w danej godzinie
.Loads_kWhACdecimal?Zużycie w danej godzinie
.GridCharge_kWhACdecimal?kWh z sieci do baterii (strona sieci)
.GridCharge_kWhdecimal?kWh z sieci do baterii (strona baterii)
.Discharge_kWhACdecimal?kWh z baterii do sieci (strona sieci)
.Discharge_kWhdecimal?kWh z baterii do sieci (strona baterii)
.EndBattery_kWhACdecimal?kWh w baterii (AC) na koniec godziny
.EndBattery_kWhdecimal?kWh w baterii (DC) na koniec godziny
.Meteo_SOCdecimal?null = brak ostrzeżeń meteo; wartość = docelowy SOC dla ostrzeżenia
.Temperature_Cdecimal?Temperatura (st. C) w danej godzinie
.ExtraLoads_kWhdecimal?Suma dodatkowych obciążeń
.FromGrid_kWhdecimal?kWh z sieci
.PurchasePricedecimal?Cena zakupu
.PurchaseAmountdecimal?Kwota zakupu
.ToGrid_kWhdecimal?kWh do sieci
.SalePricedecimal?Cena sprzedaży
.SaleAmountdecimal?Kwota sprzedaży

Ceny (Prices)#

WłaściwośćTypOpis
App.PricesDictionary<(DateTime, decimal), IPrice>Ceny za wczoraj, dzisiaj i jutro
.DayDateTimeData ceny
.HourdecimalGodzina ceny
.PurchasePricedecimal?Cena zakupu
.SalesPricedecimal?Cena sprzedaży
.Imported_PurchasePricedecimal?Cena zakupu zaimportowana ze źródła cen
.Imported_SalesPricedecimal?Cena sprzedaży zaimportowana ze źródła cen

Historia (History)#

WłaściwośćTypOpis
App.HistoryIHistory[]Dane historyczne. [0] = godzina przed bież., [1] = dwie godziny przed itd.
.DateDateTimeData
.HourdecimalGodzina
.FromGrid_kWhdecimal?kWh z sieci
.PurchasePricedecimal?Cena zakupu
.PurchaseAmountdecimal?Kwota zakupu
.ToGrid_kWhdecimal?kWh do sieci
.SalePricedecimal?Cena sprzedaży
.SaleAmountdecimal?Kwota sprzedaży
.Loads_kWhdecimal?Zużycie (kWh)
.LoadsPricedecimal?Cena energii zużycia
.LoadsAmountdecimal?Kwota energii zużycia
.PV_kWhdecimal?Produkcja PV (kWh)
.SOC_Startdecimal?SOC na początku godziny
.SOC_Enddecimal?SOC na koniec godziny
.ExtraLoads_Pricedecimal?Cena dodatkowych obciążeń
.ExtraLoads_kWhdecimal?Suma dodatkowych obciążeń (kWh)

Urządzenia IoT (IoTDevices)#

WłaściwośćTypOpis
App.IoTDevicesDictionary<string, IIoTDevice>Lista urządzeń IoT
.NamestringNazwa urządzenia
.IsOnboolAktualny stan włącznika

Funkcje specjalne#

FunkcjaOpis
void App.ToLog(string message)Wyświetl wiadomość w menu Log
bool App.IsInLowerPrices(DateTime CurrDate, decimal CurrHour, int LowerHours, bool Purchase)Czy dana godzina jest w najniższych godzinach dnia?
bool App.IsInHigherPrices(DateTime CurrDate, decimal CurrHour, int HigherHours, bool Purchase)Czy dana godzina jest w najwyższych godzinach dnia?

Dostępne biblioteki#

  • mscorlib.dll
  • system.runtime.dll
  • System.Text.RegularExpressions.dll
  • system.linq.dll
  • System.Collections.dll

Przykład#

1
2
3
4
5
public bool IoTDevice_0036_IsOn(IApp App)
{
    return App.IsInLowerPrices(App.CurrDate, App.CurrHour, 3, false)
        || App.Forecast[App.CurrForecastIndex].FromGrid_kWh > 3;
}

Ten przykład włącza urządzenie, gdy:

  • Bież. godzina jest w 3 najtańszych godzinach dnia (cena sprzedaży), lub
  • Prognozowany pobór z sieci w bieżącej godzinie przekracza 3 kWh