ModbusSlave error getting response from slave

I have several PoKeys 57E boards that I talk to via modbus-1.9.0-SNAPSHOT, one of them is giving me errors and I can’t see why.

2016-10-04 12:18:45 ERROR o.o.b.m.internal.ModbusSlave[:418]- ModbusSlave (second_ponet) error getting response from slave
java.lang.IndexOutOfBoundsException: null
	at net.wimpi.modbus.util.BitVector.byteIndex(BitVector.java:240)
	at net.wimpi.modbus.util.BitVector.getBit(BitVector.java:142)
	at org.openhab.binding.modbus.internal.ModbusBinding.internalUpdateItem(ModbusBinding.java:339)
	at org.openhab.binding.modbus.internal.ModbusSlave.updateItem(ModbusSlave.java:433)
	at org.openhab.binding.modbus.internal.ModbusSlave.update(ModbusSlave.java:415)
	at org.openhab.binding.modbus.internal.ModbusBinding.execute(ModbusBinding.java:378)

My openhab.cfg

# Modbus
modbus:poll=250

modbus:tcp.water.connection=10.88.64.45
modbus:tcp.water.length=55
modbus:tcp.water.type=coil

modbus:tcp.basement.connection=10.88.64.46
modbus:tcp.basement.length=55
modbus:tcp.basement.type=coil

modbus:tcp.basement_shared.connection=10.88.64.46
modbus:tcp.basement_shared.start=200
modbus:tcp.basement_shared.length=2
modbus:tcp.basement_shared.type=coil

modbus:tcp.basement_ponet.connection=10.88.64.46
modbus:tcp.basement_ponet.start=2071
modbus:tcp.basement_ponet.length=8
modbus:tcp.basement_ponet.type=coil

modbus:tcp.first.connection=10.88.64.47
modbus:tcp.first.length=55
modbus:tcp.first.type=coil

modbus:tcp.first_ponet.connection=10.88.64.47
modbus:tcp.first_ponet.start=2071
modbus:tcp.first_ponet.length=8
modbus:tcp.first_ponet.type=coil

modbus:tcp.first_shared.connection=10.88.64.47
modbus:tcp.first_shared.start=200
modbus:tcp.first_shared.length=2
modbus:tcp.first_shared.type=coil

modbus:tcp.second.connection=10.88.64.48
modbus:tcp.second.length=55
modbus:tcp.second.type=coil

modbus:tcp.second_ponet.connection=10.88.64.48
modbus:tcp.second_ponet.start=2071
modbus:tcp.second_ponet.length=8
modbus:tcp.second_ponet.type=coil

modbus:tcp.shed.connection=10.88.64.49
modbus:tcp.shed.length=55
modbus:tcp.shed.type=coil

Could you share your item definitions? Please check the index in the item against the slave length.

Best
Sami

Sure;

Group     HVAC                        (All)
Group     Basement_HVAC               (HVAC)
Group     First_Floor_HVAC            (HVAC)
Group     Second_Floor_HVAC           (HVAC)
Group     Damper                      (HVAC)

Number    HVAC_Period                 "Chart Period"
Number    Avg_Temperature             "Average Room Temperature [%.1f °F]"            <temperature>	(Temperature)
Number    Avg_Humidity                "Average Room Humidity [%.1f %%]"               <temperature>	(Humidity)

// Basement
Number		Basement_HVAC_Supply        "Basement HVAC Supply Temp [%.1f °F]"           <hvac>		    (Basement_HVAC)		  {http="<[http://10.88.64.46/devStat.xml:60000:XSLT(hvac_supply.xsl)]"}
Number		Basement_HVAC_Return        "Basement HVAC Return Temp [%.1f °F]"           <hvac>		    (Basement_HVAC)		  {http="<[http://10.88.64.46/devStat.xml:60000:XSLT(hvac_return.xsl)]"}
Number		Basement_HVAC_Delta         "Basement HVAC Delta Temp [%.1f °F]"            <hvac>		    (HVAC)

Switch		Basement_Damper             "Basement Damper [MAP(damper.map):%s]"          <damper>	    (Damper)		        {modbus="basement_ponet:1", autoupdate="false"}
Switch		Office_Damper               "Office Damper [MAP(damper.map):%s]"            <damper>	    (Damper)		        {modbus="basement_ponet:2", autoupdate="false"}
Switch		Shop_Damper                 "Shop Damper [MAP(damper.map):%s]"              <damper>	    (Damper)		        {modbus="basement_ponet:3", autoupdate="false"}
Switch		Electric_Room_Damper        "Electric Room Damper [MAP(damper.map):%s]"     <damper>	    (Damper)		        {modbus="basement_ponet:4", autoupdate="false"}
Switch		Water_Room_Damper           "Water Room Damper [MAP(damper.map):%s]"        <damper>	    (Damper)		        {modbus="basement_ponet:5", autoupdate="false"}
Switch		Basement_Storage_Damper     "Basement Storage Damper [MAP(damper.map):%s]"  <damper>	    (Damper)		        {modbus="basement_ponet:6", autoupdate="false"}

// First Floor
Number		First_Floor_HVAC_Supply     "1st Floor HVAC Supply Temp [%.1f °F]"          <hvac>		    (First_Floor_HVAC)	{http="<[http://10.88.64.47/devStat.xml:30000:XSLT(hvac_supply.xsl)]"}
Number		First_Floor_HVAC_Return     "1st Floor HVAC Return Temp [%.1f °F]"          <hvac>		    (First_Floor_HVAC)	{http="<[http://10.88.64.47/devStat.xml:30000:XSLT(hvac_return.xsl)]"}
Number		First_Floor_HVAC_Delta      "1st Floor HVAC Delta Temp [%.1f °F]"           <hvac>		    (HVAC)

Switch		First_Floor_Damper          "First Floor Damper [MAP(damper.map):%s]"       <damper>	    (Damper)		        {modbus="first_ponet:1", autoupdate="false"}
Switch		Living_Room_Damper          "Living Room Damper [MAP(damper.map):%s]"       <damper>	    (Damper)		        {modbus="first_ponet:2", autoupdate="false"}
Switch		Master_Bedroom_Damper       "Master Bedroom Damper [MAP(damper.map):%s]"    <damper>	    (Damper)		        {modbus="first_ponet:3", autoupdate="false"}
Switch		Guest_Bedroom_Damper        "Guest Bedroom Damper [MAP(damper.map):%s]"     <damper>	    (Damper)		        {modbus="first_ponet:4", autoupdate="false"}
Switch		Kitchen_Damper              "Kitchen Damper [MAP(damper.map):%s]"           <damper>	    (Damper)		        {modbus="first_ponet:5", autoupdate="false"}

// Second Floor
Number		Second_Floor_HVAC_Supply    "2nd Floor HVAC Supply Temp [%.1f °F]"          <hvac>		    (Second_Floor_HVAC)	{http="<[http://10.88.64.48/devStat.xml:30000:XSLT(hvac_supply.xsl)]"}
Number		Second_Floor_HVAC_Return    "2nd Floor HVAC Return Temp [%.1f °F]"          <hvac>		    (Second_Floor_HVAC)	{http="<[http://10.88.64.48/devStat.xml:30000:XSLT(hvac_return.xsl)]"}
Number		Second_Floor_HVAC_Delta     "2nd Floor HVAC Delta Temp [%.1f °F]"           <hvac>		    (HVAC)

Switch		Second_Floor_Damper         "Second Floor Damper [MAP(damper.map):%s]"      <damper>	    (Damper)		        {modbus="second_ponet:1", autoupdate="false"}
Switch		Great_Room_Damper           "Great Room Damper [MAP(damper.map):%s]"        <damper>	    (Damper)		        {modbus="second_ponet:2", autoupdate="false"}
Switch		Emma_Bedroom_Damper         "Emma's Bedroom Damper [MAP(damper.map):%s]"    <damper>	    (Damper)		        {modbus="second_ponet:3", autoupdate="false"}
Switch		Joshua_Bedroom_Damper       "Joshua's Bedroom Damper [MAP(damper.map):%s]"  <damper>	    (Damper)		        {modbus="second_ponet:4", autoupdate="false"}
Switch		Breezeway_Damper            "Breezeway Damper [MAP(damper.map):%s]"         <damper>	    (Damper)		        {modbus="second_ponet:5", autoupdate="false"}
Switch		Apartment_Damper            "Apartment Damper [MAP(damper.map):%s]"         <damper>	    (Damper)		        {modbus="second_ponet:6", autoupdate="false"}
Switch		Mom_Bedroom_Damper          "Mom's Bedroom Damper [MAP(damper.map):%s]"     <damper>	    (Damper)		        {modbus="second_ponet:7", autoupdate="false"}
Switch		Dad_Bedroom_Damper          "Dad's Bedroom Damper [MAP(damper.map):%s]"     <damper>	    (Damper)		        {modbus="second_ponet:8", autoupdate="false"}

The indexing starts from zero; I think you want to read/write coils 0-7 not 1-8. Reading coil index 8 from a modbus slave with config length 8 gives your error.

You should check your other coils correspond to the hardware channels you expect as well !

1 Like

I originally started from 0, but it was not working right in hardware. The odd part is that I can control the relay 1 - 8 on the board.

I started at the wrong spot, I was starting at 2071 and should have started 2072. So 2071 + 1 was 2072 where as if I started with correct 2072 + 0 would be 2072.