Zaciągnąłem wszystkie dostępne w PGE dane na temat mojego zużycia i produkcji energii elektrycznej. Widać pracę pompy ciepła zimą. Widać produkcję paneli w lecie. Widać, że w tym roku dołożyłem paneli. Nie widać jeszcze jak nowe panele będą się sprawowały zimą. #stepujacybudowlaniec

b7c1c2e3-1f2e-4037-a1f6-51a9edfcc713

Komentarze (48)

fisti

Pięknie produkcja wystrzeliła :)

StepujacyBudowlaniec

@fisti nowe panele robią robotę

08f1bdfc-12b2-4910-9ab9-24bdf5e9af0e
fisti

@StepujacyBudowlaniec nawet jeszcze trochę miejsca na rozbudowę farmy zostało :) Ilu procentowa różnica wychodzi między poziomymi i skośnymi panelami rano, w południe i wieczór?

StepujacyBudowlaniec

@fisti nie mam pojęcia ale wiem tylko, że panele zamontowane na platformie wschód-zachód mają kilka razy większą produkcję i działają od świtu do zmierzchu w miarę równomiernie (prawie cały czas taka sama produkcja jest w ciągu dnia) i zaczynają/kończą pracę wcześniej/później (pracują dłużej) co fajnie pokrywa autokonsumpcję.

Krzysztof_M

Pytanie techniczne, jak się robi takie śliczne słupki? Sam wszystko klepałeś, czy PGE Ci takie ładne wysyłka?

StepujacyBudowlaniec

@Krzysztof_M
Tu masz skrypt do rysowania wykresów:

#!/usr/bin/env python3
import psycopg
import pandas as pd
import matplotlib.pyplot as plt

# ---- KONFIGURACJA BAZY ----
DB_NAME = "rachunki_prad"
DB_USER = "raport_reader"
DB_PASSWORD = "bezpieczne_haslo"
DB_HOST = "192.168.123.11"
DB_PORT = "5432"

# ---- POŁĄCZENIE Z BAZĄ ----
conn = psycopg.connect(
   dbname=DB_NAME,
   user=DB_USER,
   password=DB_PASSWORD,
   host=DB_HOST,
   port=DB_PORT
)

# ---- POBRANIE SUM MIESIĘCZNYCH ----
# Kluczowa poprawka: "::date" usuwa strefę czasową (+02), aby uniknąć cofnięcia miesiąca
query = """
SELECT
   to_char(date_trunc('month', date), 'YYYY-MM') AS month,
   SUM(c0 + c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 + c9 + c10 + c11 +
       c12 + c13 + c14 + c15 + c16 + c17 + c18 + c19 + c20 + c21 + c22 + c23) AS total_pobrana,
   SUM(p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9 + p10 + p11 +
       p12 + p13 + p14 + p15 + p16 + p17 + p18 + p19 + p20 + p21 + p22 + p23) AS total_oddana
FROM energy_usage
GROUP BY month
ORDER BY month;
"""

df = pd.read_sql(query, conn)
conn.close()

# ---- PRZYGOTOWANIE DANYCH ----
df["month"] = df["month"].astype(str)
df = df.set_index("month").sort_index()

# Jeśli dane w bazie są w Wh → przeliczenie na kWh
df["total_pobrana"] = df["total_pobrana"] / 1000
df["total_oddana"]  = df["total_oddana"]  / 1000

# ---- WYKRES ----
ax = df.plot(
   kind="bar",
   color={"total_pobrana": "red", "total_oddana": "green"},
   figsize=(12, 6)
)
ax.set_xlabel("Miesiąc")
ax.set_ylabel("Energia [kWh]")
ax.set_title("Miesięczne zużycie i produkcja energii")
ax.legend(["Zużycie", "Produkcja"])
plt.xticks(rotation=45)
plt.tight_layout()

# ---- ZAPIS ----
plt.savefig("raport_miesieczny_energia.png", dpi=150)
plt.show()

entropy_

