Compare commits
3 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
289afca88d | |
|
|
fbe885b92c | |
|
|
0b136075de |
|
|
@ -20,6 +20,9 @@ class ReadRegister:
|
||||||
rn.PV_02_VOLTAGE,
|
rn.PV_02_VOLTAGE,
|
||||||
rn.PV_01_CURRENT,
|
rn.PV_01_CURRENT,
|
||||||
rn.PV_02_CURRENT,
|
rn.PV_02_CURRENT,
|
||||||
|
rn.PHASE_A_CURRENT,
|
||||||
|
rn.PHASE_B_CURRENT,
|
||||||
|
rn.PHASE_C_CURRENT,
|
||||||
rn.INPUT_POWER,
|
rn.INPUT_POWER,
|
||||||
rn.ACTIVE_POWER,
|
rn.ACTIVE_POWER,
|
||||||
rn.GRID_CURRENT,
|
rn.GRID_CURRENT,
|
||||||
|
|
|
||||||
89
src/main.py
89
src/main.py
|
|
@ -4,7 +4,7 @@ import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import paho.mqtt.client
|
import paho.mqtt.client
|
||||||
from huawei_solar import AsyncHuaweiSolar
|
from huawei_solar import AsyncHuaweiSolar, ReadException
|
||||||
from huawei_solar import register_values as rv
|
from huawei_solar import register_values as rv
|
||||||
|
|
||||||
from src.data import InverterData, ReadRegister
|
from src.data import InverterData, ReadRegister
|
||||||
|
|
@ -22,7 +22,7 @@ port = os.getenv("INVERTER_PORT", 502)
|
||||||
host = os.getenv("INVERTER_HOST", "192.168.200.100")
|
host = os.getenv("INVERTER_HOST", "192.168.200.100")
|
||||||
|
|
||||||
LOGGER = logging.getLogger(__name__)
|
LOGGER = logging.getLogger(__name__)
|
||||||
REQUEST_INTERVAL = 60
|
REQUEST_INTERVAL = 10
|
||||||
|
|
||||||
|
|
||||||
async def get_inverter_client() -> AsyncHuaweiSolar:
|
async def get_inverter_client() -> AsyncHuaweiSolar:
|
||||||
|
|
@ -37,51 +37,56 @@ async def main():
|
||||||
inverter_client = await get_inverter_client()
|
inverter_client = await get_inverter_client()
|
||||||
count = 0
|
count = 0
|
||||||
while True:
|
while True:
|
||||||
status = await inverter_client.get(
|
try:
|
||||||
ReadRegister.inverter_reg_status, slave_id
|
status = await inverter_client.get(
|
||||||
)
|
ReadRegister.inverter_reg_status, slave_id
|
||||||
|
)
|
||||||
|
|
||||||
LOGGER.info(f"-- INVERTER -- Status: {status}")
|
LOGGER.info(f"-- INVERTER -- Status: {status}")
|
||||||
|
|
||||||
if (
|
if (
|
||||||
status.value == rv.DEVICE_STATUS_DEFINITIONS.get(0x0200)
|
status.value == rv.DEVICE_STATUS_DEFINITIONS.get(0x0200)
|
||||||
or FORCE_GET
|
or FORCE_GET
|
||||||
): # Inverter is active, Get data
|
): # Inverter is active, Get data
|
||||||
LOGGER.info("-- INVERTER -- Send measured values")
|
LOGGER.info("-- INVERTER -- Send measured values")
|
||||||
for register in ReadRegister.reg_to_read_measured:
|
for register in ReadRegister.reg_to_read_measured:
|
||||||
result = await get_inverter_data(inverter_client, register)
|
result = await get_inverter_data(inverter_client, register)
|
||||||
send_data(
|
send_data(
|
||||||
mqtt_client,
|
mqtt_client,
|
||||||
format_data_to_serialized_json(result),
|
format_data_to_serialized_json(result),
|
||||||
f"measure/{result.name}",
|
f"measure/{result.name}",
|
||||||
)
|
)
|
||||||
|
if count == 6: # Every 1 min
|
||||||
|
LOGGER.info("-- INVERTER -- Send calculated values")
|
||||||
|
for register in ReadRegister.reg_to_read_calculated:
|
||||||
|
result = await get_inverter_data(inverter_client, register)
|
||||||
|
send_data(
|
||||||
|
mqtt_client,
|
||||||
|
format_data_to_serialized_json(result),
|
||||||
|
f"calculated/{result.name}",
|
||||||
|
)
|
||||||
|
|
||||||
LOGGER.info("-- INVERTER -- Send calculated values")
|
if count == 30: # Every 5 min
|
||||||
for register in ReadRegister.reg_to_read_calculated:
|
LOGGER.info("-- INVERTER -- Send status/alarm")
|
||||||
result = await get_inverter_data(inverter_client, register)
|
for register in ReadRegister.reg_to_read_status:
|
||||||
send_data(
|
result = await get_inverter_data(inverter_client, register)
|
||||||
mqtt_client,
|
send_data(
|
||||||
format_data_to_serialized_json(result),
|
mqtt_client,
|
||||||
f"calculated/{result.name}",
|
format_data_to_serialized_json(result),
|
||||||
)
|
f"status/{result.name}",
|
||||||
|
)
|
||||||
|
count = 0
|
||||||
|
else:
|
||||||
|
LOGGER.debug("-- INVERTER -- Not Active, No need to read values")
|
||||||
|
|
||||||
if count == 5:
|
count += 1
|
||||||
LOGGER.info("-- INVERTER -- Send status/alarm")
|
|
||||||
for register in ReadRegister.reg_to_read_status:
|
|
||||||
result = await get_inverter_data(inverter_client, register)
|
|
||||||
send_data(
|
|
||||||
mqtt_client,
|
|
||||||
format_data_to_serialized_json(result),
|
|
||||||
f"status/{result.name}",
|
|
||||||
)
|
|
||||||
count = 0
|
|
||||||
else:
|
|
||||||
LOGGER.debug("-- INVERTER -- Not Active, No need to read values")
|
|
||||||
|
|
||||||
count += 1
|
LOGGER.info(f"Sleeping {REQUEST_INTERVAL}")
|
||||||
|
await asyncio.sleep(REQUEST_INTERVAL)
|
||||||
LOGGER.info(f"Sleeping {REQUEST_INTERVAL}")
|
except ReadException as error:
|
||||||
await asyncio.sleep(REQUEST_INTERVAL)
|
LOGGER.error(f"Can't read register, {ReadRegister.inverter_reg_status}. "
|
||||||
|
f"Error code: {error}. Sleep for 10 min")
|
||||||
|
await asyncio.sleep(60) # Sleep 1 min
|
||||||
|
|
||||||
|
|
||||||
def send_data(
|
def send_data(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue