Modbus sensor

I’m not a python expert, but this seems to work…

Python script snippet - getModbusData.py

#!/usr/bin/env python
import requests
import json
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.client.sync import ModbusTcpClient as ModbusClient

#Define Modbus Target Device
client = ModbusClient('X.X.X.X',port=502)

client.connect()

controller = 0x01
address = 0x01
count2   = 19
result2  = client.read_coils(address, count2, unit=controller)

client.close()

#REPEAT THE FOLLOWING FOR EACH REGISTER 
sensorname = 'binarysensor.pump_status'
if result2.bits[0]:
    data = {"state": "On"}
else:
    data = {"state": "Off"}
url = 'http://localhost:8123/api/states/' + sensorname
data_json = json.dumps(data)
headers = {'Content-type': 'application/json'}
response = requests.post(url, data=data_json)

command_shell.yaml snippet:

getmodbusbinary: 'python /PATH_TO_SCRIPT/getModbusData.py'

automation.yaml snippet:

- alias: 'Update Binary Sensors'
  trigger:
    platform: time
    seconds: '/5'
  action:
      service: shell_command.getmodbusbinary