fix(v4): retry transient confirmed device reads

This commit is contained in:
dh
2026-10-05 14:50:48 +00:00
parent b6e7353086
commit e6aa50bb44
5 changed files with 30 additions and 7 deletions
+13 -2
View File
@@ -25,7 +25,8 @@ final class NetzfahrplanV4Geraeteabruf
callable $moduleId,
callable $refresh,
callable $reader,
callable $clock
callable $clock,
?callable $pause = null
): array {
$config = NetzfahrplanV4Rueckmeldung::configuration($config);
$groups = [];
@@ -43,7 +44,17 @@ final class NetzfahrplanV4Geraeteabruf
if (!in_array($module, [self::MBUS_DEVICE, self::MODBUS_DEVICE, self::MODBUS_ADDRESS], true)) {
throw new InvalidArgumentException('feedback_refresh_module_unsupported:' . $sources[0]['key']);
}
if ($refresh($parentId, $module) !== true) {
$confirmed = false;
for ($attempt = 1; $attempt <= 4; ++$attempt) {
if ($refresh($parentId, $module) === true) {
$confirmed = true;
break;
}
if ($attempt < 4 && $pause !== null) {
$pause(200000);
}
}
if (!$confirmed) {
throw new InvalidArgumentException('feedback_device_read_failed:' . $sources[0]['key']);
}
$confirmedAt = $clock();