iobroker.victoriametrics 0.4.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SeaSpotter <seatowage@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,428 @@
1
+ ![Logo](admin/victoriametrics.png)
2
+ # iobroker.victoriametrics
3
+
4
+ <!-- Diese Badges brauchen eine npm-Veröffentlichung bzw. Aufnahme ins offizielle
5
+ ioBroker-Repository/Weblate und funktionieren daher noch nicht - sobald einer dieser
6
+ Schritte passiert, hier einkommentieren:
7
+ ![Number of Installations](https://iobroker.live/badges/victoriametrics-installed.svg)
8
+ ![Number of Installations](https://iobroker.live/badges/victoriametrics-stable.svg)
9
+ [![NPM version](https://img.shields.io/npm/v/iobroker.victoriametrics.svg)](https://www.npmjs.com/package/iobroker.victoriametrics)
10
+ [![Downloads](https://img.shields.io/npm/dm/iobroker.victoriametrics.svg)](https://www.npmjs.com/package/iobroker.victoriametrics)
11
+ [![Translation status](https://weblate.iobroker.net/widgets/adapters/-/victoriametrics/svg-badge.svg)](https://weblate.iobroker.net/engage/adapters/?utm_source=widget)
12
+ -->
13
+ ![Test and Release](https://github.com/seaspotter/iobroker.victoriametrics/workflows/Test%20and%20Release/badge.svg)
14
+
15
+ Schreibt ioBroker-Datenpunkt-Historie nativ in [VictoriaMetrics](https://victoriametrics.com/) – über
16
+ dessen [JSON-Lines-Import-API](https://docs.victoriametrics.com/#how-to-import-data-in-json-line-format),
17
+ mit echten Prometheus-Labels statt Feld-Namens-Suffixen (wie sie z.B. beim Schreiben über den
18
+ InfluxDB-Kompatibilitätslayer entstehen, etwa `Wohnzimmer_Temperatur_value`).
19
+
20
+ Schreibt Datenpunkt-Änderungen gepuffert an VictoriaMetrics und beantwortet `getHistory()`-Anfragen
21
+ (damit vis-Chart-Widgets direkt gegen diesen Adapter abfragen können) – siehe [Lesepfad](#lesepfad)
22
+ unten für Details und bekannte Einschränkungen. Für Visualisierung ohne vis (z.B. Grafana)
23
+ weiterhin direkt gegen VictoriaMetrics per PromQL abfragen. Der Adapter ist privat und (noch)
24
+ nicht im offiziellen ioBroker-Repository gelistet.
25
+
26
+ ## Voraussetzungen
27
+
28
+ - Eine laufende VictoriaMetrics-Instanz (Single-Node), erreichbar per HTTP(S) – siehe
29
+ [Installation von VictoriaMetrics](#installation-von-victoriametrics) unten
30
+ - ioBroker js-controller >= 6.0.11, Admin >= 7.0.23
31
+
32
+ ## Installation von VictoriaMetrics
33
+
34
+ VictoriaMetrics läuft als einzelne, eigenständige Binary/Docker-Image – kein separater
35
+ Datenbank-Server-Setup wie bei InfluxDB nötig. Offizielle Installationsanleitungen für alle
36
+ Plattformen (Linux-Binary, Docker, Kubernetes-Helm-Chart, …): siehe
37
+ [VictoriaMetrics-Dokumentation](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/).
38
+
39
+ ### Per Docker
40
+
41
+ ```bash
42
+ docker run -d --name victoriametrics \
43
+ -p 8428:8428 \
44
+ -v victoria-metrics-data:/victoria-metrics-data \
45
+ victoriametrics/victoria-metrics:latest \
46
+ --storageDataPath=/victoria-metrics-data \
47
+ --retentionPeriod=100y
48
+ ```
49
+
50
+ Danach ist VictoriaMetrics unter `http://<Docker-Host>:8428` erreichbar (Health-Check:
51
+ `http://<Docker-Host>:8428/health`, VMUI: `http://<Docker-Host>:8428/vmui/`). Offizielles
52
+ Docker-Image: [victoriametrics/victoria-metrics auf Docker Hub](https://hub.docker.com/r/victoriametrics/victoria-metrics/).
53
+ Für dauerhaften Betrieb empfiehlt sich ein Volume/Bind-Mount für `-storageDataPath` (siehe
54
+ oben) sowie – je nach Umgebung – ein `docker-compose.yml` mit `restart: unless-stopped`.
55
+
56
+ ### Ohne Docker
57
+
58
+ Statisch gelinktes Binary für die jeweilige Plattform von der
59
+ [GitHub-Releases-Seite](https://github.com/VictoriaMetrics/VictoriaMetrics/releases) laden,
60
+ entpacken und starten:
61
+
62
+ ```bash
63
+ ./victoria-metrics-prod --storageDataPath=/path/to/data --retentionPeriod=100y
64
+ ```
65
+
66
+ Ausführliche Installationsanleitungen (inkl. systemd-Service, Kubernetes, Cluster-Setup) in der
67
+ [offiziellen Dokumentation](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#how-to-start-victoriametrics).
68
+
69
+ ## Installation des Adapters
70
+
71
+ Da der Adapter privat ist (nicht im offiziellen Repository), erfolgt die Installation über die
72
+ GitHub-URL, entweder in der Admin-Oberfläche unter "Adapter" → "Custom von URL installieren..."
73
+ oder per CLI:
74
+
75
+ ```bash
76
+ iobroker url https://github.com/seaspotter/iobroker.victoriametrics
77
+ ```
78
+
79
+ ## Konfiguration
80
+
81
+ ### Tab "Verbindung"
82
+
83
+ | Feld | Beschreibung |
84
+ |------|--------------|
85
+ | Protokoll | `http` oder `https` |
86
+ | Host / IP-Adresse | Hostname/IP der VictoriaMetrics-Instanz, ohne Protokoll |
87
+ | Port | Standard: `8428` |
88
+ | Basic-Auth verwenden | Aktiviert Benutzername/Passwort (VictoriaMetrics `-httpAuth.*`) |
89
+ | Timeout (ms) | HTTP-Request-Timeout |
90
+
91
+ Über den Button **"Verbindung testen"** wird der `/health`-Endpunkt von VictoriaMetrics mit den
92
+ aktuell eingegebenen (noch nicht gespeicherten) Werten geprüft; bei Erfolg zeigt die Meldung
93
+ zusätzlich die aktuell konfigurierte Retention an.
94
+
95
+ Beim Start des Adapters wird zusätzlich die aktuell auf dem VM-Server konfigurierte Retention
96
+ geloggt (`VictoriaMetrics unter ... erreichbar (Retention: 100y)`) – reines Anzeigen, siehe
97
+ [Retention](#retention) unten, warum sich das nicht über den Adapter ändern lässt.
98
+
99
+ In der linken Seitenleiste von ioBroker.admin erscheint außerdem ein **"VictoriaMetrics"**-Menüpunkt
100
+ (analog zu Node-RED/Zigbee2MQTT), der die VMUI (VictoriaMetrics' eigene Web-Oberfläche zum
101
+ Ausführen von PromQL-Abfragen, Graphen etc.) direkt unter `http://<Host>:<Port>/vmui/` einbettet.
102
+ **Achtung:** Läuft ioBroker.admin über HTTPS, aber VictoriaMetrics nur über HTTP, blockiert der
103
+ Browser das Einbetten (Mixed-Content-Schutz) – dann öffnet sich eine leere Seite. Abhilfe nur durch
104
+ VictoriaMetrics ebenfalls über HTTPS erreichbar zu machen, ein Workaround im Adapter ist nicht möglich.
105
+
106
+ ### Tab "Schreibverhalten"
107
+
108
+ | Feld | Beschreibung |
109
+ |------|--------------|
110
+ | Schreibintervall (Sekunden) | Wie oft gepufferte Werte gesammelt geschrieben werden |
111
+ | Max. Puffergröße (Punkte) | Löst bei Erreichen einen sofortigen Schreibvorgang aus |
112
+
113
+ ### Datenpunkte historisieren
114
+
115
+ Im Objektbaum bei jedem gewünschten Datenpunkt den Tab **"Historie"** öffnen, diesen Adapter
116
+ auswählen und über den Schalter **"Aktiviert"** einschalten.
117
+
118
+ | Feld | Beschreibung |
119
+ |------|--------------|
120
+ | Entprellzeit (ms, optional) | Protokolliert den Wert erst, wenn er für die angegebene Zeit unverändert bleibt (wartet auf einen "ruhigen" Zustand vor dem Schreiben) |
121
+ | Blockzeit (ms, optional) | Ignoriert neue Werte für die angegebene Zeit nach dem zuletzt geschriebenen Wert (Rate-Limit) |
122
+ | Ignoriere Werte kleiner/größer als (optional) | Schwellenwert-Filter, z. B. um offensichtliche Sensor-Ausreißer zu verwerfen |
123
+ | Ignoriere Nullwerte (0) | Überspringt Werte, die exakt 0 sind |
124
+ | Metrik-Name (optional) | Überschreibt die automatisch aus der Objekt-ID abgeleitete Metrik (`__name__`), siehe unten |
125
+ | Runden auf Nachkommastellen (optional) | Rundet den Wert vor dem Schreiben; leer lassen für keine Rundung |
126
+ | Minimale Änderung (optional) | Werte, die sich vom zuletzt geschriebenen Wert um weniger als diesen Betrag unterscheiden, werden nicht geschrieben; leer lassen für keine Filterung |
127
+ | Nur Änderungen aufzeichnen | Schreibt einen Wert nur, wenn er sich vom zuletzt geschriebenen Wert unterscheidet |
128
+ | Relog-Intervall (ms, optional) | Nur bei aktiviertem "Nur Änderungen aufzeichnen": schreibt einen unveränderten Wert spätestens nach dieser Zeit erneut, damit im Chart keine Lücken entstehen |
129
+
130
+ Entprellzeit und Blockzeit sind kombinierbar mit den übrigen Filtern: Entprellzeit
131
+ verzögert das Schreiben, bis der Wert eine Zeit lang stabil war; Blockzeit begrenzt,
132
+ wie oft ein Datenpunkt maximal geschrieben wird, unabhängig davon, ob er sich ändert.
133
+ "Nur Änderungen aufzeichnen" ist unabhängig von "Minimale Änderung" nutzbar: Erstere schreibt
134
+ nur bei einer *exakten* Wertänderung (mit optionalem periodischem Relog), Letztere filtert
135
+ Änderungen unterhalb eines *Schwellenwerts*.
136
+
137
+ ### Tab "Standardwerte"
138
+
139
+ Dieselben Felder (außer Metrik-Name) lassen sich auch **instanzweit** setzen, im Instanz-Konfig-Tab
140
+ "Standardwerte". Sie gelten für alle Datenpunkte, die im Historie-Tab kein eigenes Feld gesetzt
141
+ haben – so muss nicht jeder einzelne Datenpunkt konfiguriert werden. Ein Datenpunkt-eigener Wert
142
+ überschreibt immer den instanzweiten Standard.
143
+
144
+ ## Metrik-Namensbildung
145
+
146
+ Der Prometheus-Metrikname (`__name__`) wird wie folgt ermittelt:
147
+
148
+ 1. Ist im Historie-Tab ein **Metrik-Name** (`aliasId`) gesetzt, wird dieser verwendet.
149
+ 2. Andernfalls wird die **ioBroker-Objekt-ID** verwendet (nicht der Objektname, da dieser sich
150
+ unbemerkt ändern und die Zeitreihe stillschweigend spalten könnte).
151
+
152
+ Der gewählte Name wird anschließend normalisiert: kleingeschrieben, `.` wird zu `_`, jede Folge
153
+ ungültiger Zeichen wird zu einem einzelnen `_` zusammengefasst, führende/trailing `_` entfernt,
154
+ und falls das Ergebnis mit einer Ziffer beginnt, wird ein `_` vorangestellt.
155
+
156
+ Beispiel: `javascript.0.Room Temperature` → `javascript_0_room_temperature`. Für einen
157
+ kurzen, sprechenden Namen wie `room_temperature` das Feld **Metrik-Name** verwenden.
158
+
159
+ ## Datentyp-Behandlung
160
+
161
+ VictoriaMetrics-Metriken sind grundsätzlich numerisch:
162
+
163
+ - **Zahlen** werden unverändert geschrieben.
164
+ - **Booleans** werden zu `0.0`/`1.0` konvertiert.
165
+ - **Strings** werden als Zahl geparst (z.B. `"21.5"` → `21.5`); nicht parsbare Strings werden mit
166
+ einer Warnung im Log übersprungen (kein Schreiben eines String-Labels, um eine
167
+ Kardinalitätsexplosion zu vermeiden).
168
+
169
+ Zusätzlich wird automatisch ein Label `unit` gesetzt, sofern das ioBroker-Objekt eine Einheit
170
+ (`common.unit`) definiert hat.
171
+
172
+ ## Verbindungsabbruch & Datenverlustschutz
173
+
174
+ Werte werden zunächst in einem Puffer gesammelt und im konfigurierten Schreibintervall (bzw. bei
175
+ Erreichen der maximalen Puffergröße) gesammelt an VictoriaMetrics geschrieben.
176
+
177
+ Schlägt ein Schreibvorgang fehl (z.B. VM nicht erreichbar), wird für jeden betroffenen
178
+ Datenpunkt ein Fehlerzähler erhöht:
179
+ - Bei einem Zählerstand `< 10` wird der Punkt erneut gepuffert und beim nächsten Intervall erneut
180
+ versucht.
181
+ - Bei Erreichen von `10` wird der Punkt verworfen und der Zähler zurückgesetzt (verhindert
182
+ unbegrenztes Anwachsen des Puffers bei dauerhaft nicht erreichbarem VM).
183
+
184
+ Zusätzlich wird der Puffer beim sauberen Beenden des Adapters sowie (gedrosselt auf max. einmal
185
+ pro Minute) nach fehlgeschlagenen Schreibversuchen persistiert, sodass auch ein harter Absturz
186
+ (z.B. Container-Neustart) im normalen Rahmen keine Daten verliert.
187
+
188
+ ## Lesepfad
189
+
190
+ Der Adapter beantwortet `getHistory()`-Anfragen (das, was vis-Chart-Widgets aufrufen), indem
191
+ er Datenpunkte der angefragten Metrik aus VictoriaMetrics liest und sie an die geteilte
192
+ [`@iobroker/aggregate`](https://github.com/ioBroker/aggregate)-Bibliothek übergibt – dieselbe
193
+ Bibliothek, die `iobroker.influxdb`, `iobroker.sql` und `iobroker.history` für
194
+ Bucket-Aggregation (Durchschnitt/Min/Max/Summe/Anzahl/Perzentil/...), Lücken-Behandlung und
195
+ Rand-Interpolation verwenden. Dadurch funktionieren grundsätzlich alle Standard-Aggregationstypen,
196
+ ohne dass dieser Adapter die Bucket-Logik selbst nachbauen musste.
197
+
198
+ **Serverseitiges Pushdown:** für die Aggregationsmethoden `average`, `min`, `max`, `total` und
199
+ `count` mit bekanntem Zeit-`step` rechnet VictoriaMetrics selbst per PromQL (`avg_over_time`,
200
+ `min_over_time`, `max_over_time`, `sum_over_time`, `count_over_time`) – der Adapter überträgt
201
+ dann nur die fertigen Bucket-Werte statt aller Rohpunkte. Für `onchange`/`none`/`minmax` sowie
202
+ `percentile`/`quantile`/`integral` (kein direktes PromQL-Äquivalent) und immer dann, wenn das
203
+ Pushdown fehlschlägt, wird transparent auf den Rohdaten-Pfad (`/api/v1/export` + JS-seitige
204
+ Aggregation) zurückgefallen.
205
+
206
+ **`id: '*'`:** liefert die letzten Rohwerte über alle *aktuell in Admin aktivierten*
207
+ Datenpunkte hinweg (nicht verwaiste Metriken zwischenzeitlich deaktivierter Datenpunkte),
208
+ jeweils mit `id`-Feld pro Punkt. Aggregation wird hierfür nicht unterstützt (ergibt über
209
+ verschiedene Metriken hinweg keinen Sinn) – es werden immer Rohwerte zurückgegeben.
210
+
211
+ **Weitere bekannte Einschränkungen:**
212
+ - Antworten enthalten kein `ack`/`q`/`from` – der Adapter speichert diese Felder gar nicht erst
213
+ in VictoriaMetrics
214
+ - Kein Vorab-Flush noch nicht geschriebener, gepufferter Werte vor einer Abfrage (anders als
215
+ `iobroker.influxdb`) – ein `getHistory()`-Aufruf direkt nach einer Zustandsänderung sieht den
216
+ neuesten Wert ggf. erst nach dem nächsten Schreibintervall
217
+
218
+ ### Zugriff aus dem JavaScript-Adapter
219
+
220
+ ```javascript
221
+ // Letzte 50 Rohwerte
222
+ sendTo('victoriametrics.0', 'getHistory', {
223
+ id: 'javascript.0.exampleValue',
224
+ options: {
225
+ end: Date.now(),
226
+ count: 50,
227
+ aggregate: 'onchange',
228
+ }
229
+ }, function (result) {
230
+ for (var i = 0; i < result.result.length; i++) {
231
+ console.log(result.result[i].ts + ' ' + result.result[i].val);
232
+ }
233
+ });
234
+
235
+ // Stundenmittelwert der letzten 24h
236
+ var end = Date.now();
237
+ sendTo('victoriametrics.0', 'getHistory', {
238
+ id: 'javascript.0.exampleValue',
239
+ options: {
240
+ start: end - 24 * 3600000,
241
+ end: end,
242
+ aggregate: 'average',
243
+ step: 3600000,
244
+ }
245
+ }, function (result) {
246
+ console.log(JSON.stringify(result.result));
247
+ });
248
+
249
+ // Letzte 20 Rohwerte über alle aktivierten Datenpunkte hinweg
250
+ sendTo('victoriametrics.0', 'getHistory', {
251
+ id: '*',
252
+ options: {
253
+ end: Date.now(),
254
+ count: 20,
255
+ addId: true,
256
+ }
257
+ }, function (result) {
258
+ for (var i = 0; i < result.result.length; i++) {
259
+ console.log(result.result[i].id + ' ' + result.result[i].val);
260
+ }
261
+ });
262
+ ```
263
+
264
+ Unterstützte `options`-Felder und `aggregate`-Werte entsprechen dem ioBroker-Standard (siehe
265
+ [`iobroker.history`-Dokumentation](https://github.com/ioBroker/ioBroker.history#access-values-from-javascript-adapter)
266
+ für die vollständige Referenz) – mit den oben genannten Einschränkungen.
267
+
268
+ ## Datenmanagement / Skript-Schnittstellen
269
+
270
+ Der Adapter beantwortet zusätzlich drei weitere ioBroker-Message-Kommandos (`sendTo`), z.B. für
271
+ Skripte oder Migrationswerkzeuge:
272
+
273
+ ### features
274
+
275
+ Capability-Discovery:
276
+
277
+ ```javascript
278
+ sendTo('victoriametrics.0', 'features', {}, function (result) {
279
+ console.log(JSON.stringify(result.supportedFeatures)); // ['storeState', 'deleteAll']
280
+ });
281
+ ```
282
+
283
+ ### storeState
284
+
285
+ Schreibt einen oder mehrere historische Punkte, z.B. um alte Historie aus einer anderen Quelle
286
+ (z.B. InfluxDB) nachträglich zu importieren:
287
+
288
+ ```javascript
289
+ sendTo('victoriametrics.0', 'storeState', {
290
+ id: 'javascript.0.exampleValue',
291
+ state: { ts: 1690000000000, val: 512.3 },
292
+ rules: true, // Rundung + Schwellenwert-/Nullwert-Filter anwenden (siehe unten)
293
+ }, result => console.log(JSON.stringify(result)));
294
+
295
+ // auch als Batch für dieselbe id:
296
+ sendTo('victoriametrics.0', 'storeState', {
297
+ id: 'javascript.0.exampleValue',
298
+ state: [
299
+ { ts: 1690000000000, val: 512.3 },
300
+ { ts: 1690000060000, val: 498.1 },
301
+ ],
302
+ }, result => console.log(JSON.stringify(result)));
303
+
304
+ // oder als Array mehrerer ids:
305
+ sendTo('victoriametrics.0', 'storeState', [
306
+ { id: 'javascript.0.a', state: { ts: 1690000000000, val: 1 } },
307
+ { id: 'javascript.0.b', state: { ts: 1690000000000, val: 2 } },
308
+ ], result => console.log(JSON.stringify(result)));
309
+ ```
310
+
311
+ `rules: true` wendet Rundung und Schwellenwert-/Nullwert-Filter an (Werte-Validität, sinnvoll
312
+ auch für Importe); Entprellzeit/Blockzeit/Minimale Änderung werden **immer** ignoriert, da diese
313
+ auf Live-Zustandsänderungen ausgelegt sind und für rückdatierte Bulk-Importe keinen Sinn ergeben.
314
+ Erfordert nicht, dass der Datenpunkt aktuell für Live-Historisierung aktiviert ist. Bei
315
+ Teilfehlern liefert die Antwort `{error, errors: [...], successCount}`, bei vollem Erfolg
316
+ `{success: true, successCount}`.
317
+
318
+ ### deleteAll
319
+
320
+ Löscht die komplette in VictoriaMetrics gespeicherte Historie eines Datenpunkts:
321
+
322
+ ```javascript
323
+ sendTo('victoriametrics.0', 'deleteAll', { id: 'javascript.0.exampleValue' },
324
+ result => console.log(JSON.stringify(result)));
325
+
326
+ // auch als Array mehrerer ids:
327
+ sendTo('victoriametrics.0', 'deleteAll', [
328
+ { id: 'javascript.0.a' },
329
+ { id: 'javascript.0.b' },
330
+ ], result => console.log(JSON.stringify(result)));
331
+ ```
332
+
333
+ **Bewusst nicht implementiert:** `delete`/`deleteRange`/`update` (Einzelpunkt-Löschung/-Bearbeitung,
334
+ wie es das influxdb-Admin-UI per Klick auf einen Chart-Punkt anbietet). VictoriaMetrics kann
335
+ technisch keine einzelnen Datenpunkte löschen oder bearbeiten – nur ganze Zeitreihen per
336
+ Label-Match, da die Speicherung auf unveränderlichen, zeitsortierten Blöcken beruht (wie bei
337
+ Prometheus). Ein Löschen "einzelner Punkte" würde in Wirklichkeit die komplette Zeitreihe löschen –
338
+ das wäre überraschend und gefährlich, deshalb absichtlich weggelassen.
339
+
340
+ ## Retention
341
+
342
+ VictoriaMetrics' Retention ist ein **serverseitiges Start-Flag** (`-retentionPeriod`) des
343
+ VM-Prozesses selbst, nicht per HTTP-API zur Laufzeit änderbar (anders als z.B. InfluxDB, wo der
344
+ Adapter per `ALTER RETENTION POLICY` aktiv einen Wert setzen kann). Dieser Adapter zeigt die
345
+ aktuell konfigurierte Retention deshalb nur lesend an – zum Ändern muss VM mit einem anderen
346
+ `-retentionPeriod`-Wert neu gestartet werden (bei Docker: den `--retentionPeriod=...`-Parameter
347
+ im `docker run`/`docker-compose.yml` ändern und den Container neu erstellen).
348
+
349
+ Sichtbar ist die aktuelle Retention an drei Stellen (alle read-only, beim Adapterstart einmalig
350
+ vom `/flags`-Endpunkt gelesen):
351
+ - Datenpunkt **`<instance>.info.retention`** (String, z.B. `"100y"`) – für Skripte/VIS
352
+ - Log-Eintrag beim Start (`VictoriaMetrics unter ... erreichbar (Retention: 100y)`)
353
+ - Erfolgs-Meldung des Buttons **"Verbindung testen"** im Tab "Verbindung"
354
+
355
+ **Details:**
356
+ - **Standard-Retention**, falls `-retentionPeriod` nicht gesetzt ist: **1 Monat (31 Tage)**.
357
+ - **Minimum**: 24h/1 Tag. VictoriaMetrics unterstützt keine "unbegrenzte" Retention im engeren
358
+ Sinne, aber beliebig hohe Werte sind möglich, z.B. `-retentionPeriod=100y`.
359
+ - Daten werden **pro Monats-Partition** gelöscht, jeweils am ersten Tag des neuen Monats – nicht
360
+ sofort beim Erreichen der Grenze. Der maximale Plattenplatzverbrauch liegt daher bei
361
+ `retentionPeriod + 1 Monat`.
362
+ - Eine bestehende Retention kann jederzeit **verlängert** werden, ohne Daten zu verlieren. Wird
363
+ sie **verkürzt**, werden Daten außerhalb der neuen Grenze beim nächsten Monatswechsel gelöscht.
364
+ - Ausführliche Details: [VictoriaMetrics-Dokumentation, Abschnitt "Retention"](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#retention).
365
+
366
+ ## Sonstige bekannte Einschränkungen
367
+
368
+ - Kein Multi-Cluster-Support (vminsert/vmselect) – nur ein Single-Node-Ziel.
369
+ - Freie, pro Datenpunkt konfigurierbare Zusatz-Labels (über `unit` hinaus) sind nicht
370
+ implementiert.
371
+
372
+ ## Entwicklung
373
+
374
+ | Script | Beschreibung |
375
+ |--------|--------------|
376
+ | `npm run lint` | ESLint |
377
+ | `npm run check` | Type-Check (`tsc --noEmit`) |
378
+ | `npm run test:js` | Unit-Tests |
379
+ | `npm run test:package` | Prüft `package.json`/`io-package.json` |
380
+ | `npm run dev-server` | Startet [`dev-server`](https://github.com/ioBroker/dev-server) für einen lokalen Testlauf inkl. Admin-UI |
381
+
382
+ ## Changelog
383
+
384
+ ### **WORK IN PROGRESS**
385
+
386
+ ### 0.4.0 (2026-08-28)
387
+ * (SeaSpotter) Fix: VMUI-Sidebar-Link warf einen `URIError` beim Anklicken (`%native_protocol%` wurde nicht ersetzt) – korrekte Platzhalter-Syntax laut Admin-Quellcode ist `%protocol%`/`%host%`/`%port%` ohne `native_`-Präfix
388
+ * (SeaSpotter) Serverseitiges PromQL-Pushdown für `getHistory` bei den Aggregationsmethoden average/min/max/total/count (`avg_over_time` etc.) statt Rohdaten-Export + JS-Aggregation
389
+ * (SeaSpotter) `getHistory` mit `id: '*'`: letzte Rohwerte über alle aktuell aktivierten Datenpunkte hinweg
390
+ * (SeaSpotter) Neue Pro-Datenpunkt-/Standardwert-Filter `changesOnly` (nur Änderungen aufzeichnen) und `changesRelogInterval` (periodisches Relog unveränderter Werte)
391
+ * (SeaSpotter) Retention jetzt auch als eigener Datenpunkt `info.retention` und im Erfolgs-Alert von "Verbindung testen" sichtbar, nicht nur im Log
392
+ * (SeaSpotter) Eigenes Adapter-Icon
393
+
394
+ ### 0.3.0 (2026-08-28)
395
+ * (SeaSpotter) VMUI-Sidebar-Link in der Admin-Seitenleiste (`common.adminTab`, analog Node-RED/Zigbee2MQTT)
396
+ * (SeaSpotter) Instanzweite Standardwerte für alle Historie-Filter (round/changesMinDelta/debounceTime/blockTime/ignoreBelow-/AboveNumber/ignoreZero) – Datenpunkt-eigene Werte überschreiben weiterhin den Standard
397
+ * (SeaSpotter) Retention wird beim Start read-only geloggt (`/flags`-Endpunkt)
398
+ * (SeaSpotter) Neue Message-Kommandos `storeState` (Bulk-Import/Migration), `deleteAll` (Historie eines Datenpunkts löschen) und `features` (Capability-Discovery)
399
+ * (SeaSpotter) `round`, `changesMinDelta`, `debounceTime`, `blockTime`, `ignoreBelowNumber`/`ignoreAboveNumber`, `ignoreZero` als Pro-Datenpunkt-Filter ergänzt
400
+
401
+ ### 0.2.0 (2026-08-28)
402
+ * (SeaSpotter) `getHistory()`-Lesepfad über die geteilte `@iobroker/aggregate`-Bibliothek
403
+
404
+ ### 0.1.0 (2026-08-28)
405
+ * (SeaSpotter) Schreibpfad nach VictoriaMetrics (native JSON-Lines-Import-API), Verbindungstest, Puffer/Retry, Historie-Tab-Integration
406
+
407
+ ## License
408
+ MIT License
409
+
410
+ Copyright (c) 2026 SeaSpotter <seatowage@gmail.com>
411
+
412
+ Permission is hereby granted, free of charge, to any person obtaining a copy
413
+ of this software and associated documentation files (the "Software"), to deal
414
+ in the Software without restriction, including without limitation the rights
415
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
416
+ copies of the Software, and to permit persons to whom the Software is
417
+ furnished to do so, subject to the following conditions:
418
+
419
+ The above copyright notice and this permission notice shall be included in all
420
+ copies or substantial portions of the Software.
421
+
422
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
423
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
424
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
425
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
426
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
427
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
428
+ SOFTWARE.
@@ -0,0 +1,38 @@
1
+ {
2
+ "Basic-Auth verwenden": "Basic-Auth verwenden",
3
+ "Benutzername": "Benutzername",
4
+ "Blockzeit (ms, optional)": "Blockzeit (ms, optional)",
5
+ "Entprellzeit (ms, optional)": "Entprellzeit (ms, optional)",
6
+ "Gelten für alle Datenpunkte, die im Historie-Tab kein eigenes Feld gesetzt haben.": "Gelten für alle Datenpunkte, die im Historie-Tab kein eigenes Feld gesetzt haben.",
7
+ "Host / IP-Adresse": "Host / IP-Adresse",
8
+ "Hostname oder IP-Adresse der VictoriaMetrics-Instanz, ohne Protokoll": "Hostname oder IP-Adresse der VictoriaMetrics-Instanz, ohne Protokoll",
9
+ "Ignoriere Nullwerte (0)": "Ignoriere Nullwerte (0)",
10
+ "Ignoriere Werte größer als (optional)": "Ignoriere Werte größer als (optional)",
11
+ "Ignoriere Werte kleiner als (optional)": "Ignoriere Werte kleiner als (optional)",
12
+ "Ignoriert neue Werte für die angegebene Zeit nach dem zuletzt geschriebenen Wert.": "Ignoriert neue Werte für die angegebene Zeit nach dem zuletzt geschriebenen Wert.",
13
+ "Löst bei Erreichen einen sofortigen Schreibvorgang aus, unabhängig vom Schreibintervall": "Löst bei Erreichen einen sofortigen Schreibvorgang aus, unabhängig vom Schreibintervall",
14
+ "Max. Puffergröße (Punkte)": "Max. Puffergröße (Punkte)",
15
+ "Metrik-Name (optional)": "Metrik-Name (optional)",
16
+ "Minimale Änderung (optional)": "Minimale Änderung (optional)",
17
+ "Nur Änderungen aufzeichnen": "Nur Änderungen aufzeichnen",
18
+ "Passwort": "Passwort",
19
+ "Port": "Port",
20
+ "Protokoll": "Protokoll",
21
+ "Protokolliert den Wert erst, wenn er für die angegebene Zeit unverändert bleibt. Leer lassen für sofortiges Schreiben.": "Protokolliert den Wert erst, wenn er für die angegebene Zeit unverändert bleibt. Leer lassen für sofortiges Schreiben.",
22
+ "Relog-Intervall (ms, optional)": "Relog-Intervall (ms, optional)",
23
+ "Runden auf Nachkommastellen (optional)": "Runden auf Nachkommastellen (optional)",
24
+ "Rundet den Wert vor dem Schreiben auf die angegebene Anzahl Nachkommastellen. Leer lassen für keine Rundung.": "Rundet den Wert vor dem Schreiben auf die angegebene Anzahl Nachkommastellen. Leer lassen für keine Rundung.",
25
+ "Schreibintervall (Sekunden)": "Schreibintervall (Sekunden)",
26
+ "Schreibt einen Wert nur, wenn er sich vom zuletzt geschriebenen Wert unterscheidet.": "Schreibt einen Wert nur, wenn er sich vom zuletzt geschriebenen Wert unterscheidet.",
27
+ "Schreibt einen unveränderten Wert spätestens nach dieser Zeit erneut, damit im Chart keine Lücken entstehen. Nur wirksam bei aktiviertem 'Nur Änderungen aufzeichnen'.": "Schreibt einen unveränderten Wert spätestens nach dieser Zeit erneut, damit im Chart keine Lücken entstehen. Nur wirksam bei aktiviertem 'Nur Änderungen aufzeichnen'.",
28
+ "Schreibverhalten": "Schreibverhalten",
29
+ "Standardwerte": "Standardwerte",
30
+ "Timeout (ms)": "Timeout (ms)",
31
+ "Verbindung": "Verbindung",
32
+ "Verbindung erfolgreich (Retention: %s)": "Verbindung erfolgreich (Retention: %s)",
33
+ "Verbindung testen": "Verbindung testen",
34
+ "Werte, die sich vom zuletzt geschriebenen Wert um weniger als diesen Betrag unterscheiden, werden nicht geschrieben. Leer lassen für keine Filterung.": "Werte, die sich vom zuletzt geschriebenen Wert um weniger als diesen Betrag unterscheiden, werden nicht geschrieben. Leer lassen für keine Filterung.",
35
+ "Wie oft gepufferte Werte gesammelt an VictoriaMetrics gesendet werden": "Wie oft gepufferte Werte gesammelt an VictoriaMetrics gesendet werden",
36
+ "Zeitüberschreitung bei der Verbindung": "Zeitüberschreitung bei der Verbindung",
37
+ "Überschreibt die automatisch aus der Objekt-ID abgeleitete Metrik (__name__). Leer lassen für Standardableitung.": "Überschreibt die automatisch aus der Objekt-ID abgeleitete Metrik (__name__). Leer lassen für Standardableitung."
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "Verbindung": "Connection",
3
+ "Schreibverhalten": "Write behavior",
4
+ "Protokoll": "Protocol",
5
+ "Host / IP-Adresse": "Host / IP address",
6
+ "Hostname oder IP-Adresse der VictoriaMetrics-Instanz, ohne Protokoll": "Hostname or IP address of the VictoriaMetrics instance, without protocol",
7
+ "Port": "Port",
8
+ "Basic-Auth verwenden": "Use basic auth",
9
+ "Benutzername": "Username",
10
+ "Passwort": "Password",
11
+ "Timeout (ms)": "Timeout (ms)",
12
+ "Verbindung testen": "Test connection",
13
+ "Zeitüberschreitung bei der Verbindung": "Connection timeout",
14
+ "Verbindung erfolgreich (Retention: %s)": "Connection successful (retention: %s)",
15
+ "Schreibintervall (Sekunden)": "Write interval (seconds)",
16
+ "Wie oft gepufferte Werte gesammelt an VictoriaMetrics gesendet werden": "How often buffered values are sent to VictoriaMetrics in a batch",
17
+ "Max. Puffergröße (Punkte)": "Max. buffer size (points)",
18
+ "Löst bei Erreichen einen sofortigen Schreibvorgang aus, unabhängig vom Schreibintervall": "Triggers an immediate write when reached, independent of the write interval",
19
+ "Metrik-Name (optional)": "Metric name (optional)",
20
+ "Überschreibt die automatisch aus der Objekt-ID abgeleitete Metrik (__name__). Leer lassen für Standardableitung.": "Overrides the metric name (__name__) automatically derived from the object ID. Leave empty for the default derivation.",
21
+ "Runden auf Nachkommastellen (optional)": "Round to decimal places (optional)",
22
+ "Rundet den Wert vor dem Schreiben auf die angegebene Anzahl Nachkommastellen. Leer lassen für keine Rundung.": "Rounds the value to the given number of decimal places before writing. Leave empty for no rounding.",
23
+ "Minimale Änderung (optional)": "Minimum change (optional)",
24
+ "Werte, die sich vom zuletzt geschriebenen Wert um weniger als diesen Betrag unterscheiden, werden nicht geschrieben. Leer lassen für keine Filterung.": "Values that differ from the last written value by less than this amount are not written. Leave empty for no filtering.",
25
+ "Entprellzeit (ms, optional)": "Debounce time (ms, optional)",
26
+ "Protokolliert den Wert erst, wenn er für die angegebene Zeit unverändert bleibt. Leer lassen für sofortiges Schreiben.": "Only logs the value once it has stayed unchanged for the given time. Leave empty to write immediately.",
27
+ "Blockzeit (ms, optional)": "Block time (ms, optional)",
28
+ "Ignoriert neue Werte für die angegebene Zeit nach dem zuletzt geschriebenen Wert.": "Ignores new values for the given time after the last written value.",
29
+ "Ignoriere Werte kleiner als (optional)": "Ignore values below (optional)",
30
+ "Ignoriere Werte größer als (optional)": "Ignore values above (optional)",
31
+ "Ignoriere Nullwerte (0)": "Ignore zero values (0)",
32
+ "Standardwerte": "Defaults",
33
+ "Gelten für alle Datenpunkte, die im Historie-Tab kein eigenes Feld gesetzt haben.": "Apply to all datapoints that don't set their own value in the Historie tab.",
34
+ "Nur Änderungen aufzeichnen": "Log changes only",
35
+ "Schreibt einen Wert nur, wenn er sich vom zuletzt geschriebenen Wert unterscheidet.": "Only writes a value if it differs from the last written value.",
36
+ "Relog-Intervall (ms, optional)": "Relog interval (ms, optional)",
37
+ "Schreibt einen unveränderten Wert spätestens nach dieser Zeit erneut, damit im Chart keine Lücken entstehen. Nur wirksam bei aktiviertem 'Nur Änderungen aufzeichnen'.": "Writes an unchanged value again at the latest after this time, so charts don't show gaps. Only effective when 'Log changes only' is enabled."
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "Basic-Auth verwenden": "Usar autenticación básica",
3
+ "Benutzername": "Nombre de usuario",
4
+ "Blockzeit (ms, optional)": "Tiempo de bloqueo (ms, opcional)",
5
+ "Entprellzeit (ms, optional)": "Tiempo de rebote (ms, opcional)",
6
+ "Gelten für alle Datenpunkte, die im Historie-Tab kein eigenes Feld gesetzt haben.": "Aplicar a todos los puntos de datos que no establecen su propio valor en la pestaña Historial.",
7
+ "Host / IP-Adresse": "Anfitrión/dirección IP",
8
+ "Hostname oder IP-Adresse der VictoriaMetrics-Instanz, ohne Protokoll": "Nombre de host o dirección IP de la instancia de VictoriaMetrics, sin protocolo",
9
+ "Ignoriere Nullwerte (0)": "Ignorar valores cero (0)",
10
+ "Ignoriere Werte größer als (optional)": "Ignorar los valores anteriores (opcional)",
11
+ "Ignoriere Werte kleiner als (optional)": "Ignorar los valores siguientes (opcional)",
12
+ "Ignoriert neue Werte für die angegebene Zeit nach dem zuletzt geschriebenen Wert.": "Ignora los valores nuevos durante el tiempo dado después del último valor escrito.",
13
+ "Löst bei Erreichen einen sofortigen Schreibvorgang aus, unabhängig vom Schreibintervall": "Activa una escritura inmediata cuando se alcanza, independientemente del intervalo de escritura.",
14
+ "Max. Puffergröße (Punkte)": "Máx. tamaño del buffer (puntos)",
15
+ "Metrik-Name (optional)": "Nombre de la métrica (opcional)",
16
+ "Minimale Änderung (optional)": "Cambio mínimo (opcional)",
17
+ "Nur Änderungen aufzeichnen": "Registrar solo cambios",
18
+ "Passwort": "Contraseña",
19
+ "Port": "Puerto",
20
+ "Protokoll": "Protocolo",
21
+ "Protokolliert den Wert erst, wenn er für die angegebene Zeit unverändert bleibt. Leer lassen für sofortiges Schreiben.": "Solo registra el valor una vez que ha permanecido sin cambios durante el tiempo determinado. Déjelo vacío para escribir inmediatamente.",
22
+ "Relog-Intervall (ms, optional)": "Intervalo de registro (ms, opcional)",
23
+ "Runden auf Nachkommastellen (optional)": "Redondear a decimales (opcional)",
24
+ "Rundet den Wert vor dem Schreiben auf die angegebene Anzahl Nachkommastellen. Leer lassen für keine Rundung.": "Redondea el valor al número de decimales indicado antes de escribir. Déjelo vacío para que no se redondee.",
25
+ "Schreibintervall (Sekunden)": "Intervalo de escritura (segundos)",
26
+ "Schreibt einen Wert nur, wenn er sich vom zuletzt geschriebenen Wert unterscheidet.": "Sólo escribe un valor si difiere del último valor escrito.",
27
+ "Schreibt einen unveränderten Wert spätestens nach dieser Zeit erneut, damit im Chart keine Lücken entstehen. Nur wirksam bei aktiviertem 'Nur Änderungen aufzeichnen'.": "Vuelve a escribir un valor sin cambios a más tardar después de este tiempo, para que los gráficos no muestren espacios en blanco. Solo es efectivo cuando está habilitado \"Registrar solo cambios\".",
28
+ "Schreibverhalten": "Comportamiento de escritura",
29
+ "Standardwerte": "Valores predeterminados",
30
+ "Timeout (ms)": "Tiempo de espera (ms)",
31
+ "Verbindung": "Conexión",
32
+ "Verbindung erfolgreich (Retention: %s)": "Conexión exitosa (retención: %s)",
33
+ "Verbindung testen": "Conexión de prueba",
34
+ "Werte, die sich vom zuletzt geschriebenen Wert um weniger als diesen Betrag unterscheiden, werden nicht geschrieben. Leer lassen für keine Filterung.": "Los valores que difieran del último valor escrito por menos de esta cantidad no se escriben. Déjelo vacío para no filtrar.",
35
+ "Wie oft gepufferte Werte gesammelt an VictoriaMetrics gesendet werden": "Con qué frecuencia se envían los valores almacenados en el búfer a VictoriaMetrics en un lote",
36
+ "Zeitüberschreitung bei der Verbindung": "Tiempo de espera de conexión",
37
+ "Überschreibt die automatisch aus der Objekt-ID abgeleitete Metrik (__name__). Leer lassen für Standardableitung.": "Anula el nombre de la métrica (__name__) derivado automáticamente del ID del objeto. Déjelo vacío para la derivación predeterminada."
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "Basic-Auth verwenden": "Utiliser l'authentification de base",
3
+ "Benutzername": "Nom d'utilisateur",
4
+ "Blockzeit (ms, optional)": "Temps de blocage (ms, facultatif)",
5
+ "Entprellzeit (ms, optional)": "Temps anti-rebond (ms, facultatif)",
6
+ "Gelten für alle Datenpunkte, die im Historie-Tab kein eigenes Feld gesetzt haben.": "Appliquer à tous les points de données qui ne définissent pas leur propre valeur dans l'onglet Historique.",
7
+ "Host / IP-Adresse": "Hôte/adresse IP",
8
+ "Hostname oder IP-Adresse der VictoriaMetrics-Instanz, ohne Protokoll": "Nom d'hôte ou adresse IP de l'instance VictoriaMetrics, sans protocole",
9
+ "Ignoriere Nullwerte (0)": "Ignorer les valeurs nulles (0)",
10
+ "Ignoriere Werte größer als (optional)": "Ignorer les valeurs ci-dessus (facultatif)",
11
+ "Ignoriere Werte kleiner als (optional)": "Ignorer les valeurs ci-dessous (facultatif)",
12
+ "Ignoriert neue Werte für die angegebene Zeit nach dem zuletzt geschriebenen Wert.": "Ignore les nouvelles valeurs pendant le temps donné après la dernière valeur écrite.",
13
+ "Löst bei Erreichen einen sofortigen Schreibvorgang aus, unabhängig vom Schreibintervall": "Déclenche une écriture immédiate une fois atteint, indépendamment de l'intervalle d'écriture",
14
+ "Max. Puffergröße (Punkte)": "Max. taille du tampon (points)",
15
+ "Metrik-Name (optional)": "Nom de la métrique (facultatif)",
16
+ "Minimale Änderung (optional)": "Changement minimum (facultatif)",
17
+ "Nur Änderungen aufzeichnen": "Consigner les modifications uniquement",
18
+ "Passwort": "Mot de passe",
19
+ "Port": "Port",
20
+ "Protokoll": "Protocole",
21
+ "Protokolliert den Wert erst, wenn er für die angegebene Zeit unverändert bleibt. Leer lassen für sofortiges Schreiben.": "N'enregistre la valeur qu'une fois qu'elle est restée inchangée pendant la durée donnée. Laissez vide pour écrire immédiatement.",
22
+ "Relog-Intervall (ms, optional)": "Intervalle de reconnexion (ms, facultatif)",
23
+ "Runden auf Nachkommastellen (optional)": "Arrondir à la décimale (facultatif)",
24
+ "Rundet den Wert vor dem Schreiben auf die angegebene Anzahl Nachkommastellen. Leer lassen für keine Rundung.": "Arrondit la valeur au nombre de décimales donné avant d'écrire. Laissez vide pour ne pas arrondir.",
25
+ "Schreibintervall (Sekunden)": "Intervalle d'écriture (secondes)",
26
+ "Schreibt einen Wert nur, wenn er sich vom zuletzt geschriebenen Wert unterscheidet.": "N'écrit une valeur que si elle diffère de la dernière valeur écrite.",
27
+ "Schreibt einen unveränderten Wert spätestens nach dieser Zeit erneut, damit im Chart keine Lücken entstehen. Nur wirksam bei aktiviertem 'Nur Änderungen aufzeichnen'.": "Écrit à nouveau une valeur inchangée au plus tard après cette heure, afin que les graphiques n'affichent pas d'écarts. Efficace uniquement lorsque « Enregistrer les modifications uniquement » est activé.",
28
+ "Schreibverhalten": "Comportement d'écriture",
29
+ "Standardwerte": "Valeurs par défaut",
30
+ "Timeout (ms)": "Délai d'expiration (ms)",
31
+ "Verbindung": "Connexion",
32
+ "Verbindung erfolgreich (Retention: %s)": "Connexion réussie (rétention : %s)",
33
+ "Verbindung testen": "Tester la connexion",
34
+ "Werte, die sich vom zuletzt geschriebenen Wert um weniger als diesen Betrag unterscheiden, werden nicht geschrieben. Leer lassen für keine Filterung.": "Les valeurs qui diffèrent de la dernière valeur écrite de moins de ce montant ne sont pas écrites. Laissez vide pour aucun filtrage.",
35
+ "Wie oft gepufferte Werte gesammelt an VictoriaMetrics gesendet werden": "À quelle fréquence les valeurs mises en mémoire tampon sont envoyées à VictoriaMetrics dans un lot",
36
+ "Zeitüberschreitung bei der Verbindung": "Délai de connexion",
37
+ "Überschreibt die automatisch aus der Objekt-ID abgeleitete Metrik (__name__). Leer lassen für Standardableitung.": "Remplace le nom de la métrique (__name__) automatiquement dérivé de l'ID de l'objet. Laissez vide pour la dérivation par défaut."
38
+ }