Water meter - BCD coded (modbus

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 :slight_smile: