iobroker.arylic 0.0.2 → 0.1.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.md +48 -9
- package/admin/i18n/de.json +6 -5
- package/admin/i18n/en.json +2 -1
- package/admin/i18n/es.json +11 -0
- package/admin/i18n/fr.json +11 -0
- package/admin/i18n/it.json +11 -0
- package/admin/i18n/nl.json +11 -0
- package/admin/i18n/pl.json +11 -0
- package/admin/i18n/pt.json +11 -0
- package/admin/i18n/ru.json +11 -0
- package/admin/i18n/uk.json +11 -0
- package/admin/i18n/zh-cn.json +11 -0
- package/admin/jsonConfig.json +15 -0
- package/io-package.json +19 -3
- package/lib/device-management.js +90 -0
- package/lib/device.js +265 -78
- package/lib/discovery.js +32 -0
- package/lib/fields.js +152 -25
- package/lib/transport.js +13 -6
- package/main.js +130 -44
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -26,11 +26,16 @@ this can be added as a second transport — if you own such a device and can tes
|
|
|
26
26
|
## Finding devices
|
|
27
27
|
|
|
28
28
|
With **Find devices automatically** on, the adapter listens for AirPlay announcements (mDNS) carrying
|
|
29
|
-
`manufacturer=Arylic`. The serial number is the device's object id
|
|
30
|
-
|
|
29
|
+
`manufacturer=Arylic`. The serial number is the device's object id; the network is asked again every
|
|
30
|
+
5 minutes, so a new IP address is picked up within that time. Devices found earlier are connected
|
|
31
|
+
right away after a restart. ioBroker must be in the same network segment; in Docker, use host
|
|
32
|
+
networking.
|
|
31
33
|
|
|
32
34
|
Devices in another subnet can be entered by IP address.
|
|
33
35
|
|
|
36
|
+
Found devices are listed in the instance settings and in the admin's device manager, with their
|
|
37
|
+
connection status, model, serial number and firmware.
|
|
38
|
+
|
|
34
39
|
## States
|
|
35
40
|
|
|
36
41
|
Per device, below `arylic.0.<serial>`:
|
|
@@ -40,24 +45,48 @@ Per device, below `arylic.0.<serial>`:
|
|
|
40
45
|
| `volume` | `VOL` | yes | 0–100 |
|
|
41
46
|
| `maxVolume` | `MXV` | yes | 30–100, upper limit for every source; kept after a factory reset |
|
|
42
47
|
| `mute` | `MUT` | yes | |
|
|
43
|
-
| `source` | `SRC` | yes |
|
|
44
|
-
| `bass`, `mid`, `treble` | `BAS`, `MID`, `TRE` | yes | −10…10 dB |
|
|
45
|
-
| `led` | `LED` | yes | |
|
|
46
|
-
| `beep` | `BEP` | yes | confirmation tone |
|
|
47
|
-
| `name` | `NAM` | yes | device name, also the AirPlay name |
|
|
48
|
-
| `playing` | `PLA` | no | |
|
|
48
|
+
| `source` | `SRC` | yes | choices from `sources` |
|
|
49
49
|
| `sources` | `LST` | no | available inputs |
|
|
50
|
+
| `playing` | `PLA` | no | |
|
|
51
|
+
| `playPause`, `stop`, `next`, `previous` | `POP`, `STP`, `NXT`, `PRE` | button | |
|
|
50
52
|
| `standby` | `SYS:STANDBY` | button | ⚠️ see below |
|
|
53
|
+
| `sound.bass`, `sound.mid`, `sound.treble` | `BAS`, `MID`, `TRE` | yes | −10…10 dB |
|
|
54
|
+
| `sound.balance` | `BAL` | yes | −100…100 |
|
|
55
|
+
| `sound.virtualBass` | `VBS` | yes | |
|
|
56
|
+
| `sound.eqEnabled`, `sound.eqPreset` | `EQE`, `EQS` | yes | choices from `sound.eqPresets` (`PEQ`) |
|
|
57
|
+
| `sound.crossover`, `sound.crossoverFrequency` | `CFE`, `CFF` | yes | for a subwoofer, 50–300 Hz |
|
|
58
|
+
| `settings.led` | `LED` | yes | |
|
|
59
|
+
| `settings.beep` | `BEP` | yes | confirmation tone |
|
|
60
|
+
| `settings.name` | `NAM` | yes | device name, also the AirPlay name |
|
|
61
|
+
| `settings.muteDelay` | `DLY` | yes | seconds without signal until the output mutes |
|
|
62
|
+
| `settings.powerOnSource` | `POM` | yes | input after power-on, `NONE` = last one |
|
|
63
|
+
| `settings.autoSwitch` | `ASW` | yes | switch back to the previous input |
|
|
64
|
+
| `settings.volumeStep` | `VST` | yes | step for volume up/down, 0–10 |
|
|
65
|
+
| `settings.fixedVolume` | `VOF` | yes | fixed output level, 0 = off |
|
|
66
|
+
| `settings.standbyOnPower` | `SOP` | yes | start in standby after power-up |
|
|
51
67
|
| `info.connected` | | no | TCP connection to the device |
|
|
52
68
|
| `info.ip` | `IPA` | no | |
|
|
69
|
+
| `info.ethernet`, `info.wifi` | `ETH`, `WIF` | no | wired / wireless connection |
|
|
70
|
+
| `info.multiroomChannel`, `info.multiroomMode` | `CHN`, `MRM` | no | |
|
|
53
71
|
| `info.mcuVersion` | `VER` | no | amplifier chip firmware |
|
|
54
72
|
| `info.model`, `info.serial`, `info.firmware` | | no | from the mDNS announcement |
|
|
55
73
|
|
|
74
|
+
Not included: `PMT` and `COE` restart the device on every change; title, artist and album are not
|
|
75
|
+
sent over TCP; `WWW` (internet) stayed `0` on an LA50 with internet access.
|
|
76
|
+
|
|
56
77
|
A write is a command (`ack=false`). The device's answer sets the value again with `ack=true` — if it
|
|
57
78
|
stays `ack=false`, the device did not accept the command.
|
|
58
79
|
|
|
59
80
|
⚠️ **Standby:** Nothing over the network wakes an LA50 from standby — the web interface is gone as
|
|
60
|
-
well, and the UART API has no wake command. Only the IR remote brings it back.
|
|
81
|
+
well, and the UART API has no wake command. Only the IR remote brings it back. This applies to the
|
|
82
|
+
`standby` button and to `settings.standbyOnPower`, which makes the device start in standby after
|
|
83
|
+
every power cut.
|
|
84
|
+
|
|
85
|
+
## Development
|
|
86
|
+
|
|
87
|
+
- `npm test` — unit tests and package checks
|
|
88
|
+
- `npm run live` — finds devices via mDNS and reads all values, without ioBroker; nothing is written.
|
|
89
|
+
`npm run live -- 10.0.0.61` connects to one address.
|
|
61
90
|
|
|
62
91
|
## Changelog
|
|
63
92
|
|
|
@@ -65,6 +94,16 @@ well, and the UART API has no wake command. Only the IR remote brings it back.
|
|
|
65
94
|
Placeholder for the next version (at the beginning of the line):
|
|
66
95
|
### **WORK IN PROGRESS**
|
|
67
96
|
-->
|
|
97
|
+
### 0.1.0 (2026-10-14)
|
|
98
|
+
|
|
99
|
+
- (Timo Schneider) sound (balance, EQ, virtual bass, crossover), settings, playback buttons, network status
|
|
100
|
+
- (Timo Schneider) states grouped into `sound`, `settings`, `info`; outdated states are removed — **state ids changed**
|
|
101
|
+
- (Timo Schneider) choices for input and EQ preset come from the device
|
|
102
|
+
- (Timo Schneider) device manager: found devices with status, details, refresh and a link to the web interface (admin 7.8.1 or newer)
|
|
103
|
+
- (Timo Schneider) written values are checked: `"false"`/`"0"` count as false, numbers are limited to their range, text must not contain `;`
|
|
104
|
+
- (Timo Schneider) a device that stops answering is reconnected; an address change is picked up within 5 minutes
|
|
105
|
+
- (Timo Schneider) the device name comes from the device; quick button presses are no longer merged
|
|
106
|
+
|
|
68
107
|
### 0.0.2 (2026-10-13)
|
|
69
108
|
|
|
70
109
|
- (Timo Schneider) published through GitHub Actions (npm trusted publishing)
|
package/admin/i18n/de.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"Find devices automatically": "Geräte automatisch finden",
|
|
3
2
|
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Arylic-Geräte melden sich per mDNS (AirPlay). ioBroker muss im selben Netzsegment sein; in Docker Host-Netzwerk verwenden.",
|
|
4
|
-
"Poll interval": "Abfrageintervall",
|
|
5
|
-
"The device reports changes on its own; the poll catches anything missed.": "Das Gerät meldet Änderungen selbst; die Abfrage fängt Verpasstes auf.",
|
|
6
3
|
"Devices": "Geräte",
|
|
7
|
-
"
|
|
4
|
+
"Find devices automatically": "Geräte automatisch finden",
|
|
5
|
+
"Found devices": "Gefundene Geräte",
|
|
6
|
+
"IP address": "IP-Adresse",
|
|
8
7
|
"Name": "Name",
|
|
9
|
-
"
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Nur nötig für Geräte, die die Suche nicht findet, z. B. in einem anderen Subnetz.",
|
|
9
|
+
"Poll interval": "Abfrageintervall",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "Das Gerät meldet Änderungen selbst; die Abfrage fängt Verpasstes auf."
|
|
10
11
|
}
|
package/admin/i18n/en.json
CHANGED
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
"Devices": "Devices",
|
|
7
7
|
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Only needed for devices discovery cannot find, e.g. in another subnet.",
|
|
8
8
|
"Name": "Name",
|
|
9
|
-
"IP address": "IP address"
|
|
9
|
+
"IP address": "IP address",
|
|
10
|
+
"Found devices": "Found devices"
|
|
10
11
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Los dispositivos acrílicos se anuncian a través de mDNS (AirPlay). Necesita ioBroker en el mismo segmento de red; en Docker utilice redes de host.",
|
|
3
|
+
"Devices": "Dispositivos",
|
|
4
|
+
"Find devices automatically": "Encuentra dispositivos automáticamente",
|
|
5
|
+
"Found devices": "Dispositivos encontrados",
|
|
6
|
+
"IP address": "dirección IP",
|
|
7
|
+
"Name": "Nombre",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Solo es necesario para el descubrimiento de dispositivos que no se pueden encontrar, p. en otra subred.",
|
|
9
|
+
"Poll interval": "Intervalo de encuesta",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "El dispositivo informa los cambios por sí solo; la encuesta detecta cualquier cosa que se haya perdido."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Les appareils aryliques s'annoncent via mDNS (AirPlay). Nécessite ioBroker dans le même segment de réseau ; dans Docker, utilisez le réseau hôte.",
|
|
3
|
+
"Devices": "Appareils",
|
|
4
|
+
"Find devices automatically": "Rechercher automatiquement des appareils",
|
|
5
|
+
"Found devices": "Appareils trouvés",
|
|
6
|
+
"IP address": "Adresse IP",
|
|
7
|
+
"Name": "Nom",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Uniquement nécessaire pour la découverte des appareils impossible à trouver, par ex. dans un autre sous-réseau.",
|
|
9
|
+
"Poll interval": "Intervalle d'interrogation",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "L'appareil signale lui-même les modifications ; le sondage détecte tout ce qui a été manqué."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "I dispositivi Arylic si annunciano tramite mDNS (AirPlay). Ha bisogno di ioBroker nello stesso segmento di rete; in Docker utilizza la rete host.",
|
|
3
|
+
"Devices": "Dispositivi",
|
|
4
|
+
"Find devices automatically": "Trova i dispositivi automaticamente",
|
|
5
|
+
"Found devices": "Dispositivi trovati",
|
|
6
|
+
"IP address": "Indirizzo IP",
|
|
7
|
+
"Name": "Nome",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Necessario solo per il rilevamento dei dispositivi che non è possibile trovare, ad es. in un'altra sottorete.",
|
|
9
|
+
"Poll interval": "Intervallo di sondaggio",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "Il dispositivo segnala autonomamente le modifiche; il sondaggio rileva tutto ciò che è mancato."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Arylic-apparaten kondigen zichzelf aan via mDNS (AirPlay). Heeft ioBroker nodig in hetzelfde netwerksegment; in Docker gebruik hostnetwerken.",
|
|
3
|
+
"Devices": "Apparaten",
|
|
4
|
+
"Find devices automatically": "Vind apparaten automatisch",
|
|
5
|
+
"Found devices": "Apparaten gevonden",
|
|
6
|
+
"IP address": "IP-adres",
|
|
7
|
+
"Name": "Naam",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Alleen nodig als apparaten niet kunnen worden gevonden, b.v. in een ander subnet.",
|
|
9
|
+
"Poll interval": "Poll-interval",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "Het apparaat rapporteert zelfstandig wijzigingen; de peiling belicht alles wat gemist is."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Urządzenia akrylowe ogłaszają się poprzez mDNS (AirPlay). Potrzebuje ioBroker w tym samym segmencie sieci; w Dockerze użyj sieci hostów.",
|
|
3
|
+
"Devices": "Urządzenia",
|
|
4
|
+
"Find devices automatically": "Znajdź urządzenia automatycznie",
|
|
5
|
+
"Found devices": "Znaleziono urządzenia",
|
|
6
|
+
"IP address": "Adres IP",
|
|
7
|
+
"Name": "Nazwa",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Potrzebne tylko do wykrywania urządzeń, których nie można znaleźć, np. w innej podsieci.",
|
|
9
|
+
"Poll interval": "Interwał ankiety",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "Urządzenie samo zgłasza zmiany; ankieta wychwytuje wszystko, co zostało pominięte."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Os dispositivos Arylic se anunciam via mDNS (AirPlay). Precisa de ioBroker no mesmo segmento de rede; no Docker, use rede host.",
|
|
3
|
+
"Devices": "Dispositivos",
|
|
4
|
+
"Find devices automatically": "Encontre dispositivos automaticamente",
|
|
5
|
+
"Found devices": "Dispositivos encontrados",
|
|
6
|
+
"IP address": "Endereço IP",
|
|
7
|
+
"Name": "Nome",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Necessário apenas para a descoberta de dispositivos que não podem ser encontrados, por ex. em outra sub-rede.",
|
|
9
|
+
"Poll interval": "Intervalo de pesquisa",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "O dispositivo relata alterações por conta própria; a enquete detecta tudo o que foi perdido."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Устройства Arylic объявляют о себе через mDNS (AirPlay). Требуется ioBroker в том же сегменте сети; в Docker используйте сеть хоста.",
|
|
3
|
+
"Devices": "Устройства",
|
|
4
|
+
"Find devices automatically": "Автоматический поиск устройств",
|
|
5
|
+
"Found devices": "Найденные устройства",
|
|
6
|
+
"IP address": "IP-адрес",
|
|
7
|
+
"Name": "Имя",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Требуется только для обнаружения устройств, которые невозможно найти, например. в другой подсети.",
|
|
9
|
+
"Poll interval": "Интервал опроса",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "Устройство сообщает об изменениях самостоятельно; опрос выявляет все пропущенное."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Пристрої Arylic повідомляють про себе через mDNS (AirPlay). Потрібен ioBroker в тому ж сегменті мережі; у Docker використовувати мережу хостів.",
|
|
3
|
+
"Devices": "Пристрої",
|
|
4
|
+
"Find devices automatically": "Автоматичний пошук пристроїв",
|
|
5
|
+
"Found devices": "Знайдені пристрої",
|
|
6
|
+
"IP address": "IP адреса",
|
|
7
|
+
"Name": "Ім'я",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "Потрібно лише для виявлення пристроїв, які неможливо знайти, напр. в іншій підмережі.",
|
|
9
|
+
"Poll interval": "Інтервал опитування",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "Пристрій самостійно повідомляє про зміни; опитування фіксує все, що ви пропустили."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Arylic devices announce themselves via mDNS (AirPlay). Needs ioBroker in the same network segment; in Docker use host networking.": "Arylic 设备通过 mDNS (AirPlay) 宣布自己。需要ioBroker在同一网段;在 Docker 中使用主机网络。",
|
|
3
|
+
"Devices": "设备",
|
|
4
|
+
"Find devices automatically": "自动查找设备",
|
|
5
|
+
"Found devices": "找到设备",
|
|
6
|
+
"IP address": "IP地址",
|
|
7
|
+
"Name": "姓名",
|
|
8
|
+
"Only needed for devices discovery cannot find, e.g. in another subnet.": "仅用于发现无法找到的设备,例如在另一个子网中。",
|
|
9
|
+
"Poll interval": "轮询间隔",
|
|
10
|
+
"The device reports changes on its own; the poll catches anything missed.": "设备自行报告变化;民意调查发现了任何遗漏的东西。"
|
|
11
|
+
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -67,6 +67,21 @@
|
|
|
67
67
|
"validatorNoSaveOnError": true
|
|
68
68
|
}
|
|
69
69
|
]
|
|
70
|
+
},
|
|
71
|
+
"foundHeader": {
|
|
72
|
+
"type": "header",
|
|
73
|
+
"text": "Found devices",
|
|
74
|
+
"size": 3,
|
|
75
|
+
"newLine": true
|
|
76
|
+
},
|
|
77
|
+
"deviceManager": {
|
|
78
|
+
"type": "deviceManager",
|
|
79
|
+
"newLine": true,
|
|
80
|
+
"xs": 12,
|
|
81
|
+
"sm": 12,
|
|
82
|
+
"md": 12,
|
|
83
|
+
"lg": 12,
|
|
84
|
+
"xl": 12
|
|
70
85
|
}
|
|
71
86
|
}
|
|
72
87
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "arylic",
|
|
4
|
-
"version": "0.0
|
|
4
|
+
"version": "0.1.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.1.0": {
|
|
7
|
+
"en": "sound (balance, EQ, virtual bass, crossover), settings, playback buttons, network status\nstates grouped into `sound`, `settings`, `info`; outdated states are removed — **state ids changed**\nchoices for input and EQ preset come from the device\ndevice manager: found devices with status, details, refresh and a link to the web interface (admin 7.8.1 or newer)\nwritten values are checked: `\"false\"`/`\"0\"` count as false, numbers are limited to their range, text must not contain `;`\na device that stops answering is reconnected; an address change is picked up within 5 minutes\nthe device name comes from the device; quick button presses are no longer merged",
|
|
8
|
+
"de": "Ton (Balance, EQ, Virtual Bass, Crossover), Einstellungen, Abspieltasten, Netzwerkstatus\nStatus gruppiert nach „Sound“, „Settings“, „Info“; veraltete Status werden entfernt — **Status-IDs geändert**\nEingabe und EQ-Preset wählen Sie vom Gerät\nGerätemanager: Geräte mit Status, Details, Refresh und Webinterface gefunden (Admin 7.8.1 oder neuer)\nWerte werden geprüft: `\"false\"`/`\"0\"` gelten als falsch, Zahlen sind begrenzt, Text darf nicht `;`\nGerät, das nicht mehr reagiert, wird neu verbunden; Adressänderung innerhalb von 5 Minuten\nDer Gerätename stammt vom Gerät; Schnelltasten sind nicht mehr vereint",
|
|
9
|
+
"ru": "звук (баланс, эквалайзер, виртуальный бас, кроссовер), настройки, кнопки воспроизведения, состояние сети\nсостояния сгруппированы в `sound`, `settings`, `info`; устаревшие состояния удалены — **изменено состояние**\nварианты ввода и предустановки эквалайзера поступают от устройства\nдиспетчер устройств: найденные устройства со статусом, сведениями, обновлением и ссылкой на веб-интерфейс (admin 7.8.1 или новее)\nпроверяются записанные значения: `\"false\"`/`\"0\"` считаются ложными, числа ограничены своим диапазоном, текст не должен содержать `;`\nустройство, которое перестает отвечать, снова подключается; изменение адреса происходит в течение 5 минут\nимя устройства взято из названия устройства; быстрые нажатия кнопок больше не объединяются",
|
|
10
|
+
"pt": "som (balanço, EQ, baixo virtual, crossover), ajustes, botões de reprodução, status da rede\nestados agrupados em `sound`, `settings`, `info`; estados antigos são removidos — **state ids**\nas opções de entrada e EQ vêm do dispositivo\ngerenciador de dispositivos com status, detalhes, atualização e link para a web (admin 7.8.1 ou superior)\nvalores escritos são verificados: `\"false\"`/`\"0\"`, números limitados, texto não deve conter `;`\num dispositivo que para de atender é reconectado; a mudança de endereço ocorre em 5 minutos\no nome do dispositivo vem do dispositivo; botões rápidos não são mais mesclados",
|
|
11
|
+
"nl": "geluid (balans, equalizer, virtuele bas, crossover), instellingen, afspeelknoppen, netwerkstatus\ntoestanden gegroepeerd in `sound`, `instellingen`, `info`; verouderde statussen worden verwijderd — **stat-id's veranderd**\nde keuzes voor invoer en EQ-voorinstelling zijn afkomstig van het apparaat\napparaatbeheerder: apparaten gevonden met status, gegevens, vernieuwing en een link naar de webinterface (admin 7.8.1 of nieuwer)\ngeschreven waarden worden gecontroleerd: `\"false\"`/`\"0\"` tellen als onwaar, getallen zijn beperkt tot hun bereik, tekst mag geen `;` bevatten\neen apparaat dat niet meer antwoordt, wordt opnieuw verbonden; een adreswijziging wordt binnen 5 minuten verwerkt\nde naam van het apparaat is afkomstig van het apparaat; snelle toetsaanslagen worden niet langer samengevoegd",
|
|
12
|
+
"fr": "son (balance, EQ, Virtual Bass, Crossover), réglages, boutons de lecture, état du réseau\nétats regroupés en « sound », « settings », « info » ; les états obsolètes sont supprimés — **l'état est modifié**\nles choix d'entrée et d'égalisation viennent de l'appareil\ngestionnaire d'appareils : appareils trouvés avec état, détails, actualisation et lien vers l'interface Web (admin 7.8.1 ou version ultérieure)\nles valeurs écrites sont vérifiées : « false\"`/`\"0\"` compte comme faux, les chiffres sont limités, le texte ne doit pas en contenir `;`\nun appareil qui ne répond plus est reconnecté ; un changement d'adresse est pris en 5 minutes\nle nom de l'appareil vient de l'appareil ; les pressions rapides ne sont plus fusionnées",
|
|
13
|
+
"it": "suono (balance, EQ, virtual bass, crossover), impostazioni, tasti, stato della rete\nstati raggruppati in «sound», «settings», «info»; rimossi — **state id modificati**\ninput e preset EQ sono a scelta del dispositivo\ngestore dispositivi: trovati con stato, dettagli, aggiornamento e link al web (admin 7.8.1 o successivo)\ni valori scritti sono controllati: `\"false\"`/\"0\"` sono falsi, i numeri sono limitati, il testo non deve contenere `;`\nun dispositivo che non risponde si ricollega; cambia indirizzo entro 5 minuti\nil nome del dispositivo deriva dal dispositivo; i tasti premuti non sono più uniti",
|
|
14
|
+
"es": "sonido (balance, ecualizador, bajo virtual, cruce), ajustes, botones de reproducción, estado de la red\nestados agrupados en «sonido», «configuración», «información»; se eliminan los estados anticuados — **ID de estado cambiado**\nlas opciones de entrada y ecualización vienen del dispositivo\ngestor de dispositivos: encontró dispositivos con estado, detalles, actualización y enlace a la interfaz web (admin 7.8.1 o posterior)\nse comprueban los valores escritos: `\"falso\"`/`\"0\"` cuentan como falsos, los números se limitan a su rango, el texto no debe contener `;`\nse vuelve a conectar un dispositivo que deja de responder; un cambio de dirección se recoge en 5 minutos\nel nombre del dispositivo viene del dispositivo; los botones rápidos ya no se combinan",
|
|
15
|
+
"pl": "dźwięk (balans, korektor, wirtualny bas, crossover), ustawienia, przyciski odtwarzania, stan sieci\nstany pogrupowane w „dźwięk”, „ustawienia”, „info”; stany przestarzałe są usuwane — **zmieniono identyfikatory stanów**\nopcje wejścia i ustawienia EQ pochodzą z urządzenia\nmenedżer urządzeń: znalezione urządzenia ze statusem, szczegółami, odświeżeniem i łączem do interfejsu internetowego (admin 7.8.1 lub nowszy)\nwartości zapisane są sprawdzane: „fałszy\"`/`\"0\"` liczą się jako fałszywe, liczby są ograniczone do ich zakresu, tekst nie może zawierać `;”\nurządzenie, które przestaje odpowiadać, zostaje ponownie podłączone; zmiana adresu zostaje odebrana w ciągu 5 minut\nnazwa urządzenia pochodzi od urządzenia; szybkie naciśnięcia przycisków nie są już łączone",
|
|
16
|
+
"uk": "звук (баланс, еквалайзер, віртуальний бас, кросовер), налаштування, кнопки відтворення, стан мережі\nстани, згруповані в `звук`, `налаштування`, `info`; застарілі стани видаляються — ** ідентифікатори станів зміненили**\nвибір для введення та налаштування еквалайзера надходить від пристрою\nдиспетчер пристроїв: знайдені пристрої зі статусом, деталями, оновленням і посиланням на веб-інтерфейс (admin 7.8.1 або новіше)\nЗаписані значення перевіряються: `\"false\"`/`\"0\"` вважаються false, числа обмежені своїм діапазоном, текст не повинен містити `;`\nпристрій, який перестає відповідати, знову підключається; зміна адреси приймається протягом 5 хвилин\nназва пристрою походить від пристрою; швидкі натискання кнопок більше не об'єднуються",
|
|
17
|
+
"zh-cn": "声音(平衡、EQ、虚拟低音、分频器)、设置、播放按钮、网络状态\n状态分组为 “声音”、“设置”、“信息”;过期状态被移除 — **状态 ID 已更改**\n输入和 EQ 预设的选择来自设备\n设备管理器:已找到具有状态、详细信息、刷新和 Web 界面链接的设备(管理员 7.8.1 或更高版本)\n检查书面值:``false \"`/\" \"0\"`算作假,数字仅限于其范围,文本不得包含 `;\n停止应答的设备将重新连接;在 5 分钟内收到地址变更信息\n设备名称来自设备;快速按下按钮不再合并"
|
|
18
|
+
},
|
|
6
19
|
"0.0.2": {
|
|
7
20
|
"en": "published through GitHub Actions (npm trusted publishing)",
|
|
8
21
|
"de": "veröffentlicht über GitHub Actions (npm trusted publishing)",
|
|
@@ -91,9 +104,12 @@
|
|
|
91
104
|
],
|
|
92
105
|
"globalDependencies": [
|
|
93
106
|
{
|
|
94
|
-
"admin": ">=7.
|
|
107
|
+
"admin": ">=7.8.1"
|
|
95
108
|
}
|
|
96
|
-
]
|
|
109
|
+
],
|
|
110
|
+
"supportedMessages": {
|
|
111
|
+
"deviceManager": true
|
|
112
|
+
}
|
|
97
113
|
},
|
|
98
114
|
"native": {
|
|
99
115
|
"discovery": true,
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { DeviceManagement } = require('@iobroker/dm-utils');
|
|
4
|
+
|
|
5
|
+
// Shown below an expanded device, live from its states.
|
|
6
|
+
const DETAILS = [
|
|
7
|
+
['IP address', 'info.ip'],
|
|
8
|
+
['Model', 'info.model'],
|
|
9
|
+
['Serial number', 'info.serial'],
|
|
10
|
+
['Firmware', 'info.firmware'],
|
|
11
|
+
['Amplifier chip', 'info.mcuVersion'],
|
|
12
|
+
['Input', 'source'],
|
|
13
|
+
['Volume', 'volume'],
|
|
14
|
+
['Maximum volume', 'maxVolume'],
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
const ICON =
|
|
18
|
+
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCI+CiAgPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiByeD0iMTQiIGZpbGw9IiNlM2U5ZWYiLz4KICA8cmVjdCB4PSIxNyIgeT0iOCIgd2lkdGg9IjMwIiBoZWlnaHQ9IjQ4IiByeD0iNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMGYxNDE5IiBzdHJva2Utd2lkdGg9IjMiLz4KICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjE5IiByPSI0IiBmaWxsPSIjMGYxNDE5Ii8+CiAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzOCIgcj0iMTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzBmMTQxOSIgc3Ryb2tlLXdpZHRoPSIzIi8+CiAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzOCIgcj0iMyIgZmlsbD0iIzBmMTQxOSIvPgo8L3N2Zz4K';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Lists the amplifiers in the admin's device manager: connection status,
|
|
22
|
+
* address, and details such as model, serial number and firmware.
|
|
23
|
+
*/
|
|
24
|
+
class ArylicDeviceManagement extends DeviceManagement {
|
|
25
|
+
/**
|
|
26
|
+
* @returns {import('@iobroker/dm-utils').InstanceDetails} instance information
|
|
27
|
+
*/
|
|
28
|
+
getInstanceInfo() {
|
|
29
|
+
return {
|
|
30
|
+
...super.getInstanceInfo(),
|
|
31
|
+
identifierLabel: { en: 'IP address', de: 'IP-Adresse' },
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @param {import('@iobroker/dm-utils').DeviceLoadContext<string>} context collects the devices
|
|
37
|
+
*/
|
|
38
|
+
loadDevices(context) {
|
|
39
|
+
const devices = [...this.adapter.devices.values()];
|
|
40
|
+
context.setTotalDevices(devices.length);
|
|
41
|
+
for (const device of devices) {
|
|
42
|
+
context.addDevice({
|
|
43
|
+
id: device.id,
|
|
44
|
+
identifier: device.host,
|
|
45
|
+
name: device.name,
|
|
46
|
+
icon: ICON,
|
|
47
|
+
manufacturer: 'Arylic',
|
|
48
|
+
model: device.info.model,
|
|
49
|
+
status: {
|
|
50
|
+
connection: {
|
|
51
|
+
stateId: `${this.adapter.namespace}.${device.id}.info.connected`,
|
|
52
|
+
mapping: { true: 'connected', false: 'disconnected' },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
hasDetails: true,
|
|
56
|
+
actions: [
|
|
57
|
+
{
|
|
58
|
+
id: 'refresh',
|
|
59
|
+
icon: 'refresh',
|
|
60
|
+
description: { en: 'Read all values now', de: 'Alle Werte jetzt lesen' },
|
|
61
|
+
handler: () => {
|
|
62
|
+
device.refresh();
|
|
63
|
+
return { refresh: 'none' };
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'web',
|
|
68
|
+
icon: 'web',
|
|
69
|
+
description: { en: 'Open the web interface', de: 'Weboberfläche öffnen' },
|
|
70
|
+
url: `http://${device.host}`,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @param {string} id device id
|
|
79
|
+
* @returns {import('@iobroker/dm-utils').DeviceDetails<string>} details shown below the device
|
|
80
|
+
*/
|
|
81
|
+
getDeviceDetails(id) {
|
|
82
|
+
const items = {};
|
|
83
|
+
DETAILS.forEach(([label, stateId], i) => {
|
|
84
|
+
items[`row${i}`] = { type: 'state', oid: `${id}.${stateId}`, label, control: 'text', sm: 12 };
|
|
85
|
+
});
|
|
86
|
+
return { id, schema: { type: 'panel', items } };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
module.exports = { ArylicDeviceManagement };
|