1. Nein es ist nicht die PV DC Leistung sondern die PV AC Wirkleistung (nach dem Wandler) die dem Register beheimatet ist.
2. Eine Fallunterscheidung hat beim EVU des SG zu noch mehr Problemen geführt. ( mit WiiNet oder ohne ) da Sungrow den Fehler gelöst hat und jetzt Kunden die Updaten wieder Ihre Einstellungen ändern müssen etc etc.
Deswegen lieber unter der Haube was ändern (auch wenn es ein wenig mehr Rechenleistung benötigt) als den Endkunden unnötig zu behelligen.
Wenn Sungrow das gelöst hat kann man es ja immer noch rückgängig machen im Code, doch so hat nie jemand was davon mitbekommen.
3. Es gibt keine Möglichkeit die Plausibilität zu Prüfen. Genau das wie in deiner Vermutung, passiert auch. Um das zu Überprüfen bräuchte man einen zweiten Powermeeter und dann ist auch die Frage wer von beiden sagt den die Wahrheit.
Ich für mein Teil verlinke die hier den code.
Den gebe ich an Lutz ab und dann ist dein Problem beim nächsten Update zur NIghtly gelöst.
VG Maxim
Code: Alles auswählen
#!/usr/bin/env python3
from typing import Dict, Union
from dataclass_utils import dataclass_from_dict
from modules.common import modbus
from modules.common.component_state import InverterState
from modules.common.component_type import ComponentDescriptor
from modules.common.fault_state import ComponentInfo
from modules.common.modbus import ModbusDataType, Endian
from modules.common.simcount import SimCounter
from modules.common.store import get_inverter_value_store
from modules.devices.sungrow.config import SungrowInverterSetup
class SungrowInverter:
def __init__(self,
device_id: int,
device_modbus_id: int,
component_config: Union[Dict, SungrowInverterSetup],
tcp_client: modbus.ModbusTcpClient_) -> None:
self.__device_id = device_id
self.__device_modbus_id = device_modbus_id
self.component_config = dataclass_from_dict(SungrowInverterSetup, component_config)
self.__tcp_client = tcp_client
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="pv")
self.store = get_inverter_value_store(self.component_config.id)
self.component_info = ComponentInfo.from_component_config(self.component_config)
def update(self) -> None:
unit = self.__device_modbus_id
powerPV = self.__tcp_client.read_input_registers(5016,
ModbusDataType.UINT_32,
wordorder=Endian.Little,
unit=unit) * -1
"""
if powerPV and activePower are the same with SG Inverters during the Day, than remove active Power
and the if clause and change powerPV to power.
"""
activePower = self.__tcp_client.read_input_registers(5030,
ModbusDataType.UINT_32,
wordorder=Endian.Little,
unit=unit) * -1
if (activePower <= powerPV):
power = activePower
else:
power = powerPV
_, exported = self.sim_counter.sim_count(power)
inverter_state = InverterState(
power=power,
exported=exported
)
self.store.set(inverter_state)
component_descriptor = ComponentDescriptor(configuration_factory=SungrowInverterSetup)