Modbus newbie questions

I don’t really understand what you mean.

On the Modbus transaction side, if a poll takes place then the binding must get a value for every included register. There is no concept in Modbus of returning voids or “no change” or anything like that.

So if you think you’re missing data, first thing to look at is when your Things are configured to poll? Can’t comment, can’t see your Things.

Next likely stumbling block might be if the device fails to respond? This will leave errors in your logs about failed polls. The device cannot opt to miss data out; it either responds with all the data or it fails with none. You can see which is happening here, but I can’t.

If we assume the poll works, next step is for the registers to get interpreted by the data Things that you defined. Obviously, there could be mistakes there, but this configuration is static - it’s not going to work sometimes but not other times. Can’t comment, can’t see your Things.

It’s possible to construct a read transform that only messes up with some data patterns. I’m pretty sure that any such thing would show up in your events.log. Don’t know if you’re using transforms, can’t see your Things.

The data Thing has a setting that allows you to reduce the number of openHAB Item updates when the data changes. By default, that updates the Item whenever the state changes, successive polls resulting in the same state only update at most every one second. Don’t know if you’ve changed that setting, can’t see your Things.

Of course it’s not much use getting data to channels if there is no Item to receive it, so finally we must consider the Item links. Again, it is easy to mess these up (say linking one type channel to a different Item type) but it’s a static configuration, not something that works sometimes but not others. Can’t comment, can’t see your Items or links.

Profiles add complication to links, sometimes people select them in PaperUI inadvertently. Once again that’s pretty static work / not work, but also possible here to construct a transform that works sometimes. Can’t comment, can’t see your links.

We should also consider outside influence - it’s possible to get all the Modbus configuring correct but something else comes along and updates the Items unexpectedly.
You’d probably know if you had any rules doing that.
Less obvious is having multilple links to invalid channels or other bindings, so that they’re having a fight over Item updating. You would see evidence of that fight in your events.log. Can’t comment, can’t see your links or logs.

When you’re ready, pick just one of your suspect Items and follow the chain of Item - link - channel - data Thing - poller Bridge and if you cannot see anything wrong for heaven’s sake show us what you got.

1 Like

Sorry for my short reply, it was late yesterday.
Most items are actually still NULL,they did not appear in events.log so were never set. The corresponding things are ONLINE (all are, in fact). There’s no pattern, they’re NULL or not cross-pollers.
Configuration of items/things that are available and those that are not are absolutely equivalent so I don’t think that’s a reason.
The Karaf debug for modbus (see last post) wass ALL the debug lines I was getting to see for modbus debug every 5 seconds (= the polling interval I’ve set on the poller things).
After that I reconfigure quite a lot of data things (wrong poller “bridge” was confiugured or none) now it’s more values but still it’s just 1/4 or less of the values I have setup to poll.
Shouldn’t I get a debug line for every thing ?

The modbus:poller lines show how many bytes are read. That looks fine to me, it’s equivalent to two times the number of registers that I configured to read in one poll (x2 because registers are 16bit).
So the raw data is successfully read. But not copied into the things/channels and items I mapped those things to. As you correctly note that’s a static mapping and indeed, it never works.
I’m not using transformations so far so they cannot be the problem.

Here’s Karaf output for an item /data thing that works first, and another one second that does not:
I don’t see any relevant difference.

items

[14:21:52] openhabian@openHABianPi:/etc/openhab2/items$ egrep -i 'SOC|atteryPo' sungrow.items
Number:Power PVbatteryPower "batteryPower"             <battery>       (PV) { channel="modbus:data:c15b23bb:number" }
Number PVbatterySOC "batterySOC"                       <battery>       (PV) { channel="modbus:data:43dbf795:number" }

openhab> smarthome:items list PVbatteryPower
PVbatteryPower (Type=NumberItem, State=663, Label=batteryPower, Category=battery, Groups=[PV])
openhab> smarthome:items list PVbatterySOC
PVbatterySOC (Type=NumberItem, State=NULL, Label=batterySOC, Category=battery, Groups=[PV])

things

openhab> smarthome:status PVbatteryPower
402
openhab> smarthome:status PVbatterySOC
NULL
openhab> smarthome:things list | grep -i batteryPower
modbus:data:c15b23bb (Type=Thing, Status=ONLINE, Label=PVthingbatteryPower, Bridge=modbus:poller:947bd944)
openhab> smarthome:things list | grep SOC
modbus:data:43dbf795 (Type=Thing, Status=ONLINE, Label=PVthingbatterySOC, Bridge=modbus:poller:947bd944)
openhab> smarthome:things show modbus:poller:947bd944
UID: modbus:poller:947bd944
Type: modbus:poller
Label: SH10RT-register-status
Status: ONLINE
Bridge: modbus:tcp:f0352017

