iobroker.idm-multitalent_002 2.1.3 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -60
- package/io-package.json +14 -14
- package/lib/idm-session.js +259 -98
- package/lib/idm-session.test.js +284 -104
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ Currently following versions are supported (if your version is not listed but yo
|
|
|
30
30
|
|
|
31
31
|
You need a Ethernet to RS422 converter to connect to the multitalent control.
|
|
32
32
|
**Note** that you have to connect ground/shield of your converter to the ground of the control/heatpump in order to prevent electric influences on the sensor readings.
|
|
33
|
-
There are sensor values and settings values;
|
|
33
|
+
There are sensor values and settings values; sensor is polled as fast as the protocol allows (throttled to at most once every 10s), while settings is polled only once every 60s, plus once right away after you change a value yourself - see the Architecture section below for the exact schedule. The adapter reads a whole group (all sensor values, or all settings values) together in one request once every block's exact reply length for that group has been CONFIRMED from real traffic - even for firmwares with hand-verified lengths built in, a short startup phase always re-confirms each one against the actual hardware first (one matching read is enough there; a firmware with no built-in lengths at all needs two consecutive matching reads instead, since it has nothing to start from), no dedicated measurement pass required either way, just the readings the adapter would be taking anyway. Every firmware ends up on the faster combined-request path this way. If a combined reply is ever misread, the adapter forgets that group's confirmed lengths and re-confirms it from scratch rather than continuing to trust a value that just proved wrong.
|
|
34
34
|
Values you change yourself are sent to the heat pump right away; the state's acknowledgment only follows once that value is actually read back from the heat pump on its next turn, so it can take a little while to show up.
|
|
35
35
|
|
|
36
36
|
During bootup of the heatpump control (e.g. after a power loss) no values should be polled. This is currently **NOT** ensured by the adapter. So you **manually** need to **stop** it. If the control of the heatpump did not start due to the adapter then simply stop the adapter and power cycle the control. This should fix the problem. Afterwards you can start the adapter again. I implemented a delayed switch-on of the serial server. This also mitigates the problem.
|
|
@@ -56,6 +56,12 @@ Example screenshots of objects:
|
|
|
56
56
|

|
|
57
57
|
|
|
58
58
|
## Changelog
|
|
59
|
+
### 2.2.0 (2026-09-11)
|
|
60
|
+
* (zloe) sensor and settings are no longer polled in lockstep: sensor is read as fast as the protocol allows (throttled to at most once every 10s), settings only once every 60s plus once right away after any value is written to the heat pump - both intervals measured from the start of one full sweep to the start of the next, and neither configurable. This noticeably reduces how often the heat pump's own control gets polled for the slower-changing settings data, without making sensor data any less fresh
|
|
61
|
+
* (zloe) a group's sweep (round-robin or multi-block alike) is never interrupted by the other group becoming due partway through - previously only a multi-block collection had this guarantee; the classic one-block-at-a-time round-robin now gets it too
|
|
62
|
+
* (zloe) replaced the combined "full-coverage cycle" log line (which no longer makes sense once sensor and settings run on independent schedules) with one line per group, logged the moment that group's own sweep completes, showing its actual elapsed time and a rolling average over its last 10 sweeps - the old per-block delay breakdown is gone along with it
|
|
63
|
+
* (zloe) docs: shortened and reworked the Architecture section's description of the sensor/settings polling cadence, with a small sequence diagram
|
|
64
|
+
|
|
59
65
|
### 2.1.3 (2026-09-11)
|
|
60
66
|
* (zloe) every data block's wire length - even a hand-verified one built into a firmware's data block definition - now always needs at least one confirming read against the actual connected hardware before multi-block requests trust it, exactly like a value learned from scratch or restored from a previous run; previously a built-in value was trusted outright, forever, with no live check at all. This costs nothing extra in the normal case (that one confirming read happens as part of the startup phase every firmware already goes through) and means every firmware benefits equally from the same safety net: if a multi-block reply is ever misread (lost sync - an unrecognized block id, a block shorter than expected, or leftover trailing bytes), the adapter now forgets every wire length for that whole group and re-confirms it from scratch instead of continuing to (mis)use a length that just proved wrong
|
|
61
67
|
* (zloe) sensor and settings turns now alternate strictly 1:1 (previously sensor got 2 turns for every 1 settings turn) - the 2:1 bias dated from when a settings turn could take much longer than a sensor turn to actually finish; since 2.1.2 a turn always collects its whole group before yielding either way, so the old bias no longer bought sensor anything and settings now gets its fair share of turns too
|
|
@@ -220,60 +226,67 @@ correction instead of always jumping by the full coarse amount; only genuinely r
|
|
|
220
226
|
escalate the step back up. See `contentDelayForCurrentBlock()`/`updateContentDelayEstimate()` and
|
|
221
227
|
the "adaptive per-data-block content delay" tests in `lib/idm-session.test.js`.
|
|
222
228
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
229
|
+
#### Sensor and settings: independent polling cadence
|
|
230
|
+
|
|
231
|
+
Every call to `request_data()` is one "turn" - a request for either the sensor or the settings
|
|
232
|
+
group, decided by `chooseNextGroup()`. The two groups are no longer polled in lockstep: each has
|
|
233
|
+
its own minimum interval between the *start* of one full sweep (every block in that group actually
|
|
234
|
+
read at least once) and the start of its next - sensor as fast as the protocol allows, but never
|
|
235
|
+
sooner than **10s** apart; settings only every **60s**, plus once right after any value is written
|
|
236
|
+
to the heat pump, so a change you make shows up promptly instead of waiting out the rest of that
|
|
237
|
+
window. Both numbers are fixed (not configurable) - the point is purely to spare the heat pump's
|
|
238
|
+
own control, since settings rarely change and doesn't need reading nearly as often as sensor data.
|
|
239
|
+
|
|
240
|
+
Once a sweep for a group has started, it keeps getting that group's turns - regardless of whether
|
|
241
|
+
the other group is also due - until every one of its blocks has actually been read; only then does
|
|
242
|
+
the interval rule decide when that group may sweep again. This is the same "never interrupted
|
|
243
|
+
partway through" rule a multi-block collection already followed (see below), now applied to the
|
|
244
|
+
classic one-block-at-a-time round-robin too. A batch of writes is never interrupted by a settings
|
|
245
|
+
read either: `request_data()` is only reached once the whole write queue has drained, so several
|
|
246
|
+
values submitted together always finish, uninterrupted, before the one settings refresh they
|
|
247
|
+
trigger.
|
|
248
|
+
|
|
249
|
+
```mermaid
|
|
250
|
+
sequenceDiagram
|
|
251
|
+
participant HP as Heat pump
|
|
252
|
+
participant S as IdmSession
|
|
253
|
+
Note over S: sensor due (≥10s since its last sweep started)
|
|
254
|
+
S->>HP: request sensor blocks
|
|
255
|
+
HP-->>S: sensor data
|
|
256
|
+
Note over S: sensor sweep complete
|
|
257
|
+
Note over S: settings not due yet - parks, nothing sent
|
|
258
|
+
Note over S: a value gets written
|
|
259
|
+
S->>HP: write value
|
|
260
|
+
HP-->>S: ack
|
|
261
|
+
Note over S: write queue drained - settings refresh forced
|
|
262
|
+
S->>HP: request settings blocks
|
|
263
|
+
HP-->>S: settings data
|
|
264
|
+
Note over S: settings sweep complete
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Each completed sweep logs its own actual elapsed time plus a rolling average over the last 10
|
|
268
|
+
sweeps, e.g. `sensor sweep done in 1400ms (avg of last 10: 1360ms)` - one line per group, logged
|
|
269
|
+
the moment that group's sweep finishes. This replaces the earlier combined "full-coverage cycle"
|
|
270
|
+
line: now that the two groups run on independent schedules there is no single shared interval left
|
|
271
|
+
to time them together, so each gets its own line instead. As before, this is driven by data
|
|
272
|
+
actually being *received* (`recordBlockRead()`), not merely requested - a block that was asked for
|
|
273
|
+
but never got a reply (a retry, a response-watchdog reset, the periodic resync) does not count.
|
|
255
274
|
|
|
256
275
|
#### Multi-block requests, per group
|
|
257
276
|
|
|
258
|
-
The serial protocol
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
`
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
CONFIRMED from real traffic (see "wireLength learning" below), whether it started from nothing, from
|
|
272
|
-
an explicit, hand-verified `wireLength` in its data block definition (see
|
|
273
|
-
[`lib/datablocks/README.md`](lib/datablocks/README.md)), or from a value restored from a previous
|
|
274
|
-
run. A firmware's two groups can be in different states (e.g. settings qualified while sensor is
|
|
275
|
-
still being confirmed, or vice versa); whichever group doesn't (yet) qualify keeps using the plain
|
|
276
|
-
one-block-per-turn round-robin, completely unaffected.
|
|
277
|
+
The serial protocol allows requesting several data blocks in one `0171` message, combined in a
|
|
278
|
+
single `01F2`/`0172` reply - but real control traffic (confirmed against S_H726100) showed two
|
|
279
|
+
quirks: a block's reply can be a few bytes LONGER than its documented fields (harmless alone, but
|
|
280
|
+
fatal for splitting several blocks out of one reply unless each one's exact length is known), and a
|
|
281
|
+
single `0172` typically only returns a PARTIAL subset of what was asked for. Because of this, the
|
|
282
|
+
multi-block path is strictly opt-in, gated independently per group:
|
|
283
|
+
`IdmProtocol#firmwareSupportsMultiBlockRequestsForBlocks()` (and its `...ForSensors()`/plain
|
|
284
|
+
`...Requests()` wrappers for sensor/settings) only returns true once every block in that group has
|
|
285
|
+
a TRUSTED wire length - confirmed from real traffic (see "wireLength learning" below), whether it
|
|
286
|
+
started from an explicit `wireLength` in the data block definition (see
|
|
287
|
+
[`lib/datablocks/README.md`](lib/datablocks/README.md)), a value restored from a previous run, or
|
|
288
|
+
nothing at all. The two groups can be in different states; whichever hasn't (yet) qualified just
|
|
289
|
+
keeps using the plain one-block-per-turn round-robin.
|
|
277
290
|
|
|
278
291
|
Where a group is multi-block-capable, `IdmSession#beginGroupCollection()` requests every block in
|
|
279
292
|
that group at once instead of just one - a single `0171` naming the whole group - reusing the very
|
|
@@ -308,14 +321,9 @@ for the first time ever. This benefits every firmware equally, not just the ones
|
|
|
308
321
|
lengths: whatever the length's original source, a wrong assumption never lingers past the collection
|
|
309
322
|
it broke.
|
|
310
323
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
a collection's own re-asks are never interleaved with an unrelated request from the other group in
|
|
315
|
-
between, so there is no uncertainty here about whether the control could resume a partial reply
|
|
316
|
-
across such an interruption - that situation simply never arises - and settings, which on real
|
|
317
|
-
hardware often needs several re-asks to fully arrive, no longer has to wait through two full sensor
|
|
318
|
-
turns and a connection resync between every one of them. See the "multi-block collection, sensor
|
|
324
|
+
A collection's own re-asks are never interleaved with an unrelated request from the other group in
|
|
325
|
+
between, so there is no uncertainty about whether the control could resume a partial reply across
|
|
326
|
+
such an interruption - that situation simply never arises. See the "multi-block collection, sensor
|
|
319
327
|
and settings" tests in `lib/idm-session.test.js`, which drive this against a small simulated
|
|
320
328
|
control (`MultiBlockControllerSim`) modeling the partial-reply/stale-repeat/not-ready behavior
|
|
321
329
|
actually observed on real hardware.
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "idm-multitalent_002",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"2.2.0": {
|
|
7
|
+
"en": "sensor and settings are no longer polled in lockstep: sensor is read as fast as the protocol allows (throttled to at most once every 10s), while settings is only read once every 60s, plus once right away after any value is written to the heat pump - reducing how often the heat pump's own control gets polled for the slower-changing settings data, without making sensor data any less fresh. A group's sweep - round-robin or multi-block alike - is never interrupted by the other group becoming due partway through. The combined \"full-coverage cycle\" log line is replaced by one line per group, logged the moment that group's own sweep completes, showing its actual elapsed time and a rolling average over its last 10 sweeps",
|
|
8
|
+
"de": "Sensor- und Settings-Abfragen laufen nicht mehr im Gleichschritt: Sensor wird so schnell wie das Protokoll es erlaubt gelesen (gedrosselt auf höchstens einmal alle 10s), während Settings nur alle 60s gelesen wird, plus einmal sofort nachdem ein Wert zur Wärmepumpe geschrieben wurde - das reduziert, wie oft die Steuerung der Wärmepumpe für die sich selten ändernden Settings-Daten abgefragt wird, ohne dass Sensordaten dadurch weniger aktuell werden. Ein Durchlauf einer Gruppe - egal ob round-robin oder multi-block - wird nie unterbrochen, nur weil die andere Gruppe währenddessen fällig wird. Die kombinierte \"full-coverage cycle\"-Logzeile wird durch eine Zeile pro Gruppe ersetzt, die genau dann protokolliert wird, wenn der Durchlauf dieser Gruppe abgeschlossen ist, und die tatsächliche verstrichene Zeit sowie einen gleitenden Durchschnitt der letzten 10 Durchläufe zeigt",
|
|
9
|
+
"ru": "Опрос сенсоров и настроек больше не выполняется в едином ритме: сенсоры читаются настолько быстро, насколько позволяет протокол (но не чаще одного раза в 10 секунд), а настройки читаются только раз в 60 секунд, плюс сразу после любой записи значения в тепловой насос - это снижает частоту опроса самого контроллера теплового насоса для редко меняющихся данных настроек, не делая при этом данные сенсоров менее актуальными. Проход группы - будь то round-robin или multi-block - никогда не прерывается, если тем временем наступает срок опроса другой группы. Объединённая строка журнала \"full-coverage cycle\" заменена на отдельную строку для каждой группы, которая записывается сразу по завершении прохода этой группы и показывает фактическое затраченное время, а также скользящее среднее по последним 10 проходам",
|
|
10
|
+
"pt": "a leitura de sensores e configurações não é mais feita em sincronia: os sensores são lidos o mais rápido que o protocolo permite (limitado a no máximo uma vez a cada 10s), enquanto as configurações só são lidas a cada 60s, mais uma vez logo após qualquer valor ser escrito no aquecedor - isso reduz a frequência com que o próprio controlador do aquecedor é consultado para os dados de configuração, que mudam raramente, sem tornar os dados dos sensores menos atuais. A varredura de um grupo - round-robin ou multi-block - nunca é interrompida por causa do outro grupo ficar pendente no meio do caminho. A linha de log combinada \"full-coverage cycle\" foi substituída por uma linha por grupo, registrada no momento em que a varredura daquele grupo é concluída, mostrando o tempo decorrido real e uma média móvel das últimas 10 varreduras",
|
|
11
|
+
"nl": "sensor- en instellingenuitlezingen lopen niet langer synchroon: sensor wordt zo snel als het protocol toelaat gelezen (beperkt tot hoogstens eens per 10s), terwijl instellingen slechts elke 60s wordt gelezen, plus één keer direct nadat een waarde naar de warmtepomp is geschreven - dit vermindert hoe vaak de besturing van de warmtepomp wordt bevraagd voor de traag veranderende instellingengegevens, zonder de sensorgegevens minder actueel te maken. Een ronde van een groep - round-robin of multi-block - wordt nooit onderbroken doordat de andere groep tussentijds aan de beurt komt. De gecombineerde \"full-coverage cycle\"-logregel is vervangen door één regel per groep, gelogd zodra de ronde van die groep is voltooid, met de werkelijk verstreken tijd en een voortschrijdend gemiddelde over de laatste 10 rondes",
|
|
12
|
+
"fr": "la lecture des capteurs et des réglages ne se fait plus en cadence commune : les capteurs sont lus aussi vite que le protocole le permet (limité à une fois toutes les 10s maximum), tandis que les réglages ne sont lus que toutes les 60s, plus une fois juste après qu'une valeur a été écrite vers la pompe à chaleur - cela réduit la fréquence à laquelle le contrôleur de la pompe à chaleur est sollicité pour les données de réglage, qui changent rarement, sans rendre les données des capteurs moins fraîches. Un tour d'un groupe - round-robin ou multi-block - n'est jamais interrompu parce que l'autre groupe devient dû entre-temps. La ligne de journal combinée \"full-coverage cycle\" est remplacée par une ligne par groupe, enregistrée dès que le tour de ce groupe est terminé, indiquant le temps réellement écoulé ainsi qu'une moyenne glissante sur les 10 derniers tours",
|
|
13
|
+
"it": "la lettura di sensori e impostazioni non avviene più in sincronia: i sensori vengono letti il più velocemente possibile consentito dal protocollo (limitato a al massimo una volta ogni 10s), mentre le impostazioni vengono lette solo ogni 60s, più una volta subito dopo che un valore è stato scritto sulla pompa di calore - questo riduce la frequenza con cui il controllo stesso della pompa di calore viene interrogato per i dati di impostazione, che cambiano raramente, senza rendere i dati dei sensori meno aggiornati. Un giro di un gruppo - round-robin o multi-block - non viene mai interrotto perché l'altro gruppo diventa dovuto nel frattempo. La riga di log combinata \"full-coverage cycle\" è sostituita da una riga per gruppo, registrata nel momento in cui il giro di quel gruppo si completa, che mostra il tempo effettivamente trascorso e una media mobile sugli ultimi 10 giri",
|
|
14
|
+
"es": "la lectura de sensores y ajustes ya no se realiza al mismo ritmo: los sensores se leen tan rápido como lo permite el protocolo (limitado a como máximo una vez cada 10s), mientras que los ajustes solo se leen cada 60s, más una vez justo después de escribir cualquier valor en la bomba de calor - esto reduce la frecuencia con la que se consulta el propio control de la bomba de calor para los datos de ajustes, que cambian con poca frecuencia, sin hacer que los datos de los sensores sean menos actuales. Una pasada de un grupo - round-robin o multi-block - nunca se interrumpe porque el otro grupo pase a estar pendiente mientras tanto. La línea de registro combinada \"full-coverage cycle\" se sustituye por una línea por grupo, registrada en el momento en que la pasada de ese grupo se completa, mostrando el tiempo real transcurrido y una media móvil de las últimas 10 pasadas",
|
|
15
|
+
"pl": "odczyt czujników i ustawień nie odbywa się już w jednym rytmie: czujniki są odczytywane tak szybko, jak pozwala protokół (ograniczone do maksymalnie raz na 10s), natomiast ustawienia są odczytywane tylko raz na 60s, plus raz zaraz po zapisaniu jakiejkolwiek wartości do pompy ciepła - to zmniejsza częstotliwość odpytywania samego sterownika pompy ciepła o rzadko zmieniające się dane ustawień, bez pogarszania aktualności danych czujników. Przebieg grupy - round-robin czy multi-block - nigdy nie jest przerywany przez to, że druga grupa staje się w międzyczasie należna. Połączona linia dziennika \"full-coverage cycle\" została zastąpiona jedną linią na grupę, zapisywaną w chwili zakończenia przebiegu danej grupy, pokazującą rzeczywisty upływający czas oraz średnią kroczącą z ostatnich 10 przebiegów",
|
|
16
|
+
"zh-cn": "传感器和设置的轮询不再同步进行:传感器会以协议允许的最快速度读取(限制为最多每10秒一次),而设置每60秒才读取一次,并且在每次向热泵写入数值后会立即额外读取一次——这减少了对热泵控制器本身、针对变化较少的设置数据的轮询频率,同时不会降低传感器数据的实时性。一个分组的一轮采集——无论是逐个轮询还是多区块请求——都不会因为另一个分组中途到期而被打断。合并的\"full-coverage cycle\"日志行已被替换为每个分组各一行,在该分组本轮采集完成时记录,显示实际耗时以及最近10轮的滚动平均值",
|
|
17
|
+
"uk": "опитування датчиків і налаштувань більше не виконується в єдиному ритмі: датчики читаються настільки швидко, наскільки дозволяє протокол (але не частіше одного разу на 10с), а налаштування читаються лише раз на 60с, плюс одразу після будь-якого запису значення в тепловий насос - це зменшує частоту опитування самого контролера теплового насоса для рідко змінюваних даних налаштувань, не роблячи при цьому дані датчиків менш актуальними. Прохід групи - round-robin чи multi-block - ніколи не переривається через те, що інша група тим часом стає готовою до опитування. Об'єднаний рядок журналу \"full-coverage cycle\" замінено на окремий рядок для кожної групи, який записується одразу після завершення проходу цієї групи і показує фактичний витрачений час та ковзне середнє за останні 10 проходів"
|
|
18
|
+
},
|
|
6
19
|
"2.1.3": {
|
|
7
20
|
"en": "every data block's wire length now always needs a fresh confirming read from the actual connected hardware before multi-block requests trust it - even a hand-verified value built into a firmware's data block definition, which used to be trusted outright and forever with no live check at all. This costs nothing extra in the normal case (the confirming read happens during the startup phase every firmware already goes through), and means that if a multi-block reply is ever misread (an unrecognized block id, a block shorter than expected, or leftover trailing bytes), the adapter now forgets that whole group's wire lengths and re-confirms them from scratch instead of continuing to trust a value that just proved wrong. Also: sensor and settings turns now alternate strictly 1:1 instead of 2:1 (a turn has collected its whole group before yielding since 2.1.2, so the old sensor bias no longer bought it anything, and settings now gets its fair share); the frame-length safety cap is reduced from 2048 to 1024 hex characters (still more than double the largest real combined reply seen so far); and new info-level log lines report, once per connection, how many blocks in each group still need a confirming measurement",
|
|
8
21
|
"de": "die Leitungslänge jedes Datenblocks benötigt jetzt immer eine erneute Bestätigung durch einen frischen Messwert von der tatsächlich angeschlossenen Hardware, bevor multi-block-Anfragen ihr vertrauen - selbst ein händisch verifizierter Wert in der Datenblock-Definition einer Firmware, der bisher sofort und dauerhaft ohne jede Live-Prüfung vertraut wurde. Im Normalfall kostet das nichts zusätzlich (die Bestätigung erfolgt während der Startphase, die jede Firmware ohnehin durchläuft), und es bedeutet: wird eine multi-block-Antwort einmal falsch gelesen (eine unbekannte Blockkennung, ein kürzerer Block als erwartet, oder übrig gebliebene Bytes am Ende), vergisst der Adapter jetzt alle Leitungslängen dieser ganzen Gruppe und bestätigt sie von Grund auf neu, statt weiter einem Wert zu vertrauen, der sich gerade als falsch erwiesen hat. Außerdem: Sensor- und Settings-Durchläufe wechseln sich jetzt strikt im Verhältnis 1:1 ab statt 2:1 (ein Durchlauf sammelt seit 2.1.2 immer die ganze Gruppe, bevor er abgibt, sodass die alte Sensor-Bevorzugung nichts mehr brachte und Settings jetzt seinen fairen Anteil bekommt); die Sicherheitsgrenze für die Rahmenlänge wurde von 2048 auf 1024 Hex-Zeichen reduziert (immer noch mehr als doppelt so viel wie die bisher größte real beobachtete kombinierte Antwort); und neue Log-Zeilen auf Info-Ebene melden einmal pro Verbindung, wie viele Blöcke in jeder Gruppe noch eine bestätigende Messung benötigen",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "poprawka: ponowna próba dla już precyzyjnie dostrojonego bloku danych nie zwiększa już opóźnienia o pełny, zgrubny krok - teraz koryguje o ten sam mały krok, do którego zbiegło dostrajanie, i eskaluje ponownie tylko wtedy, gdy próby faktycznie się powtarzają",
|
|
81
94
|
"zh-cn": "修复:对已经精细调优的数据块进行重试时,不再将延迟直接跳增整个粗略步长——现在会按照调优已收敛到的相同小步长进行修正,只有在重试确实反复发生时才会重新升级步长",
|
|
82
95
|
"uk": "виправлення: повторна спроба для вже точно налаштованого блока даних більше не збільшує затримку одразу на весь грубий крок - тепер вона коригується тим самим малим кроком, до якого зійшло налаштування, і знову зростає лише якщо повтори справді повторюються"
|
|
83
|
-
},
|
|
84
|
-
"1.3.9": {
|
|
85
|
-
"en": "the full-coverage cycle log line now lists every block's current content delay, and the adaptive per-block delay now eases down in progressively finer steps (down to 1ms) instead of always by a flat 100ms",
|
|
86
|
-
"de": "die Vollzyklus-Log-Zeile listet jetzt den aktuellen Content-Delay jedes Blocks auf, und der adaptive Delay pro Block wird jetzt in immer feineren Schritten (bis auf 1ms) statt immer um pauschal 100ms abgebaut",
|
|
87
|
-
"ru": "строка журнала о полном цикле теперь содержит текущую задержку содержимого каждого блока, а адаптивная задержка по блокам теперь снижается всё более мелкими шагами (вплоть до 1 мс) вместо фиксированных 100 мс",
|
|
88
|
-
"pt": "a linha de log do ciclo completo agora lista o atraso de conteúdo atual de cada bloco, e o atraso adaptativo por bloco agora diminui em passos cada vez mais finos (até 1ms) em vez de sempre 100ms fixos",
|
|
89
|
-
"nl": "de full-coverage-cyclusregel toont nu de huidige content-vertraging van elk blok, en de adaptieve vertraging per blok wordt nu in steeds fijnere stappen (tot 1ms) afgebouwd in plaats van steeds met vaste 100ms",
|
|
90
|
-
"fr": "la ligne de log du cycle complet liste désormais le délai de contenu actuel de chaque bloc, et le délai adaptatif par bloc diminue maintenant par paliers de plus en plus fins (jusqu'à 1ms) au lieu de toujours 100ms fixes",
|
|
91
|
-
"it": "la riga di log del ciclo completo ora elenca il ritardo di contenuto attuale di ogni blocco, e il ritardo adattivo per blocco ora si riduce con passi sempre più fini (fino a 1ms) anziché sempre di 100ms fissi",
|
|
92
|
-
"es": "la línea de registro del ciclo completo ahora lista el retardo de contenido actual de cada bloque, y el retardo adaptativo por bloque ahora se reduce en pasos cada vez más finos (hasta 1ms) en lugar de siempre 100ms fijos",
|
|
93
|
-
"pl": "wiersz logu pełnego cyklu wypisuje teraz aktualne opóźnienie treści każdego bloku, a adaptacyjne opóźnienie na blok jest teraz zmniejszane coraz drobniejszymi krokami (aż do 1ms) zamiast zawsze o stałe 100ms",
|
|
94
|
-
"zh-cn": "完整周期日志行现在会列出每个数据块当前的内容延迟,自适应的按块延迟现在以越来越精细的步长(最低至1毫秒)递减,而不再总是固定的100毫秒",
|
|
95
|
-
"uk": "рядок журналу повного циклу тепер показує поточну затримку вмісту кожного блока, а адаптивна затримка на блок тепер зменшується дедалі дрібнішими кроками (аж до 1мс) замість фіксованих 100мс"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|