logo

Enphase - Totaal kWh reset

25/07/2024

Stel je deze situatie voor: je hebt al een aantal maanden een Daytopper-account en je stuurt je Enphase-data naar de Daytopper API. Hierbij maak je gebruik van je eigen implementatie, dat wil zeggen dat je zelf de data uit je Enphase-omvormer haalt en doorstuurt naar de Daytopper API. Maar dan ineens zie je je totalen niet meer geüpdatet worden in de Daytopper app en verschijnt de volgende foutmelding wanneer je data naar de API stuurt: “Total should be greater or equal to the previous total….”

Het is de schrik van elke Enphase-gebruiker! Maar gelukkig ben je niet de enige in dit verhaal.

Het blijkt dat er een fout zit in de firmware die momenteel draait, een fout die eens in de zoveel tijd opduikt (wellicht door een reboot van de gateway) in zowel de IQ7 als de IQ8. De totaalopbrengst die je hebt bereikt, wordt door de API niet meer correct teruggegeven. In plaats daarvan krijg je een lager getal (je kWh) terug omdat Enphase vanaf 0 weer is gaan optellen.

Een kort technisch verhaal

Enphase kent 2 endpoints:

  • https://enphase.local/api/v1/production geeft als resultaat:
    {
      "wattHoursToday": 150,
      "wattHoursSevenDays": 26509,
      "wattHoursLifetime": 1193261,
      "wattsNow": 190
    }
  • https://enphase.local/production.json geeft als resultaat:
    {
      "production": [
        {
          "type": "inverters",
          "activeCount": 3,
          "readingTime": 1719122354,
          "wNow": 197,
          "whLifetime": 215
        }
      ],
      "storage": [
        {
          "type": "acb",
          "activeCount": 0,
          "readingTime": 0,
          "wNow": 0,
          "whNow": 0,
          "state": "idle"
        }
      ]
    }
    

Beide geven een totaal terug, maar met een klein verschil in velden. Voor zover bekend is het onduidelijk welke API-call de Enphase gateway zelf gebruikt. Het lijkt erop dat ze in de Enphase app geen van beide gebruiken, of er op een andere manier mee omgaan en dus een eigen oplossing hebben.

Het probleem

Als gebruiker zijn er 2 scenario's die we bij enkele huidige Daytopper-gebruikers hebben gezien:

      https://enphase.local/production.json geeft niet meer de juiste waarde en geeft een 0 terug en begint vanaf 0 weer met optellen. De andere endpoint lijkt geen probleem te ondervinden en hierin is het totaal nog zoals het hoort te zijn.
      Zowel https://enphase.local/production.json als https://enphase.local/api/v1/production geven een 0 terug en beginnen weer vanaf 0 met optellen. Beide endpoints hebben een reset gehad.

Waarom en hoe dit ontstaat, is tot op heden onduidelijk en Enphase is hier zelf ook onduidelijk over. Het is dus niet aannemelijk dat dit spoedig in nieuwere versies van de firmware wordt opgelost. Het lijkt erop dat ergens in de omvormer een cache/memory wordt geleegd/reset wanneer de gateway een reset ervaart.

De oplossing

Gelukkig hebben we in de Daytopper module een oplossing hiervoor. Voor situatie 1 schakelen we over naar het endpoint waarvan het totaal niet gereset is naar 0. Voor situatie 2 maken we gebruik van het resultaat van de Daytopper API. Op het moment dat we de data willen doorsturen naar de Daytopper API, doet de API een check of de data aansluitend is. Dat wil zeggen: we kunnen alleen maar omhoog en niet omlaag. Wanneer de API detecteert dat we omlaag gaan, dus in dit geval een 0 sturen als totaal, dan geeft de API een foutmelding:

{
  "error": "Total should be greater or equal to the previous total. Given total: 12 must be greater than current total: 15445810 for device Solax:1",
  "code": "wrong_total",
  "givenTotal": 12,
  "currentTotal": 15445810,
  "deviceName": "Solax",
  "deviceId": 1
}

Wat we hiermee doen is dat we de currentTotal gaan gebruiken en dit voortaan bij de totaal die we van Enphase terugkrijgen gaan optellen.

Heb je een eigen implementatie, dan moet je hier rekening mee houden. Je zult dan zelf de totaal en de totaal van de API (currentTotal) moeten samenvoegen en doorsturen naar de API.