No properties

Configuration parameters:
        maxTries : 3
        cacheMillis : 50
        start : 13000
        length : 119
        refresh : 5000
        type : input

No channels
openhab> smarthome:things show modbus:tcp:f0352017
UID: modbus:tcp:f0352017
Type: modbus:tcp
Label: SH10RT
Status: ONLINE

No properties

Configuration parameters:
        timeBetweenTransactionsMillis : 60
        connectMaxTries : 3
        reconnectAfterMillis : 0
        port : 502
        timeBetweenReconnectMillis : 0
        host : 192.168.178.71
        connectTimeoutMillis : 10000
        id : 1
        enableDiscovery : false

No channels

openhab> smarthome:things show modbus:data:c15b23bb
UID: modbus:data:c15b23bb
Type: modbus:data
Label: PVthingbatteryPower
Status: ONLINE
Bridge: modbus:poller:947bd944

No properties

Configuration parameters:
        readValueType : uint16
        readTransform : default
        writeTransform : default
        writeType : null
        readStart : 13022
        updateUnchangedValuesEveryMillis : 1000
        writeValueType : null
        writeMultipleEvenWithSingleRegisterOrCoil : false
        writeMaxTries : 3
        writeStart : null

Channels:
        ID: number
        Label: Value as Number
        Type: modbus:number-type
        Description: Number item channel

        ID: switch
        Label: Value as Switch
        Type: modbus:switch-type
        Description: Switch item channel

        ID: contact
        Label: Value as Contact
        Type: modbus:contact-type
        Description: Contact item channel

        ID: dimmer
        Label: Value as Dimmer
        Type: modbus:dimmer-type
        Description: Dimmer item channel

        ID: datetime
        Label: Value as DateTime
        Type: modbus:datetime-type
        Description: DateTime item channel

        ID: string
        Label: Value as String
        Type: modbus:string-type
        Description: String item channel

        ID: rollershutter
        Label: Value as Rollershutter
        Type: modbus:rollershutter-type
        Description: Rollershutter item channel

        ID: lastReadSuccess
        Label: Last Successful Read
        Type: modbus:last-successful-read-type
        Description: Date of last read

        ID: lastReadError
        Label: Last Erroring Read
        Type: modbus:last-erroring-read-type
        Description: Date of last read error

        ID: lastWriteSuccess
        Label: Last Successful Write
        Type: modbus:last-successful-write-type
        Description: Date of last write

        ID: lastWriteError
        Label: Last Erroring Write
        Type: modbus:last-erroring-write-type
        Description: Date of last write error
openhab> help smarthome:things list | grep  SOC
gogo: CommandException: Error executing command help: too many arguments specified
                                                                                  ~                                                                                                                    openhab>  smarthome:things list | grep  SOC
modbus:data:43dbf795 (Type=Thing, Status=ONLINE, Label=PVthingbatterySOC, Bridge=modbus:poller:947bd944)
openhab> smarthome:things show modbus:data:43dbf795
UID: modbus:data:43dbf795
Type: modbus:data
Label: PVthingbatterySOC
Status: ONLINE
Bridge: modbus:poller:947bd944

No properties

Configuration parameters:
        readValueType : uint16
        readTransform : default
        writeTransform : default
        writeType : null
        readStart : 13107
        updateUnchangedValuesEveryMillis : 1000
        writeValueType : null
        writeMultipleEvenWithSingleRegisterOrCoil : false
        writeMaxTries : 3
        writeStart : null

Channels:
        ID: number
        Label: Value as Number
        Type: modbus:number-type
        Description: Number item channel

        ID: switch
        Label: Value as Switch
        Type: modbus:switch-type
        Description: Switch item channel

        ID: contact
        Label: Value as Contact
        Type: modbus:contact-type
        Description: Contact item channel

        ID: dimmer
        Label: Value as Dimmer
        Type: modbus:dimmer-type
        Description: Dimmer item channel

        ID: datetime
        Label: Value as DateTime
        Type: modbus:datetime-type
        Description: DateTime item channel

        ID: string
        Label: Value as String
        Type: modbus:string-type
        Description: String item channel

        ID: rollershutter
        Label: Value as Rollershutter
        Type: modbus:rollershutter-type
        Description: Rollershutter item channel

        ID: lastReadSuccess
        Label: Last Successful Read
        Type: modbus:last-successful-read-type
        Description: Date of last read

        ID: lastReadError
        Label: Last Erroring Read
        Type: modbus:last-erroring-read-type
        Description: Date of last read error

        ID: lastWriteSuccess
        Label: Last Successful Write
        Type: modbus:last-successful-write-type
        Description: Date of last write

        ID: lastWriteError
        Label: Last Erroring Write
        Type: modbus:last-erroring-write-type
        Description: Date of last write error

