iobroker.fakeroku 0.4.0 → 0.6.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/LICENSE +3 -2
- package/README.md +105 -40
- package/admin/fakeroku.svg +10 -0
- package/admin/i18n/de.json +26 -0
- package/admin/i18n/en.json +26 -0
- package/admin/i18n/es.json +26 -0
- package/admin/i18n/fr.json +26 -0
- package/admin/i18n/it.json +26 -0
- package/admin/i18n/nl.json +26 -0
- package/admin/i18n/pl.json +26 -0
- package/admin/i18n/pt.json +26 -0
- package/admin/i18n/ru.json +26 -0
- package/admin/i18n/uk.json +26 -0
- package/admin/i18n/zh-cn.json +26 -0
- package/admin/jsonConfig.json +89 -0
- package/build/device-management.js +268 -0
- package/build/device-management.js.map +7 -0
- package/build/discovery/ssdp-messages.js +72 -0
- package/build/discovery/ssdp-messages.js.map +7 -0
- package/build/discovery/ssdp-responder.js +120 -0
- package/build/discovery/ssdp-responder.js.map +7 -0
- package/build/ecp/device-info.js +121 -0
- package/build/ecp/device-info.js.map +7 -0
- package/build/ecp/ecp-command.js +55 -0
- package/build/ecp/ecp-command.js.map +7 -0
- package/build/ecp/ecp-http-server.js +132 -0
- package/build/ecp/ecp-http-server.js.map +7 -0
- package/build/ecp/lan-guard.js +50 -0
- package/build/ecp/lan-guard.js.map +7 -0
- package/build/ecp/state-model.js +102 -0
- package/build/ecp/state-model.js.map +7 -0
- package/build/lib/detect-ip.js +45 -0
- package/build/lib/detect-ip.js.map +7 -0
- package/build/lib/device-identity.js +32 -0
- package/build/lib/device-identity.js.map +7 -0
- package/build/lib/i18n.js +32 -0
- package/build/lib/i18n.js.map +7 -0
- package/build/lib/object-cleanup.js +51 -0
- package/build/lib/object-cleanup.js.map +7 -0
- package/build/lib/pure-helpers.js +37 -0
- package/build/lib/pure-helpers.js.map +7 -0
- package/build/main.js +271 -0
- package/build/main.js.map +7 -0
- package/io-package.json +63 -51
- package/package.json +58 -24
- package/.github/auto-merge.yml +0 -17
- package/.github/copilot-instructions.md +0 -917
- package/.github/dependabot.yml +0 -20
- package/.github/workflows/automerge-dependabot.yml +0 -35
- package/.github/workflows/check-copilot-template.yml +0 -194
- package/.github/workflows/dependabot-auto-merge.yml.OLD +0 -27
- package/.github/workflows/test-and-release.yml +0 -97
- package/.mocharc.json +0 -5
- package/.releaseconfig.json +0 -3
- package/CHANGELOG_OLD.md +0 -6
- package/admin/index.html +0 -142
- package/main.js +0 -442
package/LICENSE
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
4
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2017-2023 Pmant <patrickmo@gmx.de>
|
|
4
|
+
Copyright (c) 2023-2026 iobroker-community-adapters <iobroker-community-adapters@gmx.de>
|
|
5
|
+
Copyright (c) 2026 krobi <krobi@power-dreams.com>
|
|
5
6
|
|
|
6
7
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
8
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -1,60 +1,121 @@
|
|
|
1
|
-
|
|
2
|
-
# ioBroker.fakeroku
|
|
1
|
+
# <img src="https://cdn.jsdelivr.net/gh/iobroker-community-adapters/ioBroker.fakeroku@master/admin/fakeroku.svg" width="48" align="top" /> ioBroker.fakeroku
|
|
3
2
|
|
|
4
|
-

