PiotrMachowski / Home-Assistant-custom-components-Tauron-AMIplus

This sensor uses unofficial API to get energy usage and generation data from https://elicznik.tauron-dystrybucja.pl.
MIT License
128 stars 34 forks source link

Brak danych pobranych z e-licznik #122

Closed mmarcines closed 1 year ago

mmarcines commented 1 year ago

Discussed in https://github.com/PiotrMachowski/Home-Assistant-custom-components-Tauron-AMIplus/discussions/121

Originally posted by **mmarcines** April 6, 2023 Hej, Czy to tylko u mnie nie ma danych od 4 kwietnia? Po zalogowaniu do tauron elicznik widze, ze dane sa juz nawet ze wczoraj. NIestety w panelu Energia ostatnie dane mam z 3 kwietnia. Wszystkie encje w integracji maja status niedostepny. Robilem wylacz / wlacz integracje. Usunalem i dodalem ponownie integracja. Zadne z powyzszych nie rozwiazaly problemu. dzieki za odpowiedz. M.
mmarcines commented 1 year ago

Home Assistant: 2023.4.0 (ale dane nie wczytuja sie od dwoch dni - wiec problem pewnie tez istnial na 2023.3.3 - wczoraj zrobilem aktualizacje)

Blad z logu

Ten błąd pochodzi z niestandardowej integracji. Logger: custom_components.tauron_amiplus.coordinator Source: custom_components/tauron_amiplus/connector.py:193 Integration: Tauron AMIplus (documentation, issues) First occurred: 08:33:07 (2 occurrences) Last logged: 08:33:23

Unexpected error fetching tauron_amiplus data: 'allData'
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 250, in _async_refresh
    self.data = await self._async_update_data()
  File "/config/custom_components/tauron_amiplus/coordinator.py", line 29, in _async_update_data
    data = await self.hass.async_add_executor_job(self._update)
  File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/tauron_amiplus/coordinator.py", line 40, in _update
    return self.connector.get_raw_data()
  File "/config/custom_components/tauron_amiplus/connector.py", line 103, in get_raw_data
    data.consumption = self.get_data_set(generation=False)
  File "/config/custom_components/tauron_amiplus/connector.py", line 115, in get_data_set
    dataset.json_daily, dataset.daily_date = self.get_values_daily(generation)
  File "/config/custom_components/tauron_amiplus/connector.py", line 193, in get_values_daily
    while offset <= CONST_MAX_LOOKUP_RANGE and (data is None or len(data["data"]["allData"]) < 24):
KeyError: 'allData'
faraon66 commented 1 year ago

Hej, Potwierdzam, mam dokładnie ten sam błąd.

GregoryKowalik commented 1 year ago

Hej, u mnie to samo :-/ Zauważyłem to po aktualizacji do 2023.4.0

Landiss commented 1 year ago

U mnie jest to samo, a jeszcze nie robiłem aktualizacji do 2023.4.0, więc to nie ona jest przyczyną.

kaziu687 commented 1 year ago

U mnie to samo przed i po aktualizacji 2023.4.0

adik015 commented 1 year ago

wyglada ze cos po stronie taurona bo pobieranie skryptem w pythonie tez nie dziala od wczoraj

sebastian-bugajny commented 1 year ago

u mnie to samo

xtronets commented 1 year ago

u mnie to samo

`Logger: custom_components.tauron_amiplus.coordinator Source: custom_components/tauron_amiplus/connector.py:193 Integration: Tauron AMIplus (documentation, issues) First occurred: 12:51:11 (6 occurrences) Last logged: 13:14:52 Unexpected error fetching tauron_amiplus data: 'allData'

Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 250, in _async_refresh self.data = await self._async_update_data() File "/config/custom_components/tauron_amiplus/coordinator.py", line 29, in _async_update_data data = await self.hass.async_add_executor_job(self._update) File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/config/custom_components/tauron_amiplus/coordinator.py", line 40, in _update return self.connector.get_raw_data() File "/config/custom_components/tauron_amiplus/connector.py", line 103, in get_raw_data data.consumption = self.get_data_set(generation=False) File "/config/custom_components/tauron_amiplus/connector.py", line 115, in get_data_set dataset.json_daily, dataset.daily_date = self.get_values_daily(generation) File "/config/custom_components/tauron_amiplus/connector.py", line 193, in get_values_daily while offset <= CONST_MAX_LOOKUP_RANGE and (data is None or len(data["data"]["allData"]) < 24): KeyError: 'allData'`

