iobroker.motioneye 0.1.0 → 0.1.2

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,145 @@
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
+ | `useMotionEyeConfig` | `true` | Write mode, webhook URLs, and stream on/off to MotionEye (leave enabled for normal use) |
94
+
95
+ ## Support
96
+
97
+ If you like our work and would like to support us, we appreciate any donation.
98
+ (This link leads to our PayPal account and is not affiliated with ioBroker.)
99
+
100
+ [![Donate](img/support.png)](https://www.paypal.com/donate?hosted_button_id=7W6M3TFZ4W9LW)
101
+
102
+ ## Changelog
103
+
104
+ <!--
105
+ ### **WORK IN PROGRESS**
106
+ -->
107
+ ### 0.1.2 (2026-06-21)
108
+ - (skvarel) Clarified admin help for useMotionEyeConfig (required for mode, webhooks, and stream control — not only MotionEye web UI)
109
+
110
+ ### 0.1.1 (2026-06-21)
111
+ - (skvarel) Renamed info folder from `_info` to `0_info` so it sorts above camera channels in the object tree
112
+ - (skvarel) Migrate legacy `info` and `_info` states to `0_info` on adapter start
113
+
114
+ ### 0.1.0 (2026-06-21)
115
+ - (skvarel) Added states for motionEyeVersion and motionVersion
116
+
117
+ ### 0.0.1 (2026-06-21)
118
+ - (skvarel) Initial development release
119
+
120
+ ## Older changes
121
+ - [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
122
+
123
+ ## License
124
+
125
+ MIT License
126
+
127
+ Copyright (c) 2026 skvarel <skvarel@inventwo.com>
128
+
129
+ Permission is hereby granted, free of charge, to any person obtaining a copy
130
+ of this software and associated documentation files (the "Software"), to deal
131
+ in the Software without restriction, including without limitation the rights
132
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
133
+ copies of the Software, and to permit persons to whom the Software is
134
+ furnished to do so, subject to the following conditions:
135
+
136
+ The above copyright notice and this permission notice shall be included in all
137
+ copies or substantial portions of the Software.
138
+
139
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
140
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
141
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
142
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
143
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
144
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
145
+ SOFTWARE.
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Nur für streamPulse — der Stream schaltet nach dieser Dauer wieder aus (0 = nie)",
39
39
  "tab_cameras": "Kameras",
40
40
  "tab_settings": "Einstellungen",
41
- "useMotionEyeConfig": "Modi über MotionEye Config-API synchronisieren",
42
- "useMotionEyeConfig_help": "Wenn aktiv, werden Modus- und Stream-Änderungen in MotionEye geschrieben, damit die Web-Oberfläche mitgeht",
41
+ "useMotionEyeConfig": "MotionEye über Config-API steuern",
42
+ "useMotionEyeConfig_help": "Für den normalen Betrieb aktiviert lassen. Der Adapter schreibt Kameramodus, Webhook-URLs und Stream ein/aus nach MotionEye (Port 8765). ioBroker steuert damit Bewegungserkennung und Livestream; die MotionEye-Weboberfläche passt sich nur mit an. Nur deaktivieren, wenn du MotionEye komplett manuell konfigurierst und ioBroker nur Webhooks empfangen soll.",
43
43
  "webhookBind": "Webhook-Bind-Adresse",
44
44
  "webhookBind_help": "Netzwerkschnittstelle für den eingebauten Webhook-Listener (Standard 0.0.0.0)",
45
45
  "webhookHost": "ioBroker-Host für Webhooks",
@@ -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": "Control MotionEye via config API",
42
+ "useMotionEyeConfig_help": "Leave enabled for normal use. The adapter writes camera mode, webhook URLs, and stream on/off to MotionEye (port 8765). ioBroker then controls motion detection and live streams; the MotionEye web UI follows as a side effect. Disable only if you configure MotionEye entirely by hand and ioBroker should only receive webhooks.",
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
+ }
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Usado solo por streamPulse: la transmisión se apaga después de esta duración (0 = nunca)",
39
39
  "tab_cameras": "Cámaras",
40
40
  "tab_settings": "Ajustes",
41
- "useMotionEyeConfig": "Modos de sincronización a través de la API de configuración MotionEye",
42
- "useMotionEyeConfig_help": "Cuando está habilitado, los cambios de modo y transmisión se escriben en MotionEye para que la interfaz de usuario web permanezca sincronizada.",
41
+ "useMotionEyeConfig": "Controlar MotionEye vía API de configuración",
42
+ "useMotionEyeConfig_help": "Déjalo activado para el uso normal. El adaptador escribe el modo de cámara, las URL de webhook y el stream on/off en MotionEye (puerto 8765). ioBroker controla entonces la detección de movimiento y los streams; la interfaz web de MotionEye se actualiza como efecto secundario. Desactiva solo si configuras MotionEye completamente a mano.",
43
43
  "webhookBind": "Dirección de enlace del webhook",
44
44
  "webhookBind_help": "Interfaz de red para el oyente de webhook integrado (predeterminado 0.0.0.0)",
45
45
  "webhookHost": "Alojamiento ioBroker para webhooks",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Utilisé uniquement par streamPulse — le flux s'éteint après cette durée (0 = jamais)",
39
39
  "tab_cameras": "Caméras",
40
40
  "tab_settings": "Paramètres",
41
- "useMotionEyeConfig": "Modes de synchronisation via l'API de configuration MotionEye",
42
- "useMotionEyeConfig_help": "Lorsqu'ils sont activés, les changements de mode et de flux sont écrits dans MotionEye afin que l'interface utilisateur Web reste synchronisée.",
41
+ "useMotionEyeConfig": "Contrôler MotionEye via l'API de configuration",
42
+ "useMotionEyeConfig_help": "Laissez activé pour un usage normal. L'adaptateur écrit le mode caméra, les URL de webhook et le flux on/off dans MotionEye (port 8765). ioBroker contrôle alors la détection de mouvement et les flux ; l'interface web MotionEye suit en conséquence. Désactivez seulement si vous configurez MotionEye entièrement à la main.",
43
43
  "webhookBind": "Adresse de liaison du webhook",
44
44
  "webhookBind_help": "Interface réseau pour l'écouteur de webhook intégré (0.0.0.0 par défaut)",
45
45
  "webhookHost": "Hôte ioBroker pour les webhooks",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Utilizzato solo da streamPulse: lo streaming si interrompe dopo questa durata (0 = mai)",
39
39
  "tab_cameras": "Fotocamere",
40
40
  "tab_settings": "Impostazioni",
41
- "useMotionEyeConfig": "Modalità di sincronizzazione tramite API di configurazione MotionEye",
42
- "useMotionEyeConfig_help": "Quando abilitato, le modifiche alla modalità e allo streaming vengono scritte su MotionEye in modo che l'interfaccia utente Web rimanga sincronizzata",
41
+ "useMotionEyeConfig": "Controlla MotionEye tramite API di configurazione",
42
+ "useMotionEyeConfig_help": "Lascia attivato per l'uso normale. L'adattatore scrive modalità camera, URL webhook e stream on/off in MotionEye (porta 8765). ioBroker controlla rilevamento movimento e stream; l'interfaccia web MotionEye si aggiorna di conseguenza. Disattiva solo se configuri MotionEye interamente a mano.",
43
43
  "webhookBind": "Indirizzo di associazione del webhook",
44
44
  "webhookBind_help": "Interfaccia di rete per il listener webhook integrato (predefinito 0.0.0.0)",
45
45
  "webhookHost": "Host ioBroker per webhook",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Alleen gebruikt door streamPulse: de stream wordt na deze duur uitgeschakeld (0 = nooit)",
39
39
  "tab_cameras": "Camera's",
40
40
  "tab_settings": "Instellingen",
41
- "useMotionEyeConfig": "Synchronisatiemodi via MotionEye-configuratie-API",
42
- "useMotionEyeConfig_help": "Indien ingeschakeld, worden modus- en streamwijzigingen naar MotionEye geschreven, zodat de webinterface gesynchroniseerd blijft",
41
+ "useMotionEyeConfig": "MotionEye via config-API aansturen",
42
+ "useMotionEyeConfig_help": "Laat ingeschakeld voor normaal gebruik. De adapter schrijft cameramodus, webhook-URL's en stream aan/uit naar MotionEye (poort 8765). ioBroker bestuurt dan bewegingsdetectie en livestreams; de MotionEye-webinterface volgt mee. Alleen uitschakelen als je MotionEye volledig handmatig configureert.",
43
43
  "webhookBind": "Webhook-bindadres",
44
44
  "webhookBind_help": "Netwerkinterface voor de ingebouwde webhook-listener (standaard 0.0.0.0)",
45
45
  "webhookHost": "ioBroker-host voor webhooks",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Używany tylko przez streamPulse — strumień wyłącza się po upływie tego czasu (0 = nigdy)",
39
39
  "tab_cameras": "Kamery",
40
40
  "tab_settings": "Ustawienia",
41
- "useMotionEyeConfig": "Tryby synchronizacji poprzez interfejs API konfiguracji MotionEye",
42
- "useMotionEyeConfig_help": "Po włączeniu zmiany trybu i strumienia zapisywane w MotionEye, dzięki czemu interfejs sieciowy pozostaje zsynchronizowany",
41
+ "useMotionEyeConfig": "Steruj MotionEye przez API konfiguracji",
42
+ "useMotionEyeConfig_help": "Pozostaw włączone do normalnej pracy. Adapter zapisuje tryb kamery, adresy URL webhooków i stream wł./wył. w MotionEye (port 8765). ioBroker steruje wykrywaniem ruchu i streamami; interfejs web MotionEye aktualizuje się przy okazji. Wyłącz tylko, jeśli konfigurujesz MotionEye całkowicie ręcznie.",
43
43
  "webhookBind": "Adres powiązania webhooka",
44
44
  "webhookBind_help": "Interfejs sieciowy dla wbudowanego odbiornika webhook (domyślnie 0.0.0.0)",
45
45
  "webhookHost": "Host ioBroker dla webhooków",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Usado apenas pelo streamPulse — o stream é desligado após esse período (0 = nunca)",
39
39
  "tab_cameras": "Câmeras",
40
40
  "tab_settings": "Configurações",
41
- "useMotionEyeConfig": "Modos de sincronização via API de configuração MotionEye",
42
- "useMotionEyeConfig_help": "Quando ativado, as alterações de modo e fluxo são gravadas no MotionEye para que a interface da web permaneça sincronizada",
41
+ "useMotionEyeConfig": "Controlar MotionEye via API de configuração",
42
+ "useMotionEyeConfig_help": "Deixe ativado para uso normal. O adaptador grava modo da câmera, URLs de webhook e stream ligado/desligado no MotionEye (porta 8765). O ioBroker controla detecção de movimento e streams; a interface web do MotionEye acompanha como efeito colateral. Desative apenas se configurar o MotionEye totalmente à mão.",
43
43
  "webhookBind": "Endereço de ligação do webhook",
44
44
  "webhookBind_help": "Interface de rede para o ouvinte de webhook integrado (padrão 0.0.0.0)",
45
45
  "webhookHost": "Host ioBroker para webhooks",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Используется только дляstreamPulse — поток отключается по истечении этого времени (0 = никогда)",
39
39
  "tab_cameras": "Камеры",
40
40
  "tab_settings": "Настройки",
41
- "useMotionEyeConfig": "Синхронизация режимов через API конфигурации MotionEye",
42
- "useMotionEyeConfig_help": "Если этот параметр включен, изменения режима и потока записываются в MotionEye, поэтому веб-интерфейс остается синхронизированным.",
41
+ "useMotionEyeConfig": "Управление MotionEye через API конфигурации",
42
+ "useMotionEyeConfig_help": "Оставьте включённым для обычной работы. Адаптер записывает режим камеры, URL вебхуков и поток вкл./выкл. в MotionEye (порт 8765). ioBroker управляет обнаружением движения и потоками; веб-интерфейс MotionEye обновляется как побочный эффект. Отключайте только при полностью ручной настройке MotionEye.",
43
43
  "webhookBind": "Адрес привязки вебхука",
44
44
  "webhookBind_help": "Сетевой интерфейс для встроенного прослушивателя веб-перехватчиков (по умолчанию 0.0.0.0)",
45
45
  "webhookHost": "хост ioBroker для веб-перехватчиков",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "Використовується тільки streamPulse — потік вимикається через цей час (0 = ніколи)",
39
39
  "tab_cameras": "Фотоапарати",
40
40
  "tab_settings": "Налаштування",
41
- "useMotionEyeConfig": "Режими синхронізації через API конфігурації MotionEye",
42
- "useMotionEyeConfig_help": "Якщо ввімкнено, зміни режиму та потоку записуються в MotionEye, щоб веб-інтерфейс залишався синхронізованим",
41
+ "useMotionEyeConfig": "Керувати MotionEye через API конфігурації",
42
+ "useMotionEyeConfig_help": "Залиште увімкненим для звичайної роботи. Адаптер записує режим камери, URL вебхуків і потік увімк./вимк. у MotionEye (порт 8765). ioBroker керує виявленням руху та потоками; веб-інтерфейс MotionEye оновлюється як побічний ефект. Вимикайте лише за повністю ручного налаштування MotionEye.",
43
43
  "webhookBind": "Адреса прив’язки вебхука",
44
44
  "webhookBind_help": "Мережевий інтерфейс для вбудованого слухача вебхуку (за замовчуванням 0.0.0.0)",
45
45
  "webhookHost": "Хост ioBroker для веб-хуків",
@@ -38,8 +38,8 @@
38
38
  "streamAutoOffMs_help": "仅由streamPulse使用-流在此持续时间后关闭(0=从不)",
39
39
  "tab_cameras": "相机",
40
40
  "tab_settings": "设置",
41
- "useMotionEyeConfig": "通过 MotionEye 配置 API 的同步模式",
42
- "useMotionEyeConfig_help": "启用后,模式和流更改将写入 MotionEye,以便 Web UI 保持同步",
41
+ "useMotionEyeConfig": "通过 MotionEye 配置 API 控制",
42
+ "useMotionEyeConfig_help": "正常使用请保持启用。适配器将摄像头模式、Webhook URL 和流开关写入 MotionEye(端口 8765)。ioBroker 由此控制运动检测和直播流;MotionEye 网页界面会随之更新。仅在你完全手动配置 MotionEye 时才禁用。",
43
43
  "webhookBind": "Webhook绑定地址",
44
44
  "webhookBind_help": "内置 webhook 侦听器的网络接口(默认 0.0.0.0)",
45
45
  "webhookHost": "Webhooks 的 ioBroker 主机",
@@ -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>