Skip to content

Commit 0f9aaa7

Browse files
committed
- Fix Web API 414 URI Too Long error by implementing configurable chunking (default 70 registers per request, range 30-125)
- Ensure all numeric values are integers in chunking logic to prevent TypeError in slice operations
1 parent 33a6596 commit 0f9aaa7

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

custom_components/systemair/api.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
MODBUS_DEVICE_BUSY_EXCEPTION = 6
2828
MODBUS_GATEWAY_TARGET_FAILED_TO_RESPOND = 11
29-
WEB_API_MAX_REGISTERS_PER_REQUEST = 30
29+
WEB_API_MAX_REGISTERS_PER_REQUEST = 70
3030

3131
READ_BLOCKS = [
3232
(1001, 62),
@@ -537,7 +537,7 @@ def __init__(
537537
self._address = address
538538
self._session = session
539539
self._lock = asyncio.Lock()
540-
self._max_registers_per_request = max_registers_per_request
540+
self._max_registers_per_request = int(max_registers_per_request)
541541

542542
@property
543543
def address(self) -> str:
@@ -569,7 +569,7 @@ async def async_get_data(self, reg: list[ModbusParameter]) -> Any:
569569

570570
# Split large blocks into smaller chunks to avoid 414 URI Too Long error
571571
total_regs = len(reg)
572-
chunks_needed = (total_regs + self._max_registers_per_request - 1) // self._max_registers_per_request
572+
chunks_needed = int((total_regs + self._max_registers_per_request - 1) // self._max_registers_per_request)
573573

574574
for chunk_idx in range(chunks_needed):
575575
start_idx = chunk_idx * self._max_registers_per_request
@@ -640,7 +640,7 @@ async def _read_block(self, start: int, count: int) -> dict[str, Any]:
640640
all_data = {}
641641

642642
# Split large blocks into smaller chunks to avoid 414 URI Too Long error
643-
chunks_needed = (count + self._max_registers_per_request - 1) // self._max_registers_per_request
643+
chunks_needed = int((count + self._max_registers_per_request - 1) // self._max_registers_per_request)
644644

645645
for chunk_idx in range(chunks_needed):
646646
chunk_start = start + (chunk_idx * self._max_registers_per_request)

custom_components/systemair/const.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
CONF_WEB_API_MAX_REGISTERS = "web_api_max_registers"
1515
DEFAULT_PORT = 502
1616
DEFAULT_SLAVE_ID = 1
17-
DEFAULT_WEB_API_MAX_REGISTERS = 30
17+
DEFAULT_WEB_API_MAX_REGISTERS = 70
1818

1919
# --- API Types ---
2020
API_TYPE_MODBUS_TCP = "modbus_tcp"

custom_components/systemair/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@
1515
"aiohttp",
1616
"async-timeout"
1717
],
18-
"version": "1.0.16"
18+
"version": "1.0.17"
1919
}

0 commit comments

Comments
 (0)