Biegnik commented 1 year ago

Tauron dość radykalnie zaktualizował swoją aplikację mobilną i prawdopodobnie wprowadził jakieś zmiany do API, które skutkują błędami integracji.

PiotrMachowski commented 1 year ago

Wygląda na to, że z API zostało usunięte pole, które było używane przez tą integrację. Muszę zobaczyć, czy da się to prosto ogarnąć używając innych pól

PiotrMachowski commented 1 year ago

Niestety sprawa wygląda gorzej, niż samo usunięcie pól z API - usunięto zwracanie danych godzinowych dla okresów dłuższych, niż 24h (co było w sumie pewnym nadużywaniem API z mojej strony).

Żeby to ogarnąć, muszę (znowu... 🙄) dość mocno przerobić pobieranie danych - pobierać je dzień po dniu, albo przejść na pobieranie i parsowanie pliku CSV (tutaj chyba trzeba będzie miesiąc po miesiącu).

Biegnik commented 1 year ago

Pomóc Ci wiele nie potrafię, ale trzymam kciuki mocno ;)

faraon66 commented 1 year ago

Dane CSV można pobierać w wybranym zakresie dat (nie musi być cały miesiąc). Może warto rozważyć "przerzucenie" tych danych do bazy danych i dopiero ich analiza. W HA jest sensor do obsługi baz danych.

PiotrMachowski commented 1 year ago

Dane CSV można pobierać w wybranym zakresie dat (nie musi być cały miesiąc).

Tak, wiem, ale problem jest taki, że np. żeby obliczyć energię zbilansowaną musiałem pobrać dane godzinowe dla okresów dłuższych niż miesiąc.

Może warto rozważyć "przerzucenie" tych danych do bazy danych i dopiero ich analiza. W HA jest sensor do obsługi baz danych.

Nie sądzę, żeby to był dobry pomysł, bo jednak większość użytkowników nie zna SQLa. Poza tym samo przetwarzanie danych nie jest już problemem.

piecyk57 commented 1 year ago

Warto poczekać ponieważ w aplikacji e-licznik jest informacja o kolejnych pracach serwisowych w dniach 16-19 kwiecień

PiotrMachowski commented 1 year ago

@piecyk57 taaaaak, wolałbym nie musieć robić tego kolejny raz 😄

andrzejkla commented 1 year ago

Nie wiem jak jest to rozwiązane techniczne. Ale może wersję podstawową (bez bilansowania) można zrobić bez pobierania danych godzinowych. A jak Tauron zakończy prace serwisowe, to wtedy wdrożyć dopiero pozostałe funkcjonalności.

Ja akurat bilansowanie raz na miesiąc koryguję zmieniając jedną wartość w HA. A wyliczam ją w przygotowanym excelu.

lakusz1github commented 1 year ago

@andrzejkla mozesz podzielic sie dokładnym opisem, co i jak robisz?

andrzejkla commented 1 year ago

Pobieram dane z elicznik po zakończonym miesiącu (pełny miesiąc) do xls. Następnie przenoszę do nowego arkusza tak by w jedne kolumnie mieć pobór a w drugiej oddanie (z tej samej godziny). Później obliczam w każdej godzinie zbilansowany pobór i oddanie Jeżeli pobór większy niż oddanie (z licznika) to pobór zbilansowany = pobór-oddanie, a oddanie zbilansowane = 0 Jeżeli oddanie większe niż pobór to pobór zbilansowany =0, a oddanie zbilansowane = oddanie - pobór Tak powstałe dane z całego miesiąca sumuję. Sumuję zarówno te dane z liczniki i te nowe dane po bilansowaniu.

Wyliczam różnicę między oddanym i oddanym zbilansowanym. O tą różnice zmieniam dane w HA. Mam jeden sensor jako korekta autokonsumpcji i go co miesiąc zmieniam.

mmarcines commented 1 year ago

Ja tam kibicuje @PiotrMachowski i cierpliwie czekam. Po co sie logowac co miesiac i pobierac xls'y - skoro dzieki tej integracji "zapas" nawet po zbilansowaniu moze sie sam automatycznie obliczac. image

travnick commented 1 year ago

@PiotrMachowski Z Twojej odpowiedzi domyślam się, że rzekomo nie da się pobrać danych cvs z okresu dłuższego niż miesiąc. Jeżeli tak, to rozumiem, że z tego powodu nie było to robione w ten sposób od początku?