|
|
3
|
+
**Release:** [](https://www.npmjs.com/package/iobroker.fakeroku)   [](https://www.npmjs.com/package/iobroker.fakeroku)
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
**Build:** [](https://github.com/iobroker-community-adapters/ioBroker.fakeroku/actions/workflows/test-and-release.yml)   [](LICENSE)
|
|
6
|
+
|
|
7
|
+
**Support:** [](https://ko-fi.com/krobipd) [](https://paypal.me/krobipd)
|
|
8
|
+
|
|
9
|
+
Emulates one or more **Roku devices** on your LAN so that ECP/SSDP remotes — a
|
|
10
|
+
Logitech Harmony Hub or a Sofabaton X1/X2 — can trigger events in
|
|
11
|
+
ioBroker. It is the **input** counterpart to the Logitech Harmony adapter: a button
|
|
12
|
+
on the remote becomes a datapoint in ioBroker.
|
|
13
|
+
|
|
14
|
+
Unlike the classic fake-Roku, this build answers the full Roku control surface
|
|
15
|
+
including `/query/device-info` with a **current** Roku version, so it works beyond a
|
|
16
|
+
classic Harmony hub.
|
|
17
|
+
|
|
18
|
+
> **The official Roku mobile app is not supported.** It drives Rokus over Roku's
|
|
19
|
+
> proprietary, undocumented ECP-2 WebSocket channel, which this emulator does not
|
|
20
|
+
> implement. Use a Harmony hub or a Sofabaton — those speak the classic ECP this
|
|
21
|
+
> adapter serves.
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
- Emulates one or more Roku devices on the LAN — the Roku control protocol (ECP) over HTTP plus SSDP discovery on port 1900.
|
|
26
|
+
- Full Roku control surface including `/query/device-info` with a current Roku version, beyond what a classic Harmony hub needs.
|
|
27
|
+
- Clean data model per device: a `command` datapoint plus fixed `keys.<Key>` states, all created up front.
|
|
28
|
+
- Several emulated Rokus from a single instance; discovery bound to the chosen network interface; command handling restricted to the LAN.
|
|
29
|
+
|
|
30
|
+
## Requirements
|
|
31
|
+
|
|
32
|
+
- Node.js >= 22
|
|
33
|
+
- js-controller >= 7.2.2
|
|
34
|
+
- admin >= 7.8.23
|
|
9
35
|
|
|
10
36
|
## Installation
|
|
11
|
-
Intall Adapter in ioBroker Admin
|
|
12
37
|
|
|
13
|
-
|
|
38
|
+
Install the adapter from the ioBroker admin.
|
|
14
39
|
|
|
15
|
-
|
|
16
|
-
- ***LAN-IP*** needs to be the network IP of your ioBroker device
|
|
17
|
-
- ***Multicast IP*** only change this if you know what you are doing
|
|
18
|
-
- ***Roku devices*** add / change / delete devices to emulate
|
|
40
|
+
## Configuration
|
|
19
41
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
- **Network interface** — the network card the emulated Rokus bind to and advertise
|
|
43
|
+
on. Leave it on "all interfaces" and the adapter runs out of the box — it detects
|
|
44
|
+
the routable IP automatically. Pick a specific address only on a host with several
|
|
45
|
+
network cards.
|
|
46
|
+
- **Emulated Roku devices** — managed as cards: **+ Add** opens a dialog with a
|
|
47
|
+
**name**, an **ECP port** (`8060` the real Roku port; a free one is pre-selected,
|
|
48
|
+
and the dialog refuses a name or port already in use) and a **type**. You can
|
|
49
|
+
emulate several Rokus from one instance — each needs its own port.
|
|
50
|
+
- **Type** — *Player* (default) exposes the 16 standard navigation and playback keys;
|
|
51
|
+
*TV* additionally exposes volume, power, channel and input keys. Choose *TV* only if
|
|
52
|
+
you want those extra keys as ioBroker triggers.
|
|
24
53
|
|
|
25
|
-
|
|
26
|
-
|
|
54
|
+
To add the emulated Roku to a Harmony hub, add a "Roku" device in the Harmony app
|
|
55
|
+
and point it at the ioBroker host.
|
|
27
56
|
|
|
28
|
-
##
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- (
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
- (mcm1957) Dependencies have been updated
|
|
57
|
+
## Objects
|
|
58
|
+
|
|
59
|
+
For every emulated Roku (`fakeroku.0.<name>`):
|
|
60
|
+
|
|
61
|
+
| Datapoint | Type | Meaning |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `.command` | string, read-only | The last command as plain text (`Home`, `Lit_a`, `launch:12`, `search:news`). One datapoint for everything — no object-per-character sprawl. |
|
|
64
|
+
| `.commandType` | string, read-only | `keypress` / `keydown` / `keyup` / `launch` / `install` / `input` / `search`. |
|
|
65
|
+
| `.keys.<Key>` | boolean, read-only | One state per remote key the device type exposes — a *Player* has the 16 navigation/playback keys, a *TV* adds Volume\*, Power, Channel\*, HDMI/AV inputs — all created up front. A keypress pulses it `true` for a moment; keydown/keyup hold it. |
|
|
38
66
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* (mcm1957) Dependencies have been updated
|
|
67
|
+
Free keyboard input (`Lit_x`) and app launches show up in `.command` only — they do
|
|
68
|
+
not get their own objects.
|
|
42
69
|
|
|
43
|
-
|
|
44
|
-
|
|
70
|
+
> Note: the Roku remote sends the **same** `Play` command for play and pause, so
|
|
71
|
+
> play and pause cannot be told apart here — that is a protocol limitation, not an
|
|
72
|
+
> adapter one.
|
|
45
73
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
74
|
+
## Usage
|
|
75
|
+
|
|
76
|
+
In a script or Blockly rule, react to a key — e.g. when `fakeroku.0.<name>.keys.Play`
|
|
77
|
+
becomes `true`, or watch `.command` for the last button as text.
|
|
49
78
|
|
|
50
|
-
|
|
51
|
-
|
|
79
|
+
## Changelog
|
|
80
|
+
<!--
|
|
81
|
+
Placeholder for the next version (at the beginning of the line):
|
|
82
|
+
### **WORK IN PROGRESS**
|
|
83
|
+
-->
|
|
84
|
+
### 0.6.0 (2026-08-05)
|
|
85
|
+
- Complete rewrite. The adapter now answers the full Roku control surface — including device-info with a current Roku version — so Logitech Harmony and Sofabaton remotes pair and work reliably.
|
|
86
|
+
- Works out of the box: it detects the network address to advertise on its own, no manual interface picking.
|
|
87
|
+
- Manage multiple emulated Rokus from the admin UI, each as a Player or a TV.
|
|
88
|
+
- Cleaner object tree — one datapoint per remote button with the correct types, plus a last-command datapoint; leftover objects from older versions are removed on start.
|
|
89
|
+
|
|
90
|
+
### 0.5.1 (2026-08-05)
|
|
91
|
+
- Adapter requires Node.js >= 22 now
|
|
92
|
+
- Dependencies have been updated
|
|
93
|
+
|
|
94
|
+
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
95
|
+
|
|
96
|
+
## History
|
|
97
|
+
|
|
98
|
+
fakeroku has a long lineage on ioBroker, and this version continues it — for existing
|
|
99
|
+
users it is simply a new version of the same adapter:
|
|
100
|
+
|
|
101
|
+
- **[Pmant](https://github.com/Pmant)** created fakeroku in 2017 and built the original
|
|
102
|
+
Roku emulation: SSDP discovery, the ECP surface and multi-device support.
|
|
103
|
+
- **[Apollon77](https://github.com/Apollon77)** kept the test and build tooling current
|
|
104
|
+
over the following years.
|
|
105
|
+
- The **[ioBroker Community Adapters](https://github.com/iobroker-community-adapters)**
|
|
106
|
+
team — notably [mcm1957](https://github.com/mcm1957) and
|
|
107
|
+
[foxriver76](https://github.com/foxriver76) — maintained and modernized the adapter
|
|
108
|
+
from 2023 to 2026, releasing versions up to 0.5.1.
|
|
109
|
+
- From **0.6.0** on, [krobi](https://github.com/krobipd) rewrote the adapter from the
|
|
110
|
+
ground up in TypeScript and added the full ECP surface including `device-info`.
|
|
52
111
|
|
|
53
112
|
## License
|
|
113
|
+
|
|
54
114
|
The MIT License (MIT)
|
|
55
115
|
|
|
56
|
-
Copyright (c)
|
|
57
|
-
Copyright (c)
|
|
116
|
+
Copyright (c) 2017-2023 Pmant <patrickmo@gmx.de>
|
|
117
|
+
Copyright (c) 2023-2026 iobroker-community-adapters <iobroker-community-adapters@gmx.de>
|
|
118
|
+
Copyright (c) 2026 krobi <krobi@power-dreams.com>
|
|
58
119
|
|
|
59
120
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
60
121
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -73,3 +134,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
73
134
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
74
135
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
75
136
|
THE SOFTWARE.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
_Developed with assistance from Claude.ai_
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="ioBroker fakeroku">
|
|
2
|
+
<rect width="512" height="512" rx="104" fill="#6A1B9A"/>
|
|
3
|
+
<rect x="184" y="80" width="144" height="352" rx="52" fill="#ffffff"/>
|
|
4
|
+
<circle cx="256" cy="198" r="30" fill="#6A1B9A"/>
|
|
5
|
+
<circle cx="256" cy="146" r="9" fill="#6A1B9A"/>
|
|
6
|
+
<circle cx="256" cy="250" r="9" fill="#6A1B9A"/>
|
|
7
|
+
<circle cx="204" cy="198" r="9" fill="#6A1B9A"/>
|
|
8
|
+
<circle cx="308" cy="198" r="9" fill="#6A1B9A"/>
|
|
9
|
+
<polygon points="240,302 240,354 288,328" fill="#6A1B9A"/>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Netzwerk",
|
|
3
|
+
"networkInterface": "Netzwerkschnittstelle (Binden + Ankündigen)",
|
|
4
|
+
"networkInterfaceTooltip": "Die Netzwerkkarte, an die sich die emulierten Rokus binden und über die sie sich ankündigen. Auf 'alle Schnittstellen' lassen — die passende IP wird automatisch erkannt, es läuft also ohne Einstellung. Nur bei mehreren Netzwerkkarten eine feste Adresse wählen.",
|
|
5
|
+
"headerDevices": "Emulierte Roku-Geräte",
|
|
6
|
+
"devicesHelp": "Jede Karte ist ein emulierter Roku. Lege einen an, dann füge in deiner Harmony- oder Sofabaton-App ein **Roku**-Gerät hinzu, das auf diesen ioBroker-Host zeigt — jeder Tastendruck landet in den Objekten des Geräts.",
|
|
7
|
+
"deviceName": "Name",
|
|
8
|
+
"devicePort": "ECP-Port",
|
|
9
|
+
"portLabel": "Port",
|
|
10
|
+
"devicePortHint": "Der ECP-Port, auf dem dieser Roku antwortet. Jeder emulierte Roku braucht einen eigenen Port — nicht doppelt vergeben. Standard 8060 (der echte Roku-Port).",
|
|
11
|
+
"deviceTypeLabel": "Typ",
|
|
12
|
+
"deviceTypePlayer": "Player (Streaming-Box)",
|
|
13
|
+
"deviceTypeTv": "TV (mit Lautstärke, Power, Kanal, Eingang)",
|
|
14
|
+
"deviceTypeHint": "„Player“ bietet die 16 Standard-Fernbedienungstasten. „TV“ zusätzlich Lautstärke-, Power-, Kanal- und Eingangstasten.",
|
|
15
|
+
"dmAdd": "Roku-Gerät hinzufügen",
|
|
16
|
+
"dmEdit": "Bearbeiten",
|
|
17
|
+
"dmDelete": "Löschen",
|
|
18
|
+
"dmEditTitle": "Roku-Gerät bearbeiten",
|
|
19
|
+
"dmDeleteConfirm": "Das Roku-Gerät „%s“ löschen?",
|
|
20
|
+
"deviceNameInUse": "Dieser Name wird bereits von einem anderen Gerät verwendet.",
|
|
21
|
+
"devicePortInUse": "Dieser Port wird bereits von einem anderen Roku verwendet.",
|
|
22
|
+
"supportHeader": "Unterstützen",
|
|
23
|
+
"aboutInfo": "Wenn dir dieser Adapter nützt, hilft eine kleine Spende, ihn zu pflegen — danke!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Network",
|
|
3
|
+
"networkInterface": "Network interface (bind + advertise)",
|
|
4
|
+
"networkInterfaceTooltip": "The network card the emulated Rokus bind to and advertise on. Leave it on 'all interfaces' — the routable IP is detected automatically, so it works out of the box. Only pick a specific address on a host with several network cards.",
|
|
5
|
+
"headerDevices": "Emulated Roku devices",
|
|
6
|
+
"devicesHelp": "Each card is one emulated Roku. Add one, then add a **Roku** device in your Harmony or Sofabaton app pointing at this ioBroker host — every keypress lands in the device's objects.",
|
|
7
|
+
"deviceName": "Name",
|
|
8
|
+
"devicePort": "ECP port",
|
|
9
|
+
"portLabel": "Port",
|
|
10
|
+
"devicePortHint": "The ECP port this Roku answers on. Each emulated Roku needs its own port — do not reuse one. Default 8060 (the real Roku port).",
|
|
11
|
+
"deviceTypeLabel": "Type",
|
|
12
|
+
"deviceTypePlayer": "Player (streaming box)",
|
|
13
|
+
"deviceTypeTv": "TV (adds volume, power, channel, input)",
|
|
14
|
+
"deviceTypeHint": "\"Player\" exposes the 16 standard remote keys. \"TV\" additionally exposes volume, power, channel and input keys.",
|
|
15
|
+
"dmAdd": "Add Roku device",
|
|
16
|
+
"dmEdit": "Edit",
|
|
17
|
+
"dmDelete": "Delete",
|
|
18
|
+
"dmEditTitle": "Edit Roku device",
|
|
19
|
+
"dmDeleteConfirm": "Delete the Roku device \"%s\"?",
|
|
20
|
+
"deviceNameInUse": "This name is already used by another device.",
|
|
21
|
+
"devicePortInUse": "This port is already used by another Roku.",
|
|
22
|
+
"supportHeader": "Support",
|
|
23
|
+
"aboutInfo": "If this adapter is useful to you, a small donation helps keep it maintained — thank you!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Red",
|
|
3
|
+
"networkInterface": "Interfaz de red (enlace + anuncio)",
|
|
4
|
+
"networkInterfaceTooltip": "La tarjeta de red a la que se enlazan y anuncian los Roku emulados. Déjala en 'todas las interfaces': la IP enrutable se detecta automáticamente y funciona sin configurar. Elige una dirección concreta solo en un host con varias tarjetas de red.",
|
|
5
|
+
"headerDevices": "Dispositivos Roku emulados",
|
|
6
|
+
"devicesHelp": "Cada tarjeta es un Roku emulado. Añade uno y luego añade un dispositivo **Roku** en tu app Harmony o Sofabaton apuntando a este host de ioBroker — cada pulsación llega a los objetos del dispositivo.",
|
|
7
|
+
"deviceName": "Nombre",
|
|
8
|
+
"devicePort": "Puerto ECP",
|
|
9
|
+
"portLabel": "Puerto",
|
|
10
|
+
"devicePortHint": "El puerto ECP en el que responde este Roku. Cada Roku emulado necesita su propio puerto — no reutilices ninguno. Predeterminado 8060 (el puerto real de Roku).",
|
|
11
|
+
"deviceTypeLabel": "Tipo",
|
|
12
|
+
"deviceTypePlayer": "Player (reproductor)",
|
|
13
|
+
"deviceTypeTv": "TV (con volumen, encendido, canal, entrada)",
|
|
14
|
+
"deviceTypeHint": "«Player» expone las 16 teclas estándar del mando. «TV» añade las teclas de volumen, encendido, canal y entrada.",
|
|
15
|
+
"dmAdd": "Añadir dispositivo Roku",
|
|
16
|
+
"dmEdit": "Editar",
|
|
17
|
+
"dmDelete": "Eliminar",
|
|
18
|
+
"dmEditTitle": "Editar dispositivo Roku",
|
|
19
|
+
"dmDeleteConfirm": "¿Eliminar el dispositivo Roku «%s»?",
|
|
20
|
+
"deviceNameInUse": "Este nombre ya lo usa otro dispositivo.",
|
|
21
|
+
"devicePortInUse": "Este puerto ya lo usa otro Roku.",
|
|
22
|
+
"supportHeader": "Apoyar",
|
|
23
|
+
"aboutInfo": "Si este adaptador te resulta útil, una pequeña donación ayuda a mantenerlo — ¡gracias!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Réseau",
|
|
3
|
+
"networkInterface": "Interface réseau (liaison + annonce)",
|
|
4
|
+
"networkInterfaceTooltip": "La carte réseau à laquelle les Roku émulés se lient et s'annoncent. Laissez-la sur 'toutes les interfaces' : l'IP routable est détectée automatiquement, cela fonctionne sans réglage. Ne choisissez une adresse précise que sur un hôte avec plusieurs cartes réseau.",
|
|
5
|
+
"headerDevices": "Appareils Roku émulés",
|
|
6
|
+
"devicesHelp": "Chaque carte est un Roku émulé. Ajoutez-en un, puis ajoutez un appareil **Roku** dans votre app Harmony ou Sofabaton pointant vers cet hôte ioBroker — chaque appui atterrit dans les objets de l'appareil.",
|
|
7
|
+
"deviceName": "Nom",
|
|
8
|
+
"devicePort": "Port ECP",
|
|
9
|
+
"portLabel": "Port",
|
|
10
|
+
"devicePortHint": "Le port ECP sur lequel ce Roku répond. Chaque Roku émulé a besoin de son propre port — n'en réutilisez pas. Par défaut 8060 (le vrai port Roku).",
|
|
11
|
+
"deviceTypeLabel": "Type",
|
|
12
|
+
"deviceTypePlayer": "Player (box de streaming)",
|
|
13
|
+
"deviceTypeTv": "TV (avec volume, alimentation, chaîne, entrée)",
|
|
14
|
+
"deviceTypeHint": "« Player » expose les 16 touches standard de la télécommande. « TV » ajoute les touches volume, alimentation, chaîne et entrée.",
|
|
15
|
+
"dmAdd": "Ajouter un appareil Roku",
|
|
16
|
+
"dmEdit": "Modifier",
|
|
17
|
+
"dmDelete": "Supprimer",
|
|
18
|
+
"dmEditTitle": "Modifier l'appareil Roku",
|
|
19
|
+
"dmDeleteConfirm": "Supprimer l'appareil Roku « %s » ?",
|
|
20
|
+
"deviceNameInUse": "Ce nom est déjà utilisé par un autre appareil.",
|
|
21
|
+
"devicePortInUse": "Ce port est déjà utilisé par un autre Roku.",
|
|
22
|
+
"supportHeader": "Soutenir",
|
|
23
|
+
"aboutInfo": "Si cet adaptateur vous est utile, un petit don aide à le maintenir — merci !",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Rete",
|
|
3
|
+
"networkInterface": "Interfaccia di rete (bind + annuncio)",
|
|
4
|
+
"networkInterfaceTooltip": "La scheda di rete a cui i Roku emulati si collegano e si annunciano. Lasciala su 'tutte le interfacce': l'IP instradabile viene rilevato automaticamente e funziona senza configurazione. Scegli un indirizzo specifico solo su un host con più schede di rete.",
|
|
5
|
+
"headerDevices": "Dispositivi Roku emulati",
|
|
6
|
+
"devicesHelp": "Ogni scheda è un Roku emulato. Aggiungine uno, poi aggiungi un dispositivo **Roku** nell'app Harmony o Sofabaton che punta a questo host ioBroker — ogni pressione finisce negli oggetti del dispositivo.",
|
|
7
|
+
"deviceName": "Nome",
|
|
8
|
+
"devicePort": "Porta ECP",
|
|
9
|
+
"portLabel": "Porta",
|
|
10
|
+
"devicePortHint": "La porta ECP su cui risponde questo Roku. Ogni Roku emulato ha bisogno della propria porta — non riutilizzarne una. Predefinita 8060 (la porta reale del Roku).",
|
|
11
|
+
"deviceTypeLabel": "Tipo",
|
|
12
|
+
"deviceTypePlayer": "Player (box di streaming)",
|
|
13
|
+
"deviceTypeTv": "TV (con volume, accensione, canale, ingresso)",
|
|
14
|
+
"deviceTypeHint": "«Player» espone i 16 tasti standard del telecomando. «TV» aggiunge i tasti volume, accensione, canale e ingresso.",
|
|
15
|
+
"dmAdd": "Aggiungi dispositivo Roku",
|
|
16
|
+
"dmEdit": "Modifica",
|
|
17
|
+
"dmDelete": "Elimina",
|
|
18
|
+
"dmEditTitle": "Modifica dispositivo Roku",
|
|
19
|
+
"dmDeleteConfirm": "Eliminare il dispositivo Roku «%s»?",
|
|
20
|
+
"deviceNameInUse": "Questo nome è già usato da un altro dispositivo.",
|
|
21
|
+
"devicePortInUse": "Questa porta è già usata da un altro Roku.",
|
|
22
|
+
"supportHeader": "Sostieni",
|
|
23
|
+
"aboutInfo": "Se questo adattatore ti è utile, una piccola donazione aiuta a mantenerlo — grazie!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Netwerk",
|
|
3
|
+
"networkInterface": "Netwerkinterface (binden + aankondigen)",
|
|
4
|
+
"networkInterfaceTooltip": "De netwerkkaart waaraan de geëmuleerde Roku's zich binden en aankondigen. Laat het op 'alle interfaces' staan — het routeerbare IP wordt automatisch gedetecteerd, dus het werkt meteen. Kies alleen een specifiek adres op een host met meerdere netwerkkaarten.",
|
|
5
|
+
"headerDevices": "Geëmuleerde Roku-apparaten",
|
|
6
|
+
"devicesHelp": "Elke kaart is één geëmuleerde Roku. Voeg er een toe en voeg daarna in je Harmony- of Sofabaton-app een **Roku**-apparaat toe dat naar deze ioBroker-host wijst — elke toetsdruk komt in de objecten van het apparaat.",
|
|
7
|
+
"deviceName": "Naam",
|
|
8
|
+
"devicePort": "ECP-poort",
|
|
9
|
+
"portLabel": "Poort",
|
|
10
|
+
"devicePortHint": "De ECP-poort waarop deze Roku antwoordt. Elke geëmuleerde Roku heeft een eigen poort nodig — gebruik er geen dubbel. Standaard 8060 (de echte Roku-poort).",
|
|
11
|
+
"deviceTypeLabel": "Type",
|
|
12
|
+
"deviceTypePlayer": "Player (streaming-box)",
|
|
13
|
+
"deviceTypeTv": "TV (met volume, aan/uit, kanaal, ingang)",
|
|
14
|
+
"deviceTypeHint": "„Player“ biedt de 16 standaardtoetsen. „TV“ voegt volume-, aan/uit-, kanaal- en ingangstoetsen toe.",
|
|
15
|
+
"dmAdd": "Roku-apparaat toevoegen",
|
|
16
|
+
"dmEdit": "Bewerken",
|
|
17
|
+
"dmDelete": "Verwijderen",
|
|
18
|
+
"dmEditTitle": "Roku-apparaat bewerken",
|
|
19
|
+
"dmDeleteConfirm": "Het Roku-apparaat „%s“ verwijderen?",
|
|
20
|
+
"deviceNameInUse": "Deze naam wordt al door een ander apparaat gebruikt.",
|
|
21
|
+
"devicePortInUse": "Deze poort wordt al door een andere Roku gebruikt.",
|
|
22
|
+
"supportHeader": "Ondersteunen",
|
|
23
|
+
"aboutInfo": "Als deze adapter nuttig voor je is, helpt een kleine donatie om hem te onderhouden — bedankt!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Sieć",
|
|
3
|
+
"networkInterface": "Interfejs sieciowy (bind + rozgłaszanie)",
|
|
4
|
+
"networkInterfaceTooltip": "Karta sieciowa, do której podłączają się i rozgłaszają emulowane Roku. Zostaw na 'wszystkich interfejsach' — routowalny adres IP jest wykrywany automatycznie, więc działa bez konfiguracji. Wybierz konkretny adres tylko na hoście z kilkoma kartami sieciowymi.",
|
|
5
|
+
"headerDevices": "Emulowane urządzenia Roku",
|
|
6
|
+
"devicesHelp": "Każda karta to jeden emulowany Roku. Dodaj urządzenie, a następnie w aplikacji Harmony lub Sofabaton dodaj urządzenie **Roku** wskazujące na tego hosta ioBroker — każde naciśnięcie trafia do obiektów urządzenia.",
|
|
7
|
+
"deviceName": "Nazwa",
|
|
8
|
+
"devicePort": "Port ECP",
|
|
9
|
+
"portLabel": "Port",
|
|
10
|
+
"devicePortHint": "Port ECP, na którym odpowiada ten Roku. Każdy emulowany Roku potrzebuje własnego portu — nie używaj tego samego. Domyślnie 8060 (prawdziwy port Roku).",
|
|
11
|
+
"deviceTypeLabel": "Typ",
|
|
12
|
+
"deviceTypePlayer": "Player (przystawka)",
|
|
13
|
+
"deviceTypeTv": "TV (z głośnością, zasilaniem, kanałem, wejściem)",
|
|
14
|
+
"deviceTypeHint": "„Player“ udostępnia 16 standardowych przycisków pilota. „TV“ dodaje przyciski głośności, zasilania, kanału i wejścia.",
|
|
15
|
+
"dmAdd": "Dodaj urządzenie Roku",
|
|
16
|
+
"dmEdit": "Edytuj",
|
|
17
|
+
"dmDelete": "Usuń",
|
|
18
|
+
"dmEditTitle": "Edytuj urządzenie Roku",
|
|
19
|
+
"dmDeleteConfirm": "Usunąć urządzenie Roku „%s“?",
|
|
20
|
+
"deviceNameInUse": "Ta nazwa jest już używana przez inne urządzenie.",
|
|
21
|
+
"devicePortInUse": "Ten port jest już używany przez innego Roku.",
|
|
22
|
+
"supportHeader": "Wsparcie",
|
|
23
|
+
"aboutInfo": "Jeśli ten adapter jest dla Ciebie przydatny, mała darowizna pomaga go utrzymać — dziękuję!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Rede",
|
|
3
|
+
"networkInterface": "Interface de rede (vincular + anunciar)",
|
|
4
|
+
"networkInterfaceTooltip": "A placa de rede à qual os Roku emulados se vinculam e anunciam. Deixe em 'todas as interfaces' — o IP roteável é detetado automaticamente, por isso funciona sem configurar. Escolha um endereço específico apenas num host com várias placas de rede.",
|
|
5
|
+
"headerDevices": "Dispositivos Roku emulados",
|
|
6
|
+
"devicesHelp": "Cada cartão é um Roku emulado. Adicione um e depois adicione um dispositivo **Roku** na app Harmony ou Sofabaton a apontar para este host ioBroker — cada tecla cai nos objetos do dispositivo.",
|
|
7
|
+
"deviceName": "Nome",
|
|
8
|
+
"devicePort": "Porta ECP",
|
|
9
|
+
"portLabel": "Porta",
|
|
10
|
+
"devicePortHint": "A porta ECP em que este Roku responde. Cada Roku emulado precisa da sua própria porta — não reutilize. Predefinição 8060 (a porta real do Roku).",
|
|
11
|
+
"deviceTypeLabel": "Tipo",
|
|
12
|
+
"deviceTypePlayer": "Player (box de streaming)",
|
|
13
|
+
"deviceTypeTv": "TV (com volume, energia, canal, entrada)",
|
|
14
|
+
"deviceTypeHint": "«Player» expõe as 16 teclas padrão do comando. «TV» adiciona teclas de volume, energia, canal e entrada.",
|
|
15
|
+
"dmAdd": "Adicionar dispositivo Roku",
|
|
16
|
+
"dmEdit": "Editar",
|
|
17
|
+
"dmDelete": "Eliminar",
|
|
18
|
+
"dmEditTitle": "Editar dispositivo Roku",
|
|
19
|
+
"dmDeleteConfirm": "Eliminar o dispositivo Roku «%s»?",
|
|
20
|
+
"deviceNameInUse": "Este nome já é usado por outro dispositivo.",
|
|
21
|
+
"devicePortInUse": "Esta porta já é usada por outro Roku.",
|
|
22
|
+
"supportHeader": "Apoiar",
|
|
23
|
+
"aboutInfo": "Se este adaptador lhe é útil, um pequeno donativo ajuda a mantê-lo — obrigado!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Сеть",
|
|
3
|
+
"networkInterface": "Сетевой интерфейс (привязка + объявление)",
|
|
4
|
+
"networkInterfaceTooltip": "Сетевая карта, к которой привязываются и на которой объявляются эмулируемые Roku. Оставьте 'все интерфейсы' — маршрутизируемый IP определяется автоматически, поэтому работает без настройки. Выбирайте конкретный адрес только на хосте с несколькими сетевыми картами.",
|
|
5
|
+
"headerDevices": "Эмулируемые устройства Roku",
|
|
6
|
+
"devicesHelp": "Каждая карточка — это один эмулируемый Roku. Добавьте устройство, затем в приложении Harmony или Sofabaton добавьте устройство **Roku**, указывающее на этот хост ioBroker — каждое нажатие попадает в объекты устройства.",
|
|
7
|
+
"deviceName": "Имя",
|
|
8
|
+
"devicePort": "Порт ECP",
|
|
9
|
+
"portLabel": "Порт",
|
|
10
|
+
"devicePortHint": "ECP-порт, на котором отвечает этот Roku. Каждому эмулированному Roku нужен свой порт — не используйте один и тот же. По умолчанию 8060 (реальный порт Roku).",
|
|
11
|
+
"deviceTypeLabel": "Тип",
|
|
12
|
+
"deviceTypePlayer": "Проигрыватель (приставка)",
|
|
13
|
+
"deviceTypeTv": "ТВ (с громкостью, питанием, каналом, входом)",
|
|
14
|
+
"deviceTypeHint": "«Проигрыватель» даёт 16 стандартных кнопок пульта. «ТВ» добавляет кнопки громкости, питания, канала и входа.",
|
|
15
|
+
"dmAdd": "Добавить устройство Roku",
|
|
16
|
+
"dmEdit": "Изменить",
|
|
17
|
+
"dmDelete": "Удалить",
|
|
18
|
+
"dmEditTitle": "Изменить устройство Roku",
|
|
19
|
+
"dmDeleteConfirm": "Удалить устройство Roku «%s»?",
|
|
20
|
+
"deviceNameInUse": "Это имя уже используется другим устройством.",
|
|
21
|
+
"devicePortInUse": "Этот порт уже используется другим Roku.",
|
|
22
|
+
"supportHeader": "Поддержать",
|
|
23
|
+
"aboutInfo": "Если адаптер вам полезен, небольшое пожертвование помогает его поддерживать — спасибо!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "Мережа",
|
|
3
|
+
"networkInterface": "Мережевий інтерфейс (прив'язка + оголошення)",
|
|
4
|
+
"networkInterfaceTooltip": "Мережева карта, до якої прив'язуються та на якій оголошуються емульовані Roku. Залиште 'всі інтерфейси' — маршрутизовану IP-адресу визначено автоматично, тож працює без налаштування. Вибирайте конкретну адресу лише на хості з кількома мережевими картами.",
|
|
5
|
+
"headerDevices": "Емульовані пристрої Roku",
|
|
6
|
+
"devicesHelp": "Кожна картка — це один емульований Roku. Додайте пристрій, потім у застосунку Harmony або Sofabaton додайте пристрій **Roku**, що вказує на цей хост ioBroker — кожне натискання потрапляє в об'єкти пристрою.",
|
|
7
|
+
"deviceName": "Назва",
|
|
8
|
+
"devicePort": "Порт ECP",
|
|
9
|
+
"portLabel": "Порт",
|
|
10
|
+
"devicePortHint": "ECP-порт, на якому відповідає цей Roku. Кожному емульованому Roku потрібен власний порт — не використовуйте один і той самий. За замовчуванням 8060 (справжній порт Roku).",
|
|
11
|
+
"deviceTypeLabel": "Тип",
|
|
12
|
+
"deviceTypePlayer": "Програвач (приставка)",
|
|
13
|
+
"deviceTypeTv": "ТБ (з гучністю, живленням, каналом, входом)",
|
|
14
|
+
"deviceTypeHint": "«Програвач» надає 16 стандартних кнопок пульта. «ТБ» додає кнопки гучності, живлення, каналу та входу.",
|
|
15
|
+
"dmAdd": "Додати пристрій Roku",
|
|
16
|
+
"dmEdit": "Редагувати",
|
|
17
|
+
"dmDelete": "Видалити",
|
|
18
|
+
"dmEditTitle": "Редагувати пристрій Roku",
|
|
19
|
+
"dmDeleteConfirm": "Видалити пристрій Roku «%s»?",
|
|
20
|
+
"deviceNameInUse": "Це ім'я вже використовується іншим пристроєм.",
|
|
21
|
+
"devicePortInUse": "Цей порт уже використовується іншим Roku.",
|
|
22
|
+
"supportHeader": "Підтримати",
|
|
23
|
+
"aboutInfo": "Якщо цей адаптер вам корисний, невелика пожертва допомагає його підтримувати — дякую!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headerNetwork": "网络",
|
|
3
|
+
"networkInterface": "网络接口(绑定 + 广播)",
|
|
4
|
+
"networkInterfaceTooltip": "模拟 Roku 绑定并广播的网卡。保留为“所有接口”即可——可路由的 IP 会被自动检测,因此无需配置即可运行。仅在有多块网卡的主机上才选择具体地址。",
|
|
5
|
+
"headerDevices": "模拟的 Roku 设备",
|
|
6
|
+
"devicesHelp": "每张卡片是一个模拟的 Roku。添加一个后,在 Harmony 或 Sofabaton 应用中添加一个指向此 ioBroker 主机的 **Roku** 设备——每次按键都会进入该设备的对象。",
|
|
7
|
+
"deviceName": "名称",
|
|
8
|
+
"devicePort": "ECP 端口",
|
|
9
|
+
"portLabel": "端口",
|
|
10
|
+
"devicePortHint": "此 Roku 应答的 ECP 端口。每个模拟的 Roku 都需要自己的端口——不要重复使用。默认 8060(真实的 Roku 端口)。",
|
|
11
|
+
"deviceTypeLabel": "类型",
|
|
12
|
+
"deviceTypePlayer": "播放器(流媒体盒子)",
|
|
13
|
+
"deviceTypeTv": "电视(带音量、电源、频道、输入)",
|
|
14
|
+
"deviceTypeHint": "“播放器”提供 16 个标准遥控按键。“电视”额外提供音量、电源、频道和输入按键。",
|
|
15
|
+
"dmAdd": "添加 Roku 设备",
|
|
16
|
+
"dmEdit": "编辑",
|
|
17
|
+
"dmDelete": "删除",
|
|
18
|
+
"dmEditTitle": "编辑 Roku 设备",
|
|
19
|
+
"dmDeleteConfirm": "删除 Roku 设备“%s”?",
|
|
20
|
+
"deviceNameInUse": "此名称已被另一台设备使用。",
|
|
21
|
+
"devicePortInUse": "此端口已被另一台 Roku 使用。",
|
|
22
|
+
"supportHeader": "支持",
|
|
23
|
+
"aboutInfo": "如果此适配器对您有用,一点捐赠有助于维护它——谢谢!",
|
|
24
|
+
"donateKofi": "Ko-fi",
|
|
25
|
+
"donatePaypal": "PayPal"
|
|
26
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"i18n": true,
|
|
3
|
+
"type": "panel",
|
|
4
|
+
"items": {
|
|
5
|
+
"_headerNetwork": {
|
|
6
|
+
"type": "header",
|
|
7
|
+
"text": "headerNetwork",
|
|
8
|
+
"size": 3
|
|
9
|
+
},
|
|
10
|
+
"networkInterface": {
|
|
11
|
+
"type": "ip",
|
|
12
|
+
"label": "networkInterface",
|
|
13
|
+
"tooltip": "networkInterfaceTooltip",
|
|
14
|
+
"listenOnAllPorts": true,
|
|
15
|
+
"onlyIp4": true,
|
|
16
|
+
"xs": 12,
|
|
17
|
+
"sm": 12,
|
|
18
|
+
"md": 6,
|
|
19
|
+
"lg": 6,
|
|
20
|
+
"xl": 6
|
|
21
|
+
},
|
|
22
|
+
"_headerDevices": {
|
|
23
|
+
"newLine": true,
|
|
24
|
+
"type": "header",
|
|
25
|
+
"text": "headerDevices",
|
|
26
|
+
"size": 3
|
|
27
|
+
},
|
|
28
|
+
"_devicesHelp": {
|
|
29
|
+
"type": "staticText",
|
|
30
|
+
"text": "devicesHelp",
|
|
31
|
+
"xs": 12,
|
|
32
|
+
"sm": 12,
|
|
33
|
+
"md": 12,
|
|
34
|
+
"lg": 12,
|
|
35
|
+
"xl": 12,
|
|
36
|
+
"style": { "fontSize": 14, "marginBottom": 8 }
|
|
37
|
+
},
|
|
38
|
+
"_deviceManager": {
|
|
39
|
+
"type": "deviceManager",
|
|
40
|
+
"xs": 12,
|
|
41
|
+
"sm": 12,
|
|
42
|
+
"md": 12,
|
|
43
|
+
"lg": 12,
|
|
44
|
+
"xl": 12
|
|
45
|
+
},
|
|
46
|
+
"_supportHeader": {
|
|
47
|
+
"newLine": true,
|
|
48
|
+
"type": "header",
|
|
49
|
+
"text": "supportHeader",
|
|
50
|
+
"size": 5
|
|
51
|
+
},
|
|
52
|
+
"_aboutInfo": {
|
|
53
|
+
"type": "staticText",
|
|
54
|
+
"text": "aboutInfo",
|
|
55
|
+
"xs": 12,
|
|
56
|
+
"sm": 12,
|
|
57
|
+
"md": 12,
|
|
58
|
+
"lg": 12,
|
|
59
|
+
"xl": 12,
|
|
60
|
+
"style": { "fontSize": 14, "marginBottom": 16 }
|
|
61
|
+
},
|
|
62
|
+
"_kofiLink": {
|
|
63
|
+
"type": "staticLink",
|
|
64
|
+
"href": "https://ko-fi.com/krobipd",
|
|
65
|
+
"label": "donateKofi",
|
|
66
|
+
"button": true,
|
|
67
|
+
"variant": "outlined",
|
|
68
|
+
"color": "primary",
|
|
69
|
+
"xs": 12,
|
|
70
|
+
"sm": 6,
|
|
71
|
+
"md": 4,
|
|
72
|
+
"lg": 4,
|
|
73
|
+
"xl": 4
|
|
74
|
+
},
|
|
75
|
+
"_paypalLink": {
|
|
76
|
+
"type": "staticLink",
|
|
77
|
+
"href": "https://paypal.me/krobipd",
|
|
78
|
+
"label": "donatePaypal",
|
|
79
|
+
"button": true,
|
|
80
|
+
"variant": "outlined",
|
|
81
|
+
"color": "primary",
|
|
82
|
+
"xs": 12,
|
|
83
|
+
"sm": 6,
|
|
84
|
+
"md": 4,
|
|
85
|
+
"lg": 4,
|
|
86
|
+
"xl": 4
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|