iobroker.agent-dvr 0.1.0 → 0.2.0
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.de.md +289 -175
- package/README.md +226 -90
- package/admin/assets/index-ulvdM37k.js +685 -0
- package/admin/i18n/de.json +3 -7
- package/admin/i18n/en.json +131 -135
- package/admin/i18n/es.json +3 -7
- package/admin/i18n/fr.json +3 -7
- package/admin/i18n/it.json +3 -7
- package/admin/i18n/nl.json +3 -7
- package/admin/i18n/pl.json +3 -7
- package/admin/i18n/pt.json +3 -7
- package/admin/i18n/ru.json +3 -7
- package/admin/i18n/uk.json +3 -7
- package/admin/i18n/zh-cn.json +3 -7
- package/admin/index_m.html +27 -0
- package/build/main.js +152 -103
- package/build/main.js.map +2 -2
- package/io-package.json +16 -17
- package/lib/web.js +52 -5
- package/package.json +1 -1
- package/www/flv.min.js +7534 -0
- package/www/index.html +382 -99
- package/admin/custom/go2rtcMapping.js +0 -169
- package/admin/jsonConfig.json +0 -822
package/README.md
CHANGED
|
@@ -12,48 +12,217 @@
|
|
|
12
12
|
|
|
13
13
|
## agent-dvr adapter for ioBroker
|
|
14
14
|
|
|
15
|
-
Connects ioBroker to [AgentDVR](https://www.ispyconnect.com): auto-discovers all cameras
|
|
15
|
+
Connects ioBroker to [AgentDVR](https://www.ispyconnect.com): auto-discovers all cameras, mirrors every device property as data points, provides buttons for all common commands (record, arm, PTZ, …), delivers push-triggered gallery updates on new recordings, generates a responsive HTML gallery widget per camera, and includes a built-in live dashboard with per-camera stream selection (MJPEG, MP4/FLV with audio, or go2rtc WebRTC).
|
|
16
16
|
|
|
17
17
|
## Features
|
|
18
18
|
|
|
19
|
-
- Auto-discovery of all AgentDVR cameras
|
|
19
|
+
- Auto-discovery of all AgentDVR cameras on startup (microphones excluded)
|
|
20
20
|
- All device properties mirrored as data points (flattened from the API)
|
|
21
21
|
- Per-device control buttons: record, snapshot, detect, arm/disarm alerts, switch on/off, object detection, purge, …
|
|
22
22
|
- System-level buttons: arm, disarm, all on/off, reload, storage management, restart, …
|
|
23
|
-
- **Profile selector** — writable dropdown
|
|
24
|
-
- **Snapshot as Base64** — `snapshot_b64` state
|
|
25
|
-
- PTZ control with hold-to-move switches
|
|
23
|
+
- **Profile selector** — writable dropdown reflecting the current AgentDVR profile (Home / Away / Night / custom)
|
|
24
|
+
- **Snapshot as Base64** — `snapshot_b64` state per camera, writable via button or auto-updated every poll cycle
|
|
25
|
+
- PTZ control with hold-to-move switches
|
|
26
26
|
- Stream URLs per camera (snapshot, photo, MJPEG, MP4)
|
|
27
|
-
- Push trigger state
|
|
27
|
+
- Push trigger state for real-time script reactions to new recordings
|
|
28
28
|
- HTML gallery widget per camera (pure HTML/CSS or full JS mode with search and tag filter)
|
|
29
29
|
- Overview widget combining all cameras in one HTML state
|
|
30
|
-
-
|
|
30
|
+
- **Built-in live dashboard** at `http://<iobroker>:<webport>/agent-dvr/` — no additional app needed:
|
|
31
|
+
- Per-camera stream selection: MJPEG, MP4/FLV with audio, or go2rtc WebRTC/MSE
|
|
32
|
+
- Camera filter badges to show/hide individual cameras (state saved in localStorage)
|
|
33
|
+
- Real-time motion and alert indicators (yellow / orange tile border) via Socket.io
|
|
34
|
+
- Fullscreen view with PTZ overlay and record button
|
|
35
|
+
- Recordings tab with grid and timeline view, search, tag filter, and video player
|
|
36
|
+
- Auto-reconnect for all stream types after network interruption or tab switch
|
|
37
|
+
- Fully color-themeable via adapter config
|
|
31
38
|
|
|
32
39
|
## Configuration
|
|
33
40
|
|
|
41
|
+
### Tab: Connection
|
|
42
|
+
|
|
34
43
|
| Setting | Description | Default |
|
|
35
44
|
|---------|-------------|---------|
|
|
36
45
|
| AgentDVR IP | IP address of the AgentDVR server | — |
|
|
37
|
-
| Port | AgentDVR port | `8090` |
|
|
38
|
-
| Username
|
|
39
|
-
|
|
|
40
|
-
|
|
|
46
|
+
| Port | AgentDVR HTTP port | `8090` |
|
|
47
|
+
| Username | Optional HTTP basic auth username | — |
|
|
48
|
+
| Password | Optional HTTP basic auth password | — |
|
|
49
|
+
| Poll interval (s) | How often to fetch data from AgentDVR (5–3600) | `30` |
|
|
50
|
+
| HTTP timeout (ms) | Timeout per API request (1000–30000) | `8000` |
|
|
51
|
+
|
|
52
|
+
### Tab: Features
|
|
53
|
+
|
|
54
|
+
**Controls**
|
|
55
|
+
|
|
56
|
+
| Setting | Description | Default |
|
|
57
|
+
|---------|-------------|---------|
|
|
41
58
|
| System control buttons | Create arm/disarm/restart/… buttons and the profile selector | `true` |
|
|
42
|
-
| PTZ control buttons | Create per-camera PTZ hold-switches | `true` |
|
|
59
|
+
| PTZ control buttons | Create per-camera PTZ hold-switches (left, right, up, down, diagonals, zoom, stop, center) | `true` |
|
|
43
60
|
| Generate stream URLs | Create URL states (snapshot, MJPEG, MP4) per camera | `true` |
|
|
44
61
|
| Snapshot as Base64 | Auto-fetch and store the current frame as Base64 on every poll | `false` |
|
|
45
|
-
|
|
46
|
-
|
|
62
|
+
|
|
63
|
+
**Events**
|
|
64
|
+
|
|
65
|
+
| Setting | Description | Default |
|
|
66
|
+
|---------|-------------|---------|
|
|
67
|
+
| Event data points | Mirror recording metadata (latest event, count, tags, …) per camera | `true` |
|
|
68
|
+
| Real-time push trigger | Create a push-trigger state that scripts can subscribe to for new recordings | `true` |
|
|
69
|
+
|
|
70
|
+
**Display**
|
|
71
|
+
|
|
72
|
+
| Setting | Description | Default |
|
|
73
|
+
|---------|-------------|---------|
|
|
47
74
|
| Overview widget | Single HTML state combining all camera live tiles | `true` |
|
|
48
|
-
|
|
75
|
+
|
|
76
|
+
**Debug**
|
|
77
|
+
|
|
78
|
+
| Setting | Description | Default |
|
|
79
|
+
|---------|-------------|---------|
|
|
49
80
|
| Store raw API JSON | Write the full getObjects response to `system.raw_getObjects` | `false` |
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
81
|
+
|
|
82
|
+
### Tab: Dashboard
|
|
83
|
+
|
|
84
|
+
**Default view**
|
|
85
|
+
|
|
86
|
+
| Setting | Description | Default |
|
|
87
|
+
|---------|-------------|---------|
|
|
88
|
+
| Default view | Which tab opens when the dashboard loads: Live or Recordings | `Live` |
|
|
89
|
+
| Show offline cameras | Display camera tiles even when the camera is offline | `true` |
|
|
90
|
+
|
|
91
|
+
**Camera grid**
|
|
92
|
+
|
|
93
|
+
| Setting | Description | Default |
|
|
94
|
+
|---------|-------------|---------|
|
|
95
|
+
| Columns | Number of grid columns (0 = auto-fit based on tile width) | `0` |
|
|
96
|
+
| Buttons always visible | Show record/PTZ buttons permanently instead of on hover only | `false` |
|
|
97
|
+
| Tag-badge position | Corner where the camera name badge appears on each tile | `bottom-right` |
|
|
98
|
+
|
|
99
|
+
**Stream**
|
|
100
|
+
|
|
101
|
+
| Setting | Description | Default |
|
|
102
|
+
|---------|-------------|---------|
|
|
103
|
+
| Refresh interval (s) | How often the dashboard re-fetches camera data (10–600) | `60` |
|
|
104
|
+
| Auto-reconnect streams | Automatically reconnect MJPEG, MP4/FLV and go2rtc streams after an error or tab switch | `true` |
|
|
105
|
+
|
|
106
|
+
**Color theme** — 7 color pickers to match your UI:
|
|
107
|
+
|
|
108
|
+
| Setting | Description |
|
|
109
|
+
|---------|-------------|
|
|
110
|
+
| Background | Page/grid background color |
|
|
111
|
+
| Surface | Camera tile background |
|
|
112
|
+
| Accent | Highlight / active element color |
|
|
113
|
+
| Text | Primary text color |
|
|
114
|
+
| Border | Tile border color |
|
|
115
|
+
| Online indicator | Color of the online status dot |
|
|
116
|
+
| Offline indicator | Color of the offline status dot |
|
|
117
|
+
|
|
118
|
+
**Stream assignment**
|
|
119
|
+
|
|
120
|
+
Here you assign a stream source to each camera individually. The dropdown shows all cameras discovered from AgentDVR (microphones are excluded).
|
|
121
|
+
|
|
122
|
+
| Option | Description |
|
|
123
|
+
|--------|-------------|
|
|
124
|
+
| MJPEG *(AgentDVR)* | Classic MJPEG stream served by AgentDVR — lowest latency, no audio |
|
|
125
|
+
| MP4 / FLV with audio *(AgentDVR)* | FLV stream proxied through ioBroker using flv.js — includes audio, correct aspect ratio |
|
|
126
|
+
| *stream name* *(go2rtc)* | WebRTC/MSE stream from go2rtc — smooth, low latency, audio support |
|
|
127
|
+
|
|
128
|
+
The go2rtc stream names are fetched automatically from the go2rtc server when the admin UI is open. If the browser cannot reach go2rtc directly (e.g. mixed-content on HTTPS), the adapter fetches them on the server side as a fallback.
|
|
129
|
+
|
|
130
|
+
**go2rtc URL** *(only visible when at least one camera uses a go2rtc stream)*
|
|
131
|
+
|
|
132
|
+
| Setting | Description | Example |
|
|
133
|
+
|---------|-------------|---------|
|
|
134
|
+
| go2rtc URL | Base URL of your go2rtc instance | `http://192.168.1.10:1984` |
|
|
135
|
+
|
|
136
|
+
> **Note:** go2rtc must already have the streams configured. The adapter only reads the stream list and proxies the WebSocket — it does not configure go2rtc.
|
|
137
|
+
|
|
138
|
+
### Tab: Widget (gallery widget per camera)
|
|
139
|
+
|
|
140
|
+
**General**
|
|
141
|
+
|
|
142
|
+
| Setting | Description | Default |
|
|
143
|
+
|---------|-------------|---------|
|
|
144
|
+
| Enable widget | Generate an HTML gallery widget per camera | `true` |
|
|
145
|
+
| Widget mode | `No JS` — pure HTML/CSS, embed anywhere; `JS` — full interactivity with search and tag filter | `No JS` |
|
|
146
|
+
|
|
147
|
+
**Layout**
|
|
148
|
+
|
|
149
|
+
| Setting | Description | Default |
|
|
150
|
+
|---------|-------------|---------|
|
|
151
|
+
| Max. entries | Maximum number of recordings shown in the widget | `20` |
|
|
152
|
+
| Min. column width (px) | Minimum width of each thumbnail column | `150` |
|
|
153
|
+
| Max. modal width (px) | Maximum width of the video playback modal | `900` |
|
|
154
|
+
|
|
155
|
+
**Tags**
|
|
156
|
+
|
|
157
|
+
| Setting | Description | Default |
|
|
158
|
+
|---------|-------------|---------|
|
|
159
|
+
| Show tags | Display recording tags on each thumbnail | `true` |
|
|
160
|
+
| Tag-badge position | Corner where tags appear on the thumbnail | `bottom-left` |
|
|
161
|
+
|
|
162
|
+
**Filter**
|
|
163
|
+
|
|
164
|
+
| Setting | Description | Default |
|
|
165
|
+
|---------|-------------|---------|
|
|
166
|
+
| Newest first | Sort recordings with the latest at the top | `true` |
|
|
167
|
+
| Show search | Show a text search field in JS mode | `false` |
|
|
168
|
+
| Compact mode | Denser layout with smaller thumbnails | `false` |
|
|
169
|
+
| Default tag | Pre-select this tag filter when the widget loads | — |
|
|
170
|
+
| Thumbnail size | `Small` / `Medium` / `Large` | `Medium` |
|
|
171
|
+
|
|
172
|
+
**Player**
|
|
173
|
+
|
|
174
|
+
| Setting | Description | Default |
|
|
175
|
+
|---------|-------------|---------|
|
|
176
|
+
| Live aspect ratio | Aspect ratio for the live stream preview, e.g. `16/9` | — |
|
|
177
|
+
| Player URL | Custom URL for the video player used in the widget | — |
|
|
178
|
+
|
|
179
|
+
**Color theme** — 5 color pickers + border radius:
|
|
180
|
+
|
|
181
|
+
| Setting | Description |
|
|
182
|
+
|---------|-------------|
|
|
183
|
+
| Card background | Widget card background |
|
|
184
|
+
| Tag background | Tag chip background |
|
|
185
|
+
| Tag text | Tag chip text color |
|
|
186
|
+
| Accent | Highlight color |
|
|
187
|
+
| Modal background | Video modal background |
|
|
188
|
+
| Border radius (px) | Rounded corner radius for cards | `4` |
|
|
189
|
+
|
|
190
|
+
### Tab: Advanced
|
|
191
|
+
|
|
192
|
+
| Setting | Description | Default |
|
|
193
|
+
|---------|-------------|---------|
|
|
194
|
+
| Max. recursion depth | How many levels deep the API JSON is flattened into data points (1–10) | `6` |
|
|
195
|
+
| Max. array entries | Maximum number of array elements mirrored per property (1–500) | `30` |
|
|
196
|
+
| Dynamic tags | Automatically create a tag data point for every unique recording tag | `false` |
|
|
197
|
+
| Ignore tags (comma-separated) | Recording tags to exclude from event data points | — |
|
|
198
|
+
| Tag filter (comma-separated) | Only create event data points for recordings matching these tags | — |
|
|
199
|
+
|
|
200
|
+
## Live Dashboard
|
|
201
|
+
|
|
202
|
+
The adapter ships a built-in live dashboard at `http://<iobroker>:<webport>/agent-dvr/`.
|
|
203
|
+
|
|
204
|
+
**Features:**
|
|
205
|
+
- Per-camera stream selection: MJPEG, MP4/FLV with audio (via flv.js), or go2rtc WebRTC/MSE
|
|
206
|
+
- Camera filter badges — click to show/hide individual cameras; state persisted in localStorage
|
|
207
|
+
- Fullscreen view with PTZ overlay and record button
|
|
208
|
+
- Real-time motion (yellow border) and alert (orange border) indicators via Socket.io
|
|
209
|
+
- Auto-reconnect: MJPEG and FLV reconnect after error; go2rtc reconnects after unexpected WebSocket close or 10 s stall
|
|
210
|
+
- Recordings tab with grid and timeline view, search and tag filter, video player with prev/next navigation
|
|
211
|
+
- Color theming via adapter config
|
|
212
|
+
|
|
213
|
+
### go2rtc WebRTC Streams
|
|
214
|
+
|
|
215
|
+
[go2rtc](https://github.com/AlexxIT/go2rtc) provides smooth, low-latency WebRTC/MSE streams with audio.
|
|
216
|
+
|
|
217
|
+
**Setup:**
|
|
218
|
+
1. Install and run go2rtc, configure your camera streams in go2rtc's config.
|
|
219
|
+
2. In the adapter config → *Dashboard* tab, assign the desired go2rtc stream name to each camera from the dropdown.
|
|
220
|
+
3. Enter the **go2rtc URL** that appears below the table (e.g. `http://192.168.1.10:1984`).
|
|
221
|
+
4. Save and restart. The adapter proxies WebSocket traffic through ioBroker to avoid browser cross-origin restrictions.
|
|
53
222
|
|
|
54
223
|
## Data points
|
|
55
224
|
|
|
56
|
-
|
|
225
|
+
`<cam>` stands for `cam_<oid>_<name>`, e.g. `cam_8_Reolink`.
|
|
57
226
|
|
|
58
227
|
### System
|
|
59
228
|
|
|
@@ -84,17 +253,15 @@ The adapter creates the following data point tree. `<cam>` stands for `cam_<oid>
|
|
|
84
253
|
| `system.control.unblockExternal` | button | W | Unblock external access |
|
|
85
254
|
| `system.control.restart` | button | W | Restart AgentDVR |
|
|
86
255
|
| `system.control.refresh` | button | W | Force immediate poll |
|
|
87
|
-
| `system.profile.selector` | number | R/W | Active profile index — dropdown
|
|
256
|
+
| `system.profile.selector` | number | R/W | Active profile index — dropdown (0 = Home, 1 = Away, …) |
|
|
88
257
|
| `system.profile.list` | string | R | Available profiles as JSON array |
|
|
89
258
|
|
|
90
|
-
### Per camera
|
|
91
|
-
|
|
92
|
-
The raw device data from AgentDVR is mirrored recursively (depth configurable, default 6). The most important sub-tree is `<cam>.data.*`:
|
|
259
|
+
### Per camera
|
|
93
260
|
|
|
94
261
|
| Data point | Type | R/W | Description |
|
|
95
262
|
|-----------|------|-----|-------------|
|
|
96
|
-
| `<cam>.name` | string | R |
|
|
97
|
-
| `<cam>.data.online` | boolean | R |
|
|
263
|
+
| `<cam>.name` | string | R | Camera name |
|
|
264
|
+
| `<cam>.data.online` | boolean | R | Camera is online |
|
|
98
265
|
| `<cam>.data.connected` | boolean | R | Stream is connected |
|
|
99
266
|
| `<cam>.data.recording` | boolean | R | Currently recording |
|
|
100
267
|
| `<cam>.data.detected` | boolean | R | Motion/object detected |
|
|
@@ -114,15 +281,15 @@ The raw device data from AgentDVR is mirrored recursively (depth configurable, d
|
|
|
114
281
|
| `<cam>.control.detect` | button | W | Trigger motion detection |
|
|
115
282
|
| `<cam>.control.alertOn` | button | W | Arm alerts |
|
|
116
283
|
| `<cam>.control.alertOff` | button | W | Disarm alerts |
|
|
117
|
-
| `<cam>.control.switchOn` | button | W | Switch
|
|
118
|
-
| `<cam>.control.switchOff` | button | W | Switch
|
|
284
|
+
| `<cam>.control.switchOn` | button | W | Switch camera on |
|
|
285
|
+
| `<cam>.control.switchOff` | button | W | Switch camera off |
|
|
119
286
|
| `<cam>.control.objectDetectOn` | button | W | Enable object detection |
|
|
120
287
|
| `<cam>.control.objectDetectOff` | button | W | Disable object detection |
|
|
121
288
|
| `<cam>.control.recOnAlert` | button | W | Enable "record on alert" |
|
|
122
289
|
| `<cam>.control.recOnDetect` | button | W | Enable "record on detect" |
|
|
123
|
-
| `<cam>.control.purge` | button | W | Delete all recordings
|
|
290
|
+
| `<cam>.control.purge` | button | W | Delete all recordings for this camera |
|
|
124
291
|
|
|
125
|
-
### PTZ *(
|
|
292
|
+
### PTZ *(requires "PTZ control buttons")*
|
|
126
293
|
|
|
127
294
|
| Data point | Type | R/W | Description |
|
|
128
295
|
|-----------|------|-----|-------------|
|
|
@@ -139,62 +306,28 @@ The raw device data from AgentDVR is mirrored recursively (depth configurable, d
|
|
|
139
306
|
| `<cam>.control.ptz.stop` | button | W | Stop PTZ movement |
|
|
140
307
|
| `<cam>.control.ptz.center` | button | W | Move to center/home position |
|
|
141
308
|
|
|
142
|
-
### Stream URLs *(
|
|
309
|
+
### Stream URLs *(requires "Generate stream URLs")*
|
|
143
310
|
|
|
144
311
|
| Data point | Type | R/W | Description |
|
|
145
312
|
|-----------|------|-----|-------------|
|
|
146
|
-
| `<cam>.urls.snapshot` | string | R | URL to current JPEG snapshot
|
|
147
|
-
| `<cam>.urls.photo` | string | R | URL to photo endpoint
|
|
148
|
-
| `<cam>.urls.mjpeg` | string | R | URL to MJPEG live stream
|
|
149
|
-
| `<cam>.urls.mp4` | string | R | URL to MP4 live stream
|
|
313
|
+
| `<cam>.urls.snapshot` | string | R | URL to current JPEG snapshot |
|
|
314
|
+
| `<cam>.urls.photo` | string | R | URL to photo endpoint |
|
|
315
|
+
| `<cam>.urls.mjpeg` | string | R | URL to MJPEG live stream |
|
|
316
|
+
| `<cam>.urls.mp4` | string | R | URL to MP4 live stream |
|
|
150
317
|
|
|
151
318
|
### Events / Gallery *(cameras only)*
|
|
152
319
|
|
|
153
320
|
| Data point | Type | R/W | Description |
|
|
154
321
|
|-----------|------|-----|-------------|
|
|
155
|
-
| `<cam>.events.*` | various | R | Latest recording metadata
|
|
156
|
-
| `<cam>.push` | string | R | Push trigger — updated
|
|
157
|
-
| `<cam>.gallery` | string | R | HTML gallery
|
|
322
|
+
| `<cam>.events.*` | various | R | Latest recording metadata — requires "Event data points" |
|
|
323
|
+
| `<cam>.push` | string | R | Push trigger — updated when AgentDVR reports a new recording — requires "Real-time push trigger" |
|
|
324
|
+
| `<cam>.gallery` | string | R | HTML recording gallery — requires "Gallery widget" |
|
|
158
325
|
|
|
159
326
|
### Overview *(requires "Overview widget")*
|
|
160
327
|
|
|
161
328
|
| Data point | Type | R/W | Description |
|
|
162
329
|
|-----------|------|-----|-------------|
|
|
163
|
-
| `overview` | string | R | HTML tile grid of all cameras
|
|
164
|
-
|
|
165
|
-
## Live Dashboard
|
|
166
|
-
|
|
167
|
-
The adapter ships a built-in live dashboard at `http://<iobroker>:<webport>/agent-dvr/`.
|
|
168
|
-
|
|
169
|
-
**Features:**
|
|
170
|
-
- Live MJPEG or WebRTC stream per camera tile (configurable)
|
|
171
|
-
- Fullscreen view with PTZ overlay and record button
|
|
172
|
-
- Real-time motion (yellow border) and alert (orange border) indicators
|
|
173
|
-
- Recordings tab with grid and timeline view, search and tag filter, video player with prev/next navigation
|
|
174
|
-
- Color theming via adapter config (7 color pickers)
|
|
175
|
-
|
|
176
|
-
## go2rtc WebRTC Streams
|
|
177
|
-
|
|
178
|
-
The dashboard can use [go2rtc](https://github.com/AlexxIT/go2rtc) to display smooth WebRTC streams instead of the MJPEG fallback.
|
|
179
|
-
|
|
180
|
-
**Requirements:** go2rtc must be installed and running, with streams already configured pointing to your cameras.
|
|
181
|
-
|
|
182
|
-
**Setup:**
|
|
183
|
-
1. In the adapter config → *Live Dashboard* tab, enable **go2rtc** and enter the **go2rtc URL** (e.g. `http://192.168.1.10:1984`).
|
|
184
|
-
2. Fill in the **Stream mapping** table — one row per camera:
|
|
185
|
-
- **AgentDVR camera key**: the ioBroker data point prefix, e.g. `cam_8_Reolink` (visible in the ioBroker object tree)
|
|
186
|
-
- **go2rtc stream name**: the stream name as shown in go2rtc's web UI or `/api/streams` endpoint, e.g. `Reolink`
|
|
187
|
-
3. Save and restart the adapter. Mapped cameras show the WebRTC stream; unmapped cameras continue using MJPEG.
|
|
188
|
-
|
|
189
|
-
**How it works:** The dashboard connects via WebSocket to the ioBroker web adapter, which proxies the WebRTC signaling to go2rtc internally. This avoids browser cross-origin restrictions without any go2rtc configuration changes.
|
|
190
|
-
|
|
191
|
-
## Snapshot as Base64
|
|
192
|
-
|
|
193
|
-
The `snapshot_b64` state stores the current camera frame as a `data:image/jpeg;base64,…` string so it can be used directly in vis/vis-2 image widgets without a separate HTTP request from the browser.
|
|
194
|
-
|
|
195
|
-
**Manual refresh:** Write `true` to `<cam>.control.refreshSnapshotB64` to fetch a new frame on demand — no adapter restart required.
|
|
196
|
-
|
|
197
|
-
**Auto-refresh:** Enable *"Snapshot as Base64"* in the adapter configuration to refresh automatically on every poll cycle.
|
|
330
|
+
| `overview` | string | R | HTML tile grid of all cameras |
|
|
198
331
|
|
|
199
332
|
## Changelog
|
|
200
333
|
|
|
@@ -202,6 +335,22 @@ The `snapshot_b64` state stores the current camera frame as a `data:image/jpeg;b
|
|
|
202
335
|
Placeholder for the next version (at the beginning of the line):
|
|
203
336
|
### **WORK IN PROGRESS**
|
|
204
337
|
-->
|
|
338
|
+
### 0.2.0 (2026-07-04)
|
|
339
|
+
* (ipod86) feat: dashboard camera filter badges with localStorage persistence
|
|
340
|
+
* (ipod86) feat: FLV/MP4 stream auto-reconnect after network error (5 s delay)
|
|
341
|
+
* (ipod86) feat: go2rtc WebSocket auto-reconnect after unexpected disconnect (5 s delay)
|
|
342
|
+
* (ipod86) feat: go2rtc stall detection — retry if stream stays black after 10 s
|
|
343
|
+
* (ipod86) fix: cameraStreams missing from io-package.json native defaults (settings not saved)
|
|
344
|
+
* (ipod86) fix: adminUI.config "custom" → "materialize" (404 on adapter settings page)
|
|
345
|
+
* (ipod86) fix: remove resolution overlay on FLV stream load
|
|
346
|
+
* (ipod86) fix: remove CDN fallback for flv.js — local copy only
|
|
347
|
+
* (ipod86) fix: remove AgentDVR/go2rtc section headers from dashboard grid
|
|
348
|
+
* (ipod86) fix: cfgGo2rtcMapping_tt tooltip corrected in all 11 languages
|
|
349
|
+
* (ipod86) fix: plain setTimeout() replaced by this.setTimeout() (E5005)
|
|
350
|
+
* (ipod86) fix: remove obsolete jsonConfig.json — settings handled by React admin (W5046)
|
|
351
|
+
* (ipod86) chore: exclude admin/ directory from ESLint to prevent OOM in CI
|
|
352
|
+
* (ipod86) docs: rewrite README and README.de with all tabs and settings documented
|
|
353
|
+
|
|
205
354
|
### 0.1.0 (2026-07-01)
|
|
206
355
|
* (ipod86) feat: add full i18n to live dashboard — all UI strings translated into 11 languages
|
|
207
356
|
* (ipod86) fix: add missing sm/md/lg/xl size attributes to go2rtcMapping table in jsonConfig.json (E5507)
|
|
@@ -213,30 +362,17 @@ The `snapshot_b64` state stores the current camera frame as a `data:image/jpeg;b
|
|
|
213
362
|
### 0.0.5 (2026-07-01)
|
|
214
363
|
* (ipod86) feat: go2rtc WebRTC stream integration — per-camera mapping table in admin, ioBroker WebSocket proxy to bypass browser cross-origin restrictions
|
|
215
364
|
* (ipod86) feat: auto-delete camera/microphone data points when device is removed from AgentDVR
|
|
216
|
-
* (ipod86) feat: dedicated `status.*` data points per camera
|
|
217
|
-
* (ipod86) feat:
|
|
218
|
-
* (ipod86) feat: dashboard — full color theming (7 color pickers), configurable tag-badge corner position
|
|
365
|
+
* (ipod86) feat: dedicated `status.*` data points per camera
|
|
366
|
+
* (ipod86) feat: dashboard — full color theming, configurable tag-badge corner position
|
|
219
367
|
* (ipod86) feat: dashboard — record/stop button on camera tiles and in fullscreen panel
|
|
220
|
-
* (ipod86) feat: dashboard — real-time motion
|
|
221
|
-
* (ipod86) feat: dashboard — recording timeline view
|
|
222
|
-
* (ipod86) feat: dashboard — PTZ and record buttons
|
|
223
|
-
* (ipod86) feat: dashboard — `dashBtnsVisible` setting: always show or hover-only for both PTZ and record buttons
|
|
224
|
-
* (ipod86) feat: dashboard — MJPEG streams stop on tab hide, restart on return (saves bandwidth)
|
|
225
|
-
* (ipod86) feat: dashboard — last selected camera in recordings tab persisted to localStorage
|
|
226
|
-
* (ipod86) fix: dashboard — recording prev/next navigation now follows chronological order
|
|
227
|
-
* (ipod86) fix: dashboard — PTZ button contrast improved, DL button in video modal, X button top-right
|
|
228
|
-
* (ipod86) fix: dashboard — stream reconnect after tab return no longer triggers snapshot fallback
|
|
229
|
-
* (ipod86) fix: jsonConfig header items missing required `size` property (E5512)
|
|
230
|
-
* (ipod86) fix: admin config label improvements (snapshot Base64, widget tooltips, go2rtc tooltip)
|
|
368
|
+
* (ipod86) feat: dashboard — real-time motion and alert indicators via Socket.io
|
|
369
|
+
* (ipod86) feat: dashboard — recording timeline view
|
|
370
|
+
* (ipod86) feat: dashboard — PTZ and record buttons in fullscreen panel
|
|
231
371
|
|
|
232
372
|
### 0.0.4 (2026-06-27)
|
|
233
373
|
* (ipod86) fix: snapshot_b64 role corrected to `state` (E1008)
|
|
234
374
|
* (ipod86) fix: profile selector role corrected to `level` (E1011)
|
|
235
375
|
|
|
236
|
-
### 0.0.3 (2026-06-27)
|
|
237
|
-
* (ipod86) feat: profile selector — reads profiles from getObjects, writable dropdown with active profile reflected on every poll
|
|
238
|
-
* (ipod86) feat: snapshot_b64 state (media.picture) always present per camera + manual refresh button; auto-poll optional
|
|
239
|
-
|
|
240
376
|
[Older changelog entries in CHANGELOG_OLD.md](CHANGELOG_OLD.md)
|
|
241
377
|
|
|
242
378
|
## License
|