@Krzysztof_M wyglada jak excel

StepujacyBudowlaniec

@Krzysztof_M A tu masz skrypt do zaczytywania danych z pliku CSV wygenerowanego na stronie PGE:

#!/usr/bin/env python3
import sys
import csv
from datetime import datetime
import psycopg

# ---- KONFIGURACJA BAZY ----
DB_NAME = "rachunki_prad"
DB_USER = "postgres"
DB_PASSWORD = "haslo"
DB_HOST = "localhost"
DB_PORT = "5432"

# ---- SPRAWDZENIE ARGUMENTU ----
if len(sys.argv) < 2:
   print("Użycie: csv2postgres_prad.py <plik.csv>")
   sys.exit(1)

csv_file = sys.argv[1]

# ---- POŁĄCZENIE Z BAZĄ ----
conn = psycopg.connect(
   dbname=DB_NAME,
   user=DB_USER,
   password=DB_PASSWORD,
   host=DB_HOST,
   port=DB_PORT
)
cur = conn.cursor()

# ---- WSTĘPNY BUFOR NA DANE ----
data_by_date = {}

# ---- ODCZYT CSV ----
with open(csv_file, newline="", encoding="utf-8") as csvfile:
   reader = csv.reader(csvfile, delimiter=";")
   next(reader, None)  # pomiń nagłówek
   for row in reader:
       if not row or len(row) < 27:
           continue

       data_str = row[1].strip()
       typ = row[2]

       # pomijamy zbilansowaną
       if "En. Czynna zbilansowana" in typ:
           continue

       print(typ)

       # konwersja daty
       date_obj = datetime.strptime(data_str, "%Y%m%d").date()

       # 24 wartości godzinowe
       godziny = row[3:27]
       values = []
       for value in godziny:
           value = value.strip()
           if not value:
               val = 0
           else:
               # wywalanie separatorów tysięcy
               cleaned = value.replace(",", "").lstrip("0")
               try:
                   val = int(cleaned) if cleaned else 0
               except ValueError:
                   val = 0
           values.append(val)

       if date_obj not in data_by_date:
           data_by_date[date_obj] = {"c": [None]*24, "p": [None]*24}

       if "En.Czynna pobrana" == typ:
           data_by_date[date_obj]["c"] = values
           print(values)
       elif "En.Czynna oddana" == typ:
           data_by_date[date_obj]["p"] = values
           print(values)

# ---- ZAPIS DO BAZY ----
for date_obj, vals in data_by_date.items():
   cur.execute(
       """
       INSERT INTO energy_usage (
           date,
           c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,
           p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23
       ) VALUES (
           %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,
           %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s
       )
       ON CONFLICT (date) DO NOTHING;
       """,
       [date_obj] + vals["c"] + vals["p"]
   )

conn.commit()
cur.close()
conn.close()

print(f"Plik '{csv_file}' został zaimportowany do bazy '{DB_NAME}'.")


StepujacyBudowlaniec

@Krzysztof_M A tak wygląda baza danych (w sensie tabela w której są dane przechowywane):

rachunki_prad=# \d energy_usage                                
           Table "public.energy_usage"
