New to HA, just found pyscript, love it, finally I can read/convert BCD values over MODBUS
my conversion for 2 water meters,
example, raw reading “34305,8483,0,0” converts to 186.23 m3 :),
@service
def watermeters():
# Main watermeter
txt = sensor.watermeter_raw
value_str =txt.split("," )
Highword = '{0:b}'.format(int(value_str[0]))
Highword = '%016d'%int(Highword)
LowWord = '{0:b}'.format(int(value_str[1]))
LowWord = '%016d'%int(LowWord)
digit8 = int(Highword[8:12],2)
digit7 = int(Highword[12:16],2)
digit6 = int(Highword[:4],2)
digit5 = int(Highword[4:8],2)
digit4 = int(LowWord[8:12],2)
digit3 = int(LowWord[12:16],2)
digit2 = int(LowWord[:4],2)
digit1 = int(LowWord[4:8],2)
value = (digit8 * 1000) + (digit7 * 100) + (digit6 * 10) + (digit5)+ (((digit4 * 1000) + (digit3 * 100)) * 0.0001)
input_number.main_water_meter.set_value(value)
# Main watermeter
txt = sensor.pool_watermeter_raw
value_str =txt.split("," )
Highword = '{0:b}'.format(int(value_str[0]))
Highword = '%016d'%int(Highword)
LowWord = '{0:b}'.format(int(value_str[1]))
LowWord = '%016d'%int(LowWord)
digit8 = int(Highword[8:12],2)
digit7 = int(Highword[12:16],2)
digit6 = int(Highword[:4],2)
digit5 = int(Highword[4:8],2)
digit4 = int(LowWord[8:12],2)
digit3 = int(LowWord[12:16],2)
digit2 = int(LowWord[:4],2)
digit1 = int(LowWord[4:8],2)
value = (digit8 * 1000) + (digit7 * 100) + (digit6 * 10) + (digit5)+ (((digit4 * 1000) + (digit3 * 100)) * 0.0001)
input_number.pool_water_meter.set_value(value)
just need to figure out how to write to a counter instead of a input number