Yes, chr is an issue most likely. Take a look at how uint8 from a binary representation is sent here : https://gitlab.com/voxl-public/voxl-sdk/core-libs/libapq8096-io/-/blob/master/lib/python/voxl_i2c_apm_v1.py#L48 you can do something similar (also example for hex). The data type needs to be some sort of an int.
#values of configuration registers CTRLA (address 0x00) and CTRLB (address 0x01)
CTRLA = np.uint8(int('0b01011000',2)) #offset calib every 128 conv, volt=Sense+; so sampling takes about 35ms (for both voltage and current together)
CTRLB = np.uint8(int('0b00000100',2))
#addresses of registers for reading data
REG_VRAW = int('0x1E',16)
REG_IRAW = int('0x14',16)
#write configuration to both LTC2946 devices
p.slave_config(ID0)
p.write(0,8,CTRLA)
p.write(1,8,CTRLB)
...
p.slave_config(ID0)
vraw_batt = p.read(REG_VRAW,8,2)
iraw_batt = p.read(REG_IRAW,8,2)