Column |  Type   | Collation | Nullable | Default  
--------+---------+-----------+----------+---------
date   | date    |           | not null |  
c0     | integer |           | not null |  
c1     | integer |           | not null |  
c2     | integer |           | not null |  
c3     | integer |           | not null |  
c4     | integer |           | not null |  
c5     | integer |           | not null |  
c6     | integer |           | not null |  
c7     | integer |           | not null |  
c8     | integer |           | not null |  
c9     | integer |           | not null |  
c10    | integer |           | not null |  
c11    | integer |           | not null |  
c12    | integer |           | not null |  
c13    | integer |           | not null |  
c14    | integer |           | not null |  
c15    | integer |           | not null |  
c16    | integer |           | not null |  
c17    | integer |           | not null |  
c18    | integer |           | not null |  
c19    | integer |           | not null |  
c20    | integer |           | not null |  
c21    | integer |           | not null |  
c22    | integer |           | not null |  
c23    | integer |           | not null |  
p0     | integer |           | not null |  
p1     | integer |           | not null |  
p2     | integer |           | not null |  
p3     | integer |           | not null |  
p4     | integer |           | not null |  
p5     | integer |           | not null |  
p6     | integer |           | not null |  
p7     | integer |           | not null |  
p8     | integer |           | not null |  
p9     | integer |           | not null |  
p10    | integer |           | not null |  
p11    | integer |           | not null |  
p12    | integer |           | not null |  
p13    | integer |           | not null |  
p14    | integer |           | not null |  
p15    | integer |           | not null |  
p16    | integer |           | not null |  
p17    | integer |           | not null |  
p18    | integer |           | not null |  
p19    | integer |           | not null |  
p20    | integer |           | not null |  
p21    | integer |           | not null |  
p22    | integer |           | not null |  
p23    | integer |           | not null |  
Indexes:
   "energy_usage_pkey" PRIMARY KEY, btree (date)



StepujacyBudowlaniec

@Krzysztof_M A taką komendą tworzysz tą tabelę w bazie:

rachunki_prad=# CREATE TABLE energy_usage (
   date DATE PRIMARY KEY,   -- unikalny dzień

   c0  INTEGER NOT NULL, c1  INTEGER NOT NULL, c2  INTEGER NOT NULL, c3  INTEGER NOT NULL,
   c4  INTEGER NOT NULL, c5  INTEGER NOT NULL, c6  INTEGER NOT NULL, c7  INTEGER NOT NULL,
   c8  INTEGER NOT NULL, c9  INTEGER NOT NULL, c10 INTEGER NOT NULL, c11 INTEGER NOT NULL,
   c12 INTEGER NOT NULL, c13 INTEGER NOT NULL, c14 INTEGER NOT NULL, c15 INTEGER NOT NULL,
   c16 INTEGER NOT NULL, c17 INTEGER NOT NULL, c18 INTEGER NOT NULL, c19 INTEGER NOT NULL,
   c20 INTEGER NOT NULL, c21 INTEGER NOT NULL, c22 INTEGER NOT NULL, c23 INTEGER NOT NULL, -- zużycie

   p0  INTEGER NOT NULL, p1  INTEGER NOT NULL, p2  INTEGER NOT NULL, p3  INTEGER NOT NULL,
   p4  INTEGER NOT NULL, p5  INTEGER NOT NULL, p6  INTEGER NOT NULL, p7  INTEGER NOT NULL,
   p8  INTEGER NOT NULL, p9  INTEGER NOT NULL, p10 INTEGER NOT NULL, p11 INTEGER NOT NULL,
   p12 INTEGER NOT NULL, p13 INTEGER NOT NULL, p14 INTEGER NOT NULL, p15 INTEGER NOT NULL,
   p16 INTEGER NOT NULL, p17 INTEGER NOT NULL, p18 INTEGER NOT NULL, p19 INTEGER NOT NULL,
   p20 INTEGER NOT NULL, p21 INTEGER NOT NULL, p22 INTEGER NOT NULL, p23 INTEGER NOT NULL  -- produkcja
);


StepujacyBudowlaniec

@100mph w sumie to coś koło 13

FriendGatherArena

@StepujacyBudowlaniec jak widać pracę pompy ciepła? to te zużycie?

StepujacyBudowlaniec

@FriendGatherArena tak, widać kiedy zużycie zaczyna rosnąć i kiedy ma swój pik.

P.S. Widać też, że największe zużycie energii przypada na listopad i grudzień. Co mnie osobiście zaskoczyło a może to jakieś błędy wykresu (muszę się temu dokładniej przyjrzeć).

StepujacyBudowlaniec

@FriendGatherArena poprawiłem skrypt tak, że daje sobie lepiej radę z brakami danych dla kilku miesięcy (błąd po stronie PGE więc nic na to nie poradzę)