It’s really difficult reading configs in this form, but here goes.

PVbatterySOC is your Item stuck at NULL state, i.e. never updated.
I can’t see what type of Item this is, I can’t see what channel it is linked to, if any.
Here the trail ends.

If I start from the other end, I cannot see your TCP Thing.
But let’s assume that is okay, because you get some data.
Next to look at then, would be your poller Thing, modbus:poller:947bd944
I cannot see that either.
Here the trail ends.

Can you see what I’m saying? There is a chain of stuff you have to get right, each link with a part to play. Any wonky link and the whole chain fails - no data.
The chain here is
TCP Thing
poller Thing
data Thing
channel link
Item
and we need to look at each in detail together. The chain is formed by the inter-linking of the links, the relationship of the parts; individually they are useless.

Yes. Sorry but that’s the future :expressionless: as OH3 latest will likely be UI only based so you can either get screendumps or config exports like the one I gave. Yes there’ll be possibilities to still import text but probably not to write things/items back to text format, so once you change them you don’t have the input text representation any more).
So unfortunately it’s time to get used to that format I guess…

I’ve edited the post above and added display of the poller thing. As you can see it has length=119 so it covers the readings of both data things.
Will add the others, too. Thought I had but seems I made a mistake there.
EDIT: TCP thing and items added. Channels are no separate objects, but they can be found in the thing output.

Alright - here’s an inconsistency

and the log of this poller in action

where the important element is length=44
(which would exclude register 13107)

I guess you’ve been editing, happy that new values are really now in use? The binding (like many others) never used to be very good at picking up in-flight edits. It is supposed to be improved but you might like to make sure and restart it.

I remain ignorant of your Item type and what links it might have to anything.

Yes seems the log showed the state before I edited the poller thing, too (I didn’t remember that, sorry). Today it’s properly polling all 119 double octets (I counted them, it’s correct).

So that’s not the reason either. I also checked the other pollers, they’re retrieving the right number of bytes, too.

[14:42:41] openhabian@openHABianPi:/etc/openhab2/items$ tl|grep 0a446925
2020-08-26 14:42:46.117 [DEBUG] [ernal.handler.ModbusDataThingHandler] - Thing modbus:data:0a446925 channels updated: {modbus:data:0a446925:number=65519}. readValueType=int32, readIndex=Optional[13008], readSubIndex(or 0)=0, extractIndex=8 -> numeric value 65519 and boolValue=true. Registers ModbusRegisterArrayImpl(00 2b 00 4c 07 34 00 00 00 00 03 74 00 00 01 c6 00 00 ff ef ff ff 00 2a 01 b4 00 00 05 0a 00 00 00 22 02 0c 00 00 10 42 00 35 08 c9 02 60 03 e8 01 22 00 18 01 20 00 00 03 e8 ff ff 00 08 00 08 00 08 01 b5 00 00 00 1b 01 b9 00 00 26 48 00 2a 01 b8 00 00 00 ff 00 00 00 10 04 66 00 00 0a 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff) for request ModbusPollerThingHandler.ModbusPollerReadRequest@123314[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=13000,length=119,maxTries=3]

next

see post above, items are shown above things. The channel name contains the thing ID.

Modbus binding does not really support Quantity Types. Not Number:Power for a number type channel, just a Number type Item.

I’d really like to see a profile that allows us to link a plain number channel to a Quantity type.
Maybe an enhancement to SCALE transform?

Meantime you have linked your Item to the poller Thing instead of the data Thing.
I said not giving Things meaningful names would drive you mad :crazy_face:

As said earlier I think UoMs don’t matter to bindings.
Note it’s the second, the plain “Number” item that fails (remains NULL) not the “Number:Power” one. That’s working well.

My turn to revise earlier posts, see above.

Where do you see that ?
The item PVbatterySOC is linked to a channel …43dbf795… which belongs to data thing PVthingbatterySOC
The poller to cover the register range 13000-13119 has ID 947bd944 so is a different one.
The data thing has its bridge set to that ID 947bd944 which is correct isn’t it ?

I don’t know, thought I saw that but it gets squinty with all the edits and disjointed listings.

Once again, I suggest to follow the trail carefully. This stuff does work, you know there’s only a typo somewhere.

