bajansen / home-assistant-frank_energie

Custom Component voor Home Assistant Frank Energie prijsinformatie
68 stars 19 forks source link

No data #30

Closed HiDiHo01 closed 2 years ago

HiDiHo01 commented 2 years ago

De api geeft geen data meer, misschien door het uur verschil (wintertijd) correctie: er is wel data alleen niet van elektra vandaag/morgen, gas geeft wel voor 2 dagen data De site Frank Energie en mobiele app geven ook niets meer aan.

Alle sensoren geven deze melding: Deze entiteit is niet meer beschikbaar vanuit de frank_energie integratie. Wanneer de entiteit niet meer in gebruik is, kan deze vanuit de instellingen verwijderd worden.

jopvanraaij commented 2 years ago

Volgens mij ligt het aan Frankenergie: op de website en de app zijn ook geen energieprijzen zichtbaar. Neem aan dat ze hard aan het werk zijn om het op te lossen bij Frank...

HiDiHo01 commented 2 years ago

Volgens mij ligt het aan Frankenergie: op de website en de app zijn ook geen energieprijzen zichtbaar. Neem aan dat ze hard aan het werk zijn om het op te lossen bij Frank...

Ja klopt. Ik weet alleen niet hoe Home Assistant hier nu mee om gaat...zal wel opnieuw opstarten worden als er weer gegevens zijn. Misschien kan dit component aangepast worden zodat er overal "unavailable" komt bij sensoren. Dit kan natuurlijk vaker voorkomen en gooit roet in het eten bij automatisering. edit: en/of een binary_sensor die aangeeft of er data aanwezig is.

bajansen commented 2 years ago

De api werkt ondertussen weer. De prijsentiteiten stonden in mijn installatie nog op onbeschikbaar, na een herstart werkte het weer naar behoren. Het kan zijn dat dit komt doordat de informatie nog pas net beschikbaar is en dat de integratie deze data nog niet had opgehaald, of er blijft iets hangen waardoor een herstart nodig is.

jopvanraaij commented 2 years ago

Bij mij is het automatisch hersteld. Ik had dus geen herstart nodig. Wel een gat in de history nu. Screenshot_20221030-163201

HiDiHo01 commented 2 years ago

Bij mij bleef hij op de laatste prijs staan in de statistieken, sensor zelf gaf unavailable aan omdat ik overal de default "unavailable" ingesteld heb. Herstart was nodig. Het vreemde is dat prijzen voor "upcoming" en "morgen" wel automagisch terug kwam. Het aantal uur geladen staat nu ook op 73 dus misschien moet ik nog iets aanpassen omdat ik nu delen door "24" uur ingesteld had.

Om 2 uur vannacht ging het aantal uren geladen naar 24, daarna om 14 uur naar 49 en om 15 uur naar 73 Er gebeuren rare dingen met dat extra uur

HiDiHo01 commented 2 years ago

De api werkt ondertussen weer. De prijsentiteiten stonden in mijn installatie nog op onbeschikbaar, na een herstart werkte het weer naar behoren. Het kan zijn dat dit komt doordat de informatie nog pas net beschikbaar is en dat de integratie deze data nog niet had opgehaald, of er blijft iets hangen waardoor een herstart nodig is.

