> For the complete documentation index, see [llms.txt](https://docs.unwaste.energy/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.unwaste.energy/pl/dzialanie-unwaste-robot/technical-details/electrical-network-calculations.md).

# Obliczenia sieci elektrycznej

## Obliczenia sieci elektrycznej

### Założenia

* Obliczenia sieci elektrycznej są wykonywane **na połączenie**. Połączenia są od siebie odseparowane (między połączeniami nie powinny występować przepływy energii) i często są rozdzielone geograficznie, więc stanowią sensowną granicę zarówno dla obliczeń, jak i partycjonowania bazy danych.
* Dla danego połączenia instalacja elektryczna jest modelowana jako **drzewo obwodów**.
* Obwody mogą być **z licznikiem** lub **bez licznika**:
  * A **obwód z licznikiem** ma własny licznik energii elektrycznej i może obliczać zarówno **całkowite zużycie** i **zużycie resztkowe**.
  * Taki **obwód bez licznika** nie ma licznika. Nie może mierzyć dwukierunkowego przepływu energii, więc jego `energyImported` / `energyReturned` muszą być obsługiwane przez założenia opisane poniżej.
* W obecnym modelu system **nie śledzi faz** (L1/L2/L3) na potrzeby obliczeń. Jeśli wartości są zbierane osobno dla każdej fazy, są sumowane do jednej wartości.

***

### Elementy w drzewie obwodów

#### Obwód elektryczny

Obwód jest elementem strukturalnym drzewa. Obwód może mieć **obwody podrzędne** i może też mieć bezpośrednio pod nim podłączone elementy liściowe (produkcja, magazynowanie, urządzenia).

**Odczyty obwodu z licznikiem**

A **obwód z licznikiem** udostępnia dwa odczyty energii (jak pokazano na diagramie):

* `energyImported` \[Wh] — energia wpływająca do tego obwodu z Obwodu nadrzędnego
* `energyReturned` \[Wh] — energia płynąca z tego obwodu z powrotem do Obwodu nadrzędnego

Te dwie wartości są odczytywane **bezpośrednio z własnego licznika tego obwodu**.

**Założenia dla obwodu bez licznika**

Taki **obwód bez licznika** nie ma licznika, więc system nie może zmierzyć, ile energii przepłynęło w obu kierunkach.

Dla obwodów bez licznika model zakłada:

* `energyReturned = 0`
* `energyImported = energyUsedChildren`

To oznacza: obwód bez licznika jest traktowany tak, jakby cała energia potrzebna jego dzieciom była „importowana” z Obwodu nadrzędnego, a nic nie było „zwracane” w górę (ponieważ nie można tego zmierzyć).

`energyUsedChildren` dla obwodu jest zdefiniowane w poniższej sekcji obliczeń.

***

#### Produkcja

Produkcja jest elementem podłączonym pod obwodem elektrycznym (element liściowy). Reprezentuje dowolne źródło wprowadzające energię do instalacji, na przykład falowniki fotowoltaiczne lub turbiny wiatrowe.

Produkcja zapewnia:

* `energyProduced` \[Wh] — całkowita wyprodukowana energia

(Używaj `energyProduced` konsekwentnie; unikaj `energyProduction`.)

***

#### Magazyn energii

Magazynowanie jest elementem podłączonym pod obwodem elektrycznym (element liściowy). Reprezentuje urządzenie, które może zarówno pochłaniać, jak i oddawać energię elektryczną (obecnie: Bateria).

Magazynowanie zapewnia:

* `energyStored` \[Wh] — energia naładowana do magazynu
* `energyRetrieved` \[Wh] — Energia oddana z magazynu
* `chargeLevel` \[%] — stan naładowania
* `freeStorage` \[Wh] — pozostała „wolna przestrzeń”, obliczana na podstawie `chargeLevel` i skonfigurowanej pojemności magazynu

***

#### Urządzenia

Urządzenia są elementami podłączonymi pod obwodem elektrycznym (elementy liściowe). Reprezentują sterowalne obciążenia (jednostki wykonawcze).

Urządzenie może zapewniać:

* `energyConsumption` \[Wh] — zużycie energii przez urządzenie

***

## Obliczenia dla pojedynczego obwodu elektrycznego

Ta sekcja wyjaśnia, jak są wykonywane obliczenia **dla jednego obwodu elektrycznego**, oraz jak obwody podrzędne wpływają na wynik.

Kluczowa zasada stosowana w całym tekście:

* Gdy obwód potrzebuje „sumy poniżej”, sumuje tylko swoje **bezpośrednie dzieci** (obwody podrzędne i bezpośrednio podłączone elementy liściowe).\
  Wartości z głębszych poziomów są już uwzględnione w sumach każdego obwodu podrzędnego.

***

### Krok 1: Oblicz `energyUsedChildren` dla obwodu elektrycznego

Dla każdego obwodu elektrycznego zdefiniuj:

`energyUsedChildren = (suma energyUsedChildren wszystkich obwodów podrzędnych) + (suma energyConsumption urządzeń podłączonych bezpośrednio do tego obwodu elektrycznego)`

Uwagi:

* **Obwody podrzędne** wnoszą wkład poprzez swoje `energyUsedTotal` (swoje własne sumy poddrzewa).
* **Urządzenia podłączone bezpośrednio** do tego obwodu elektrycznego wnoszą wkład poprzez swoje `energyConsumption`.
* Produkcja i magazynowanie są *nie* częścią `energyUsedChildren` bezpośrednio, ponieważ wpływają na bilans energii poprzez `energyProduced`, `energyStored`, i `energyRetrieved` w Kroku 2.

Ta definicja jest także tym, czego używa **obwód bez licznika** jako swojego założonego importu:

* `energyImported = energyUsedChildren`
* `energyReturned = 0`

***

### Krok 2: Oblicz sumy poddrzewa dla produkcji i magazynowania

Dla obwodu elektrycznego zdefiniuj te sumy poddrzewa jako sumy **bezpośrednie dzieci**:

* `energyProduced` = suma `energyProduced` z:
  * elementów produkcji podłączonych bezpośrednio do tego obwodu elektrycznego oraz
  * własnych obwodów podrzędnych `energyProduced` sum (już obejmujących ich głębsze poziomy)
* `energyStored` = suma `energyStored` z:
  * elementów magazynowania podłączonych bezpośrednio do tego obwodu elektrycznego oraz
  * obwodów podrzędnych `energyStored` sum
* `energyRetrieved` = suma `energyRetrieved` z:
  * elementów magazynowania podłączonych bezpośrednio do tego obwodu elektrycznego oraz
  * obwodów podrzędnych `energyRetrieved` sum

To odpowiada idei z diagramu: produkcja i odzyskana energia „wpływają” do bilansu obwodu, podczas gdy zmagazynowana i zwrócona energia „wypływają”.

Ważne wyjaśnienie:

* `energyImported` i `energyReturned` są **nigdy nie sumowane z obwodów podrzędnych**. Są **odczytami licznika (lub założeniami) dla obwodu, który jest obliczany**.

***

### Krok 3: Całkowite zużycie energii dla obwodu elektrycznego (`energyUsedTotal`)

![](/files/3b46c88e437ef8dad10d174d3f37dc435760afed)

Na podstawie **Zasada zachowania energii**, całkowita energia wpływająca **do** do obwodu elektrycznego (z importu, lokalnej produkcji i rozładowania magazynu) musi być równa całkowitej energii wypływającej **z** z tego obwodu elektrycznego (do eksportu/zwrotu, ładowania magazynu) plus energia **zużyta** w obrębie obwodu i jego poddrzewa — więc bilans energii obwodu można zapisać jako równanie „wpływy − wypływy = zużycie”.

`energyConsumption = energyImported + energyProduced + energyRetrieved - energyReturned - energyStored`

Gdzie:

* `energyImported`, `energyReturned` są:
  * **odczyty licznika** dla obwodów z licznikiem, lub
  * **wartości założone** dla obwodów bez licznika (jak opisano powyżej).
* `energyProduced`, `energyRetrieved`, `energyStored` są **sumy poddrzewa** obliczone w Kroku 2.

***

### Krok 4: Zużycie resztkowe dla obwodu z licznikiem (`energyUsedThisLevel`)

Zużycie resztkowe oznacza: zużycie zachodzące „na tym poziomie obwodu”, czyli **nie mierzone osobno** w żadnej części poniżej.

Dla **obwód z licznikiem**:

`energyUsedThisLevel = energyUsedTotal - energyUsedChildren`

![](/files/c1848db37f1053cf94a1d0d1e28097d737712952)

Wyjaśnienie (diagram):

* `energyUsedTotal` obejmuje całe poddrzewo.
* Jeśli istnieją obwody podrzędne, ich `energyUsedTotal` reprezentuje zużycie, które można przypisać tym gałęziom podrzędnym.
* To, co pozostaje, to zużycie resztkowe dla tego poziomu obwodu (`energyUsedThisLevel`).

Z definicji, jeśli obwód z licznikiem nie ma obwodów podrzędnych:

* `energyUsedThisLevel == energyUsedTotal`

Dla **obwód bez licznika**, `energyUsedThisLevel` zwykle nie ma takiego samego znaczenia, ponieważ nie ma własnego bilansu opartego na liczniku. W tym modelu zużycie resztkowe jest przede wszystkim cechą **obwodów z licznikiem**.
