iobroker.anomaly-detection 0.1.0 → 0.1.1
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 +5 -0
- package/admin/i18n/de.json +13 -12
- package/admin/jsonConfig.json +225 -26
- package/io-package.json +14 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -310,6 +310,11 @@ Processing and model storage are completely local to ioBroker. No monitored valu
|
|
|
310
310
|
|
|
311
311
|
## Changelog
|
|
312
312
|
|
|
313
|
+
### 0.1.1 (2026-09-07)
|
|
314
|
+
|
|
315
|
+
- (Voodoo2man) improve configuration UI layout and translations
|
|
316
|
+
- (Voodoo2man) add detector guidance and contextual option visibility
|
|
317
|
+
|
|
313
318
|
### 0.1.0 (2026-09-06)
|
|
314
319
|
|
|
315
320
|
- (Voodoo2man) add local statistical anomaly detection MVP
|
package/admin/i18n/de.json
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
{
|
|
2
|
-
"Anomaly threshold": "
|
|
2
|
+
"Anomaly threshold": "Anomalie-Schwellenwert",
|
|
3
3
|
"Context state ID": "Kontextstatus-ID",
|
|
4
4
|
"Context states (maximum 3)": "Kontextzustände (maximal 3)",
|
|
5
5
|
"Enable context-aware detection": "Aktivieren Sie die kontextbezogene Erkennung",
|
|
6
6
|
"Enable persistent level-shift detection": "Aktivieren Sie die dauerhafte Erkennung von Pegelverschiebungen",
|
|
7
|
-
"Enable rate-of-change detector": "
|
|
8
|
-
"Enable stuck-state detector": "
|
|
7
|
+
"Enable rate-of-change detector": "Detektor für Änderungsrate aktivieren",
|
|
8
|
+
"Enable stuck-state detector": "Detektor für festhängende Werte aktivieren",
|
|
9
9
|
"Enable trend detection": "Aktivieren Sie die Trenderkennung",
|
|
10
|
-
"Enable value deviation detector": "
|
|
11
|
-
"Enabled": "
|
|
10
|
+
"Enable value deviation detector": "Detektor für Wertabweichungen aktivieren",
|
|
11
|
+
"Enabled": "Aktiviert",
|
|
12
12
|
"History adapter instance": "Instanz des History-Adapters",
|
|
13
13
|
"History availability": "History-Verfügbarkeit",
|
|
14
14
|
"History source": "History-Quelle",
|
|
15
|
+
"History source (enabled compatible providers only)": "History-Quelle (nur aktivierte kompatible Anbieter)",
|
|
15
16
|
"History training period (days)": "Zeitraum des History-Trainings (Tage)",
|
|
16
17
|
"Import existing history": "Vorhandene Historie importieren",
|
|
17
18
|
"Initial training": "Initiales Training",
|
|
18
19
|
"Learn from live values only": "Nur mit Live-Werten lernen",
|
|
19
20
|
"Maximum imported samples": "Maximal importierte Proben",
|
|
20
|
-
"Minimum anomaly duration (minutes)": "
|
|
21
|
+
"Minimum anomaly duration (minutes)": "Mindestdauer einer Anomalie (Minuten)",
|
|
21
22
|
"Minimum learned samples": "Mindestens gelernte Proben",
|
|
22
|
-
"Monitored numerical states": "
|
|
23
|
+
"Monitored numerical states": "Überwachte numerische Zustände",
|
|
23
24
|
"Name": "Name",
|
|
24
25
|
"Numeric bucket width": "Numerische Bucket-Breite",
|
|
25
|
-
"Sensitivity (robust z-score)": "
|
|
26
|
-
"Source state ID": "
|
|
26
|
+
"Sensitivity (robust z-score)": "Empfindlichkeit (robuster z-Score)",
|
|
27
|
+
"Source state ID": "Quellstatus-ID",
|
|
27
28
|
"Start monitoring after history import": "Überwachung nach dem Historienimport starten",
|
|
28
|
-
"Stuck duration (minutes)": "
|
|
29
|
+
"Stuck duration (minutes)": "Dauer eines festhängenden Werts (Minuten)",
|
|
29
30
|
"Time bucket size (minutes)": "Zeit-Bucket-Größe (Minuten)",
|
|
30
|
-
"Use time-of-day context": "
|
|
31
|
-
"Use weekday context": "
|
|
31
|
+
"Use time-of-day context": "Tageszeit-Kontext verwenden",
|
|
32
|
+
"Use weekday context": "Wochentags-Kontext verwenden"
|
|
32
33
|
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"type": "panel",
|
|
4
4
|
"items": {
|
|
5
5
|
"sources": {
|
|
6
|
-
"type": "
|
|
6
|
+
"type": "accordion",
|
|
7
7
|
"label": "Monitored numerical states",
|
|
8
8
|
"newLine": true,
|
|
9
9
|
"xs": 12,
|
|
@@ -11,25 +11,59 @@
|
|
|
11
11
|
"md": 12,
|
|
12
12
|
"lg": 12,
|
|
13
13
|
"xl": 12,
|
|
14
|
-
"
|
|
15
|
-
"useCardFor": ["xs", "sm", "md", "lg", "xl"],
|
|
16
|
-
"titleAttribute": "id",
|
|
14
|
+
"titleAttr": "id",
|
|
17
15
|
"items": [
|
|
18
|
-
{
|
|
16
|
+
{
|
|
17
|
+
"attr": "enabled",
|
|
18
|
+
"type": "checkbox",
|
|
19
|
+
"label": "Enabled",
|
|
20
|
+
"default": true,
|
|
21
|
+
"xs": 12,
|
|
22
|
+
"sm": 2,
|
|
23
|
+
"md": 2,
|
|
24
|
+
"lg": 2,
|
|
25
|
+
"xl": 2,
|
|
26
|
+
"newLine": true
|
|
27
|
+
},
|
|
19
28
|
{
|
|
20
29
|
"attr": "id",
|
|
21
30
|
"type": "objectId",
|
|
22
31
|
"label": "Source state ID",
|
|
23
32
|
"types": "state",
|
|
24
|
-
"xs": 12
|
|
33
|
+
"xs": 12,
|
|
34
|
+
"sm": 4,
|
|
35
|
+
"md": 4,
|
|
36
|
+
"lg": 4,
|
|
37
|
+
"xl": 4,
|
|
38
|
+
"newLine": false
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"attr": "name",
|
|
42
|
+
"type": "text",
|
|
43
|
+
"label": "Name",
|
|
44
|
+
"default": "",
|
|
45
|
+
"xs": 12,
|
|
46
|
+
"sm": 4,
|
|
47
|
+
"md": 4,
|
|
48
|
+
"lg": 4,
|
|
49
|
+
"xl": 4,
|
|
50
|
+
"newLine": false
|
|
25
51
|
},
|
|
26
|
-
{ "attr": "name", "type": "text", "label": "Name", "default": "", "xs": 12 },
|
|
27
52
|
{
|
|
28
53
|
"attr": "initialTraining",
|
|
29
54
|
"type": "select",
|
|
30
55
|
"label": "Initial training",
|
|
56
|
+
"help": {
|
|
57
|
+
"en": "Choose whether the model learns from new live values or imports existing history first.",
|
|
58
|
+
"de": "Legt fest, ob das Modell nur neue Live-Werte nutzt oder zuerst vorhandene Historie importiert."
|
|
59
|
+
},
|
|
31
60
|
"default": "live",
|
|
32
|
-
"xs":
|
|
61
|
+
"xs": 12,
|
|
62
|
+
"sm": 3,
|
|
63
|
+
"md": 3,
|
|
64
|
+
"lg": 3,
|
|
65
|
+
"xl": 3,
|
|
66
|
+
"newLine": true,
|
|
33
67
|
"options": [
|
|
34
68
|
{ "label": "Learn from live values only", "value": "live" },
|
|
35
69
|
{ "label": "Import existing history", "value": "history" }
|
|
@@ -39,8 +73,17 @@
|
|
|
39
73
|
"attr": "historyInstance",
|
|
40
74
|
"type": "selectSendTo",
|
|
41
75
|
"label": "History source (enabled compatible providers only)",
|
|
76
|
+
"help": {
|
|
77
|
+
"en": "Select the enabled history adapter used for the initial training import.",
|
|
78
|
+
"de": "Wählt den aktivierten History-Adapter für den initialen Trainingsimport."
|
|
79
|
+
},
|
|
42
80
|
"default": "",
|
|
43
|
-
"xs":
|
|
81
|
+
"xs": 12,
|
|
82
|
+
"sm": 3,
|
|
83
|
+
"md": 3,
|
|
84
|
+
"lg": 3,
|
|
85
|
+
"xl": 3,
|
|
86
|
+
"newLine": false,
|
|
44
87
|
"command": "getHistoryProviders",
|
|
45
88
|
"jsonData": "{\"sourceId\": \"${data.id}\"}",
|
|
46
89
|
"alsoDependsOn": ["id"],
|
|
@@ -52,22 +95,40 @@
|
|
|
52
95
|
"attr": "trainingDays",
|
|
53
96
|
"type": "number",
|
|
54
97
|
"label": "History training period (days)",
|
|
98
|
+
"help": {
|
|
99
|
+
"en": "Number of past days to request from the history provider.",
|
|
100
|
+
"de": "Anzahl der vergangenen Tage, die aus der History geladen werden."
|
|
101
|
+
},
|
|
55
102
|
"min": 7,
|
|
56
103
|
"max": 365,
|
|
57
104
|
"step": 1,
|
|
58
105
|
"default": 30,
|
|
59
|
-
"xs":
|
|
106
|
+
"xs": 12,
|
|
107
|
+
"sm": 3,
|
|
108
|
+
"md": 3,
|
|
109
|
+
"lg": 3,
|
|
110
|
+
"xl": 3,
|
|
111
|
+
"newLine": false,
|
|
60
112
|
"hidden": "data.initialTraining !== 'history'"
|
|
61
113
|
},
|
|
62
114
|
{
|
|
63
115
|
"attr": "maxHistorySamples",
|
|
64
116
|
"type": "number",
|
|
65
117
|
"label": "Maximum imported samples",
|
|
118
|
+
"help": {
|
|
119
|
+
"en": "Limits how many historical samples are retained for bootstrap training.",
|
|
120
|
+
"de": "Begrenzt, wie viele historische Messwerte für das initiale Training übernommen werden."
|
|
121
|
+
},
|
|
66
122
|
"min": 30,
|
|
67
123
|
"max": 10000,
|
|
68
124
|
"step": 10,
|
|
69
125
|
"default": 1000,
|
|
70
|
-
"xs":
|
|
126
|
+
"xs": 12,
|
|
127
|
+
"sm": 3,
|
|
128
|
+
"md": 3,
|
|
129
|
+
"lg": 3,
|
|
130
|
+
"xl": 3,
|
|
131
|
+
"newLine": false,
|
|
71
132
|
"hidden": "data.initialTraining !== 'history'"
|
|
72
133
|
},
|
|
73
134
|
{
|
|
@@ -76,109 +137,223 @@
|
|
|
76
137
|
"label": "Start monitoring after history import",
|
|
77
138
|
"default": true,
|
|
78
139
|
"xs": 12,
|
|
140
|
+
"sm": 12,
|
|
141
|
+
"md": 12,
|
|
142
|
+
"lg": 12,
|
|
143
|
+
"xl": 12,
|
|
144
|
+
"newLine": false,
|
|
79
145
|
"hidden": "data.initialTraining !== 'history'"
|
|
80
146
|
},
|
|
81
147
|
{
|
|
82
148
|
"attr": "minimumSamples",
|
|
83
149
|
"type": "number",
|
|
84
150
|
"label": "Minimum learned samples",
|
|
151
|
+
"help": {
|
|
152
|
+
"en": "Minimum number of learned values before a baseline is used for scoring.",
|
|
153
|
+
"de": "Mindestanzahl gelernter Werte, bevor eine Basislinie zur Bewertung verwendet wird."
|
|
154
|
+
},
|
|
85
155
|
"min": 5,
|
|
86
156
|
"max": 240,
|
|
87
157
|
"step": 1,
|
|
88
158
|
"default": 30,
|
|
89
|
-
"xs":
|
|
159
|
+
"xs": 12,
|
|
160
|
+
"sm": 3,
|
|
161
|
+
"md": 3,
|
|
162
|
+
"lg": 3,
|
|
163
|
+
"xl": 3,
|
|
164
|
+
"newLine": true
|
|
90
165
|
},
|
|
91
166
|
{
|
|
92
167
|
"attr": "bucketMinutes",
|
|
93
168
|
"type": "number",
|
|
94
169
|
"label": "Time bucket size (minutes)",
|
|
170
|
+
"help": {
|
|
171
|
+
"en": "Groups observations into time buckets for temporal baselines.",
|
|
172
|
+
"de": "Fasst Messwerte für zeitabhängige Basislinien in Zeit-Buckets zusammen."
|
|
173
|
+
},
|
|
95
174
|
"min": 5,
|
|
96
175
|
"max": 720,
|
|
97
176
|
"step": 5,
|
|
98
177
|
"default": 60,
|
|
99
|
-
"xs":
|
|
178
|
+
"xs": 12,
|
|
179
|
+
"sm": 3,
|
|
180
|
+
"md": 3,
|
|
181
|
+
"lg": 3,
|
|
182
|
+
"xl": 3,
|
|
183
|
+
"newLine": false
|
|
100
184
|
},
|
|
101
185
|
{
|
|
102
186
|
"attr": "sensitivity",
|
|
103
187
|
"type": "number",
|
|
104
188
|
"label": "Sensitivity (robust z-score)",
|
|
189
|
+
"help": {
|
|
190
|
+
"en": "Controls how far a value must deviate from the learned baseline to be unusual.",
|
|
191
|
+
"de": "Bestimmt, wie stark ein Wert von der gelernten Basislinie abweichen muss."
|
|
192
|
+
},
|
|
105
193
|
"min": 0.1,
|
|
106
194
|
"max": 20,
|
|
107
195
|
"step": 0.1,
|
|
108
196
|
"default": 3.5,
|
|
109
|
-
"xs":
|
|
197
|
+
"xs": 12,
|
|
198
|
+
"sm": 3,
|
|
199
|
+
"md": 3,
|
|
200
|
+
"lg": 3,
|
|
201
|
+
"xl": 3,
|
|
202
|
+
"newLine": false
|
|
110
203
|
},
|
|
111
204
|
{
|
|
112
205
|
"attr": "anomalyThreshold",
|
|
113
206
|
"type": "number",
|
|
114
207
|
"label": "Anomaly threshold",
|
|
208
|
+
"help": {
|
|
209
|
+
"en": "Score at which an observation is classified as an anomaly.",
|
|
210
|
+
"de": "Ab diesem Score wird eine Beobachtung als Anomalie eingestuft."
|
|
211
|
+
},
|
|
115
212
|
"min": 1,
|
|
116
213
|
"max": 100,
|
|
117
214
|
"step": 1,
|
|
118
215
|
"default": 70,
|
|
119
|
-
"xs":
|
|
216
|
+
"xs": 12,
|
|
217
|
+
"sm": 3,
|
|
218
|
+
"md": 3,
|
|
219
|
+
"lg": 3,
|
|
220
|
+
"xl": 3,
|
|
221
|
+
"newLine": false
|
|
120
222
|
},
|
|
121
223
|
{
|
|
122
224
|
"attr": "minimumAnomalyDurationMinutes",
|
|
123
225
|
"type": "number",
|
|
124
226
|
"label": "Minimum anomaly duration (minutes)",
|
|
227
|
+
"help": {
|
|
228
|
+
"en": "Requires an anomaly to persist for this long before it is reported.",
|
|
229
|
+
"de": "Eine Anomalie muss mindestens so lange bestehen, bevor sie gemeldet wird."
|
|
230
|
+
},
|
|
125
231
|
"min": 0,
|
|
126
232
|
"max": 10080,
|
|
127
233
|
"step": 1,
|
|
128
234
|
"default": 5,
|
|
129
|
-
"xs":
|
|
235
|
+
"xs": 12,
|
|
236
|
+
"sm": 3,
|
|
237
|
+
"md": 3,
|
|
238
|
+
"lg": 3,
|
|
239
|
+
"xl": 3,
|
|
240
|
+
"newLine": true
|
|
130
241
|
},
|
|
131
242
|
{
|
|
132
243
|
"attr": "enableMad",
|
|
133
244
|
"type": "checkbox",
|
|
134
245
|
"label": "Enable value deviation detector",
|
|
246
|
+
"help": {
|
|
247
|
+
"en": "Detects individual values that differ significantly from learned normal behavior.",
|
|
248
|
+
"de": "Erkennt einzelne Werte, die deutlich vom gelernten Normalverhalten abweichen."
|
|
249
|
+
},
|
|
135
250
|
"default": true,
|
|
136
|
-
"xs":
|
|
251
|
+
"xs": 12,
|
|
252
|
+
"sm": 3,
|
|
253
|
+
"md": 3,
|
|
254
|
+
"lg": 3,
|
|
255
|
+
"xl": 3,
|
|
256
|
+
"newLine": false
|
|
137
257
|
},
|
|
138
258
|
{
|
|
139
259
|
"attr": "enableRate",
|
|
140
260
|
"type": "checkbox",
|
|
141
261
|
"label": "Enable rate-of-change detector",
|
|
262
|
+
"help": {
|
|
263
|
+
"en": "Detects unusually fast changes between consecutive values.",
|
|
264
|
+
"de": "Erkennt ungewöhnlich schnelle Änderungen zwischen aufeinanderfolgenden Werten."
|
|
265
|
+
},
|
|
142
266
|
"default": true,
|
|
143
|
-
"xs":
|
|
267
|
+
"xs": 12,
|
|
268
|
+
"sm": 3,
|
|
269
|
+
"md": 3,
|
|
270
|
+
"lg": 3,
|
|
271
|
+
"xl": 3,
|
|
272
|
+
"newLine": false
|
|
144
273
|
},
|
|
145
274
|
{
|
|
146
275
|
"attr": "enableStuck",
|
|
147
276
|
"type": "checkbox",
|
|
148
277
|
"label": "Enable stuck-state detector",
|
|
278
|
+
"help": {
|
|
279
|
+
"en": "Detects values that remain unchanged longer than the configured duration.",
|
|
280
|
+
"de": "Erkennt Werte, die länger als die konfigurierte Dauer unverändert bleiben."
|
|
281
|
+
},
|
|
149
282
|
"default": false,
|
|
150
|
-
"xs":
|
|
283
|
+
"xs": 12,
|
|
284
|
+
"sm": 3,
|
|
285
|
+
"md": 3,
|
|
286
|
+
"lg": 3,
|
|
287
|
+
"xl": 3,
|
|
288
|
+
"newLine": false
|
|
151
289
|
},
|
|
152
290
|
{
|
|
153
291
|
"attr": "stuckDurationMinutes",
|
|
154
292
|
"type": "number",
|
|
155
293
|
"label": "Stuck duration (minutes)",
|
|
294
|
+
"hidden": "data.enableStuck !== true",
|
|
295
|
+
"help": {
|
|
296
|
+
"en": "Time an unchanged value must persist before it is considered stuck.",
|
|
297
|
+
"de": "Dauer, die ein unveränderter Wert bestehen muss, um als festhängend zu gelten."
|
|
298
|
+
},
|
|
156
299
|
"min": 1,
|
|
157
300
|
"max": 10080,
|
|
158
301
|
"step": 1,
|
|
159
302
|
"default": 120,
|
|
160
|
-
"xs":
|
|
303
|
+
"xs": 12,
|
|
304
|
+
"sm": 3,
|
|
305
|
+
"md": 3,
|
|
306
|
+
"lg": 3,
|
|
307
|
+
"xl": 3,
|
|
308
|
+
"newLine": false
|
|
161
309
|
},
|
|
162
310
|
{
|
|
163
311
|
"attr": "timeContext",
|
|
164
312
|
"type": "checkbox",
|
|
165
313
|
"label": "Use time-of-day context",
|
|
314
|
+
"help": {
|
|
315
|
+
"en": "Learns separate baselines for different times of day.",
|
|
316
|
+
"de": "Lernt getrennte Basislinien für verschiedene Tageszeiten."
|
|
317
|
+
},
|
|
166
318
|
"default": true,
|
|
167
|
-
"xs":
|
|
319
|
+
"xs": 12,
|
|
320
|
+
"sm": 3,
|
|
321
|
+
"md": 3,
|
|
322
|
+
"lg": 3,
|
|
323
|
+
"xl": 3,
|
|
324
|
+
"newLine": true
|
|
168
325
|
},
|
|
169
326
|
{
|
|
170
327
|
"attr": "weekdayContext",
|
|
171
328
|
"type": "checkbox",
|
|
172
329
|
"label": "Use weekday context",
|
|
330
|
+
"help": {
|
|
331
|
+
"en": "Learns separate baselines for different weekdays.",
|
|
332
|
+
"de": "Lernt getrennte Basislinien für verschiedene Wochentage."
|
|
333
|
+
},
|
|
173
334
|
"default": false,
|
|
174
|
-
"xs":
|
|
335
|
+
"xs": 12,
|
|
336
|
+
"sm": 3,
|
|
337
|
+
"md": 3,
|
|
338
|
+
"lg": 3,
|
|
339
|
+
"xl": 3,
|
|
340
|
+
"newLine": false
|
|
175
341
|
},
|
|
176
342
|
{
|
|
177
343
|
"attr": "enableContext",
|
|
178
344
|
"type": "checkbox",
|
|
179
345
|
"label": "Enable context-aware detection",
|
|
346
|
+
"help": {
|
|
347
|
+
"en": "Uses configured context states to compare values only with matching operating conditions.",
|
|
348
|
+
"de": "Vergleicht Werte anhand konfigurierter Kontextzustände nur mit passenden Betriebsbedingungen."
|
|
349
|
+
},
|
|
180
350
|
"default": false,
|
|
181
|
-
"xs":
|
|
351
|
+
"xs": 12,
|
|
352
|
+
"sm": 3,
|
|
353
|
+
"md": 3,
|
|
354
|
+
"lg": 3,
|
|
355
|
+
"xl": 3,
|
|
356
|
+
"newLine": false
|
|
182
357
|
},
|
|
183
358
|
{
|
|
184
359
|
"attr": "contextStates",
|
|
@@ -186,13 +361,19 @@
|
|
|
186
361
|
"label": "Context states (maximum 3)",
|
|
187
362
|
"hidden": "data.enableContext !== true",
|
|
188
363
|
"xs": 12,
|
|
364
|
+
"sm": 12,
|
|
365
|
+
"md": 12,
|
|
366
|
+
"lg": 12,
|
|
367
|
+
"xl": 12,
|
|
368
|
+
"newLine": true,
|
|
189
369
|
"items": [
|
|
190
370
|
{ "attr": "id", "type": "objectId", "label": "Context state ID", "types": "state", "xs": 8 },
|
|
191
371
|
{
|
|
192
372
|
"attr": "bucketWidth",
|
|
193
373
|
"type": "number",
|
|
194
374
|
"label": "Numeric bucket width",
|
|
195
|
-
"hidden": "await getObject(data.id)?.common?.type !== 'number'",
|
|
375
|
+
"hidden": "(await getObject(data.id))?.common?.type !== 'number'",
|
|
376
|
+
"alsoDependsOn": ["id"],
|
|
196
377
|
"min": 0.0001,
|
|
197
378
|
"max": 1000000,
|
|
198
379
|
"default": 5,
|
|
@@ -204,15 +385,33 @@
|
|
|
204
385
|
"attr": "enableChangePoint",
|
|
205
386
|
"type": "checkbox",
|
|
206
387
|
"label": "Enable persistent level-shift detection",
|
|
388
|
+
"help": {
|
|
389
|
+
"en": "Detects a lasting change to the normal operating level.",
|
|
390
|
+
"de": "Erkennt eine anhaltende Verschiebung des normalen Betriebsniveaus."
|
|
391
|
+
},
|
|
207
392
|
"default": false,
|
|
208
|
-
"xs":
|
|
393
|
+
"xs": 12,
|
|
394
|
+
"sm": 6,
|
|
395
|
+
"md": 6,
|
|
396
|
+
"lg": 6,
|
|
397
|
+
"xl": 6,
|
|
398
|
+
"newLine": true
|
|
209
399
|
},
|
|
210
400
|
{
|
|
211
401
|
"attr": "enableTrend",
|
|
212
402
|
"type": "checkbox",
|
|
213
403
|
"label": "Enable trend detection",
|
|
404
|
+
"help": {
|
|
405
|
+
"en": "Detects gradual upward or downward drift over time.",
|
|
406
|
+
"de": "Erkennt eine allmähliche Aufwärts- oder Abwärtsentwicklung über die Zeit."
|
|
407
|
+
},
|
|
214
408
|
"default": false,
|
|
215
|
-
"xs":
|
|
409
|
+
"xs": 12,
|
|
410
|
+
"sm": 6,
|
|
411
|
+
"md": 6,
|
|
412
|
+
"lg": 6,
|
|
413
|
+
"xl": 6,
|
|
414
|
+
"newLine": false
|
|
216
415
|
}
|
|
217
416
|
]
|
|
218
417
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "anomaly-detection",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.1",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.1.1": {
|
|
7
|
+
"en": "Improve configuration UI layout, translations, and detector guidance",
|
|
8
|
+
"de": "Konfigurationsoberfläche, Übersetzungen und Hinweise zu Detektoren verbessert",
|
|
9
|
+
"ru": "Улучшены интерфейс конфигурации, переводы и рекомендации по детекторам",
|
|
10
|
+
"pt": "Melhorias no layout, traduções e orientações dos detetores na configuração",
|
|
11
|
+
"nl": "Verbeterde configuratie-indeling, vertalingen en detectorbegeleiding",
|
|
12
|
+
"fr": "Amélioration de l’interface de configuration, des traductions et des conseils de détection",
|
|
13
|
+
"it": "Migliorati layout di configurazione, traduzioni e indicazioni sui rilevatori",
|
|
14
|
+
"es": "Mejoras en el diseño de configuración, traducciones y orientación de detectores",
|
|
15
|
+
"pl": "Ulepszono układ konfiguracji, tłumaczenia i wskazówki dotyczące detektorów",
|
|
16
|
+
"uk": "Покращено макет конфігурації, переклади та рекомендації щодо детекторів",
|
|
17
|
+
"zh-cn": "改进配置界面布局、翻译和检测器说明"
|
|
18
|
+
},
|
|
6
19
|
"0.1.0": {
|
|
7
20
|
"en": "initial release",
|
|
8
21
|
"de": "Erstveröffentlichung",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.anomaly-detection",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Learns normal behavior of numerical ioBroker states and detects statistical anomalies.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Voodoo2man",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"@iobroker/eslint-config": "^2.3.4",
|
|
44
44
|
"@iobroker/testing": "^6.0.0",
|
|
45
45
|
"@tsconfig/node22": "^22.0.2",
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
"@types/iobroker": "npm:@iobroker/types@^7.2.2",
|
|
47
|
+
"@types/node": "^22.0.0",
|
|
48
48
|
"nyc": "^18.0.0",
|
|
49
49
|
"rimraf": "^6.1.3",
|
|
50
50
|
"source-map-support": "^0.5.21",
|