iobroker.motioneye 0.2.0 → 0.2.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 CHANGED
@@ -106,6 +106,9 @@ If you like our work and would like to support us, we appreciate any donation.
106
106
  <!--
107
107
  ### **WORK IN PROGRESS**
108
108
  -->
109
+ ### 0.2.1 (2026-06-22)
110
+ - (skvarel) Fixed adapter checker errors an warnings
111
+
109
112
  ### 0.2.0 (2026-06-22)
110
113
  - (skvarel) Added optional per-camera media folder name under `/var/lib/motioneye` (written to MotionEye on adapter start)
111
114
  - (skvarel) Added camera load from MotionEye (merges `/config/list` into camera table)
@@ -120,9 +123,6 @@ If you like our work and would like to support us, we appreciate any donation.
120
123
  ### 0.1.0 (2026-06-21)
121
124
  - (skvarel) Added states for motionEyeVersion and motionVersion
122
125
 
123
- ### 0.0.1 (2026-06-21)
124
- - (skvarel) Initial development release
125
-
126
126
  ## Older changes
127
127
  - [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
128
128
 
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "motioneye",
4
- "version": "0.2.0",
4
+ "version": "0.2.1",
5
5
  "news": {
6
+ "0.2.1": {
7
+ "en": "Fixed adapter checker errors an warnings",
8
+ "de": "Adapterprüfungsfehler und Warnungen behoben",
9
+ "ru": "Исправлены ошибки и предупреждения проверки адаптера.",
10
+ "pt": "Erros e avisos do verificador de adaptadores corrigidos.",
11
+ "nl": "Fouten en waarschuwingen van de adaptercontrole zijn verholpen.",
12
+ "fr": "Correction des erreurs et avertissements du vérificateur d'adaptateur",
13
+ "it": "Risolti errori e avvisi del controllore dell'adattatore.",
14
+ "es": "Se corrigieron errores y advertencias del verificador de adaptadores.",
15
+ "pl": "Naprawiono błędy i ostrzeżenia modułu sprawdzającego adaptery",
16
+ "uk": "Виправлені помилки та попередження перевірки адаптера",
17
+ "zh-cn": "修复了适配器检查错误和警告。"
18
+ },
6
19
  "0.2.0": {
7
20
  "en": "Added optional per-camera media folder name under `/var/lib/motioneye` (written to MotionEye on adapter start)\nAdded camera load from MotionEye (merges `/config/list` into camera table)\nAdded Help-Tab with setup guide, modes, datapoints, and stream/inventwo notes",
8
21
  "de": "Optionaler Medienordnername pro Kamera unter `/var/lib/motioneye` hinzugefügt (wird beim Start des Adapters in MotionEye geschrieben)\nKameradaten von MotionEye hinzugefügt (führt `/config/list` in die Kameratabelle ein)\nHilfe-Registerkarte mit Einrichtungsanleitung, Modi, Datenpunkten und Stream-/Inventwo-Hinweisen hinzugefügt",
@@ -119,7 +132,6 @@
119
132
  "type": "hardware",
120
133
  "compact": true,
121
134
  "messagebox": true,
122
- "subscribe": "messagebox",
123
135
  "connectionType": "local",
124
136
  "dataSource": "poll",
125
137
  "adminUI": {
@@ -159,6 +171,12 @@
159
171
  "defaultMode": "off",
160
172
  "cameras": []
161
173
  },
174
+ "protectedNative": [
175
+ "motionEyePassword"
176
+ ],
177
+ "encryptedNative": [
178
+ "motionEyePassword"
179
+ ],
162
180
  "objects": [],
163
181
  "instanceObjects": [
164
182
  {
@@ -84,10 +84,6 @@ function checkStreamPort(motionHost, port) {
84
84
  });
85
85
  }
86
86
 
87
- function sleep(ms) {
88
- return new Promise(resolve => setTimeout(resolve, ms));
89
- }
90
-
91
87
  /**
92
88
  * @typedef {object} StreamManagerDeps
93
89
  * @property {string} motionHost
@@ -104,6 +100,7 @@ function sleep(ms) {
104
100
  * @property {(level: string, message: string) => void} log
105
101
  * @property {(fn: () => void, ms: number) => unknown} setTimeoutFn
106
102
  * @property {(id: unknown) => void} clearTimeoutFn
103
+ * @property {(ms: number) => Promise<void>} delayFn
107
104
  * @property {() => Map<string, import('./cameraRegistry').ResolvedCamera>} getCamerasByChannel
108
105
  * @property {() => boolean} isUnloading
109
106
  */
@@ -209,7 +206,7 @@ function createStreamManager(deps) {
209
206
  */
210
207
  async function publishStreamHtmlWhenReady(camera) {
211
208
  const started = Date.now();
212
- await sleep(deps.streamStartDelayMs);
209
+ await deps.delayFn(deps.streamStartDelayMs);
213
210
 
214
211
  while (Date.now() - started < deps.streamReadyTimeoutMs) {
215
212
  if (deps.isUnloading() || !(await isStreamEnabled(camera))) {
@@ -221,7 +218,7 @@ function createStreamManager(deps) {
221
218
  uiConfig = await getStreamUiConfig(camera);
222
219
  } catch (error) {
223
220
  deps.log('debug', `Stream port query ${camera.name}: ${error.message}`);
224
- await sleep(deps.streamRetryMs);
221
+ await deps.delayFn(deps.streamRetryMs);
225
222
  continue;
226
223
  }
227
224
 
@@ -234,7 +231,7 @@ function createStreamManager(deps) {
234
231
  }
235
232
 
236
233
  await setStreamLoadingHtml(camera);
237
- await sleep(deps.streamRetryMs);
234
+ await deps.delayFn(deps.streamRetryMs);
238
235
  }
239
236
 
240
237
  if (await isStreamEnabled(camera)) {
@@ -289,7 +286,7 @@ function createStreamManager(deps) {
289
286
  /** @type {Record<string, boolean>} */
290
287
  const relinked = {};
291
288
 
292
- await sleep(deps.streamStartDelayMs);
289
+ await deps.delayFn(deps.streamStartDelayMs);
293
290
 
294
291
  while (Date.now() - started < deps.streamSiblingRelinkTimeoutMs) {
295
292
  if (deps.isUnloading() || relinkRunIds[runKey] !== runId) {
@@ -328,7 +325,7 @@ function createStreamManager(deps) {
328
325
  return;
329
326
  }
330
327
 
331
- await sleep(deps.streamRetryMs);
328
+ await deps.delayFn(deps.streamRetryMs);
332
329
  }
333
330
  }
334
331
 
package/main.js CHANGED
@@ -101,6 +101,7 @@ class Motioneye extends utils.Adapter {
101
101
  setState: (id, val, ack) => this.setStateAsync(id, val, ack),
102
102
  log: (level, message) => this.log[level](message),
103
103
  setTimeoutFn: (fn, ms) => this.setTimeout(fn, ms),
104
+ delayFn: ms => this.delay(ms),
104
105
  clearTimeoutFn: id => {
105
106
  // @ts-expect-error adapter-core branded Timeout id from setTimeout
106
107
  this.clearTimeout(id);
@@ -470,6 +471,16 @@ class Motioneye extends utils.Adapter {
470
471
  });
471
472
  }
472
473
 
474
+ const streamUrlId = `${channelId}.streamUrl`;
475
+ const streamUrlName = `${camera.name} stream HTML`;
476
+ const streamUrlObject = await this.getObjectAsync(streamUrlId);
477
+ const currentStreamUrlName = streamUrlObject?.common?.name ? String(streamUrlObject.common.name) : '';
478
+ if (currentStreamUrlName && /\(inventwo\)|inventwo HTML/i.test(currentStreamUrlName)) {
479
+ await this.extendObjectAsync(streamUrlId, {
480
+ common: { name: streamUrlName },
481
+ });
482
+ }
483
+
473
484
  const webhookUrl = this.getWebhookUrl(camera);
474
485
  await this.setStateAsync(`${channelId}.webhookUrl`, webhookUrl, true);
475
486
  await this.setStateAsync(`${channelId}.motionEyeId`, camera.motionEyeId, true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.motioneye",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Connect MotionEye cameras to ioBroker for motion detection, snapshots, and live streams",
5
5
  "author": {
6
6
  "name": "skvarel",
@@ -29,7 +29,7 @@
29
29
  "node": ">= 22"
30
30
  },
31
31
  "dependencies": {
32
- "@iobroker/adapter-core": "^3.3.2"
32
+ "@iobroker/adapter-core": "^3.4.1"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@alcalzone/release-script": "^5.2.1",
@@ -74,6 +74,6 @@
74
74
  },
75
75
  "readmeFilename": "README.md",
76
76
  "overrides": {
77
- "@iobroker/adapter-core": "^3.3.2"
77
+ "@iobroker/adapter-core": "^3.4.1"
78
78
  }
79
79
  }