Sprawdziłem więc w firefoksie, i oto wyniki (trochę się jednak zdziwiłem, że w odpowiedzi nie dostaję cvs — mimo że edytowałem taki właśnie request — tylko dostaję JSONa):

Wybieranie ręczne zakresu godzinowego poboru pozwala wybrać maksymalnie tyle (03.08.2021 - 05.01.2022, czyli 5 miesięcy — pewnie w dniach należy przeliczyć) image

Teraz zapytania:

dane%5BsmartNr%5D=tutaj_nr_licznika&dane%5BchartDay%5D=12.04.2023&dane%5BcheckOZE%5D=on&dane%5BstartDay%5D=01.08.2021&dane%5BendDay%5D=13.04.2023&dane%5BtrybCSV%5D=godzin&dane%5BparamType%5D=csv

Powyższe zwróciło godzinowy zakres od 01.08.2021 do 01.01.2022 (dość osobliwe)

dane%5BsmartNr%5D=tutaj_nr_licznika&dane%5BchartDay%5D=12.04.2023&dane%5BcheckOZE%5D=on&dane%5BstartDay%5D=03.08.2021&dane%5BendDay%5D=13.01.2023&dane%5BtrybCSV%5D=godzin&dane%5BparamType%5D=csv

Powyższe zwróciło godzinowy zakres od 03.08.2021 do 03.01.2022 (dość osobliwe)

dane%5BsmartNr%5D=tutaj_nr_licznika&dane%5BchartDay%5D=12.04.2023&dane%5BcheckOZE%5D=on&dane%5BstartDay%5D=03.08.2021&dane%5BendDay%5D=30.01.2022&dane%5BtrybCSV%5D=godzin&dane%5BparamType%5D=csv

Powyższe zwróciło godzinowy zakres od 03.08.2021 do 30.01.2022 - czyli to o co pytamy.

Patrząc po dopowiedziach wygląda na to jakby był limit rozmiaru odpowiedzi nieco ponad 1MB: image

Ograniczenie zakresu z GUI może wynikać np. z tego, że wyestymowali ile maksymalnie taka odpowiedź w danym zakresie może ważyć, i wyszło im, że te 5 miesięcy zapełnione danymi w maksymalnym zakresie (więcej niż zera, a mniej niż jakiś umowny max) będą ważyć mniej niż ten limit.

---edit

Co do pomysłu z bazą danych to popieram. Siłą rzeczy jakaś baza jest już podpięta do HA (influx czy coś), użytkownicy nie muszą przecież znać SQLa, użytkownik będzie tylko odpowiedzialny za podanie konfiguracji bazy.

Dane w bazie mają taką zaletę, że nie trzeba ich pobierać raz jeszcze, można je zarchiwizować, przywrócić, w inny sposób przetworzyć, a nawet uzupełnić ręcznie czy automatycznie jeżeli z jakiegoś powodu zajdzie taka potrzeba.

PS widać, że oni w tym API nie mogą się zdecydować czy używać polskiego, czy angielskiego :D

faraon66 commented 1 year ago

Co do pomysłu z bazą danych to popieram. Siłą rzeczy jakaś baza jest już podpięta do HA (influx czy coś), użytkownicy nie muszą przecież znać SQLa, użytkownik będzie tylko odpowiedzialny za podanie konfiguracji bazy.

Dane w bazie mają taką zaletę, że nie trzeba ich pobierać raz jeszcze, można je zarchiwizować, przywrócić, w inny sposób przetworzyć, a nawet uzupełnić ręcznie czy automatycznie jeżeli z jakiegoś powodu zajdzie taka potrzeba.

Dokładnie o to chodziło w mojej propozycji. Dodatkowo baza danych będzie bardziej "odporna " na zmiany w API licznika, wymagany jest tylko proces parsowania z excel do bazy, więc ewentualna zmiana API nie ma wpływu na dane historyczne.

W sytuacji jak kolega powyżej opisał, że można pobrać max. ok. 5m-cy, wszystkie dane w bazie można scalić (pobierając etapami), wyszukać brakujące recordy i je uzupełnić, etc. W zasadzie sam Excel posiada możliwość eksportu do DB.

To jest tylko luźna propozycja (taki brainstorm), Autor ma najlepszy obraz całości oraz doświadczenie z tym API. Pozdrawiam,

PiotrMachowski commented 1 year ago

@travnick szczerze mówiąc, to po ostatniej zmianie jeszcze się nie wgryzałem z ręcznym edytowaniem requestów, tylko sprawdziłem, co jest możliwe przez GUI.

