fix model detection

This commit is contained in:
bohdan-s
2021-12-20 16:53:44 +11:00
parent c93c80d414
commit 1956927f45
2 changed files with 22 additions and 16 deletions
-2
View File
@@ -1140,7 +1140,6 @@ registers:
level: 2 level: 2
address: 5037 address: 5037
datatype: "S16" datatype: "S16"
multiple: 0.1
# - name: "Reserved" # - name: "Reserved"
# address: 5038 # address: 5038
- name: "power_limitation_adjustment" - name: "power_limitation_adjustment"
@@ -1152,7 +1151,6 @@ registers:
level: 2 level: 2
address: 5040 address: 5040
datatype: "S16" datatype: "S16"
multiple: 0.1
- name: "pid_recovery" - name: "pid_recovery"
level: 2 level: 2
address: 5041 address: 5041
+22 -14
View File
@@ -134,8 +134,8 @@ def load_registers(register_type, start, count=100):
if register.get('smart_meter') and config['inverter'].get('smart_meter'): if register.get('smart_meter') and config['inverter'].get('smart_meter'):
inverter[register_name] = register_value inverter[register_name] = register_value
elif register.get('models') and not config['inverter'].get('level',1) == 3: elif register.get('models') and not config['inverter'].get('level',1) == 3:
for model in register.get('models'): for supported_model in register.get('models'):
if model == config['inverter'].get('model'): if supported_model == inverter.get('device_type_code'):
inverter[register_name] = register_value inverter[register_name] = register_value
else: else:
inverter[register_name] = register_value inverter[register_name] = register_value
@@ -165,19 +165,20 @@ def load_registers(register_type, start, count=100):
register_value = 0 register_value = 0
if register.get('multiple'): if register.get('multiple'):
register_value = round(register_value * register.get('multiple'),2) register_value = round(register_value * register.get('multiple',0),2)
# Set the final register name and value after checking model, any adjustments above included # Set the final register name and value after checking model, any adjustments above included
if register.get('level',3) <= config['inverter'].get('level',1) or config['inverter'].get('level',1) == 3: if register.get('level',3) <= config['inverter'].get('level',1) or config['inverter'].get('level',1) == 3:
if register.get('smart_meter') and config['inverter'].get('smart_meter'): if register.get('smart_meter') and config['inverter'].get('smart_meter'):
inverter[register_name] = register_value inverter[register_name] = register_value
elif register.get('models') and not config['inverter'].get('level',1) == 3: elif register.get('models') and not config['inverter'].get('level',1) == 3:
for model in register.get('models'): for supported_model in register.get('models'):
if model == config['inverter'].get('model'): if supported_model == inverter.get('device_type_code'):
inverter[register_name] = register_value inverter[register_name] = register_value
else: else:
inverter[register_name] = register_value inverter[register_name] = register_value
return True return True
# Inverter Scanning # Inverter Scanning
@@ -185,20 +186,14 @@ inverter = {}
model = None model = None
if config['inverter'].get('model'): if config['inverter'].get('model'):
model = config['inverter']['model']
inverter['device_type_code'] = model inverter['device_type_code'] = model
logging.info(f'Bypassing Model Detection, Using config: {model}') logging.info(f'Bypassing Model Detection, Using config: {model}')
else: else:
if load_registers("read", 4999, 1): if load_registers("read", 4999, 1):
model = inverter.get('device_type_code') logging.info(f"Detected Model: {inverter.get('device_type_code')}")
logging.info(f'Detected Model: {model}')
else: else:
model = 'unknown' inverter['device_type_code'] = 'unknown'
logging.info(f'Model detection failed, please set model in config.py') logging.info(f'Model detection failed, please set model in config.py')
if not config['inverter'].get('model') and model == config['inverter'].get('model'):
logging.info(f'Model specified in config {config["inverter"].get("model")} does not match model reported by inverter {model}')
# Core monitoring loop # Core monitoring loop
@@ -242,6 +237,19 @@ def scrape_inverter():
except Exception: except Exception:
pass pass
# See if the inverter is running, This is added to inverters so can be read via MQTT etc...
# It is also used below, as some registers hold the last value on 'stop' so we need to set to 0
# to help with graphing.
try:
if inverter.get('start_stop'):
if inverter.get('start_stop') == 'Start':
inverter["is_running"] = True
else:
if inverter.get('start_stop') == 'Stop':
inverter["is_running"] = False
except Exception:
pass
try: try:
inverter["timestamp"] = "%s-%s-%s %s:%02d:%02d" % ( inverter["timestamp"] = "%s-%s-%s %s:%02d:%02d" % (
inverter["year"], inverter["year"],