Brakuje w roku 2022 miesięcy 5, 10, 11 i 12

6e1b7fc9-bc97-41fa-a853-6f52a3478aaf
FriendGatherArena

@StepujacyBudowlaniec czyli te pompy ciepła to tak naprawdę ogrzewanie prądem? w czym to jest lepsze od grzejników na prąd?

StepujacyBudowlaniec

@FriendGatherArena grzejnik elektryczny z jednego kilowata energii daje jeden kilowat ciepła - gruntowa pompa ciepła potrafi z jednego kilowata energii dać nawet siedem kilowatów ciepła. Jest to sprawność na poziomie 700% - żadne inne urządzenie grzewcze nie ma takiej sprawności jak gruntowa pompa ciepła.

FriendGatherArena

@StepujacyBudowlaniec dziękuję. ja przez dlugi czas myslalem ze to grawitacyjnie działa

StepujacyBudowlaniec

@FriendGatherArena pompa ciepła to urządzenia takie jak lodówka, klimatyzacja, zamrażarka - to wszystko są pompy ciepła (jakim cudem tam grawitacja może działać?). Pompy ciepła do centralnego ogrzewania mają po prostu większą moc i większe wymienniki ciepła (większe średnice rur).

FriendGatherArena

@StepujacyBudowlaniec no jak moze działać grawitacja w wymiennikach ciepła? Zimne medium jest gęstsze i opada na dol. Tam jest ogrzewane i unosi sie do gory. Tam oddaje cieplo i znowu opada. Nie trzeba nic pompowac

StepujacyBudowlaniec

@FriendGatherArena pierwsze słyszę o lodówce działającej grawitacyjnie - jak sama nazwa wskazuje (pompa ciepła) służy do pompowania a nie, że samo sobie płynie

FriendGatherArena

@StepujacyBudowlaniec w lodowce to nie wiem, myslalem ze pytasz jak ma dzialac w wymienniku ciepla. Przeciez napisalem ze nie wiedzialem jak pompy ciepla dzialaja a ty sie mie pytasz jak to ma dzialac

StepujacyBudowlaniec

@FriendGatherArena napisałem, że lodówka to pompa ciepła (sprężarka i dwa wymienniki ciepła)

ZohanTSW

Mam pytania o pompę: - ile metrów masz do ogrzania? Docieplone ze wszystkich stron? - ile masz stopni w domu zimą? (Bardziej chodzi mi o to kiedy czujesz komfort cieplny) - co gdyby zimą była przerwa w dostawie prądu? Masz jakiś plan na to?

StepujacyBudowlaniec

@ZohanTSW mam 300 m2 ale grzeję tylko podłogówką na parterze (ciepło mimo wszystko rozchodzi się na cały dom). Co do docieplenia to na wykresie widać skok zużycia w porównaniu do sezonu 22/23 (tam masz niższe zużycie, trochę słabo to widać bo brakuje danych za ten okres - jeszcze to sprawdzę, może jakieś błędy w pliku CSV) spowodowany zdemontowaniem ocieplenia dachu (także mam teraz niedocieplony dach, olbrzymie poddasze które traci dużo ciepła przez strop na parterze). Cała reszta ścian ocieplona do fundamentów styropianem 15 cm. Grunt nieocieplony więc z parteru też sporo ciepła ucieka w dół do piwnicy i garażu (kiedyś może docieplę sufit w garażu żeby się pozbyć tego mostka termicznego). W domu mam z reguły 23 stopnie i mam cieplej niż ktokolwiek kogo znam (znajomi jak wpadają to przy wejściu do mojego domu zawsze padają teksty typu "Ale nagrzane" bo po prostu czuć tą falę ciepła jak się wchodzi). Dodatkowo często śpię przy otwartym oknie. Przerwy w dostawie ciepła się praktycznie nie zdarzają a nawet jakby wystąpiła przerwa kilkugodzinna to w ogóle tego nie odczuję bo jednak mam budynek murowany ze sporą akumulacją.

ZohanTSW

@StepujacyBudowlaniec podłogóweczka robi robotę, faktycznie czuć przy niej ścianę ciepła, a do tego nie potrzebuje tak wysokiej temperatury jak zwykły grzejnik. Nieźle to wychodzi. Ciągle słyszę jakieś opowieści że ludzie mają zimno z pompą ciepła i jeszcze rachunki po 3k miesięcznie i nie wiem ile w tym prawdy, ale podejrzewam że chcą tym grzać jak piecem węglowym i mają kiepskie ocieplenie. Dzięki za odpowiedź

StepujacyBudowlaniec

@ZohanTSW po pierwsze powietrzne pompy ciepła nie mają takiej sprawności jak gruntowe (ja zamontowałem gruntową na studniach zamiast sond). Po drugie mają ustawione (zbudowane) instalacje przez totalnych ćwoków którzy robią wszystko tak samo jak przy kotłach więc spada przez to sprawność dramatycznie. Pompy ciepła pracują na zupełnie innych parametrach niż kotły i instalacja powinna być pod to przygotowana (taka instalacja jest tańsza bo potrzeba mniej elementów, pompa ciepła sama steruje całością i wiele elementów instalacji które są normalnie montowane przy kotłach to przy pompie ciepła tylko przeszkadzają i psują wydajność)

ZohanTSW

@StepujacyBudowlaniec aaaaa to masz gruntową. No to jest proszę pana już burżuazja :D

StepujacyBudowlaniec

@ZohanTSW to jest tańsze niż powietrzna jak się zrobi samemu (a można samemu bo gruntowe pompy ciepła to bardzo proste urządzenia)

Krzysztof_M

@StepujacyBudowlaniec strasznie skomplikowane te Twoje obliczenia, ale chyba jakoś sobie poradzę. Jakie masz roczne zużycie energii elektrycznej i produkcję, z tych tabelek to nie chce mi się zbierać. Ja mam zwykły piec elektryczny i bufor ciepła, na nocnej taryfie. Produkcję mam z 10 KW około 8000 KWh a zużycie około 10000 do 13000 teraz jeszcze auto trochę prądu bierze tak że w tym roku 3000zł za całą energię w domu zużytą musiałem dopłacić, Enea jeszcze mnie dobija fakturami prognozowanymi z kosmosu. Przymierzam się do pompy Ciepła w przyszłym roku, ale nie wiem czy grzejniki mi wystarcza? Najwyżej trochę dołożę, nie mam podłogówki, no i tylko około 90m2 domu do ogrzewania. Przy pompie nawet takiej powietrznej wyszedł bym na zero z fakturami.

StepujacyBudowlaniec

@Krzysztof_M dane są niekompletne a w dodatku rozbudowałem PV więc nie wiem za jaki okres chcesz to zużycie i produkcję. Najprawdopodobniej w tym sezonie nie zapłacę za prąd (tylko abonament. przesył itp, itd). Pompa ciepła bez problemu będzie współpracować z grzejnikami tylko żeby te barany instalatorzy dobrze ją skonfigurowali. Musi być duży przepływ i niska temperatura.

FriendGatherArena

Grunt nieocieplony więc z parteru też sporo ciepła ucieka w dół do piwnicy i garażu

@StepujacyBudowlaniec cieplo ci w dol ucieka wtf?

StepujacyBudowlaniec

@FriendGatherArena grawitacja nie ma dużego wpływu na uciekanie ciepła - jakie prawo fizyki według ciebie zapobiega rozchodzeniu się temperatury w dół?

FriendGatherArena

@StepujacyBudowlaniec konwekcja

StepujacyBudowlaniec

@FriendGatherArena "Czy konwekcja zapobiega rozchodzeniu się ciepła w dół?

Nie do końca — raczej utrudnia lub ogranicza to zjawisko, ale nie „zapobiega” całkowicie.

W praktyce:

