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 +3 -3
- package/io-package.json +20 -2
- package/lib/streamManager.js +6 -9
- package/main.js +11 -0
- package/package.json +3 -3
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.
|
|
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
|
{
|
package/lib/streamManager.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
77
|
+
"@iobroker/adapter-core": "^3.4.1"
|
|
78
78
|
}
|
|
79
79
|
}
|