51 lines
2.4 KiB
Python
51 lines
2.4 KiB
Python
from JKBMS import JKBMS
|
|
from Register import Register
|
|
from homeassistant import ha_mqtt_formatter
|
|
import paho.mqtt.client as paho
|
|
import json
|
|
|
|
HOMEASSISTANT_TOPIC = 'homeassistant'
|
|
BASE_TOPIC = 'jk-bms'
|
|
# switches = ['BatChargeEN', 'BatDisChargeEN', 'BatBalanceEN', 'HeaterEN', 'DisableTempSensor', 'GpsHeartBeat' , 'PortSwitch', 'LcdAlwaysOn', 'SpecialCharger', 'SmartSleep', 'DisablePclModule', 'TimedStoredData', 'ChargingFloatEN']
|
|
# sensors_v = [, 'CellVolAve', 'BatCurrent', 'SOCStateOfcharge', 'SOCCapRemain', , 'SOCCycleCap']
|
|
# sensors_c = ['CellCount', 'SOCCycleCount', ]
|
|
# sensors_a =
|
|
# numbers = ['CellUnderVoltProtectionValue', '100PercentSoCVoltageValue', 'ZeroPercentSoCVoltageValue', 'CellChargeOverCurrentProtection', 'CellDischargeOverCurrentProtection', 'SOCFullChargeCap']
|
|
|
|
#setup
|
|
jkbms = JKBMS(BASE_TOPIC, 0x01, "/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0")
|
|
# paho_client = paho.Client(client_id='bms-monitor', callback_api_version=paho.CallbackAPIVersion.VERSION2)
|
|
# paho_client.username_pw_set('growatt','growatt_password')
|
|
# paho_client.connect('homeassistant.internal', 1883, 60)
|
|
# mqtt_ha_base = ha_mqtt_formatter("JiKong", 'PB2A16S20A', f'bms-{jkbms.id}', [f'{BASE_TOPIC}_bms-{jkbms.id}'], [f'{BASE_TOPIC}/bms-{jkbms.id}/availability'], 'battery')
|
|
|
|
try:
|
|
if not jkbms.connect():
|
|
raise Exception.with_traceback()
|
|
# for cell in range(len(jkbms.getRegister('CellCount').value)):
|
|
# paho_client.publish(f'{HOMEASSISTANT_TOPIC}/sensor', mqtt_ha_base.sensor(f'{BASE_TOPIC}_bms-{jkbms.id}_CellVol{cell}', f'CellVol{cell}', "measurement", f'{BASE_TOPIC}/bms-{jkbms.id}', 'v',))
|
|
# for switch in switches:
|
|
# paho_client.publish(f'{HOMEASSISTANT_TOPIC}/switch', mqtt_ha_base.switch(f'{BASE_TOPIC}_bms-{jkbms.id}_{switch}', switch, True, False, f'{BASE_TOPIC}/bms-{jkbms.id}'))
|
|
# for sensor in sensors:
|
|
# paho_client.publish(mqtt_ha_base.sensor(f'{BASE_TOPIC}_bms-{jkbms.id}_{sensor}', sensor, "measurement", f'{BASE_TOPIC}/bms-{jkbms.id}', ))
|
|
except Exception as ex:
|
|
print("Couldn't connect to the MQTT broker, the GUI part if used, won't be updated.")
|
|
paho_client = None
|
|
|
|
#main
|
|
try:
|
|
|
|
jkbms.getCellVoltages()
|
|
updates = jkbms.dump()
|
|
print()
|
|
|
|
|
|
# if paho_client != None:
|
|
|
|
|
|
# paho_client.publish(f"bms-monitor/{list(updates.keys())[0]}", json.dumps(updates[list(updates.keys())[0]]))
|
|
# paho_client.on_subscribe
|
|
# paho_client.disconnect()
|
|
except Exception as ex:
|
|
print(ex)
|