Ciepło nie rozchodzi się w dół przez konwekcję, bo ogrzany (lżejszy) płyn idzie w górę, a nie w dół.

Jednak zimny płyn z góry może opaść w dół, co też przenosi energię — więc konwekcja ogólnie wyrównuje temperaturę, ale kierunek netto ruchu ciepła to najczęściej z dołu do góry."

FriendGatherArena

@StepujacyBudowlaniec czy to jest odpowiedz z czata?..

StepujacyBudowlaniec

@FriendGatherArena oczywiście, że tak - polecam używać zamiast pisać głupoty w internecie

FriendGatherArena

@StepujacyBudowlaniec nie cierpie tego twojego tonu wypowiedzi wszechwiedzącego dupka. nie da sie z tobą normalnie rozmawiać. nie dziwie sie ze mieszkasz sam w tak duzej chacie. idz lepiej karpie w osadniku dokarmić, bo ci ten tatarak zeżrą

StepujacyBudowlaniec

@FriendGatherArena ja nie przepadam za twoim tonem idioty ale i tak z tobą dyskutuję

DexterFromLab

@StepujacyBudowlaniec widać okresy w których produkcja energii z paneli znaczącą wpływa na zużycie energii przez pompę ciepła. Widać też że dołożenie paneli przedłuża okres w którym mogą być generowane oszczędności. Pytanie jak z opłacalnością biorąc pod uwagę koszt paneli i pompy vs różnica w koszcie ogrzewania.

StepujacyBudowlaniec

@DexterFromLab taka pompa ciepła używana to koszt jakieś 5000 złotych, instalacja dolnego źródła czyli studnie to też coś koło tego (raczej mniej), panele PV to koszt jakich 13-14 000. Razem w 25000 się zmieścisz.

DexterFromLab

@StepujacyBudowlaniec 25k PLN to

bardzo dużo pieniędzy na opał

DexterFromLab

@StepujacyBudowlaniec Moja mama płaci nie więcej niż 3.5 k za gaz na cały dom przez rok. Latem ma panele do ogrzewania wody, ale takie co mają już 15 lat i działają bezawaryjnie i myślę że będą działały dalej. Zakładam więc że to 7 lat ogrzewania. Ale ja pisze tylko o ogrzewania, jeżeli ty używasz tej energii do zasilania latem, np klimatyzacji czy innych urządzeń to myślę że panele zamortyzują CI się zanim się zużyją. Ale tylko dlatego że zrobiłes to sam. W innym przypadku, gdyby robiła to firma, to opłacalność jest problematyczna. Niestety większość ludzi nie zrobi takiej instalacji samemu.

StepujacyBudowlaniec

@DexterFromLab niestety firmy strasznie zdzierają kasę na takich instalacjach. Co do gazu to myślę, że za taki duży, stary i niedocieplony dom jak mój zapłacił bym dużo więcej niż 3500 złotych.

DexterFromLab

@StepujacyBudowlaniec jak by zima ostro dowaliła to byś może i nawet 8k zabił za gaz. Musiał byś kombinować coś z gałęziówką żeby na kosztach przyciąć. Ale jak dowali ostra zima to pompa ciepła i tak dała by Ci popalić. Myślę że przy -20 to było by już srogo i musiał byś się opałem dogrzewać. Ale myślę że takie zimy to się raczej u nas nie zdarzą i możesz spać spokojnie Jestem zdania że w każdym domu w tej strefie klimatycznej musi być jakiś piec na opał w razie jakiejś srogiej pogody.

StepujacyBudowlaniec

@DexterFromLab w ogóle nie czuję jak jest -20 bo pompa ma duży zapas i by kilka takich domów ogrzała jak mój jednocześnie. W największe mrozy pompa pracuje u mnie tylko 6 godzin dziennie.

P.S. Jedyne co czuję w duże mrozy to smród od sąsiadów palących w swoich kopciuchach. A szkoda bo zimowe, mroźne powietrze jest zajebiste.

Zaloguj się aby komentować