1 Like

PaperUI setup isnt suitable stuff like this. There is no overview, and things quickly become difficult.

Yes I know, but it’s The Future :wink:

At least in PaperUI there are some clicky ways to follow a chain; I imagine something similar in OmniUI or whatever it is.

Here we’re doing it the hard way. But the problem is visible right here somewhere, diligence will find it. Or a big screen and a pencil later.

1 Like

Alright, let’s get the parts in order here, and focus on the important bits.

Item

 Number PVbatterySOC ...{ channel="modbus:data:43dbf795:number" }

I would like to see the REST API view of the JSONDB for this Item, but I doubt it will hold any surprises.

This should also create a link in JSONDB
But so far, no proof that it has, or that it has no profiling.
@mstormi would you use REST API to inspect this item-channel link please? There should be very little to it.

If that is in order, let’s move to channel.

Modbus data Things provide many channels, we do appear to have selected number type to match Number type Item. Tick.

Next, data Thing

UID: modbus:data:43dbf795
Type: modbus:data
..
Bridge: modbus:poller:947bd944
..
        readValueType : uint16
        readTransform : default
..
        readStart : 13107

UID appears to be exact match for Item link, tick.
No transform, tick.
Single register, address 13107 to be followed along

Next, poller

UID: modbus:poller:947bd944
Type: modbus:poller
..
Bridge: modbus:tcp:f0352017
..
        start : 13000
        length : 119
..
        type : input

UID appears to be exact match, tick.
Covers addresses 13000 - 13119, less than 256 bytes, tick
Range includes 13107, tick.

Does it work?
Only indirect evidence of that

[14:42:41] openhabian@openHABianPi:/etc/openhab2/items$ tl|grep 0a446925
2020-08-26 14:42:46.117 [DEBUG] [ernal.handler.ModbusDataThingHandler] - Thing modbus:data:0a446925 channels updated: {modbus:data:0a446925:number=65519}. readValueType=int32, readIndex=Optional[13008], readSubIndex(or 0)=0, extractIndex=8 -> numeric value 65519 and boolValue=true. Registers ModbusRegisterArrayImpl(00 2b 00 4c 07 34 00 00 00 00 03 74 00 00 01 c6 00 00 ff ef ff ff 00 2a 01 b4 00 00 05 0a 00 00 00 22 02 0c 00 00 10 42 00 35 08 c9 02 60 03 e8 01 22 00 18 01 20 00 00 03 e8 ff ff 00 08 00 08 00 08 01 b5 00 00 00 1b 01 b9 00 00 26 48 00 2a 01 b8 00 00 00 ff 00 00 00 10 04 66 00 00 0a 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff) for request ModbusPollerThingHandler.ModbusPollerReadRequest@123314[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=13000,length=119,maxTries=3]

This log shows some other data channel getting an update, by data from a poller that looks very like “ours” but is not conclusively identified as our 947bd944

@mstormi I would like to see the up to date version of this log please -

2020-08-25 23:38:50.982 [DEBUG] [bus.handler.ModbusPollerThingHandler] - Thing modbus:poller:947bd944 received response PollResult(result=AsyncModbusReadResult(request = ModbusPollerThingHandler.ModbusPollerReadRequest@17c1847[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=13000,length=44,maxTries=3], registers = ModbusRegisterArrayImpl(00 0c 00 f7 06 e8 00 00 00 52 03 74 00 00 01 fa 00 00 00 01 00 00 00 58 01 8a 00 00 04 d5 00 00 00 4d 01 ea 00 00 0f 6b 00 10 01 fb 02 55 03 e8 01 18 00 36 01 01 00 00 01 e4 ff ff 00 07 00 0a 00 09 01 fb 00 00 00 26 01 9c 00 00 26 48 00 58 01 8e 00 00 00 ff 00 00)))

Because it positively identifies the poller by UID

If the poller is indeed polling, we need not worry further about the TCP Thing, it’s either good or broken.

We’re likely going to end up deleting or renaming the Item here, I’m suspicious the linkages got messed up when it was linked to the badly configured poller with only 44 length, but it’d be really nice to pinpoint this.

item

{
  "link": "http://192.168.178.40:8080/rest/items/PVbatterySOC",
  "state": "NULL",
  "stateDescription": {
    "pattern": "%.0f",
    "readOnly": false,
    "options": []
  },
  "editable": false,
  "type": "Number",
  "name": "PVbatterySOC",
  "label": "Batterie StateOfCharge",
  "category": "battery",
  "tags": [],
  "groupNames": [
    "PV"
  ]
}

channel

