Skip to content

Commit ae66fc2

Browse files
committed
feat: add slave_id per metric group
1 parent 3a484da commit ae66fc2

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

metricq_source_modbus/config_model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ def metrics_not_empty(cls, v: dict[str, Metric]) -> dict[str, Metric]:
4848
raise ValueError("Group must have at least one metric")
4949
return v
5050

51+
slave_id: int | None = None
52+
"""Slave ID to query"""
53+
5154
double_sample: bool = False
5255
"""
5356
If set to true, the metric will be sampled twice per configured interval.

metricq_source_modbus/source.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ class MetricGroup:
154154
Represents a set of metrics
155155
- same host (implicitly)
156156
- same interval (implicitly)
157+
- same slave id
157158
- common address space (based on addresses within the metrics)
158159
"""
159160

@@ -181,6 +182,10 @@ def __init__(self, host: "Host", config: config_model.Group) -> None:
181182
raise ConfigError("missing interval")
182183
self.interval: Timedelta = interval
183184

185+
self.slave_id = (
186+
config.slave_id if config.slave_id is not None else host.slave_id
187+
)
188+
184189
# Must be exactly here because we initialize `self.interval` before
185190
# and use `self._metrics` later
186191
self._metrics = self._create_metrics(config.metrics)
@@ -249,7 +254,7 @@ async def _update(
249254
async with lock:
250255
timestamp = Timestamp.now()
251256
raw_values = await client.read_input_registers(
252-
self.host.slave_id, self.base_address, self._num_registers
257+
self.slave_id, self.base_address, self._num_registers
253258
)
254259
assert len(raw_values) == self._num_registers
255260
buffer = struct.pack(f">{len(raw_values)}H", *raw_values)

0 commit comments

Comments
 (0)