C# IoT-procedures#

GbbOptimizer maakt het mogelijk eigen procedures in C# te schrijven die IoT-apparaten aansturen op basis van prognoses, energieprijzen en verbruiksgeschiedenis.

Een procedure mag niet langer dan 100 ms duren en mag de werking van het programma niet verstoren. Anders wordt de procedure opgeschort.

Object App#

Elke IoT-procedure ontvangt het App-object als parameter. Hieronder staat een lijst met beschikbare eigenschappen.

Belangrijkste eigenschappen#

EigenschapTypeBeschrijving
App.CurrDateDateTime?Datum waarop het apparaat aan/uit moet worden gezet
App.CurrHourdecimal?Uur (12:30 = 12.5; 12:45 = 12.75)
App.CurrForecastIndexint?Index in App.Forecast voor de huidige datum en uur
App.StringVariablesDictionary<string, string?>Tekstvariabelen van de gebruiker (persistent tussen aanroepen)
App.DecimalVariablesDictionary<string, decimal?>Numerieke variabelen van de gebruiker (persistent tussen aanroepen)

Prognose (Forecast)#

EigenschapTypeBeschrijving
App.ForecastIForecast[]Array van de batterijprognose. [0] = huidig uur, [1] = volgend uur enz.
.DateDateTimeDatum van de prognose
.DateNoint0 = vandaag, 1 = morgen enz.
.HourdecimalUur van de prognose
.HourNodecimalUur geteld vanaf het begin van de prognose ([0].HourNo == 0 altijd)
.StartBattery_kWhACdecimalkWh in de batterij (AC) aan het begin van het uur
.StartBattery_kWhdecimalkWh in de batterij (DC) aan het begin van het uur
.Prod_KWhACdecimal?Productie (PV + wind) in dat uur
.Loads_kWhACdecimal?Verbruik in dat uur
.GridCharge_kWhACdecimal?kWh uit het net naar de batterij (netzijde)
.GridCharge_kWhdecimal?kWh uit het net naar de batterij (batterijzijde)
.Discharge_kWhACdecimal?kWh uit de batterij naar het net (netzijde)
.Discharge_kWhdecimal?kWh uit de batterij naar het net (batterijzijde)
.EndBattery_kWhACdecimal?kWh in de batterij (AC) aan het einde van het uur
.EndBattery_kWhdecimal?kWh in de batterij (DC) aan het einde van het uur
.Meteo_SOCdecimal?null = geen weerswaarschuwingen; waarde = doel-SOC voor de waarschuwing
.Temperature_Cdecimal?Temperatuur (°C) in dat uur
.ExtraLoads_kWhdecimal?Som van extra verbruik
.FromGrid_kWhdecimal?kWh uit het net
.PurchasePricedecimal?Inkoopprijs
.PurchaseAmountdecimal?Inkoopbedrag
.ToGrid_kWhdecimal?kWh naar het net
.SalePricedecimal?Verkoopprijs
.SaleAmountdecimal?Verkoopbedrag

Prijzen (Prices)#

EigenschapTypeBeschrijving
App.PricesDictionary<(DateTime, decimal), IPrice>Prijzen voor gisteren, vandaag en morgen
.DayDateTimeDatum van de prijs
.HourdecimalUur van de prijs
.PurchasePricedecimal?Inkoopprijs
.SalesPricedecimal?Verkoopprijs
.Imported_PurchasePricedecimal?Uit de prijsbron geïmporteerde inkoopprijs
.Imported_SalesPricedecimal?Uit de prijsbron geïmporteerde verkoopprijs

Geschiedenis (History)#

EigenschapTypeBeschrijving
App.HistoryIHistory[]Historische gegevens. [0] = uur vóór het huidige, [1] = twee uur eerder enz.
.DateDateTimeDatum
.HourdecimalUur
.FromGrid_kWhdecimal?kWh uit het net
.PurchasePricedecimal?Inkoopprijs
.PurchaseAmountdecimal?Inkoopbedrag
.ToGrid_kWhdecimal?kWh naar het net
.SalePricedecimal?Verkoopprijs
.SaleAmountdecimal?Verkoopbedrag
.Loads_kWhdecimal?Verbruik (kWh)
.LoadsPricedecimal?Prijs van verbruikte energie
.LoadsAmountdecimal?Bedrag van verbruikte energie
.PV_kWhdecimal?PV-productie (kWh)
.SOC_Startdecimal?SOC aan het begin van het uur
.SOC_Enddecimal?SOC aan het einde van het uur
.ExtraLoads_Pricedecimal?Prijs van extra verbruik
.ExtraLoads_kWhdecimal?Som van extra verbruik (kWh)

IoT-apparaten (IoTDevices)#

EigenschapTypeBeschrijving
App.IoTDevicesDictionary<string, IIoTDevice>Lijst van IoT-apparaten
.NamestringNaam van het apparaat
.IsOnboolHuidige status van de schakelaar

Speciale functies#

FunctieBeschrijving
void App.ToLog(string message)Toon een bericht in het Log-menu
bool App.IsInLowerPrices(DateTime CurrDate, decimal CurrHour, int LowerHours, bool Purchase)Valt het gegeven uur in de goedkoopste uren van de dag?
bool App.IsInHigherPrices(DateTime CurrDate, decimal CurrHour, int HigherHours, bool Purchase)Valt het gegeven uur in de duurste uren van de dag?

Beschikbare libraries#

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

Voorbeeld#

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;
}

Dit voorbeeld schakelt het apparaat in wanneer:

  • Het huidige uur in de 3 goedkoopste uren van de dag valt (verkoopprijs), of
  • De voorspelde opname uit het net in het huidige uur meer dan 3 kWh bedraagt