{
  "channelUID": "modbus:data:43dbf795:number",
  "configuration": {},
  "itemName": "PVbatterySOC"
}

poller log

every 5 secs as configured, some registers like #2 change, most don't
2020-08-26 22:14:31.595 [DEBUG] [bus.handler.ModbusPollerThingHandler] - Thing modbus:poller:947bd944 received response PollResult(result=AsyncModbusReadResult(request = ModbusPollerThingHandler.ModbusPollerReadRequest@123314[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=13000,length=119,maxTries=3], registers = ModbusRegisterArrayImpl(00 1c 00 73 07 5b 00 00 00 01 03 75 00 00 01 f1 00 00 00 0c 00 00 00 3d 01 c7 00 00 05 26 00 00 00 35 02 1f 00 00 0f 4d 00 0e 01 fd 01 5b 03 e8 01 0e 00 38 01 40 00 00 03 d5 ff ff 00 07 00 07 00 07 01 fd 00 00 00 32 01 d0 00 00 26 48 00 3d 01 cb 00 00 00 ff 00 00 00 25 04 7b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff)))
2020-08-26 22:14:36.777 [DEBUG] [bus.handler.ModbusPollerThingHandler] - Thing modbus:poller:947bd944 received response PollResult(result=AsyncModbusReadResult(request = ModbusPollerThingHandler.ModbusPollerReadRequest@123314[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=13000,length=119,maxTries=3], registers = ModbusRegisterArrayImpl(00 0c 00 73 07 5b 00 00 00 01 03 75 00 00 01 d7 00 00 ff fc ff ff 00 3d 01 c7 00 00 05 26 00 00 00 35 02 1f 00 00 0f 4d 00 0f 01 d3 01 5b 03 e8 01 0e 00 38 01 40 00 00 03 d5 ff ff 00 08 00 08 00 08 01 d3 00 00 00 32 01 d0 00 00 26 48 00 3d 01 cb 00 00 00 ff 00 00 00 25 04 7b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff)))

What hits the eye is that registers 47 to 119 all are 00 or FF on all polls.
I think you mentioned that some devices fail if you request a long range that contains reserved or special registers. Looking at the specs docs, the first reserved register in the 13000 range is 13044. I’ll try to split the 13000 poller into ones that do not comprise reserved registers.

I’ve split the poller into 4 so none of them covers reserved registers any more and

… Bingo!

openhab> smarthome:status PVbatterySOC
533
openhab>

So that hint was the key.

Thank you very much for your support, @rossko57 !

@ssalonen would you mind adding these two pitfalls to the binding docs ?

  1. not every port 502 has connection to the real bus hardware. Preferrably use the Ethernet’s IP.
  2. do not build pollers to fetch ranges that include reserved registers or more than 256 registers.
    Split into multiple pollers.

PS: need to stop sucking on my battery, it’s already down to 53% only so will get some sleep early this time. Thanks again.

That would be very dirty behaviour on the part of the design.

Certainly, it is “allowed” to refuse to serve any registers it wishes e.g. preferably by rejecting what it is entitled to label an ‘illegal request’. Alternatively, it could simply ignore requests that it cannot or will not fulfill. Either would be fine (and get reported in your openhab.log) and are the common behaviour.

Supplying fake data instead (00, FF) is just plain bad practice.

Note that all this does not explain the behaviour that you have reported - 0000 or FFFF, faked or not, are perfectly valid register contents, your Item should have been updated to numeric 0 or 65535.
I still think the Item-channel link was pooped somehow, due to earlier invalid Thing config. Making new poller Things has reset all that.

Again this is a device problem, not the binding. It actually answered on port 502 - and in Modbus format. Try that on anything else and it just refuses connection.

I resist adding this too. The Modbus doc is about how to use the binding, not how to use the protocol. It’s long and unwieldy enough already.

Modbus is NOT easy to use, it does demand knowledge from the user. There are lots of Modbus tech resources on the interwebs and we should not be adding tutorials to binding docs.

There are tens of thousands of different Modbus designs out there, some forty years old, and every one of them has quirks. Our binding should be flexible enough to accommodate the quirks, but our documentation should not be trying to explain them all.

Having said all that - I’ve added a brief note to the ‘length’ parameter in the docs. :smiley:

Reading register blocks that include undefined or reserved addresses is a perfectly legitimate technique for a great many devices.

2 Likes

I agree with you from the architecture Point Of View and neither binding nor binding docs should demand to only ever put it like that.
But as openHAB fellows, we should think User eXperience and give prominently placed hints to new binding users. Or do you want to run this thread every week ? :wink: Thanks again.