kellerza / sunsynk

Deye/Sunsynk Inverter Python library and Home Assistant OS Addon
https://kellerza.github.io/sunsynk/
MIT License
229 stars 95 forks source link

Essential Power MathSensor isn't working properly #134

Closed duanemck closed 1 year ago

duanemck commented 1 year ago

Issue related to the Python sunsynk library

Describe the issue/bug

The Essential Power sensor seems to be calculating incorrectly. According to #75 it is a combination of

It looks to me like it's not subtracting the "Grid LD power" on my inverter. If you have a look at the below HA sensors: image (I have "Aux" labeled as "Generator" in HA as I have a generator connected. But at the moment it's not being used).

Essential Power = 1416 + (-640) + 0 = 776. Instead I'm getting 1428W

You'll also notice that I have a CBI nanoview measuring my usage. It never matches the inverter exactly but it's normally within range, in the screenshot it's showing 760W (pretty close to the expected value above) and not 1428W that the add-on is reporting.

Expected behavior

Covered most of this above, I'm expecting the correct Essential Power value

Logs (if applicable)

I can't see anything related in the logs.

paste logs in 3x backticks...
duanemck commented 1 year ago

Just to note, this used to work perfectly (started using the add-on in December). I'm not sure when it changed, only noticed recently, it's possible that it happened when I switched to the multi add-on a few weeks back. I was using the dev one for most of the year as there was a bugfix for reading program modes in that version.

kellerza commented 1 year ago

Can you try this as mysensors.py? It prints the calculation in the logs every couple of seconds

add these sensors - old1/old2 should be the December one, hopefully they are the same

SENSORS:
  - essential_power
  - essential_power_old1
  - essential_power_old2
import attrs
import re

from sunsynk import AMPS, CELSIUS, KWH, VOLT, WATT
from sunsynk.rwsensors import RWSensor, ResolveType
from sunsynk.sensors import RegType, ValType, SensorDefinitions, MathSensor, _LOGGER

SENSORS = SensorDefinitions()

@attrs.define(slots=True, eq=False)
class DebugMathSensor(MathSensor):
    """Math sensor, add multiple registers."""
    cycle = attrs.field(default=1, init=False, repr=False)

    def reg_to_value(self, regs: RegType) -> ValType:
        """Calculate the math value."""
        res = super().reg_to_value(regs)
        self.cycle -= 1
        if self.cycle < 1:
            self.cycle = 20
            _LOGGER.info("%s=%s, %s", dict(zip(self.address, regs)), res, self)
        return res

SENSORS += (
    # https://github.com/kellerza/sunsynk/issues/75
    #  https://powerforum.co.za/topic/8646-my-sunsynk-8kw-data-collection-setup/?do=findComment&comment=147591
    DebugMathSensor(
        (175, 169, 166), "Essential power", WATT, factors=(1, 1, -1), absolute=True
    ),
    DebugMathSensor(
        (175, 169, 166), "Essential power old1", WATT, factors=(1, 1, -1)
    ),
    DebugMathSensor(
        (175, 167, 166), "Essential power old2", WATT, factors=(1, 1, -1)
    ),
)
duanemck commented 1 year ago

Looks like old2 lines up closest with the actual

image

kloon commented 1 year ago

I was just about to open an issue on this as well. My panels have only been installed this week and prior to that I was running in UPS mode only.

I switch between zero export and limit to load in the evenings and back to zero export in the mornings to feed non essentials.

I am noticing the calculation of both ss_essential_power and ss_load_power reflect the usage of essential + non essentials when in Zero Export mode. I understand that it might be right for ss_load_power, but for ss_essential_power I would expect it would subtract the non-essential power from the total and present that.

Screenshot on 2023-05-12 at 11-30-36

My screenshot above is while in Zero Export mode and SS Essential Power is the ss_essential_power sensor and Essential Power is the ss_load_power sensor.

As you can see my non-essential and essential readings are pretty much the same and comparing it with my solar production it is clear that my non-essential load is actually included in both the ss_essential_power and ss_load_power sensors.

kellerza commented 1 year ago

In the latest version there are now 3 essential power sensors.

@kloon - let us know what works for you

I'm expecting this has something to do with the use of Aux / register 235 - sensor generator_input but have not investigated it much further. For now, you can decide which one of the 3 fits your installation...

kloon commented 1 year ago

@kloon - let us know what works for you

Thanks, @kellerza, using essential_1_power does the job for me.

duanemck commented 1 year ago

In the latest version there are now 3 essential power sensors.

  • The one used in the dev&normal addon is called essential_1_power (I'm using this one and renamed it to sensor.ss_essential_power in HA) - @duanemck probably the one you need as well
  • The "absolute" one discussed in Essential Power reading issue #75 is called essential_2_power - @lispwarez
  • The one use on the powerforum and @slipx06 power flow card is called essential_power

@kloon - let us know what works for you

I'm expecting this has something to do with the use of Aux / register 235 - sensor generator_input but have not investigated it much further. For now, you can decide which one of the 3 fits your installation...

Thanks for the fix, using essential_1_power and it seems to line up for the most part (accounting for inverter usage and inefficiencies)

RenierBoshoff commented 4 weeks ago

essential_1_power

I am assuming I need to change this in the MQTT sensor setting for https://kellerza.github.io/sunsynk/ addon? But this does not work as I would expect.

I will fiddle a bit and see. I would like the Essential Power to match the UPS or Load Power on the inverter screen.

Here I have my Geyser on, as a Non-Essential load. Non Essential = 3.3kW correct. Essential shows 3.93kW which is not what I want.

After a bit I switch the Geyser off and the "Essential" Home icon changes to a Home with a Battery (634Watt) Why does that happen and how can I change the "Essential" value to only display the Load Side (or UPS side) of the inverter?

(How can I tag slipx06 here?

https://github.com/user-attachments/assets/b7741842-58af-4384-9f82-9877b83129e1