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.de.md
CHANGED
|
@@ -4,195 +4,325 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/iobroker.agent-dvr)
|
|
5
5
|
[](https://www.npmjs.com/package/iobroker.agent-dvr)
|
|
6
6
|

|
|
7
|
-

|
|
8
|
-
|
|
9
|
-
**Tests:** 
|
|
10
7
|
|
|
11
8
|
## agent-dvr Adapter für ioBroker
|
|
12
9
|
|
|
13
|
-
Verbindet ioBroker mit [AgentDVR](https://www.ispyconnect.com): Kameras
|
|
10
|
+
Verbindet ioBroker mit [AgentDVR](https://www.ispyconnect.com): erkennt automatisch alle Kameras, spiegelt jede Geräteeigenschaft als Datenpunkt, stellt Schaltflächen für alle gängigen Befehle bereit (Aufnahme, Scharf, PTZ, …), liefert Push-getriggerte Galerie-Updates bei neuen Aufnahmen, erzeugt ein responsives HTML-Galerie-Widget pro Kamera und enthält ein eingebautes Live-Dashboard mit kameraindividueller Stream-Auswahl (MJPEG, MP4/FLV mit Ton oder go2rtc WebRTC).
|
|
14
11
|
|
|
15
12
|
## Funktionen
|
|
16
13
|
|
|
17
|
-
- Automatische Erkennung aller AgentDVR-Kameras
|
|
18
|
-
- Alle Geräteeigenschaften als
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- **
|
|
22
|
-
- **Snapshot als Base64** —
|
|
23
|
-
- PTZ-Steuerung mit
|
|
14
|
+
- Automatische Erkennung aller AgentDVR-Kameras beim Start (Mikrofone ausgenommen)
|
|
15
|
+
- Alle Geräteeigenschaften als Datenpunkte gespiegelt (aus der API flachgeklopft)
|
|
16
|
+
- Schaltflächen pro Gerät: Aufnahme, Snapshot, Erkennung, Scharf/Unscharf, Ein/Aus, Objekterkennung, Bereinigen, …
|
|
17
|
+
- Systemschaltflächen: Scharf/Unscharf, Alle Ein/Aus, Konfiguration neu laden, Speicherverwaltung, Neustart, …
|
|
18
|
+
- **Profilauswahl** — beschreibbares Dropdown, das das aktuelle AgentDVR-Profil widerspiegelt (Zuhause / Weg / Nacht / eigene)
|
|
19
|
+
- **Snapshot als Base64** — `snapshot_b64`-Zustand pro Kamera, per Schaltfläche oder automatisch bei jedem Poll aktualisierbar
|
|
20
|
+
- PTZ-Steuerung mit Halte-Schaltern (links, rechts, oben, unten, diagonal, Zoom, Stopp, Mitte)
|
|
24
21
|
- Stream-URLs pro Kamera (Snapshot, Foto, MJPEG, MP4)
|
|
25
|
-
- Push-Trigger
|
|
22
|
+
- Push-Trigger-Zustand für sofortige Skript-Reaktionen auf neue Aufnahmen
|
|
26
23
|
- HTML-Galerie-Widget pro Kamera (reines HTML/CSS oder JS-Modus mit Suche und Tag-Filter)
|
|
27
|
-
- Übersichts-Widget
|
|
28
|
-
-
|
|
24
|
+
- Übersichts-Widget, das alle Kameras in einem HTML-Zustand kombiniert
|
|
25
|
+
- **Eingebautes Live-Dashboard** unter `http://<iobroker>:<webport>/agent-dvr/` — keine zusätzliche App nötig:
|
|
26
|
+
- Kameraindividuelle Stream-Auswahl: MJPEG, MP4/FLV mit Ton oder go2rtc WebRTC/MSE
|
|
27
|
+
- Kamera-Filter-Badges zum Ein-/Ausblenden einzelner Kameras (Zustand im localStorage gespeichert)
|
|
28
|
+
- Echtzeit-Bewegungs- und Alarm-Indikatoren (gelber / oranger Kachelrahmen) via Socket.io
|
|
29
|
+
- Vollbildansicht mit PTZ-Overlay und Aufnahme-Schaltfläche
|
|
30
|
+
- Aufnahmen-Tab mit Raster- und Timeline-Ansicht, Suche, Tag-Filter und Video-Player
|
|
31
|
+
- Automatischer Reconnect für alle Stream-Typen nach Netzwerkunterbrechung oder Tab-Wechsel
|
|
32
|
+
- Farbdesign vollständig über die Adapter-Konfiguration anpassbar
|
|
29
33
|
|
|
30
34
|
## Konfiguration
|
|
31
35
|
|
|
36
|
+
### Tab: Verbindung
|
|
37
|
+
|
|
32
38
|
| Einstellung | Beschreibung | Standard |
|
|
33
39
|
|-------------|-------------|---------|
|
|
34
40
|
| AgentDVR IP | IP-Adresse des AgentDVR-Servers | — |
|
|
35
|
-
| Port | AgentDVR-Port | `8090` |
|
|
36
|
-
| Benutzername
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
|
46
|
-
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
41
|
+
| Port | AgentDVR HTTP-Port | `8090` |
|
|
42
|
+
| Benutzername | Optionaler HTTP-Basic-Auth-Benutzername | — |
|
|
43
|
+
| Passwort | Optionales HTTP-Basic-Auth-Passwort | — |
|
|
44
|
+
| Poll-Intervall (s) | Wie oft Daten von AgentDVR abgerufen werden (5–3600) | `30` |
|
|
45
|
+
| HTTP-Timeout (ms) | Timeout pro API-Anfrage (1000–30000) | `8000` |
|
|
46
|
+
|
|
47
|
+
### Tab: Funktionen
|
|
48
|
+
|
|
49
|
+
**Steuerung**
|
|
50
|
+
|
|
51
|
+
| Einstellung | Beschreibung | Standard |
|
|
52
|
+
|-------------|-------------|---------|
|
|
53
|
+
| System-Steuertasten | Scharf/Unscharf/Neustart/…-Tasten und Profilauswahl anlegen | `ja` |
|
|
54
|
+
| PTZ-Steuertasten | PTZ-Halte-Schalter pro Kamera anlegen | `ja` |
|
|
55
|
+
| Stream-URLs generieren | URL-Zustände (Snapshot, MJPEG, MP4) pro Kamera anlegen | `ja` |
|
|
56
|
+
| Snapshot als Base64 | Aktuelles Bild bei jedem Poll automatisch als Base64 speichern | `nein` |
|
|
57
|
+
|
|
58
|
+
**Ereignisse**
|
|
59
|
+
|
|
60
|
+
| Einstellung | Beschreibung | Standard |
|
|
61
|
+
|-------------|-------------|---------|
|
|
62
|
+
| Ereignis-Datenpunkte | Aufnahme-Metadaten (neuestes Ereignis, Anzahl, Tags, …) pro Kamera spiegeln | `ja` |
|
|
63
|
+
| Echtzeit-Push-Trigger | Push-Trigger-Zustand anlegen, auf den Skripte bei neuen Aufnahmen reagieren können | `ja` |
|
|
64
|
+
|
|
65
|
+
**Anzeige**
|
|
66
|
+
|
|
67
|
+
| Einstellung | Beschreibung | Standard |
|
|
68
|
+
|-------------|-------------|---------|
|
|
69
|
+
| Übersichts-Widget | Einen HTML-Zustand mit allen Kamerakacheln zusammengefasst anlegen | `ja` |
|
|
70
|
+
|
|
71
|
+
**Debug**
|
|
72
|
+
|
|
73
|
+
| Einstellung | Beschreibung | Standard |
|
|
74
|
+
|-------------|-------------|---------|
|
|
75
|
+
| Rohe API-JSON speichern | Die vollständige getObjects-Antwort unter `system.raw_getObjects` ablegen | `nein` |
|
|
76
|
+
|
|
77
|
+
### Tab: Dashboard
|
|
78
|
+
|
|
79
|
+
**Standardansicht**
|
|
80
|
+
|
|
81
|
+
| Einstellung | Beschreibung | Standard |
|
|
82
|
+
|-------------|-------------|---------|
|
|
83
|
+
| Standardansicht | Welcher Tab beim Öffnen des Dashboards aktiv ist: Live oder Aufnahmen | `Live` |
|
|
84
|
+
| Offline-Kameras anzeigen | Kamerakacheln auch dann anzeigen, wenn die Kamera offline ist | `ja` |
|
|
85
|
+
|
|
86
|
+
**Kameraraster**
|
|
87
|
+
|
|
88
|
+
| Einstellung | Beschreibung | Standard |
|
|
89
|
+
|-------------|-------------|---------|
|
|
90
|
+
| Spalten | Anzahl der Rasterspalten (0 = automatisch anhand der Kachelbreite) | `0` |
|
|
91
|
+
| Buttons immer sichtbar | Aufnahme-/PTZ-Tasten dauerhaft anzeigen statt nur beim Hover | `nein` |
|
|
92
|
+
| Tag-Badge Position | Ecke, in der das Kamera-Namens-Badge auf der Kachel erscheint | `unten rechts` |
|
|
93
|
+
|
|
94
|
+
**Stream**
|
|
95
|
+
|
|
96
|
+
| Einstellung | Beschreibung | Standard |
|
|
97
|
+
|-------------|-------------|---------|
|
|
98
|
+
| Refresh-Intervall (s) | Wie oft das Dashboard Kameradaten neu lädt (10–600) | `60` |
|
|
99
|
+
| Automatisch wiederverbinden | MJPEG-, MP4/FLV- und go2rtc-Streams bei Fehler oder Tab-Wechsel automatisch neu verbinden | `ja` |
|
|
100
|
+
|
|
101
|
+
**Farbdesign** — 7 Farbfelder zur Anpassung der Oberfläche:
|
|
102
|
+
|
|
103
|
+
| Einstellung | Beschreibung |
|
|
104
|
+
|-------------|-------------|
|
|
105
|
+
| Hintergrund | Seiten-/Raster-Hintergrundfarbe |
|
|
106
|
+
| Kachel (Surface) | Hintergrundfarbe der Kamerakacheln |
|
|
107
|
+
| Akzent | Hervorhebungs- / aktive Elementfarbe |
|
|
108
|
+
| Text | Primäre Textfarbe |
|
|
109
|
+
| Rahmen | Rahmenfarbe der Kacheln |
|
|
110
|
+
| Online-Indikator | Farbe des Online-Statuspunkts |
|
|
111
|
+
| Offline-Indikator | Farbe des Offline-Statuspunkts |
|
|
112
|
+
|
|
113
|
+
**Stream-Zuweisung**
|
|
114
|
+
|
|
115
|
+
Hier wird jeder Kamera individuell eine Stream-Quelle zugewiesen. Das Dropdown listet alle von AgentDVR erkannten Kameras (Mikrofone werden nicht angezeigt).
|
|
116
|
+
|
|
117
|
+
| Option | Beschreibung |
|
|
118
|
+
|--------|-------------|
|
|
119
|
+
| MJPEG *(AgentDVR)* | Klassischer MJPEG-Stream von AgentDVR — geringste Latenz, kein Ton |
|
|
120
|
+
| MP4 / FLV mit Ton *(AgentDVR)* | FLV-Stream über ioBroker proxied mit flv.js — inklusive Ton, korrektes Seitenverhältnis |
|
|
121
|
+
| *Streamname* *(go2rtc)* | WebRTC/MSE-Stream von go2rtc — flüssig, geringe Latenz, Ton-Unterstützung |
|
|
122
|
+
|
|
123
|
+
Die go2rtc-Streamnamen werden automatisch vom go2rtc-Server abgerufen, wenn das Admin-UI geöffnet ist. Falls der Browser go2rtc nicht direkt erreichen kann (z. B. Mixed-Content bei HTTPS), holt der Adapter sie serverseitig als Fallback.
|
|
124
|
+
|
|
125
|
+
**go2rtc-URL** *(erscheint nur, wenn mindestens eine Kamera einen go2rtc-Stream nutzt)*
|
|
126
|
+
|
|
127
|
+
| Einstellung | Beschreibung | Beispiel |
|
|
128
|
+
|-------------|-------------|---------|
|
|
129
|
+
| go2rtc-URL | Basis-URL der go2rtc-Instanz | `http://192.168.1.10:1984` |
|
|
130
|
+
|
|
131
|
+
> **Hinweis:** go2rtc muss bereits installiert und die Streams dort konfiguriert sein. Der Adapter liest nur die Stream-Liste und proxied den WebSocket — er konfiguriert go2rtc nicht.
|
|
132
|
+
|
|
133
|
+
### Tab: Widget (Galerie-Widget pro Kamera)
|
|
134
|
+
|
|
135
|
+
**Allgemein**
|
|
136
|
+
|
|
137
|
+
| Einstellung | Beschreibung | Standard |
|
|
138
|
+
|-------------|-------------|---------|
|
|
139
|
+
| Widget aktivieren | HTML-Galerie-Widget pro Kamera erzeugen | `ja` |
|
|
140
|
+
| Widget-Modus | `Kein JS` — reines HTML/CSS, überall einbettbar; `JS` — vollständige Interaktivität mit Suche und Tag-Filter | `Kein JS` |
|
|
141
|
+
|
|
142
|
+
**Layout**
|
|
143
|
+
|
|
144
|
+
| Einstellung | Beschreibung | Standard |
|
|
145
|
+
|-------------|-------------|---------|
|
|
146
|
+
| Max. Einträge | Maximale Anzahl der im Widget angezeigten Aufnahmen | `20` |
|
|
147
|
+
| Min. Spaltenbreite (px) | Mindestbreite einer Thumbnail-Spalte | `150` |
|
|
148
|
+
| Max. Modal-Breite (px) | Maximale Breite des Video-Wiedergabe-Modals | `900` |
|
|
149
|
+
|
|
150
|
+
**Tags**
|
|
151
|
+
|
|
152
|
+
| Einstellung | Beschreibung | Standard |
|
|
153
|
+
|-------------|-------------|---------|
|
|
154
|
+
| Tags anzeigen | Aufnahme-Tags auf jedem Thumbnail anzeigen | `ja` |
|
|
155
|
+
| Tag-Badge Position | Ecke, in der Tags auf dem Thumbnail erscheinen | `unten links` |
|
|
156
|
+
|
|
157
|
+
**Filter**
|
|
158
|
+
|
|
159
|
+
| Einstellung | Beschreibung | Standard |
|
|
160
|
+
|-------------|-------------|---------|
|
|
161
|
+
| Neueste zuerst | Aufnahmen absteigend nach Datum sortieren | `ja` |
|
|
162
|
+
| Suche anzeigen | Textsuchfeld im JS-Modus einblenden | `nein` |
|
|
163
|
+
| Kompakt-Modus | Dichteres Layout mit kleineren Thumbnails | `nein` |
|
|
164
|
+
| Standard-Tag | Diesen Tag-Filter beim Laden des Widgets vorauswählen | — |
|
|
165
|
+
| Vorschaugröße | `Klein` / `Mittel` / `Groß` | `Mittel` |
|
|
166
|
+
|
|
167
|
+
**Player**
|
|
168
|
+
|
|
169
|
+
| Einstellung | Beschreibung | Standard |
|
|
170
|
+
|-------------|-------------|---------|
|
|
171
|
+
| Live-Seitenverhältnis | Seitenverhältnis der Live-Vorschau, z. B. `16/9` | — |
|
|
172
|
+
| Player-URL | Benutzerdefinierte URL für den Video-Player im Widget | — |
|
|
173
|
+
|
|
174
|
+
**Farbdesign** — 5 Farbfelder + Border-Radius:
|
|
175
|
+
|
|
176
|
+
| Einstellung | Beschreibung |
|
|
177
|
+
|-------------|-------------|
|
|
178
|
+
| Karten-Hintergrund | Hintergrundfarbe der Widget-Karten |
|
|
179
|
+
| Tag-Hintergrund | Hintergrundfarbe der Tag-Chips |
|
|
180
|
+
| Tag-Text | Textfarbe der Tag-Chips |
|
|
181
|
+
| Akzent | Hervorhebungsfarbe |
|
|
182
|
+
| Modal-Hintergrund | Hintergrundfarbe des Video-Modals |
|
|
183
|
+
| Border-Radius (px) | Abrundungsradius der Kartenecken | `4` |
|
|
184
|
+
|
|
185
|
+
### Tab: Erweitert
|
|
186
|
+
|
|
187
|
+
| Einstellung | Beschreibung | Standard |
|
|
188
|
+
|-------------|-------------|---------|
|
|
189
|
+
| Max. Rekursionstiefe | Wie viele Ebenen tief das API-JSON in Datenpunkte umgewandelt wird (1–10) | `6` |
|
|
190
|
+
| Max. Array-Einträge | Maximale Anzahl der gespiegelten Array-Elemente pro Eigenschaft (1–500) | `30` |
|
|
191
|
+
| Tags dynamisch | Für jeden eindeutigen Aufnahme-Tag automatisch einen Datenpunkt anlegen | `nein` |
|
|
192
|
+
| Tags ignorieren (kommagetrennt) | Aufnahme-Tags, die bei Ereignis-Datenpunkten ausgeschlossen werden | — |
|
|
193
|
+
| Tag-Filter (kommagetrennt) | Nur Aufnahmen mit diesen Tags als Ereignis-Datenpunkte anlegen | — |
|
|
194
|
+
|
|
195
|
+
## Live-Dashboard
|
|
196
|
+
|
|
197
|
+
Das eingebaute Live-Dashboard ist erreichbar unter `http://<iobroker>:<webport>/agent-dvr/`.
|
|
198
|
+
|
|
199
|
+
**Funktionen:**
|
|
200
|
+
- Kameraindividuelle Stream-Auswahl: MJPEG, MP4/FLV mit Ton (via flv.js) oder go2rtc WebRTC/MSE
|
|
201
|
+
- Kamera-Filter-Badges — per Klick einzelne Kameras ein-/ausblenden; Zustand wird im localStorage gespeichert
|
|
202
|
+
- Vollbildansicht mit PTZ-Overlay und Aufnahme-Schaltfläche
|
|
203
|
+
- Echtzeit-Bewegungs- (gelber Rahmen) und Alarm-Indikatoren (oranger Rahmen) via Socket.io
|
|
204
|
+
- Automatischer Reconnect: MJPEG und FLV bei Fehler; go2rtc bei unerwartetem WebSocket-Close oder 10 s ohne Bild
|
|
205
|
+
- Aufnahmen-Tab mit Raster- und Timeline-Ansicht, Suche und Tag-Filter, Video-Player mit Vor-/Zurück-Navigation
|
|
206
|
+
- Farbdesign über die Adapter-Konfiguration einstellbar
|
|
207
|
+
|
|
208
|
+
### go2rtc WebRTC-Streams
|
|
209
|
+
|
|
210
|
+
[go2rtc](https://github.com/AlexxIT/go2rtc) liefert flüssige, latenzarme WebRTC/MSE-Streams mit Ton.
|
|
211
|
+
|
|
212
|
+
**Einrichtung:**
|
|
213
|
+
1. go2rtc installieren und starten, Kamera-Streams in der go2rtc-Konfiguration einrichten.
|
|
214
|
+
2. Im Adapter-Admin → Tab *Dashboard* → *Stream-Zuweisung* für jede Kamera den gewünschten go2rtc-Streamnamen aus dem Dropdown wählen.
|
|
215
|
+
3. Die **go2rtc-URL** eintragen, die unterhalb der Tabelle erscheint (z. B. `http://192.168.1.10:1984`).
|
|
216
|
+
4. Speichern und Adapter neu starten. Der Adapter proxied den WebSocket-Traffic über ioBroker, um Browser-CORS-Probleme zu umgehen.
|
|
51
217
|
|
|
52
218
|
## Datenpunkte
|
|
53
219
|
|
|
54
|
-
|
|
220
|
+
`<cam>` steht für `cam_<oid>_<name>`, z. B. `cam_8_Reolink`.
|
|
55
221
|
|
|
56
222
|
### System
|
|
57
223
|
|
|
58
224
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
59
225
|
|-----------|-----|-----|-------------|
|
|
60
|
-
| `system.online` | boolean | R | Verbindung zu AgentDVR
|
|
61
|
-
| `system.lastUpdate` | string | R | ISO-Zeitstempel
|
|
62
|
-
| `system.lastPoll` | number | R | Unix-Zeitstempel
|
|
226
|
+
| `system.online` | boolean | R | Verbindung zu AgentDVR aktiv |
|
|
227
|
+
| `system.lastUpdate` | string | R | ISO-Zeitstempel des letzten erfolgreichen Polls |
|
|
228
|
+
| `system.lastPoll` | number | R | Unix-Zeitstempel des letzten Polls |
|
|
63
229
|
| `system.cameraCount` | number | R | Anzahl erkannter Kameras |
|
|
64
230
|
| `system.disk_free_gb` | number | R | Freier Speicherplatz in GB |
|
|
65
|
-
| `system.settings.*` |
|
|
66
|
-
| `system.stats.*` |
|
|
67
|
-
| `system.status.*` |
|
|
68
|
-
| `system.raw_getObjects` | string | R |
|
|
231
|
+
| `system.settings.*` | verschieden | R | Flachgeklopfte AgentDVR-Servereinstellungen |
|
|
232
|
+
| `system.stats.*` | verschieden | R | CPU-/RAM-/Festplatten-Statistiken |
|
|
233
|
+
| `system.status.*` | verschieden | R | Systemstatus (scharf, Geräte, Version, …) |
|
|
234
|
+
| `system.raw_getObjects` | string | R | Rohe getObjects-JSON (wenn aktiviert) |
|
|
69
235
|
|
|
70
|
-
### Systemsteuerung *(erfordert „
|
|
236
|
+
### Systemsteuerung *(erfordert „System-Steuertasten")*
|
|
71
237
|
|
|
72
238
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
73
239
|
|-----------|-----|-----|-------------|
|
|
74
|
-
| `system.control.arm` |
|
|
75
|
-
| `system.control.disarm` |
|
|
76
|
-
| `system.control.allOn` |
|
|
77
|
-
| `system.control.allOff` |
|
|
78
|
-
| `system.control.reloadConfig` |
|
|
79
|
-
| `system.control.reloadObjects` |
|
|
80
|
-
| `system.control.runStorageMgmt` |
|
|
81
|
-
| `system.control.blockExternal` |
|
|
82
|
-
| `system.control.unblockExternal` |
|
|
83
|
-
| `system.control.restart` |
|
|
84
|
-
| `system.control.refresh` |
|
|
85
|
-
| `system.profile.selector` | number | R/W | Aktiver
|
|
240
|
+
| `system.control.arm` | Taste | W | System scharf schalten |
|
|
241
|
+
| `system.control.disarm` | Taste | W | System unscharf schalten |
|
|
242
|
+
| `system.control.allOn` | Taste | W | Alle Geräte einschalten |
|
|
243
|
+
| `system.control.allOff` | Taste | W | Alle Geräte ausschalten |
|
|
244
|
+
| `system.control.reloadConfig` | Taste | W | AgentDVR-Konfiguration neu laden |
|
|
245
|
+
| `system.control.reloadObjects` | Taste | W | Objekte neu laden |
|
|
246
|
+
| `system.control.runStorageMgmt` | Taste | W | Speicherverwaltung ausführen |
|
|
247
|
+
| `system.control.blockExternal` | Taste | W | Externen Zugriff sperren |
|
|
248
|
+
| `system.control.unblockExternal` | Taste | W | Externen Zugriff freigeben |
|
|
249
|
+
| `system.control.restart` | Taste | W | AgentDVR neu starten |
|
|
250
|
+
| `system.control.refresh` | Taste | W | Sofortigen Poll erzwingen |
|
|
251
|
+
| `system.profile.selector` | number | R/W | Aktiver Profilindex — Dropdown (0 = Zuhause, 1 = Weg, …) |
|
|
86
252
|
| `system.profile.list` | string | R | Verfügbare Profile als JSON-Array |
|
|
87
253
|
|
|
88
|
-
### Pro Kamera
|
|
89
|
-
|
|
90
|
-
Die rohen Gerätedaten aus AgentDVR werden rekursiv gespiegelt (Tiefe konfigurierbar, Standard 6). Der wichtigste Unterordner ist `<cam>.data.*`:
|
|
254
|
+
### Pro Kamera
|
|
91
255
|
|
|
92
256
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
93
257
|
|-----------|-----|-----|-------------|
|
|
94
|
-
| `<cam>.name` | string | R |
|
|
95
|
-
| `<cam>.data.online` | boolean | R |
|
|
258
|
+
| `<cam>.name` | string | R | Kameraname |
|
|
259
|
+
| `<cam>.data.online` | boolean | R | Kamera ist online |
|
|
96
260
|
| `<cam>.data.connected` | boolean | R | Stream ist verbunden |
|
|
97
|
-
| `<cam>.data.recording` | boolean | R |
|
|
261
|
+
| `<cam>.data.recording` | boolean | R | Nimmt gerade auf |
|
|
98
262
|
| `<cam>.data.detected` | boolean | R | Bewegung/Objekt erkannt |
|
|
99
|
-
| `<cam>.data.detectorActive` | boolean | R |
|
|
100
|
-
| `<cam>.data.alertsActive` | boolean | R |
|
|
101
|
-
| `<cam>.data.alerted` | boolean | R | Alarm
|
|
263
|
+
| `<cam>.data.detectorActive` | boolean | R | Bewegungserkennung aktiv |
|
|
264
|
+
| `<cam>.data.alertsActive` | boolean | R | Alarme aktiv |
|
|
265
|
+
| `<cam>.data.alerted` | boolean | R | Alarm gerade ausgelöst |
|
|
102
266
|
| `<cam>.data.scheduleActive` | boolean | R | Zeitplan aktiv |
|
|
103
267
|
| `<cam>.data.width` / `height` | number | R | Stream-Auflösung |
|
|
104
|
-
| `<cam>.data.*` |
|
|
105
|
-
| `<cam>.snapshot_b64` | string | R | Aktuelles
|
|
106
|
-
| `<cam>.control.record` |
|
|
107
|
-
| `<cam>.control.recordStop` |
|
|
108
|
-
| `<cam>.control.recordRestart` |
|
|
109
|
-
| `<cam>.control.triggerRecord` |
|
|
110
|
-
| `<cam>.control.snapshot` |
|
|
111
|
-
| `<cam>.control.refreshSnapshotB64` |
|
|
112
|
-
| `<cam>.control.detect` |
|
|
113
|
-
| `<cam>.control.alertOn` |
|
|
114
|
-
| `<cam>.control.alertOff` |
|
|
115
|
-
| `<cam>.control.switchOn` |
|
|
116
|
-
| `<cam>.control.switchOff` |
|
|
117
|
-
| `<cam>.control.objectDetectOn` |
|
|
118
|
-
| `<cam>.control.objectDetectOff` |
|
|
119
|
-
| `<cam>.control.recOnAlert` |
|
|
120
|
-
| `<cam>.control.recOnDetect` |
|
|
121
|
-
| `<cam>.control.purge` |
|
|
122
|
-
|
|
123
|
-
### PTZ *(
|
|
268
|
+
| `<cam>.data.*` | verschieden | R | Alle weiteren Geräteeigenschaften von AgentDVR |
|
|
269
|
+
| `<cam>.snapshot_b64` | string | R | Aktuelles Bild als `data:image/jpeg;base64,…` (Rolle `media.picture`) |
|
|
270
|
+
| `<cam>.control.record` | Taste | W | Aufnahme starten |
|
|
271
|
+
| `<cam>.control.recordStop` | Taste | W | Aufnahme stoppen |
|
|
272
|
+
| `<cam>.control.recordRestart` | Taste | W | Aufnahme neu starten |
|
|
273
|
+
| `<cam>.control.triggerRecord` | Taste | W | Aufnahme auslösen (läuft bis Timeout) |
|
|
274
|
+
| `<cam>.control.snapshot` | Taste | W | AgentDVR anweisen, Snapshot auf Disk zu speichern |
|
|
275
|
+
| `<cam>.control.refreshSnapshotB64` | Taste | W | Aktuelles Bild abrufen und in `snapshot_b64` schreiben |
|
|
276
|
+
| `<cam>.control.detect` | Taste | W | Bewegungserkennung auslösen |
|
|
277
|
+
| `<cam>.control.alertOn` | Taste | W | Alarme aktivieren |
|
|
278
|
+
| `<cam>.control.alertOff` | Taste | W | Alarme deaktivieren |
|
|
279
|
+
| `<cam>.control.switchOn` | Taste | W | Kamera einschalten |
|
|
280
|
+
| `<cam>.control.switchOff` | Taste | W | Kamera ausschalten |
|
|
281
|
+
| `<cam>.control.objectDetectOn` | Taste | W | Objekterkennung einschalten |
|
|
282
|
+
| `<cam>.control.objectDetectOff` | Taste | W | Objekterkennung ausschalten |
|
|
283
|
+
| `<cam>.control.recOnAlert` | Taste | W | „Bei Alarm aufnehmen" aktivieren |
|
|
284
|
+
| `<cam>.control.recOnDetect` | Taste | W | „Bei Erkennung aufnehmen" aktivieren |
|
|
285
|
+
| `<cam>.control.purge` | Taste | W | Alle Aufnahmen dieser Kamera löschen |
|
|
286
|
+
|
|
287
|
+
### PTZ *(erfordert „PTZ-Steuertasten")*
|
|
124
288
|
|
|
125
289
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
126
290
|
|-----------|-----|-----|-------------|
|
|
127
|
-
| `<cam>.control.ptz.left` |
|
|
128
|
-
| `<cam>.control.ptz.right` |
|
|
129
|
-
| `<cam>.control.ptz.up` |
|
|
130
|
-
| `<cam>.control.ptz.down` |
|
|
131
|
-
| `<cam>.control.ptz.upLeft` |
|
|
132
|
-
| `<cam>.control.ptz.upRight` |
|
|
133
|
-
| `<cam>.control.ptz.downLeft` |
|
|
134
|
-
| `<cam>.control.ptz.downRight` |
|
|
135
|
-
| `<cam>.control.ptz.zoomIn` |
|
|
136
|
-
| `<cam>.control.ptz.zoomOut` |
|
|
137
|
-
| `<cam>.control.ptz.stop` |
|
|
138
|
-
| `<cam>.control.ptz.center` |
|
|
139
|
-
|
|
140
|
-
### Stream-URLs *(
|
|
291
|
+
| `<cam>.control.ptz.left` | Schalter | R/W | Links schwenken (halten = weiter bewegen) |
|
|
292
|
+
| `<cam>.control.ptz.right` | Schalter | R/W | Rechts schwenken |
|
|
293
|
+
| `<cam>.control.ptz.up` | Schalter | R/W | Nach oben neigen |
|
|
294
|
+
| `<cam>.control.ptz.down` | Schalter | R/W | Nach unten neigen |
|
|
295
|
+
| `<cam>.control.ptz.upLeft` | Schalter | R/W | Diagonal oben-links |
|
|
296
|
+
| `<cam>.control.ptz.upRight` | Schalter | R/W | Diagonal oben-rechts |
|
|
297
|
+
| `<cam>.control.ptz.downLeft` | Schalter | R/W | Diagonal unten-links |
|
|
298
|
+
| `<cam>.control.ptz.downRight` | Schalter | R/W | Diagonal unten-rechts |
|
|
299
|
+
| `<cam>.control.ptz.zoomIn` | Schalter | R/W | Heranzoomen |
|
|
300
|
+
| `<cam>.control.ptz.zoomOut` | Schalter | R/W | Herauszoomen |
|
|
301
|
+
| `<cam>.control.ptz.stop` | Taste | W | PTZ-Bewegung stoppen |
|
|
302
|
+
| `<cam>.control.ptz.center` | Taste | W | Mitte-/Ausgangsposition anfahren |
|
|
303
|
+
|
|
304
|
+
### Stream-URLs *(erfordert „Stream-URLs generieren")*
|
|
141
305
|
|
|
142
306
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
143
307
|
|-----------|-----|-----|-------------|
|
|
144
|
-
| `<cam>.urls.snapshot` | string | R | URL zum aktuellen JPEG-Snapshot
|
|
145
|
-
| `<cam>.urls.photo` | string | R | URL zum Foto-Endpoint
|
|
146
|
-
| `<cam>.urls.mjpeg` | string | R | URL zum MJPEG-Livestream
|
|
147
|
-
| `<cam>.urls.mp4` | string | R | URL zum MP4-Livestream
|
|
308
|
+
| `<cam>.urls.snapshot` | string | R | URL zum aktuellen JPEG-Snapshot |
|
|
309
|
+
| `<cam>.urls.photo` | string | R | URL zum Foto-Endpoint |
|
|
310
|
+
| `<cam>.urls.mjpeg` | string | R | URL zum MJPEG-Livestream |
|
|
311
|
+
| `<cam>.urls.mp4` | string | R | URL zum MP4-Livestream |
|
|
148
312
|
|
|
149
|
-
### Ereignisse / Galerie
|
|
313
|
+
### Ereignisse / Galerie
|
|
150
314
|
|
|
151
315
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
152
316
|
|-----------|-----|-----|-------------|
|
|
153
|
-
| `<cam>.events.*` |
|
|
154
|
-
| `<cam>.push` | string | R | Push-Trigger — wird
|
|
155
|
-
| `<cam>.gallery` | string | R | HTML-
|
|
317
|
+
| `<cam>.events.*` | verschieden | R | Metadaten der letzten Aufnahme — erfordert „Ereignis-Datenpunkte" |
|
|
318
|
+
| `<cam>.push` | string | R | Push-Trigger — wird bei neuer Aufnahme sofort aktualisiert — erfordert „Echtzeit-Push-Trigger" |
|
|
319
|
+
| `<cam>.gallery` | string | R | HTML-Aufnahmegalerie — erfordert „Galerie-Widget" |
|
|
156
320
|
|
|
157
321
|
### Übersicht *(erfordert „Übersichts-Widget")*
|
|
158
322
|
|
|
159
323
|
| Datenpunkt | Typ | R/W | Beschreibung |
|
|
160
324
|
|-----------|-----|-----|-------------|
|
|
161
|
-
| `overview` | string | R | HTML-Kachelraster aller Kameras
|
|
162
|
-
|
|
163
|
-
## Live-Dashboard
|
|
164
|
-
|
|
165
|
-
Der Adapter liefert ein eingebautes Live-Dashboard unter `http://<iobroker>:<webport>/agent-dvr/`.
|
|
166
|
-
|
|
167
|
-
**Funktionen:**
|
|
168
|
-
- MJPEG- oder WebRTC-Livestream pro Kachel (konfigurierbar)
|
|
169
|
-
- Vollbild-Ansicht mit PTZ-Overlay und Aufnahme-Button
|
|
170
|
-
- Echtzeit-Bewegungs- (gelber Rahmen) und Alert-Indikator (oranger Rahmen)
|
|
171
|
-
- Aufnahmen-Tab mit Raster- und Timeline-Ansicht, Suche und Tag-Filter, Video-Player mit Vor/Zurück-Navigation
|
|
172
|
-
- Farbthema über Adapter-Konfiguration (7 Color-Picker)
|
|
173
|
-
|
|
174
|
-
## go2rtc WebRTC-Streams
|
|
175
|
-
|
|
176
|
-
Das Dashboard kann [go2rtc](https://github.com/AlexxIT/go2rtc) nutzen, um flüssige WebRTC-Streams statt des MJPEG-Fallbacks anzuzeigen.
|
|
177
|
-
|
|
178
|
-
**Voraussetzung:** go2rtc muss installiert und gestartet sein, mit bereits konfigurierten Streams für die Kameras.
|
|
179
|
-
|
|
180
|
-
**Einrichtung:**
|
|
181
|
-
1. In der Adapter-Konfiguration → Tab *Live-Dashboard*: **go2rtc aktivieren** und die **go2rtc URL** eintragen (z.B. `http://192.168.1.10:1984`).
|
|
182
|
-
2. Die **Stream-Mapping**-Tabelle befüllen — eine Zeile pro Kamera:
|
|
183
|
-
- **AgentDVR Kamera-Key**: der ioBroker-Datenpunkt-Präfix, z.B. `cam_8_Reolink` (im ioBroker-Objektbaum sichtbar)
|
|
184
|
-
- **go2rtc Stream-Name**: der Stream-Name wie in der go2rtc-Oberfläche oder unter `/api/streams`, z.B. `Reolink`
|
|
185
|
-
3. Speichern und Adapter neu starten. Gemappte Kameras zeigen den WebRTC-Stream; nicht gemappte Kameras verwenden weiterhin MJPEG.
|
|
186
|
-
|
|
187
|
-
**Funktionsweise:** Das Dashboard verbindet sich per WebSocket mit dem ioBroker-Webadapter, der die WebRTC-Signalisierung intern an go2rtc weiterleitet. Damit werden Browser-Cross-Origin-Beschränkungen umgangen, ohne go2rtc konfigurieren zu müssen.
|
|
188
|
-
|
|
189
|
-
## Snapshot als Base64
|
|
190
|
-
|
|
191
|
-
Der State `snapshot_b64` enthält das aktuelle Kamerabild als `data:image/jpeg;base64,…`-String und kann direkt in vis/vis-2-Bild-Widgets verwendet werden, ohne dass der Browser einen eigenen HTTP-Request durchführen muss.
|
|
192
|
-
|
|
193
|
-
**Manuell aktualisieren:** `true` in `<cam>.control.refreshSnapshotB64` schreiben — kein Adapter-Neustart nötig.
|
|
194
|
-
|
|
195
|
-
**Automatisch aktualisieren:** „Snapshot als Base64" in den Adapter-Einstellungen aktivieren — dann wird der State bei jedem Poll-Zyklus neu befüllt.
|
|
325
|
+
| `overview` | string | R | HTML-Kachelraster aller Kameras |
|
|
196
326
|
|
|
197
327
|
## Changelog
|
|
198
328
|
|
|
@@ -200,40 +330,26 @@ Der State `snapshot_b64` enthält das aktuelle Kamerabild als `data:image/jpeg;b
|
|
|
200
330
|
Placeholder for the next version (at the beginning of the line):
|
|
201
331
|
### **WORK IN PROGRESS**
|
|
202
332
|
-->
|
|
203
|
-
###
|
|
204
|
-
* (ipod86)
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
* (ipod86) feat: go2rtc
|
|
208
|
-
* (ipod86)
|
|
209
|
-
* (ipod86)
|
|
210
|
-
* (ipod86)
|
|
211
|
-
* (ipod86)
|
|
212
|
-
* (ipod86)
|
|
213
|
-
* (ipod86)
|
|
214
|
-
* (ipod86)
|
|
215
|
-
* (ipod86)
|
|
216
|
-
* (ipod86)
|
|
217
|
-
* (ipod86)
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
* (ipod86)
|
|
221
|
-
* (ipod86) fix:
|
|
222
|
-
* (ipod86) fix:
|
|
223
|
-
* (ipod86) fix: Admin-Config-Beschriftungen bereinigt (Snapshot Base64, Widget-Tooltips, go2rtc-Tooltip)
|
|
224
|
-
|
|
225
|
-
### 0.0.4 (2026-06-27)
|
|
226
|
-
* (ipod86) fix: DP-Rollen korrigiert: snapshot_b64 → state (E1008), Profil-Selektor → level (E1011)
|
|
227
|
-
|
|
228
|
-
### 0.0.3 (2026-06-27)
|
|
229
|
-
* (ipod86) feat: Profil-Selektor — liest Profile aus getObjects, beschreibbarer Dropdown mit aktivem Profil bei jedem Poll
|
|
230
|
-
* (ipod86) feat: snapshot_b64-State (media.picture) immer vorhanden + manueller Refresh-Button; Auto-Poll optional
|
|
231
|
-
|
|
232
|
-
### 0.0.2 (2026-06-27)
|
|
233
|
-
* (ipod86) npm Trusted Publishing eingerichtet und Repochecker-Findings behoben
|
|
234
|
-
|
|
235
|
-
### 0.0.1 (2026-06-27)
|
|
236
|
-
* (ipod86) Erstveröffentlichung
|
|
333
|
+
### **WORK IN PROGRESS**
|
|
334
|
+
* (ipod86) feat: Kamera-Filter-Badges im Dashboard mit localStorage-Persistenz
|
|
335
|
+
* (ipod86) feat: FLV/MP4-Stream automatischer Reconnect nach Netzwerkfehler (5 s Verzögerung)
|
|
336
|
+
* (ipod86) feat: go2rtc WebSocket automatischer Reconnect nach unerwartetem Verbindungsabbruch (5 s)
|
|
337
|
+
* (ipod86) feat: go2rtc Stall-Erkennung — Retry wenn Stream nach 10 s schwarz bleibt
|
|
338
|
+
* (ipod86) fix: cameraStreams fehlte in io-package.json native-Defaults (Einstellungen wurden nicht gespeichert)
|
|
339
|
+
* (ipod86) fix: adminUI.config „custom" → „materialize" (404 auf der Adapter-Einstellungsseite)
|
|
340
|
+
* (ipod86) fix: Auflösungsanzeige beim FLV-Stream-Laden entfernt
|
|
341
|
+
* (ipod86) fix: CDN-Fallback für flv.js entfernt — nur lokale Kopie
|
|
342
|
+
* (ipod86) fix: AgentDVR/go2rtc-Sektionsüberschriften aus dem Dashboard-Raster entfernt
|
|
343
|
+
* (ipod86) fix: cfgGo2rtcMapping_tt Tooltip in allen 11 Sprachen korrigiert
|
|
344
|
+
* (ipod86) fix: setTimeout() durch this.setTimeout() ersetzt (E5005)
|
|
345
|
+
* (ipod86) fix: veraltete jsonConfig.json entfernt — Einstellungen werden durch React-Admin verwaltet (W5046)
|
|
346
|
+
* (ipod86) chore: admin/-Verzeichnis aus ESLint ausgeschlossen (OOM im CI verhindert)
|
|
347
|
+
* (ipod86) docs: README und README.de vollständig neu geschrieben mit allen Tabs und Einstellungen
|
|
348
|
+
|
|
349
|
+
### 0.1.0 (2026-07-01)
|
|
350
|
+
* (ipod86) feat: vollständige i18n im Live-Dashboard — alle UI-Texte in 11 Sprachen übersetzt
|
|
351
|
+
* (ipod86) fix: fehlende sm/md/lg/xl-Größenattribute in go2rtcMapping-Tabelle ergänzt (E5507)
|
|
352
|
+
* (ipod86) fix: fehlende Admin-i18n-Keys in 9 Sprachen übersetzt (E5606)
|
|
237
353
|
|
|
238
354
|
[Ältere Changelog-Einträge in CHANGELOG_OLD.md](CHANGELOG_OLD.md)
|
|
239
355
|
|
|
@@ -242,8 +358,6 @@ MIT License
|
|
|
242
358
|
|
|
243
359
|
Copyright (c) 2026 ipod86 <david@graef.email>
|
|
244
360
|
|
|
245
|
-
Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die „Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, sie zu verwenden, zu kopieren, zu
|
|
246
|
-
|
|
247
|
-
Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.
|
|
361
|
+
Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die „Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, sie zu verwenden, zu kopieren, zu ändern, zusammenzuführen, zu veröffentlichen, zu verteilen, zu unterlizenzieren und/oder zu verkaufen, und Personen, denen diese Software überlassen wird, diese Rechte zu verschaffen, unter den folgenden Bedingungen: Der obige Urheberrechtsvermerk und dieser Erlaubnishinweis sind in allen Kopien oder Teilkopien der Software beizulegen.
|
|
248
362
|
|
|
249
|
-
DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT,
|
|
363
|
+
DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIEßLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.
|