Swoją drogą, wygląda jakbyś miał cały czas starą wersję eLicznika, u mnie generowanie raportów wygląda trochę inaczej: image

Ogólnie, to teraz bym chyba próbował unikać używania API w sposób, który nie jest możliwy do osiągnięcia przez interfejs, wtedy ograniczam rozróżnialność mojej integracji względem normalnego użytkowania strony.


@faraon66 Jeśli chodzi o pobieranie danych z bazy, to faktycznie potencjalnie mogłoby to ograniczyć zakres konieczny do pobrania z eLicznika, ale tak czy siak musiałbym najpierw pobrać dane z API (integracja na starcie pobiera rok wstecz). Dodatkowo użytkownicy mogą mieć dziury/błędy w swojej bazie danych, bądź np. istniejące dane mogą tylko częściowo pokrywać wybrany do pobrania zakres. Wykrywanie i obsługa takich przypadków byłyby problematyczne. Biorąc pod uwagę, że pobieranie danych z API i tak muszę mieć zrobione, to wolałbym nie dodawać dodatkowych funkcjonalności, które by były podatne na błędy.

faraon66 commented 1 year ago

api

A może zamiast Raportu użyć "Pobierz dane"?

essenemari commented 1 year ago

Integracja przestała działać ponieważ Tauron prowadzi prace, które nadal trwają - na eLicznik jest info: "Od 16 do 19 kwietnia będziemy prowadzić prace serwisowe.".
Nie jest rozsądniej zajmować się sprawą przynajmniej po 19.04?

PiotrMachowski commented 1 year ago

@faraon66 właśnie planuję użyć tej funkcji 👍 raporty się dłużej generują

@essenemari te prace akurat się jeszcze nie zaczęły ;) ale tak, chcę jeszcze trochę poczekać, żeby nie musieć 2x poprawiać integracji

essenemari commented 1 year ago

@essenemari te prace akurat się jeszcze nie zaczęły ;) ale tak, chcę jeszcze trochę poczekać, żeby nie musieć 2x poprawiać integracji

ok. "te" prace, owszem, ale w Tauronie ogólnie dużo się dzieje w ostatnich tygodniach z punktu widzenia ich systemów (nowa apka i interfejs eLicznik itd.) Wiem, bo sporo do nich dzwoniłem, bo nie mogłem doczekać się zmiany prognoz...

sosnek1 commented 1 year ago

Hej - wiadomo może kiedy będzie fix? :) Z góry dzięki za info

PiotrMachowski commented 1 year ago

@sosnek1 Oczywiście, że wiadomo. Jak go zrobię 😉

Saviq commented 1 year ago

@PiotrMachowski hej, może mogę pomóc? Jak masz jakiś plan, mogę pogrzebać w wolnej chwili. Bo chyba już po "pracach"?

PiotrMachowski commented 1 year ago

@Saviq dzięki! Wydaje mi się, że ogarnę, postaram się na dniach wrzucić aktualizację

sosnek1 commented 1 year ago

Odnośnie samych prac to chyba coś się jeszcze dzieje

image

Tyle ze to Mój Tauron. Na eLicznik nie ma takiej informacji

PiotrMachowski commented 1 year ago

Na eLiczniku mam dziurę w danych od 14 kwietnia, 13:00 do 20 kwietnia 16:00 :/ trochę problematyczne takie coś do późniejszego naprawienia

bywciu commented 1 year ago

Hm, u mnie pełna historia do wczoraj włącznie

mmarcines commented 1 year ago

Tez mam komplet informacji do wczoraj wlacznie.

faraon66 commented 1 year ago

Na eLiczniku mam dziurę w danych od 14 kwietnia, 13:00 do 20 kwietnia 16:00 :/ trochę problematyczne takie coś do późniejszego naprawienia

Te dane zostaną "doczytane" przez eLicznik. Nie wiem jaki u Ciebie jest model licznika, ale maja one "sporą" pamięć- u mnie dla przykładu ma pamięć 96dni dla cykli 15-to minutowych.

Saviq commented 1 year ago

Te dane zostaną "doczytane" przez eLicznik. Nie wiem jaki u Ciebie jest model licznika, ale maja one "sporą" pamięć- u mnie dla przykładu ma pamięć 96dni dla cykli 15-to minutowych.

U mnie dziura za cały marzec i dwie kilkudniowe w kwietniu… nie wygląda mi, jakby się miały doczytać… Natomiast nie sądzę, żeby ta wtyczka powinna robić cokolwiek, żeby to "naprawiać"…

