iobroker.motioneye 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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 skvarel <skvarel@inventwo.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.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 skvarel <skvarel@inventwo.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 CHANGED
@@ -1,137 +1,141 @@
1
- ![Logo](admin/motioneye-logo.svg)
2
-
3
- # ioBroker adapter for MotionEye
4
-
5
- ![Number of Installations](https://iobroker.live/badges/motioneye-installed.svg)
6
- ![Current version in stable repository](https://iobroker.live/badges/motioneye-stable.svg)
7
- [![NPM Version](https://nodei.co/npm/iobroker.motioneye.svg?style=shields&data=v,u,d&color=orange)](https://www.npmjs.com/package/iobroker.motioneye)
8
- [![Downloads](https://img.shields.io/npm/dm/iobroker.motioneye.svg)](https://www.npmjs.com/package/iobroker.motioneye)
9
-
10
- [![COMMUNITY](https://img.shields.io/badge/community%20-ioBroker%20|%20forum-blue.svg)](https://forum.iobroker.net/)
11
- [![MAINTAINER](https://img.shields.io/badge/maintainer-skvarel%20@%20inventwo-yellowgreen.svg)](https://github.com/skvarel)
12
- [![AI](https://img.shields.io/badge/ai%20assisted-cursor-blue.svg)](https://github.com/inventwo/ioBroker.motioneye/blob/main/.cursor/iobroker-adapter.mdc)
13
-
14
- [![Paypal Donation](https://img.shields.io/badge/paypal-donate%20|%20spenden-green.svg)](https://www.paypal.com/donate/?hosted_button_id=7W6M3TFZ4W9LW)
15
-
16
- ---
17
-
18
- ## What this adapter does
19
-
20
- Connect MotionEye cameras to ioBroker for motion detection, snapshots, and live streams. Control detection modes (`off` / `still` / `sharp`) from ioBroker or VIS and provide `streamUrl` HTML for inventwo/VIS2 widgets — no simple-api required for webhooks.
21
-
22
- > **Status:** Phase 2 — snapshot, stream, streamPulse, and `streamUrl` HTML for inventwo/VIS widgets. Phase 1 covers modes, webhooks, and MotionEye sync.
23
-
24
- ## Features
25
-
26
- - User-defined camera names in ioBroker (independent of MotionEye labels)
27
- - Dynamic channels under `motioneye.0.<Name>.*`
28
- - Built-in webhook server — no simple-api dependency
29
- - MotionEye Config API sync for modes and webhook URLs
30
- - `_info.connection` — instance shows when MotionEye is unreachable
31
- - Stream sibling relink after VIS re-render (multi-camera dashboards)
32
-
33
- ## Data Points
34
-
35
- ### Per camera (`motioneye.0.<Name>.*`)
36
-
37
- | State | Type | Read | Write | Description |
38
- |-------|------|------|-------|-------------|
39
- | `mode` | value | yes | yes | `off` / `still` / `sharp` |
40
- | `motion` | indicator | yes | yes | Motion detected (auto-reset) |
41
- | `snapshot` | button | no | yes | Trigger snapshot |
42
- | `stream` | switch | yes | yes | Live MJPEG stream on/off |
43
- | `streamPulse` | button | no | yes | Stream on briefly (auto-off) |
44
- | `streamUrl` | text | yes | no | HTML `<img>` for inventwo widget |
45
- | `status` | text | yes | no | Last sync status |
46
- | `lastAction` | text | yes | no | Last API action |
47
- | `webhookUrl` | url | yes | no | URL written to MotionEye |
48
- | `motionEyeId` | value | yes | no | MotionEye camera ID |
49
- | `motionEyeName` | text | yes | no | Original name in MotionEye |
50
-
51
- ### Instance (`motioneye.0._info.*`)
52
-
53
- The `_info` folder sorts above camera channels in the object tree.
54
-
55
- | State | Type | Description |
56
- |-------|------|-------------|
57
- | `_info.connection` | boolean | MotionEye reachable |
58
- | `_info.camerasOnline` | number | Enabled cameras found in MotionEye |
59
- | `_info.lastSync` | text | Last status poll timestamp |
60
- | `_info.motionEyeVersion` | text | MotionEye server version |
61
- | `_info.motionVersion` | text | Motion daemon version |
62
-
63
- ## Installation
64
-
65
- 1. Install the adapter from the ioBroker admin interface (or clone this repo and use the dev-server)
66
- 2. Create a new instance
67
- 3. Configure **Settings**: MotionEye host, ports, credentials (optional), webhook host
68
- 4. Add cameras on the **Cameras** tab (display name + MotionEye ID)
69
- 5. Save and restart the instance — datapoints are created and webhook URLs are written to MotionEye
70
-
71
- ### Camera modes
72
-
73
- | Mode | Motion detection | Video recording | Webhook |
74
- |------|------------------|-----------------|---------|
75
- | `off` | no | no | no |
76
- | `still` | yes | no | yes |
77
- | `sharp` | yes | motion-triggered MP4 | yes |
78
-
79
-
80
- ## Configuration
81
-
82
- | Option | Default | Description |
83
- |--------|---------|-------------|
84
- | `motionHost` | *(empty)* | MotionEye server hostname or IP (required) |
85
- | `motionPort` | `7999` | Motion HTTP API (snapshots) |
86
- | `motionEyePort` | `8765` | MotionEye config API |
87
- | `motionEyeUser` | `admin` | MotionEye login user |
88
- | `motionEyePassword` | *(empty)* | MotionEye password (plain text, stored encrypted) |
89
- | `webhookHost` | *(required)* | ioBroker host IP or hostname reachable from MotionEye (used in webhook URLs) |
90
- | `webhookPort` | `8090` | Built-in webhook listener port |
91
- | `motionResetMs` | `15000` | Auto-reset for `.motion` after webhook |
92
- | `statusPollIntervalSec` | `300` | MotionEye status poll interval |
93
-
94
- ## Support
95
-
96
- If you like our work and would like to support us, we appreciate any donation.
97
- (This link leads to our PayPal account and is not affiliated with ioBroker.)
98
-
99
- [![Donate](img/support.png)](https://www.paypal.com/donate?hosted_button_id=7W6M3TFZ4W9LW)
100
-
101
- ## Changelog
102
-
103
- <!--
104
- ### **WORK IN PROGRESS**
105
- -->
106
- ### 0.1.0 (2026-06-21)
107
- - (skvarel) Added states for motionEyeVersion and motionVersion
108
-
109
- ### 0.0.1 (2026-06-21)
110
- - (skvarel) Initial development release
111
-
112
- ## Older changes
113
- - [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
114
-
115
- ## License
116
-
117
- MIT License
118
-
119
- Copyright (c) 2026 skvarel <skvarel@inventwo.com>
120
-
121
- Permission is hereby granted, free of charge, to any person obtaining a copy
122
- of this software and associated documentation files (the "Software"), to deal
123
- in the Software without restriction, including without limitation the rights
124
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
125
- copies of the Software, and to permit persons to whom the Software is
126
- furnished to do so, subject to the following conditions:
127
-
128
- The above copyright notice and this permission notice shall be included in all
129
- copies or substantial portions of the Software.
130
-
131
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
132
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
133
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
134
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
135
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
136
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
137
- SOFTWARE.
1
+ ![Logo](admin/motioneye-logo.svg)
2
+
3
+ # ioBroker adapter for MotionEye
4
+
5
+ ![Number of Installations](https://iobroker.live/badges/motioneye-installed.svg)
6
+ ![Current version in stable repository](https://iobroker.live/badges/motioneye-stable.svg)
7
+ [![NPM Version](https://nodei.co/npm/iobroker.motioneye.svg?style=shields&data=v,u,d&color=orange)](https://www.npmjs.com/package/iobroker.motioneye)
8
+ [![Downloads](https://img.shields.io/npm/dm/iobroker.motioneye.svg)](https://www.npmjs.com/package/iobroker.motioneye)
9
+
10
+ [![COMMUNITY](https://img.shields.io/badge/community%20-ioBroker%20|%20forum-blue.svg)](https://forum.iobroker.net/)
11
+ [![MAINTAINER](https://img.shields.io/badge/maintainer-skvarel%20@%20inventwo-yellowgreen.svg)](https://github.com/skvarel)
12
+ [![AI](https://img.shields.io/badge/ai%20assisted-cursor-blue.svg)](https://github.com/inventwo/ioBroker.motioneye/blob/main/.cursor/iobroker-adapter.mdc)
13
+
14
+ [![Paypal Donation](https://img.shields.io/badge/paypal-donate%20|%20spenden-green.svg)](https://www.paypal.com/donate/?hosted_button_id=7W6M3TFZ4W9LW)
15
+
16
+ ---
17
+
18
+ ## What this adapter does
19
+
20
+ Connect MotionEye cameras to ioBroker for motion detection, snapshots, and live streams. Control detection modes (`off` / `still` / `sharp`) from ioBroker or VIS and provide `streamUrl` HTML for inventwo/VIS2 widgets — no simple-api required for webhooks.
21
+
22
+ > **Status:** Phase 2 — snapshot, stream, streamPulse, and `streamUrl` HTML for inventwo/VIS widgets. Phase 1 covers modes, webhooks, and MotionEye sync.
23
+
24
+ ## Features
25
+
26
+ - User-defined camera names in ioBroker (independent of MotionEye labels)
27
+ - Dynamic channels under `motioneye.0.<Name>.*`
28
+ - Built-in webhook server — no simple-api dependency
29
+ - MotionEye Config API sync for modes and webhook URLs
30
+ - `0_info.connection` — instance shows when MotionEye is unreachable
31
+ - Stream sibling relink after VIS re-render (multi-camera dashboards)
32
+
33
+ ## Data Points
34
+
35
+ ### Per camera (`motioneye.0.<Name>.*`)
36
+
37
+ | State | Type | Read | Write | Description |
38
+ |-------|------|------|-------|-------------|
39
+ | `mode` | value | yes | yes | `off` / `still` / `sharp` |
40
+ | `motion` | indicator | yes | yes | Motion detected (auto-reset) |
41
+ | `snapshot` | button | no | yes | Trigger snapshot |
42
+ | `stream` | switch | yes | yes | Live MJPEG stream on/off |
43
+ | `streamPulse` | button | no | yes | Stream on briefly (auto-off) |
44
+ | `streamUrl` | text | yes | no | HTML `<img>` for inventwo widget |
45
+ | `status` | text | yes | no | Last sync status |
46
+ | `lastAction` | text | yes | no | Last API action |
47
+ | `webhookUrl` | url | yes | no | URL written to MotionEye |
48
+ | `motionEyeId` | value | yes | no | MotionEye camera ID |
49
+ | `motionEyeName` | text | yes | no | Original name in MotionEye |
50
+
51
+ ### Instance (`motioneye.0.0_info.*`)
52
+
53
+ The `0_info` folder sorts above camera channels (digits before letters in the object tree).
54
+
55
+ | State | Type | Description |
56
+ |-------|------|-------------|
57
+ | `0_info.connection` | boolean | MotionEye reachable |
58
+ | `0_info.camerasOnline` | number | Enabled cameras found in MotionEye |
59
+ | `0_info.lastSync` | text | Last status poll timestamp |
60
+ | `0_info.motionEyeVersion` | text | MotionEye server version |
61
+ | `0_info.motionVersion` | text | Motion daemon version |
62
+
63
+ ## Installation
64
+
65
+ 1. Install the adapter from the ioBroker admin interface (or clone this repo and use the dev-server)
66
+ 2. Create a new instance
67
+ 3. Configure **Settings**: MotionEye host, ports, credentials (optional), webhook host
68
+ 4. Add cameras on the **Cameras** tab (display name + MotionEye ID)
69
+ 5. Save and restart the instance — datapoints are created and webhook URLs are written to MotionEye
70
+
71
+ ### Camera modes
72
+
73
+ | Mode | Motion detection | Video recording | Webhook |
74
+ |------|------------------|-----------------|---------|
75
+ | `off` | no | no | no |
76
+ | `still` | yes | no | yes |
77
+ | `sharp` | yes | motion-triggered MP4 | yes |
78
+
79
+
80
+ ## Configuration
81
+
82
+ | Option | Default | Description |
83
+ |--------|---------|-------------|
84
+ | `motionHost` | *(empty)* | MotionEye server hostname or IP (required) |
85
+ | `motionPort` | `7999` | Motion HTTP API (snapshots) |
86
+ | `motionEyePort` | `8765` | MotionEye config API |
87
+ | `motionEyeUser` | `admin` | MotionEye login user |
88
+ | `motionEyePassword` | *(empty)* | MotionEye password (plain text, stored encrypted) |
89
+ | `webhookHost` | *(required)* | ioBroker host IP or hostname reachable from MotionEye (used in webhook URLs) |
90
+ | `webhookPort` | `8090` | Built-in webhook listener port |
91
+ | `motionResetMs` | `15000` | Auto-reset for `.motion` after webhook |
92
+ | `statusPollIntervalSec` | `300` | MotionEye status poll interval |
93
+
94
+ ## Support
95
+
96
+ If you like our work and would like to support us, we appreciate any donation.
97
+ (This link leads to our PayPal account and is not affiliated with ioBroker.)
98
+
99
+ [![Donate](img/support.png)](https://www.paypal.com/donate?hosted_button_id=7W6M3TFZ4W9LW)
100
+
101
+ ## Changelog
102
+
103
+ <!--
104
+ ### **WORK IN PROGRESS**
105
+ -->
106
+ ### 0.1.1 (2026-06-21)
107
+ - (skvarel) Renamed info folder from `_info` to `0_info` so it sorts above camera channels in the object tree
108
+ - (skvarel) Migrate legacy `info` and `_info` states to `0_info` on adapter start
109
+
110
+ ### 0.1.0 (2026-06-21)
111
+ - (skvarel) Added states for motionEyeVersion and motionVersion
112
+
113
+ ### 0.0.1 (2026-06-21)
114
+ - (skvarel) Initial development release
115
+
116
+ ## Older changes
117
+ - [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
118
+
119
+ ## License
120
+
121
+ MIT License
122
+
123
+ Copyright (c) 2026 skvarel <skvarel@inventwo.com>
124
+
125
+ Permission is hereby granted, free of charge, to any person obtaining a copy
126
+ of this software and associated documentation files (the "Software"), to deal
127
+ in the Software without restriction, including without limitation the rights
128
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
129
+ copies of the Software, and to permit persons to whom the Software is
130
+ furnished to do so, subject to the following conditions:
131
+
132
+ The above copyright notice and this permission notice shall be included in all
133
+ copies or substantial portions of the Software.
134
+
135
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
136
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
137
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
138
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
139
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
140
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
141
+ SOFTWARE.
@@ -1,49 +1,49 @@
1
- {
2
- "applyMediaSettingsOnStart": "Apply snapshot media profile on adapter start",
3
- "camera_defaultMode": "Default mode",
4
- "camera_enabled": "Enabled",
5
- "camera_id": "Internal ID",
6
- "camera_id_help": "Stable key for webhooks (e.g. auffahrt). Leave empty to derive from name.",
7
- "camera_id_placeholder": "auto from name",
8
- "camera_motionEyeId": "MotionEye ID",
9
- "camera_motionEyeId_help": "Numeric camera ID from MotionEye (/config/list)",
10
- "camera_name": "Display name",
11
- "camera_name_help": "ioBroker channel name — independent of MotionEye label",
12
- "cameras_info": "Add each camera you want in ioBroker. The MotionEye ID is shown in the MotionEye web UI or via /config/list on port 8765. After saving, restart the adapter instance to create datapoints and write webhook URLs to MotionEye.",
13
- "cameras_table": "Cameras",
14
- "defaultMode": "Default mode for new cameras",
15
- "disableStreamOnStart": "Disable video stream on adapter start",
16
- "header_cameras": "Camera management",
17
- "header_connection": "MotionEye Connection",
18
- "header_stream": "Stream Options",
19
- "header_timing": "Polling & Timeouts",
20
- "header_webhook": "Webhook",
21
- "mode_off": "Off — no detection",
22
- "mode_sharp": "Sharp — motion + video recording",
23
- "mode_still": "Still — motion trigger only",
24
- "motionEyePassword": "MotionEye password",
25
- "motionEyePassword_help": "Plain-text password as used for MotionEye web login. Leave empty if no password is set.",
26
- "motionEyePort": "MotionEye config API port",
27
- "motionEyePort_help": "MotionEye configuration API (default 8765)",
28
- "motionEyeUser": "MotionEye username",
29
- "motionHost": "MotionEye host",
30
- "motionHost_help": "IP address or hostname of your MotionEye server",
31
- "motionPort": "Motion HTTP port",
32
- "motionPort_help": "Motion webcontrol port for snapshots (default 7999)",
33
- "motionResetMs": "Motion auto-reset (ms)",
34
- "motionResetMs_help": "How long the .motion state stays true after a webhook (default 15000)",
35
- "requestTimeoutMs": "API request timeout (ms)",
36
- "statusPollIntervalSec": "Status poll interval (seconds)",
37
- "streamAutoOffMs": "Stream pulse auto-off (ms)",
38
- "streamAutoOffMs_help": "Used by streamPulse only — stream turns off after this duration (0 = never)",
39
- "tab_cameras": "Cameras",
40
- "tab_settings": "Settings",
41
- "useMotionEyeConfig": "Sync modes via MotionEye config API",
42
- "useMotionEyeConfig_help": "When enabled, mode and stream changes are written to MotionEye so the web UI stays in sync",
43
- "webhookBind": "Webhook bind address",
44
- "webhookBind_help": "Network interface for the built-in webhook listener (default 0.0.0.0)",
45
- "webhookHost": "ioBroker host for webhooks",
46
- "webhookHost_help": "IP or hostname of your ioBroker host reachable from MotionEye (e.g. 192.168.130.130). Required — without this value the adapter cannot write webhook URLs to MotionEye.",
47
- "webhookPort": "Webhook port",
48
- "webhookPort_help": "Port for motion webhooks from MotionEye (default 8090). Ensure firewall allows inbound traffic."
49
- }
1
+ {
2
+ "applyMediaSettingsOnStart": "Apply snapshot media profile on adapter start",
3
+ "camera_defaultMode": "Default mode",
4
+ "camera_enabled": "Enabled",
5
+ "camera_id": "Internal ID",
6
+ "camera_id_help": "Stable key for webhooks (e.g. auffahrt). Leave empty to derive from name.",
7
+ "camera_id_placeholder": "auto from name",
8
+ "camera_motionEyeId": "MotionEye ID",
9
+ "camera_motionEyeId_help": "Numeric camera ID from MotionEye (/config/list)",
10
+ "camera_name": "Display name",
11
+ "camera_name_help": "ioBroker channel name — independent of MotionEye label",
12
+ "cameras_info": "Add each camera you want in ioBroker. The MotionEye ID is shown in the MotionEye web UI or via /config/list on port 8765. After saving, restart the adapter instance to create datapoints and write webhook URLs to MotionEye.",
13
+ "cameras_table": "Cameras",
14
+ "defaultMode": "Default mode for new cameras",
15
+ "disableStreamOnStart": "Disable video stream on adapter start",
16
+ "header_cameras": "Camera management",
17
+ "header_connection": "MotionEye Connection",
18
+ "header_stream": "Stream Options",
19
+ "header_timing": "Polling & Timeouts",
20
+ "header_webhook": "Webhook",
21
+ "mode_off": "Off — no detection",
22
+ "mode_sharp": "Sharp — motion + video recording",
23
+ "mode_still": "Still — motion trigger only",
24
+ "motionEyePassword": "MotionEye password",
25
+ "motionEyePassword_help": "Plain-text password as used for MotionEye web login. Leave empty if no password is set.",
26
+ "motionEyePort": "MotionEye config API port",
27
+ "motionEyePort_help": "MotionEye configuration API (default 8765)",
28
+ "motionEyeUser": "MotionEye username",
29
+ "motionHost": "MotionEye host",
30
+ "motionHost_help": "IP address or hostname of your MotionEye server",
31
+ "motionPort": "Motion HTTP port",
32
+ "motionPort_help": "Motion webcontrol port for snapshots (default 7999)",
33
+ "motionResetMs": "Motion auto-reset (ms)",
34
+ "motionResetMs_help": "How long the .motion state stays true after a webhook (default 15000)",
35
+ "requestTimeoutMs": "API request timeout (ms)",
36
+ "statusPollIntervalSec": "Status poll interval (seconds)",
37
+ "streamAutoOffMs": "Stream pulse auto-off (ms)",
38
+ "streamAutoOffMs_help": "Used by streamPulse only — stream turns off after this duration (0 = never)",
39
+ "tab_cameras": "Cameras",
40
+ "tab_settings": "Settings",
41
+ "useMotionEyeConfig": "Sync modes via MotionEye config API",
42
+ "useMotionEyeConfig_help": "When enabled, mode and stream changes are written to MotionEye so the web UI stays in sync",
43
+ "webhookBind": "Webhook bind address",
44
+ "webhookBind_help": "Network interface for the built-in webhook listener (default 0.0.0.0)",
45
+ "webhookHost": "ioBroker host for webhooks",
46
+ "webhookHost_help": "IP or hostname of your ioBroker host reachable from MotionEye (e.g. 192.168.130.130). Required — without this value the adapter cannot write webhook URLs to MotionEye.",
47
+ "webhookPort": "Webhook port",
48
+ "webhookPort_help": "Port for motion webhooks from MotionEye (default 8090). Ensure firewall allows inbound traffic."
49
+ }
@@ -1,2 +1,2 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg version="1.1" width="26.458332mm" height="26.458334mm" viewBox="0 0 75.000144 75.000093" id="svg165" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs165" /><g id="layer1" style="opacity:1" transform="translate(-78.750127,-393.75065)"><g id="g85"><path d="m 78.750127,393.75065 v 75.00012 h 75.000113 v -75.00012 z" style="display:inline;opacity:1;fill:#80000000;fill-opacity:0.225;stroke:none;stroke-width:0.753376;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" id="path154-5-7-8-14-1" /><g id="layer2-0" style="display:inline;opacity:1;fill:#80000000;fill-opacity:0.225" transform="matrix(0.8645493,0,0,0.8645493,-16.29802,241.24759)"><path style="display:inline;fill:#999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.151347" d="m 156.90563,239.27644 c 0,1.07617 -0.36595,2.05502 -1.24651,2.71331 -0.69186,0.52091 -1.50381,0.8014 -2.37293,0.8014 -0.89199,0 -1.70965,-0.26332 -2.41295,-0.81284 -0.86341,-0.6583 -1.20648,-1.64287 -1.20648,-2.70187 v -27.52236 c 0,-1.04755 0.36023,-1.99778 1.20648,-2.64462 0.7033,-0.54381 1.52096,-0.80713 2.41295,-0.80713 0.86912,0 1.68107,0.27477 2.37293,0.79568 0.86341,0.64684 1.24651,1.59135 1.24651,2.65607 z m 0.0572,-38.00926 c 0,1.08189 -0.36595,2.06647 -1.23507,2.70187 -0.69187,0.53236 -1.50381,0.81285 -2.38437,0.81285 -0.89199,0 -1.72681,-0.26905 -2.41296,-0.81285 -0.85768,-0.6583 -1.20076,-1.63715 -1.20076,-2.70187 v -0.84147 c 0,-1.04754 0.36023,-1.99777 1.18361,-2.62744 0.7033,-0.56098 1.53812,-0.83002 2.43011,-0.83002 0.88056,0 1.6925,0.28049 2.36722,0.8014 0.87483,0.64112 1.25222,1.59135 1.25222,2.65606 z" id="path2-5-5-2-7" /><path style="display:inline;fill:#9fdb58;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.151347" d="m 158.58028,180.3077 14.36337,14.37941 -4.36276,4.36763 -11.02984,-11.0536 c -2.3329,-2.33551 -6.14103,-2.33551 -8.46821,0 l -27.46881,27.52809 c -2.3272,2.33551 -2.3272,6.15361 0,8.48912 l 11.00696,11.03069 -4.36848,4.37336 -14.35765,-14.3794 c -2.89898,-2.89649 -2.89898,-7.64193 0,-10.54414 l 34.15303,-34.19116 c 2.89898,-2.90221 7.63912,-2.90221 10.53239,0 z m 19.79538,19.81748 14.36337,14.37368 c 2.89326,2.90221 2.89326,7.64765 0,10.54414 L 158.586,259.23415 c -2.89899,2.90221 -7.63913,2.90221 -10.53811,0.006 l -14.35765,-14.37941 4.36276,-4.36763 11.02984,11.05359 c 2.32718,2.32979 6.13531,2.33551 8.46821,0 l 27.4631,-27.52808 c 2.3329,-2.3355 2.3329,-6.15361 0,-8.48911 l -11.00697,-11.03098 z" id="path1-4-0-1" /></g></g></g><style type="text/css" id="style1">.st0{fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st1{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10;}.st2{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}.st3{fill:none;stroke:#000000;stroke-linecap:round;stroke-miterlimit:10;}.st4{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-miterlimit:10;}.st5{fill:#FFFFFF;}.st6{stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st7{fill:none;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:10;}.st8{fill:none;}.st9{fill:none;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;}</style><style type="text/css" id="style1-5">.st0{fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st1{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10;}.st2{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}.st3{fill:none;stroke:#000000;stroke-linecap:round;stroke-miterlimit:10;}.st4{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-miterlimit:10;}.st5{fill:#FFFFFF;}.st6{stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st7{fill:none;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:10;}.st8{fill:none;}.st9{fill:none;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;}</style></svg>
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg version="1.1" width="26.458332mm" height="26.458334mm" viewBox="0 0 75.000144 75.000093" id="svg165" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs165" /><g id="layer1" style="opacity:1" transform="translate(-78.750127,-393.75065)"><g id="g85"><path d="m 78.750127,393.75065 v 75.00012 h 75.000113 v -75.00012 z" style="display:inline;opacity:1;fill:#80000000;fill-opacity:0.225;stroke:none;stroke-width:0.753376;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1" id="path154-5-7-8-14-1" /><g id="layer2-0" style="display:inline;opacity:1;fill:#80000000;fill-opacity:0.225" transform="matrix(0.8645493,0,0,0.8645493,-16.29802,241.24759)"><path style="display:inline;fill:#999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.151347" d="m 156.90563,239.27644 c 0,1.07617 -0.36595,2.05502 -1.24651,2.71331 -0.69186,0.52091 -1.50381,0.8014 -2.37293,0.8014 -0.89199,0 -1.70965,-0.26332 -2.41295,-0.81284 -0.86341,-0.6583 -1.20648,-1.64287 -1.20648,-2.70187 v -27.52236 c 0,-1.04755 0.36023,-1.99778 1.20648,-2.64462 0.7033,-0.54381 1.52096,-0.80713 2.41295,-0.80713 0.86912,0 1.68107,0.27477 2.37293,0.79568 0.86341,0.64684 1.24651,1.59135 1.24651,2.65607 z m 0.0572,-38.00926 c 0,1.08189 -0.36595,2.06647 -1.23507,2.70187 -0.69187,0.53236 -1.50381,0.81285 -2.38437,0.81285 -0.89199,0 -1.72681,-0.26905 -2.41296,-0.81285 -0.85768,-0.6583 -1.20076,-1.63715 -1.20076,-2.70187 v -0.84147 c 0,-1.04754 0.36023,-1.99777 1.18361,-2.62744 0.7033,-0.56098 1.53812,-0.83002 2.43011,-0.83002 0.88056,0 1.6925,0.28049 2.36722,0.8014 0.87483,0.64112 1.25222,1.59135 1.25222,2.65606 z" id="path2-5-5-2-7" /><path style="display:inline;fill:#9fdb58;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.151347" d="m 158.58028,180.3077 14.36337,14.37941 -4.36276,4.36763 -11.02984,-11.0536 c -2.3329,-2.33551 -6.14103,-2.33551 -8.46821,0 l -27.46881,27.52809 c -2.3272,2.33551 -2.3272,6.15361 0,8.48912 l 11.00696,11.03069 -4.36848,4.37336 -14.35765,-14.3794 c -2.89898,-2.89649 -2.89898,-7.64193 0,-10.54414 l 34.15303,-34.19116 c 2.89898,-2.90221 7.63912,-2.90221 10.53239,0 z m 19.79538,19.81748 14.36337,14.37368 c 2.89326,2.90221 2.89326,7.64765 0,10.54414 L 158.586,259.23415 c -2.89899,2.90221 -7.63913,2.90221 -10.53811,0.006 l -14.35765,-14.37941 4.36276,-4.36763 11.02984,11.05359 c 2.32718,2.32979 6.13531,2.33551 8.46821,0 l 27.4631,-27.52808 c 2.3329,-2.3355 2.3329,-6.15361 0,-8.48911 l -11.00697,-11.03098 z" id="path1-4-0-1" /></g></g></g><style type="text/css" id="style1">.st0{fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st1{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10;}.st2{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}.st3{fill:none;stroke:#000000;stroke-linecap:round;stroke-miterlimit:10;}.st4{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-miterlimit:10;}.st5{fill:#FFFFFF;}.st6{stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st7{fill:none;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:10;}.st8{fill:none;}.st9{fill:none;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;}</style><style type="text/css" id="style1-5">.st0{fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st1{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10;}.st2{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}.st3{fill:none;stroke:#000000;stroke-linecap:round;stroke-miterlimit:10;}.st4{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-miterlimit:10;}.st5{fill:#FFFFFF;}.st6{stroke:#000000;stroke-width:2;stroke-miterlimit:10;}.st7{fill:none;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:10;}.st8{fill:none;}.st9{fill:none;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;}</style></svg>