<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zaawansowane on GbbOptimizer — Podręcznik</title><link>https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/zaawansowane/</link><description>Recent content in Zaawansowane on GbbOptimizer — Podręcznik</description><generator>Hugo</generator><language>pl</language><atom:link href="https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/zaawansowane/index.xml" rel="self" type="application/rss+xml"/><item><title>Procedury C# IoT</title><link>https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/zaawansowane/procedury-csharp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/zaawansowane/procedury-csharp/</guid><description>&lt;h1 id="procedury-c-iot"&gt;Procedury C# IoT&lt;a class="anchor" href="#procedury-c-iot"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;blockquote class='book-hint warning'&gt;
&lt;p&gt;Procedura musi działać &lt;strong&gt;nie dłużej niż 100 ms&lt;/strong&gt; i nie może zakłócać pracy programu. W przeciwnym razie zostanie zawieszona.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="obiekt-app"&gt;Obiekt App&lt;a class="anchor" href="#obiekt-app"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Każda procedura IoT otrzymuje obiekt &lt;code&gt;App&lt;/code&gt; jako parametr. Poniżej lista dostępnych właściwości.&lt;/p&gt;
&lt;h3 id="właściwości-główne"&gt;Właściwości główne&lt;a class="anchor" href="#w%c5%82a%c5%9bciwo%c5%9bci-g%c5%82%c3%b3wne"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Właściwość&lt;/th&gt;
 &lt;th&gt;Typ&lt;/th&gt;
 &lt;th&gt;Opis&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.CurrDate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DateTime?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Data, dla której urządzenie ma być włączone/wyłączone&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.CurrHour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Godzina (12:30 = 12.5; 12:45 = 12.75)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.CurrForecastIndex&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Indeks w &lt;code&gt;App.Forecast&lt;/code&gt; dla bieżącej daty i godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.StringVariables&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dictionary&amp;lt;string, string?&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Zmienne tekstowe użytkownika (trwałe między wywołaniami)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.DecimalVariables&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dictionary&amp;lt;string, decimal?&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Zmienne liczbowe użytkownika (trwałe między wywołaniami)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="prognoza-forecast"&gt;Prognoza (Forecast)&lt;a class="anchor" href="#prognoza-forecast"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Właściwość&lt;/th&gt;
 &lt;th&gt;Typ&lt;/th&gt;
 &lt;th&gt;Opis&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.Forecast&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;IForecast[]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Tablica prognozy baterii. &lt;code&gt;[0]&lt;/code&gt; = bież. godzina, &lt;code&gt;[1]&lt;/code&gt; = nast. godzina itd.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Date&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DateTime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Data prognozy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.DateNo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;0 = dzisiaj, 1 = jutro itd.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Hour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Godzina prognozy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.HourNo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Godzina licząc od początku prognozy (&lt;code&gt;[0].HourNo == 0&lt;/code&gt; zawsze)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.StartBattery_kWhAC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh w baterii (AC) na początku godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.StartBattery_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh w baterii (DC) na początku godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Prod_KWhAC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Produkcja (PV + wiatr) w danej godzinie&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Loads_kWhAC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Zużycie w danej godzinie&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.GridCharge_kWhAC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh z sieci do baterii (strona sieci)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.GridCharge_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh z sieci do baterii (strona baterii)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Discharge_kWhAC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh z baterii do sieci (strona sieci)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Discharge_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh z baterii do sieci (strona baterii)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.EndBattery_kWhAC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh w baterii (AC) na koniec godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.EndBattery_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh w baterii (DC) na koniec godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Meteo_SOC&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;null = brak ostrzeżeń meteo; wartość = docelowy SOC dla ostrzeżenia&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Temperature_C&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Temperatura (st. C) w danej godzinie&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.ExtraLoads_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Suma dodatkowych obciążeń&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.FromGrid_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh z sieci&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.PurchasePrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena zakupu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.PurchaseAmount&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kwota zakupu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.ToGrid_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh do sieci&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SalePrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena sprzedaży&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SaleAmount&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kwota sprzedaży&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ceny-prices"&gt;Ceny (Prices)&lt;a class="anchor" href="#ceny-prices"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Właściwość&lt;/th&gt;
 &lt;th&gt;Typ&lt;/th&gt;
 &lt;th&gt;Opis&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.Prices&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dictionary&amp;lt;(DateTime, decimal), IPrice&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ceny za wczoraj, dzisiaj i jutro&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Day&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DateTime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Data ceny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Hour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Godzina ceny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.PurchasePrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena zakupu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SalesPrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena sprzedaży&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Imported_PurchasePrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena zakupu zaimportowana ze źródła cen&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Imported_SalesPrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena sprzedaży zaimportowana ze źródła cen&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="historia-history"&gt;Historia (History)&lt;a class="anchor" href="#historia-history"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Właściwość&lt;/th&gt;
 &lt;th&gt;Typ&lt;/th&gt;
 &lt;th&gt;Opis&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.History&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;IHistory[]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Dane historyczne. &lt;code&gt;[0]&lt;/code&gt; = godzina przed bież., &lt;code&gt;[1]&lt;/code&gt; = dwie godziny przed itd.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Date&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DateTime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Hour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Godzina&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.FromGrid_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh z sieci&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.PurchasePrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena zakupu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.PurchaseAmount&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kwota zakupu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.ToGrid_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;kWh do sieci&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SalePrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena sprzedaży&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SaleAmount&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kwota sprzedaży&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Loads_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Zużycie (kWh)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.LoadsPrice&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena energii zużycia&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.LoadsAmount&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kwota energii zużycia&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.PV_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Produkcja PV (kWh)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SOC_Start&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;SOC na początku godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.SOC_End&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;SOC na koniec godziny&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.ExtraLoads_Price&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cena dodatkowych obciążeń&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.ExtraLoads_kWh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;decimal?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Suma dodatkowych obciążeń (kWh)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="urządzenia-iot-iotdevices"&gt;Urządzenia IoT (IoTDevices)&lt;a class="anchor" href="#urz%c4%85dzenia-iot-iotdevices"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Właściwość&lt;/th&gt;
 &lt;th&gt;Typ&lt;/th&gt;
 &lt;th&gt;Opis&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;App.IoTDevices&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dictionary&amp;lt;string, IIoTDevice&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Lista urządzeń IoT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.Name&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Nazwa urządzenia&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.IsOn&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Aktualny stan włącznika&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="funkcje-specjalne"&gt;Funkcje specjalne&lt;a class="anchor" href="#funkcje-specjalne"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Funkcja&lt;/th&gt;
 &lt;th&gt;Opis&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;void App.ToLog(string message)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Wyświetl wiadomość w menu Log&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bool App.IsInLowerPrices(DateTime CurrDate, decimal CurrHour, int LowerHours, bool Purchase)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Czy dana godzina jest w najniższych godzinach dnia?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bool App.IsInHigherPrices(DateTime CurrDate, decimal CurrHour, int HigherHours, bool Purchase)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Czy dana godzina jest w najwyższych godzinach dnia?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="dostępne-biblioteki"&gt;Dostępne biblioteki&lt;a class="anchor" href="#dost%c4%99pne-biblioteki"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mscorlib.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;system.runtime.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;System.Text.RegularExpressions.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;system.linq.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;System.Collections.dll&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="przykład"&gt;Przykład&lt;a class="anchor" href="#przyk%c5%82ad"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;bool&lt;/span&gt; IoTDevice_0036_IsOn(IApp App)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; App.IsInLowerPrices(App.CurrDate, App.CurrHour, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; || App.Forecast[App.CurrForecastIndex].FromGrid_kWh &amp;gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ten przykład włącza urządzenie, gdy:&lt;/p&gt;</description></item><item><title>GBB Shunt</title><link>https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/zaawansowane/gbb-shunt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/zaawansowane/gbb-shunt/</guid><description>&lt;h1 id="gbb-shunt"&gt;GBB Shunt&lt;a class="anchor" href="#gbb-shunt"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;GBB Shunt to moduł GbbOptimizer przeznaczony do instalacji z bateriami ołowiowymi (kwasowymi, żelowymi, AGM).&lt;/p&gt;
&lt;h2 id="czym-jest-gbb-shunt"&gt;Czym jest GBB Shunt?&lt;a class="anchor" href="#czym-jest-gbb-shunt"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;W instalacjach z bateriami ołowiowymi standardowy pomiar &lt;a href="https://krzysztofhajdamowicz.github.io/rewrite-GbbOptimizer-manual/referencje/slowniczek/#soc" class="glossary-term" title="Stan naładowania — poziom baterii w procentach (0–100%)"&gt;SOC&lt;/a&gt; przez falownik może być niedokładny. GBB Shunt pozwala na dokładniejsze śledzenie stanu naładowania baterii na podstawie pomiaru prądu przez bocznik (shunt).&lt;/p&gt;
&lt;h2 id="kluczowe-funkcje"&gt;Kluczowe funkcje&lt;a class="anchor" href="#kluczowe-funkcje"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dokładny pomiar SOC&lt;/strong&gt; — na podstawie pomiaru prądu (kulomierz), a nie napięcia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kompensacja temperatury&lt;/strong&gt; — uwzględnia wpływ temperatury na pojemność baterii ołowiowej&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ochrona baterii&lt;/strong&gt; — zapobiega głębokim rozładowaniom, które skracają żywotność baterii ołowiowych&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kiedy-używać"&gt;Kiedy używać?&lt;a class="anchor" href="#kiedy-u%c5%bcywa%c4%87"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GBB Shunt jest zalecany, jeśli:&lt;/p&gt;</description></item></channel></rss>