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)