PiotrMachowski commented 1 year ago

Natomiast nie sądzę, żeby ta wtyczka powinna robić cokolwiek, żeby to "naprawiać"…

W eLiczniku nic naprawiać nie będzie. Chodziło mi o przypadek, że np. dzisiaj by integracja zaciągnęła do HA dane z dziurą, a jutro by w eLiczniku pojawiły uzupełnione dane.

Biegnik commented 1 year ago

Dane na pewno się jeszcze "doczytają" - jakoś nas będą chcieli rozliczać, więc dane w e-liczniku muszą się pokrywać z tymi na fakturach. Warto jeszcze chwilę poczekać, aż skończą serwisować system i wtedy odpalić poprawioną wtyczkę.

KrzysiekLegnica commented 1 year ago

Coś długo niema aktualizacji.

PiotrMachowski commented 1 year ago

@KrzysiekLegnica nie ma problemu, zwrócę Ci kasę za zakup

convicte commented 1 year ago

@KrzysiekLegnica nie ma problemu, zwrócę Ci kasę za zakup

Miałem dokładnie to samo napisać moment temu - ale mnie ubiegłeś. Ciężko szukać lepszej definicji 'mieć tupet'....

Przy okazji serdeczne dzięki za Twoją DARMOWĄ pracę nad tą integracją i wyrazy szacunku za powściągliwość w słowie w kontakcie z elementem wywrotowym.

faraon66 commented 1 year ago

Ach ... ta Legnica.

robertfili commented 1 year ago

przyłączam się i dopinguję (niewiele więcej mogę pomóc niestety); wielkie dzięki dla @PiotrMachowski !!! Ziemnice p/Legnicą

KrzysiekLegnica commented 1 year ago

@PiotrMachowski bez problemu mogę wesprzeć Twoją pracę. Nie widzę też problemu z tym pytaniem. Wielu ludzi zapewne czeka na poprawkę i wielu z nas struje swoim domem korzystając z twojej integracji.
W sieci nie ty Pierwszy będziesz któremu należy się pomoc za wkładaną pracę więc jak coś śmiało pisz, jak to przyśpieszy to myślę ze nie tylko ja wyslę Ci datek na przysłowiową kawę

spitfire commented 1 year ago

@KrzysiekLegnica z datkami czy bez zabrzmiało to trochę kiepsko i roszczeniowo.

KrzysiekLegnica commented 1 year ago

@spitfire Nie miałem takiego zamiaru, doceniam wkład każdej osoby która poświęca swój czas na rozwój HA. Wiem też doskonale że czasami brakuje na wszystko czasu.

PiotrMachowski commented 1 year ago

@KrzysiekLegnica nie chodzi o kasę, to było po prostu takie przypomnienie, że to nie jest komercyjne oprogramowanie z pełnym supportem 24/7 😉 Moje rozwiązania dla HA utrzymuję siedząc po nocach, a że ich się trochę namnożyło, to nie zawsze mam czas na natychmiastową naprawę problemów (które oczywiście lubią wychodzić w wielu integracjach jednocześnie).

Jeśłi chodzi o datki, to nie służą one jako forma zarobku (już dawno bym umarł z głodu 😄), tylko jako miły dodatek do czegoś, co i tak bym robił. Nie jest to coś koniecznego do życia, ale po prostu czasami bardziej motywuje do działania 🙂

KrzysiekLegnica commented 1 year ago

@PiotrMachowski zdaje sobie sprawę. Wcześniej napisałeś że za kilka dni ogarniesz temat i zastanawiałem się czy u mnie coś jest nie tak. Ale dzięki za informację i już grzecznie czekam i dziękuję.

PiotrMachowski commented 1 year ago

Aktualizacja tematu

tl;dr: pobieranie danych mam zrobione, ale muszę je jeszcze zoptymalizować

Udało mi się wyciągnąć dane z aktualnej wersji systemu, ale niestety CSV nie zawiera danych koniecznych do działania integracji (brak danych o strefach), więc musiałem zrobić pobieranie danych godzinowych dla każdego dnia po kolei, co niestety dość mocno spowolniło działanie integracji (szczególnie, jeśli włączone są roczne zakresy danych). Mam już wstępną wersję, która pobiera je, ale chciałbym trochę zoptymalizować to podejście (żeby upewnić się, że te same dane nie są pobierane kilkukrotnie), spróbuję też dodać reużywanie danych pomiędzy odświeżeniami danych.