Mijn ervaring is dat als de component een fout geeft er een herstart nodig is. Als je "unavailable" terug laat komen als waarde voor de sensor gaat het meestal wel goed (dit doe ik voor sensors "morgen" omdat er na 0:00 uur geen data voor morgen aanwezig is. Om 15 uur komt dan vanzelf de nieuwe data in de sensors, zonder fout in de component.

def get_tomorrow_prices(self, hourprices) -> List:
        tomorrow_prices = []
        i=0
        for hour in hourprices:
            if 47 < i < 72:
                tomorrow_prices.append(
                    (hour['marketPrice'] + hour['marketPriceTax'] + hour['sourcingMarkupPrice'] + hour['energyTaxPrice'])
                )
            i=i+1
        if -1 < datetime.now().hour < 15:
            return 'unavailable'
        if len(hourprices) == 48:
            return 'unavailable'
        return tomorrow_prices

Dit werkt op zich perfect alleen gooit dat uur extra roet in het eten.

HiDiHo01 commented 2 years ago

Ik heb het volgende toegevoegd aan get_hourprices om een fout in het component te voorkomen Dit werkt alleen als je 72 uur inlaadt, laadt je 48 uur in moet len(hourprices) == 0 zijn.

        if len(hourprices) == 24: #fix for when no data for today is available
            return 'unavailable'

In de huidige vorm kun je dit toevoegen aan de eerste regel

    def get_hourprices(self, hourprices) -> Dict:
        if len(hourprices) == 0: #fix when no data for today is available
            return 'unavailable'
        today_prices = dict()
....etc
HiDiHo01 commented 2 years ago

Even wat wijzigingen doorgevoerd, alles werkt weer prima extrahour_prices toegevoegd voor 1 dag per jaar....wanneer dag een extra uur heeft (dit zal over een half jaar wel weer een probleem vormen maar dat pas ik dan wel aan) Gemiddelde van vandaag klopt weer.

    def get_hourprices(self, hourprices) -> Dict:
        if len(hourprices) == 24: #fix when no data for today is available
            return 'unavailable'
        extrahour_prices = dict()
        today_prices = dict()
        tomorrow_prices = dict()
        i=0
        for hour in hourprices:
            # Calling astimezone(None) automagically gets local timezone
            fromtime = dt.parse_datetime(hour['from']).astimezone()
            if 23 < i < 48:
               today_prices[fromtime] = hour['marketPrice'] + hour['marketPriceTax'] + hour['sourcingMarkupPrice'] + hour['energyTaxPrice']
            if 24 < i < 49:
               extrahour_prices[fromtime] = hour['marketPrice'] + hour['marketPriceTax'] + hour['sourcingMarkupPrice'] + hour['energyTaxPrice']
            if 47 < i < 72:
               tomorrow_prices[fromtime] = hour['marketPrice'] + hour['marketPriceTax'] + hour['sourcingMarkupPrice'] + hour['energyTaxPrice']
            i=i+1
        if len(hourprices) == 49:
            return extrahour_prices
        if 3 < datetime.now().hour < 24:
            return today_prices
        if -1 < datetime.now().hour < 3:
            if tomorrow_prices:
                return tomorrow_prices
        return today_prices

Dit is dus als je 72 uur inlaadt

HiDiHo01 commented 2 years ago

En weer zijn er geen gegevens... Als Frank het zo slecht doet, begin ik echt te twijfelen of de rekening wel klopt

Logger: custom_components.frank_energie.coordinator Source: C:\Program Files\HassWP_2022.8.6\python-3.9.10.amd64\lib\site-packages\homeassistant\helpers\update_coordinator.py:263 Integration: frank_energie First occurred: 03:15:06 (11 occurrences) Last logged: 03:19:21

Unexpected error fetching Frank Energie coordinator data: can only concatenate list (not "NoneType") to list Traceback (most recent call last): File "C:\Program Files\HassWP_2022.8.6\python-3.9.10.amd64\lib\site-packages\homeassistant\helpers\update_coordinator.py", line 205, in _async_refresh self.data = await self._async_update_data() File "C:\Program Files\HassWP_2022.8.6\config\custom_components\frank_energie\coordinator.py", line 48, in _async_update_data 'marketPricesElectricity': data_today['marketPricesElectricity'] + data_tomorrow['marketPricesElectricity'], TypeError: can only concatenate list (not "NoneType") to list

HiDiHo01 commented 2 years ago

Hij werkt weer.

HiDiHo01 commented 2 years ago

En weer geen gegevens

bajansen commented 2 years ago

Ik had nog geen tijd gehad om te kijken wat er gebeurde en dacht dat er bij Frank Energie gewoon iets hobbelde als gevolg van de wintertijd, maar het lijkt erop dat de API alleen nog maar data voor een enkele dag terug wil geven. Ik zal eens kijken of ik iets kan ombouwen.

HiDiHo01 commented 2 years ago

Dit gaat een goedkoop maandje worden zo :P

Maar serieus; de enige reden dat mensen Frank Energie gebruiken is omdat ze het kunnen automatiseren, niemand gaat zijn wekker zetten voor 3 uur 's nachts om de was te draaien en de warmtepomp aan te zeten (en wakker blijven om hem weer uit te zetten als de prijs omhoog gaat). Niet zo best van Frank dit, geeft mij weinig vertrouwen in hun kunde.

HiDiHo01 commented 2 years ago

Ik hoop wel dat prijzen voor morgen nog terugkomen

bajansen commented 2 years ago

Data van de volgende dag wordt nu weer opgehaald, als het goed is ook zonder stuk te gaan wanneer de data er niet is.