iobroker.yamaha 2.3.0 → 2.3.1

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 CHANGED
@@ -103,6 +103,10 @@ On the very first contact the adapter asks the receiver which functions it suppo
103
103
  Placeholder for the next version (at the beginning of the line):
104
104
  ### **WORK IN PROGRESS**
105
105
  -->
106
+ ### 2.3.1 (2026-09-03)
107
+
108
+ - (krobipd) Fixed: the new datapoint explanations were missing on MusicCast and older XML devices, so those users saw an empty description where the receiver has one
109
+
106
110
  ### 2.3.0 (2026-09-03)
107
111
 
108
112
  - (krobipd) New: every datapoint and every folder now carries a short explanation in eleven languages, so the object tree tells you what a value actually means
@@ -137,16 +141,6 @@ On the very first contact the adapter asks the receiver which functions it suppo
137
141
  - (krobipd) Fixed: on a receiver with both an analogue and a DAB tuner the AM band stays selectable and every band change reaches the right tuner
138
142
  - (krobipd) Fixed: a hiccup of the ioBroker database while the adapter starts no longer stops the instance — it says so in the log and keeps the receivers running
139
143
 
140
- ### 2.0.4 (2026-09-02)
141
-
142
- - (krobipd) Fixed: a short outage of the ioBroker database no longer restarts the adapter — a failed write is logged once and the next value is written normally
143
- - (krobipd) Fixed: the protocol badges on the device card are reset when a device starts and when the adapter stops, so a crash no longer leaves a green badge next to a red dot
144
- - (krobipd) Fixed: stopping or restarting the adapter while it is still searching the network now stops it completely — it no longer keeps working half-started until the next restart
145
- - (krobipd) Fixed: the scene list keeps its titles on MusicCast receivers that also answer over XML or YNCA — the title-less MusicCast list no longer replaces it at startup
146
- - (krobipd) Fixed: a timeout while probing an older receiver for scenes or menus is asked again on the next connect instead of being remembered as "none" until the next restart
147
- - (krobipd) Fixed: writing one equalizer band before the receiver reported all three no longer sends zeros for the other two — the zone status is fetched first
148
- - (krobipd) Improved: a receiver that is off for a while is retried no later than the configured maximum wait, and an oversized answer from a wrong host can no longer eat the adapter's memory
149
-
150
144
  [Older changelogs can be found there](CHANGELOG_OLD.md)
151
145
 
152
146
  ## History
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "Der Netzwerk-Port, auf dem der Receiver Steuerbefehle entgegennimmt.",
372
372
  "descVolumeInterlock": "Ob ein AirPlay-Gerät die Lautstärke dieses Receivers ändern darf.",
373
373
  "descElapsedTime": "In Sekunden, damit man damit rechnen kann; die lesbare Form steht daneben.",
374
- "descTotalTime": "In Sekunden, damit man damit rechnen kann; die lesbare Form steht daneben."
374
+ "descTotalTime": "In Sekunden, damit man damit rechnen kann; die lesbare Form steht daneben.",
375
+ "descVolumeDB": "Dieselbe Lautstärke, wie sie das Display des Receivers zeigt, in Dezibel.",
376
+ "descVolumeDisplayMode": "Ob der Receiver die Lautstärke in Dezibel oder als schlichte Zahl anzeigt.",
377
+ "descAudioSelect": "Welchen Toneingang der gewählten Quelle der Receiver abhört.",
378
+ "descLinkControl": "Wägt Stabilität gegen Verzögerung ab, wenn an verbundene Geräte gestreamt wird.",
379
+ "descLinkAudioDelay": "Ob verbundene Geräte auf Lippensynchronität oder gleichen Ton achten.",
380
+ "descLinkAudioQuality": "Tonqualität, mit der an verbundene Geräte gestreamt wird.",
381
+ "descClearVoice": "Hebt Sprache aus dem Klangbild heraus — für Soundbars gedacht.",
382
+ "descBassExtension": "Dehnt den Bassbereich nach unten — bei kompakten Lautsprechern.",
383
+ "descAdaptiveDSPLevel": "Lässt den Raumklang-Effekt der eingestellten Lautstärke folgen.",
384
+ "descSurround3D": "Erweitert das Klangfeld nach oben, für eine höhere Bühne.",
385
+ "descEqualizerMode": "Ob der Equalizer automatisch arbeitet oder mit Ihren eigenen Werten.",
386
+ "descMultiroomStreamingEnabled": "Ob diese Zone an andere MusicCast-Geräte streamen darf.",
387
+ "descYpaoVolume": "Hält die von der automatischen Einmessung gefundene Balance auch bei leiser Wiedergabe.",
388
+ "descDabStatus": "Wie weit das Digitalradio mit Einstellen oder Suchlauf ist.",
389
+ "descSignalQuality": "Wie sauber der Digitalsender empfangen wird.",
390
+ "descDabPlus": "Wahr, wenn der Sender das neuere, sparsamere Digitalformat nutzt.",
391
+ "descServiceCategory": "Ob dies der Hauptdienst des Senders ist oder ein Zusatzdienst.",
392
+ "descTotalStations": "Wie viele Digitalsender der letzte Suchlauf gefunden hat.",
393
+ "descInitialScanProgress": "Wie weit der erste Sendersuchlauf ist, in Prozent.",
394
+ "descTuneAidLevel": "Empfangsstärke — als Hilfe beim Ausrichten der Antenne gedacht."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "The network port the receiver listens on for control commands.",
372
372
  "descVolumeInterlock": "Whether an AirPlay device may change this receiver's volume.",
373
373
  "descElapsedTime": "In seconds, so it can be calculated with; a readable form sits next to it.",
374
- "descTotalTime": "In seconds, so it can be calculated with; a readable form sits next to it."
374
+ "descTotalTime": "In seconds, so it can be calculated with; a readable form sits next to it.",
375
+ "descVolumeDB": "The same volume as the receiver's own display shows it, in decibels.",
376
+ "descVolumeDisplayMode": "Whether the receiver shows volume in decibels or as a plain number.",
377
+ "descAudioSelect": "Which audio input of the selected source the receiver listens to.",
378
+ "descLinkControl": "Trades stability against delay when streaming to linked devices.",
379
+ "descLinkAudioDelay": "Whether linked devices favour lip sync or perfectly aligned audio.",
380
+ "descLinkAudioQuality": "Sound quality used when streaming to linked devices.",
381
+ "descClearVoice": "Lifts speech out of the mix, aimed at soundbars.",
382
+ "descBassExtension": "Stretches the low end downwards on compact speakers.",
383
+ "descAdaptiveDSPLevel": "Lets the surround effect follow the volume setting.",
384
+ "descSurround3D": "Adds height to the surround field for a taller sound stage.",
385
+ "descEqualizerMode": "Whether the equalizer runs automatically or on your own settings.",
386
+ "descMultiroomStreamingEnabled": "Whether this zone is allowed to stream to other MusicCast devices.",
387
+ "descYpaoVolume": "Keeps the balance measured by the automatic room calibration at low volume.",
388
+ "descDabStatus": "How far the digital radio is with tuning or scanning.",
389
+ "descSignalQuality": "How cleanly the digital station is being received.",
390
+ "descDabPlus": "True when the station uses the newer, more efficient digital format.",
391
+ "descServiceCategory": "Whether this is the station's main service or a secondary one.",
392
+ "descTotalStations": "How many digital stations the last scan found.",
393
+ "descInitialScanProgress": "How far the first station scan has got, as a percentage.",
394
+ "descTuneAidLevel": "Reception strength, meant as an aid while aiming the aerial."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "El puerto de red en el que el receptor recibe órdenes de control.",
372
372
  "descVolumeInterlock": "Si un aparato AirPlay puede cambiar el volumen de este receptor.",
373
373
  "descElapsedTime": "En segundos, para poder calcular; la forma legible está al lado.",
374
- "descTotalTime": "En segundos, para poder calcular; la forma legible está al lado."
374
+ "descTotalTime": "En segundos, para poder calcular; la forma legible está al lado.",
375
+ "descVolumeDB": "El mismo volumen que muestra la pantalla del receptor, en decibelios.",
376
+ "descVolumeDisplayMode": "Si el receptor muestra el volumen en decibelios o como número.",
377
+ "descAudioSelect": "Qué entrada de audio de la fuente elegida escucha el receptor.",
378
+ "descLinkControl": "Equilibra estabilidad y retardo al transmitir a aparatos enlazados.",
379
+ "descLinkAudioDelay": "Si los aparatos enlazados priorizan el sincronismo labial o el audio alineado.",
380
+ "descLinkAudioQuality": "Calidad de sonido al transmitir a aparatos enlazados.",
381
+ "descClearVoice": "Destaca la voz de la mezcla, pensado para barras de sonido.",
382
+ "descBassExtension": "Extiende los graves hacia abajo en altavoces compactos.",
383
+ "descAdaptiveDSPLevel": "Hace que el efecto envolvente siga al volumen ajustado.",
384
+ "descSurround3D": "Añade altura al campo sonoro, para un escenario más alto.",
385
+ "descEqualizerMode": "Si el ecualizador funciona automáticamente o con sus ajustes.",
386
+ "descMultiroomStreamingEnabled": "Si esta zona puede transmitir a otros aparatos MusicCast.",
387
+ "descYpaoVolume": "Mantiene el equilibrio de la calibración automática también a bajo volumen.",
388
+ "descDabStatus": "En qué punto está la radio digital con la sintonía o la búsqueda.",
389
+ "descSignalQuality": "Con qué limpieza se recibe la emisora digital.",
390
+ "descDabPlus": "Verdadero cuando la emisora usa el formato digital más reciente.",
391
+ "descServiceCategory": "Si este es el servicio principal de la emisora o uno secundario.",
392
+ "descTotalStations": "Cuántas emisoras digitales encontró la última búsqueda.",
393
+ "descInitialScanProgress": "Hasta dónde llegó la primera búsqueda de emisoras, en porcentaje.",
394
+ "descTuneAidLevel": "Intensidad de recepción, como ayuda al orientar la antena."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "Le port réseau sur lequel l'ampli reçoit les commandes de pilotage.",
372
372
  "descVolumeInterlock": "Si un appareil AirPlay peut modifier le volume de cet ampli.",
373
373
  "descElapsedTime": "En secondes, pour pouvoir calculer ; la forme lisible est à côté.",
374
- "descTotalTime": "En secondes, pour pouvoir calculer ; la forme lisible est à côté."
374
+ "descTotalTime": "En secondes, pour pouvoir calculer ; la forme lisible est à côté.",
375
+ "descVolumeDB": "Le même volume que l'afficheur de l'ampli, en décibels.",
376
+ "descVolumeDisplayMode": "Si l'ampli affiche le volume en décibels ou en nombre simple.",
377
+ "descAudioSelect": "Quelle entrée audio de la source choisie l'ampli écoute.",
378
+ "descLinkControl": "Arbitre entre stabilité et latence lors de la diffusion vers les appareils liés.",
379
+ "descLinkAudioDelay": "Si les appareils liés privilégient la synchro labiale ou l'audio aligné.",
380
+ "descLinkAudioQuality": "Qualité sonore utilisée pour la diffusion vers les appareils liés.",
381
+ "descClearVoice": "Détache la voix du mixage, prévu pour les barres de son.",
382
+ "descBassExtension": "Étend le grave vers le bas sur des enceintes compactes.",
383
+ "descAdaptiveDSPLevel": "Fait suivre l'effet surround au niveau de volume réglé.",
384
+ "descSurround3D": "Ajoute de la hauteur au champ sonore, pour une scène plus haute.",
385
+ "descEqualizerMode": "Si l'égaliseur fonctionne automatiquement ou selon vos réglages.",
386
+ "descMultiroomStreamingEnabled": "Si cette zone est autorisée à diffuser vers d'autres appareils MusicCast.",
387
+ "descYpaoVolume": "Conserve l'équilibre du calibrage automatique même à bas volume.",
388
+ "descDabStatus": "Où en est la radio numérique dans l'accord ou le balayage.",
389
+ "descSignalQuality": "Avec quelle propreté la station numérique est reçue.",
390
+ "descDabPlus": "Vrai quand la station utilise le format numérique plus récent.",
391
+ "descServiceCategory": "S'il s'agit du service principal de la station ou d'un service secondaire.",
392
+ "descTotalStations": "Combien de stations numériques le dernier balayage a trouvées.",
393
+ "descInitialScanProgress": "Où en est le premier balayage des stations, en pourcentage.",
394
+ "descTuneAidLevel": "Force de réception, en aide au pointage de l'antenne."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "La porta di rete su cui il ricevitore riceve i comandi di controllo.",
372
372
  "descVolumeInterlock": "Se un apparecchio AirPlay può cambiare il volume di questo ricevitore.",
373
373
  "descElapsedTime": "In secondi, così è calcolabile; la forma leggibile è accanto.",
374
- "descTotalTime": "In secondi, così è calcolabile; la forma leggibile è accanto."
374
+ "descTotalTime": "In secondi, così è calcolabile; la forma leggibile è accanto.",
375
+ "descVolumeDB": "Lo stesso volume mostrato dal display del ricevitore, in decibel.",
376
+ "descVolumeDisplayMode": "Se il ricevitore mostra il volume in decibel o come numero.",
377
+ "descAudioSelect": "Quale ingresso audio della sorgente scelta ascolta il ricevitore.",
378
+ "descLinkControl": "Bilancia stabilità e ritardo nello streaming verso apparecchi collegati.",
379
+ "descLinkAudioDelay": "Se gli apparecchi collegati privilegiano il sincronismo labiale o l'audio allineato.",
380
+ "descLinkAudioQuality": "Qualità audio usata nello streaming verso apparecchi collegati.",
381
+ "descClearVoice": "Stacca il parlato dal missaggio, pensato per le soundbar.",
382
+ "descBassExtension": "Estende i bassi verso il basso su diffusori compatti.",
383
+ "descAdaptiveDSPLevel": "Fa seguire l'effetto surround al volume impostato.",
384
+ "descSurround3D": "Aggiunge altezza al campo sonoro, per un palco più alto.",
385
+ "descEqualizerMode": "Se l'equalizzatore lavora in automatico o con i vostri valori.",
386
+ "descMultiroomStreamingEnabled": "Se questa zona può trasmettere ad altri apparecchi MusicCast.",
387
+ "descYpaoVolume": "Mantiene l'equilibrio della taratura automatica anche a basso volume.",
388
+ "descDabStatus": "A che punto è la radio digitale con sintonia o ricerca.",
389
+ "descSignalQuality": "Con quanta pulizia viene ricevuta la stazione digitale.",
390
+ "descDabPlus": "Vero quando la stazione usa il formato digitale più recente.",
391
+ "descServiceCategory": "Se questo è il servizio principale della stazione o uno secondario.",
392
+ "descTotalStations": "Quante stazioni digitali ha trovato l'ultima ricerca.",
393
+ "descInitialScanProgress": "A che punto è la prima ricerca delle stazioni, in percentuale.",
394
+ "descTuneAidLevel": "Intensità di ricezione, come aiuto nell'orientare l'antenna."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "De netwerkpoort waarop de receiver stuurcommando's ontvangt.",
372
372
  "descVolumeInterlock": "Of een AirPlay-apparaat het volume van deze receiver mag wijzigen.",
373
373
  "descElapsedTime": "In seconden, zodat ermee gerekend kan worden; de leesbare vorm staat ernaast.",
374
- "descTotalTime": "In seconden, zodat ermee gerekend kan worden; de leesbare vorm staat ernaast."
374
+ "descTotalTime": "In seconden, zodat ermee gerekend kan worden; de leesbare vorm staat ernaast.",
375
+ "descVolumeDB": "Hetzelfde volume als op het display van de receiver, in decibel.",
376
+ "descVolumeDisplayMode": "Of de receiver het volume in decibel of als getal toont.",
377
+ "descAudioSelect": "Naar welke geluidsingang van de gekozen bron de receiver luistert.",
378
+ "descLinkControl": "Weegt stabiliteit tegen vertraging af bij streamen naar gekoppelde apparaten.",
379
+ "descLinkAudioDelay": "Of gekoppelde apparaten lipsynchroon of gelijk geluid verkiezen.",
380
+ "descLinkAudioQuality": "Geluidskwaliteit bij streamen naar gekoppelde apparaten.",
381
+ "descClearVoice": "Tilt spraak uit het geluidsbeeld, bedoeld voor soundbars.",
382
+ "descBassExtension": "Rekt het laag naar beneden bij compacte luidsprekers.",
383
+ "descAdaptiveDSPLevel": "Laat het surroundeffect het ingestelde volume volgen.",
384
+ "descSurround3D": "Voegt hoogte toe aan het klankbeeld, voor een hoger podium.",
385
+ "descEqualizerMode": "Of de equalizer automatisch werkt of op uw eigen instellingen.",
386
+ "descMultiroomStreamingEnabled": "Of deze zone naar andere MusicCast-apparaten mag streamen.",
387
+ "descYpaoVolume": "Behoudt de balans van de automatische inmeting ook bij laag volume.",
388
+ "descDabStatus": "Hoe ver de digitale radio is met afstemmen of zoeken.",
389
+ "descSignalQuality": "Hoe schoon de digitale zender wordt ontvangen.",
390
+ "descDabPlus": "Waar wanneer de zender het nieuwere, zuinigere formaat gebruikt.",
391
+ "descServiceCategory": "Of dit de hoofddienst van de zender is of een nevendienst.",
392
+ "descTotalStations": "Hoeveel digitale zenders de laatste zoekactie vond.",
393
+ "descInitialScanProgress": "Hoe ver de eerste zenderzoekactie is, in procent.",
394
+ "descTuneAidLevel": "Ontvangststerkte, als hulp bij het richten van de antenne."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "Port sieciowy, na którym amplituner przyjmuje polecenia sterujące.",
372
372
  "descVolumeInterlock": "Czy urządzenie AirPlay może zmieniać głośność tego amplitunera.",
373
373
  "descElapsedTime": "W sekundach, by dało się liczyć; czytelna forma obok.",
374
- "descTotalTime": "W sekundach, by dało się liczyć; czytelna forma obok."
374
+ "descTotalTime": "W sekundach, by dało się liczyć; czytelna forma obok.",
375
+ "descVolumeDB": "Ta sama głośność co na wyświetlaczu amplitunera, w decybelach.",
376
+ "descVolumeDisplayMode": "Czy amplituner pokazuje głośność w decybelach, czy jako liczbę.",
377
+ "descAudioSelect": "Którego wejścia audio wybranego źródła słucha amplituner.",
378
+ "descLinkControl": "Równoważy stabilność i opóźnienie przy przesyłaniu do połączonych urządzeń.",
379
+ "descLinkAudioDelay": "Czy połączone urządzenia stawiają na synchronizację z obrazem, czy równy dźwięk.",
380
+ "descLinkAudioQuality": "Jakość dźwięku przy przesyłaniu do połączonych urządzeń.",
381
+ "descClearVoice": "Wydobywa mowę z miksu, z myślą o soundbarach.",
382
+ "descBassExtension": "Rozciąga niskie tony w dół w małych głośnikach.",
383
+ "descAdaptiveDSPLevel": "Sprawia, że efekt przestrzenny podąża za ustawioną głośnością.",
384
+ "descSurround3D": "Dodaje wysokości scenie dźwiękowej.",
385
+ "descEqualizerMode": "Czy korektor działa automatycznie, czy na własnych ustawieniach.",
386
+ "descMultiroomStreamingEnabled": "Czy ta strefa może przesyłać do innych urządzeń MusicCast.",
387
+ "descYpaoVolume": "Utrzymuje balans automatycznej kalibracji także przy małej głośności.",
388
+ "descDabStatus": "Na jakim etapie strojenia lub wyszukiwania jest radio cyfrowe.",
389
+ "descSignalQuality": "Jak czysto odbierana jest stacja cyfrowa.",
390
+ "descDabPlus": "Prawda, gdy stacja używa nowszego, oszczędniejszego formatu.",
391
+ "descServiceCategory": "Czy to główna usługa stacji, czy dodatkowa.",
392
+ "descTotalStations": "Ile stacji cyfrowych znalazło ostatnie wyszukiwanie.",
393
+ "descInitialScanProgress": "Jak daleko zaszło pierwsze wyszukiwanie stacji, w procentach.",
394
+ "descTuneAidLevel": "Siła odbioru, jako pomoc przy ustawianiu anteny."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "A porta de rede em que o recetor recebe comandos de controlo.",
372
372
  "descVolumeInterlock": "Se um aparelho AirPlay pode alterar o volume deste recetor.",
373
373
  "descElapsedTime": "Em segundos, para poder calcular; a forma legível está ao lado.",
374
- "descTotalTime": "Em segundos, para poder calcular; a forma legível está ao lado."
374
+ "descTotalTime": "Em segundos, para poder calcular; a forma legível está ao lado.",
375
+ "descVolumeDB": "O mesmo volume que o visor do recetor mostra, em decibéis.",
376
+ "descVolumeDisplayMode": "Se o recetor mostra o volume em decibéis ou como número simples.",
377
+ "descAudioSelect": "Que entrada de áudio da fonte escolhida o recetor escuta.",
378
+ "descLinkControl": "Equilibra estabilidade e atraso ao transmitir para aparelhos ligados.",
379
+ "descLinkAudioDelay": "Se os aparelhos ligados privilegiam o sincronismo labial ou o áudio alinhado.",
380
+ "descLinkAudioQuality": "Qualidade de som usada na transmissão para aparelhos ligados.",
381
+ "descClearVoice": "Destaca a fala da mistura, pensado para barras de som.",
382
+ "descBassExtension": "Estende os graves para baixo em colunas compactas.",
383
+ "descAdaptiveDSPLevel": "Faz o efeito surround acompanhar o volume definido.",
384
+ "descSurround3D": "Acrescenta altura ao campo sonoro, para um palco mais alto.",
385
+ "descEqualizerMode": "Se o equalizador funciona automaticamente ou com os seus valores.",
386
+ "descMultiroomStreamingEnabled": "Se esta zona pode transmitir para outros aparelhos MusicCast.",
387
+ "descYpaoVolume": "Mantém o equilíbrio da calibração automática também em volume baixo.",
388
+ "descDabStatus": "Em que ponto está o rádio digital na sintonia ou na busca.",
389
+ "descSignalQuality": "Com que limpeza a estação digital é recebida.",
390
+ "descDabPlus": "Verdadeiro quando a estação usa o formato digital mais recente.",
391
+ "descServiceCategory": "Se este é o serviço principal da estação ou um secundário.",
392
+ "descTotalStations": "Quantas estações digitais a última busca encontrou.",
393
+ "descInitialScanProgress": "Até onde chegou a primeira busca de estações, em percentagem.",
394
+ "descTuneAidLevel": "Força de receção, como ajuda ao orientar a antena."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "Сетевой порт, на котором ресивер принимает команды управления.",
372
372
  "descVolumeInterlock": "Может ли устройство AirPlay менять громкость этого ресивера.",
373
373
  "descElapsedTime": "В секундах, чтобы с этим можно было считать; читаемая форма рядом.",
374
- "descTotalTime": "В секундах, чтобы с этим можно было считать; читаемая форма рядом."
374
+ "descTotalTime": "В секундах, чтобы с этим можно было считать; читаемая форма рядом.",
375
+ "descVolumeDB": "Та же громкость, что показывает дисплей ресивера, в децибелах.",
376
+ "descVolumeDisplayMode": "Показывает ли ресивер громкость в децибелах или простым числом.",
377
+ "descAudioSelect": "Какой аудиовход выбранного источника слушает ресивер.",
378
+ "descLinkControl": "Баланс стабильности и задержки при передаче на связанные устройства.",
379
+ "descLinkAudioDelay": "Что важнее связанным устройствам: синхрон с картинкой или ровный звук.",
380
+ "descLinkAudioQuality": "Качество звука при передаче на связанные устройства.",
381
+ "descClearVoice": "Выделяет речь из общего звучания — для саундбаров.",
382
+ "descBassExtension": "Расширяет низы вниз на компактных колонках.",
383
+ "descAdaptiveDSPLevel": "Позволяет эффекту объёма следовать за громкостью.",
384
+ "descSurround3D": "Добавляет высоту звуковому полю — сцена становится выше.",
385
+ "descEqualizerMode": "Работает ли эквалайзер автоматически или по вашим настройкам.",
386
+ "descMultiroomStreamingEnabled": "Разрешено ли этой зоне вещать на другие устройства MusicCast.",
387
+ "descYpaoVolume": "Сохраняет баланс автокалибровки комнаты и на малой громкости.",
388
+ "descDabStatus": "На каком этапе настройки или поиска находится цифровое радио.",
389
+ "descSignalQuality": "Насколько чисто принимается цифровая станция.",
390
+ "descDabPlus": "Истина, если станция использует более новый экономичный формат.",
391
+ "descServiceCategory": "Основная это служба станции или дополнительная.",
392
+ "descTotalStations": "Сколько цифровых станций нашёл последний поиск.",
393
+ "descInitialScanProgress": "Насколько продвинулся первый поиск станций, в процентах.",
394
+ "descTuneAidLevel": "Уровень приёма — в помощь при наведении антенны."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "Мережевий порт, на якому ресивер приймає команди керування.",
372
372
  "descVolumeInterlock": "Чи може пристрій AirPlay змінювати гучність цього ресивера.",
373
373
  "descElapsedTime": "У секундах, щоб можна було рахувати; зручна форма поруч.",
374
- "descTotalTime": "У секундах, щоб можна було рахувати; зручна форма поруч."
374
+ "descTotalTime": "У секундах, щоб можна було рахувати; зручна форма поруч.",
375
+ "descVolumeDB": "Та сама гучність, що на дисплеї ресивера, у децибелах.",
376
+ "descVolumeDisplayMode": "Чи показує ресивер гучність у децибелах, чи простим числом.",
377
+ "descAudioSelect": "Який аудіовхід обраного джерела слухає ресивер.",
378
+ "descLinkControl": "Баланс стабільності та затримки при передачі на пов'язані пристрої.",
379
+ "descLinkAudioDelay": "Що важливіше пов'язаним пристроям: синхрон із зображенням чи рівний звук.",
380
+ "descLinkAudioQuality": "Якість звуку при передачі на пов'язані пристрої.",
381
+ "descClearVoice": "Виділяє мовлення із загального звучання — для саундбарів.",
382
+ "descBassExtension": "Розширює низи вниз на компактних колонках.",
383
+ "descAdaptiveDSPLevel": "Дає ефекту об'ємного звуку слідувати за гучністю.",
384
+ "descSurround3D": "Додає висоти звуковому полю — сцена стає вищою.",
385
+ "descEqualizerMode": "Чи працює еквалайзер автоматично, чи за вашими налаштуваннями.",
386
+ "descMultiroomStreamingEnabled": "Чи дозволено цій зоні транслювати на інші пристрої MusicCast.",
387
+ "descYpaoVolume": "Зберігає баланс автокалібрування кімнати й на малій гучності.",
388
+ "descDabStatus": "На якому етапі налаштування чи пошуку цифрове радіо.",
389
+ "descSignalQuality": "Наскільки чисто приймається цифрова станція.",
390
+ "descDabPlus": "Істина, коли станція використовує новіший, ощадливіший формат.",
391
+ "descServiceCategory": "Чи це основна служба станції, чи додаткова.",
392
+ "descTotalStations": "Скільки цифрових станцій знайшов останній пошук.",
393
+ "descInitialScanProgress": "Наскільки просунувся перший пошук станцій, у відсотках.",
394
+ "descTuneAidLevel": "Сила прийому — на допомогу при наведенні антени."
375
395
  }
@@ -371,5 +371,25 @@
371
371
  "descYncaControlPort": "功放接收控制命令所监听的网络端口。",
372
372
  "descVolumeInterlock": "AirPlay 设备是否可以改变本功放的音量。",
373
373
  "descElapsedTime": "以秒为单位便于计算;易读形式在旁边。",
374
- "descTotalTime": "以秒为单位便于计算;易读形式在旁边。"
374
+ "descTotalTime": "以秒为单位便于计算;易读形式在旁边。",
375
+ "descVolumeDB": "与功放显示屏一致的音量,单位分贝。",
376
+ "descVolumeDisplayMode": "功放以分贝还是普通数字显示音量。",
377
+ "descAudioSelect": "功放监听所选音源的哪一路音频输入。",
378
+ "descLinkControl": "向联动设备串流时在稳定性与延迟之间取舍。",
379
+ "descLinkAudioDelay": "联动设备优先唇形同步还是音频对齐。",
380
+ "descLinkAudioQuality": "向联动设备串流时使用的音质。",
381
+ "descClearVoice": "把人声从整体声音中突出出来,面向回音壁。",
382
+ "descBassExtension": "在紧凑型音箱上向下延伸低频。",
383
+ "descAdaptiveDSPLevel": "让环绕效果随音量设置变化。",
384
+ "descSurround3D": "为环绕声场增加高度,营造更高的声场。",
385
+ "descEqualizerMode": "均衡器是自动运行,还是按您的设定。",
386
+ "descMultiroomStreamingEnabled": "本分区是否允许向其他 MusicCast 设备串流。",
387
+ "descYpaoVolume": "在低音量下仍保持自动房间校准得出的平衡。",
388
+ "descDabStatus": "数字广播的调谐或搜台进行到哪一步。",
389
+ "descSignalQuality": "数字电台的接收纯净程度。",
390
+ "descDabPlus": "电台使用更新、更高效的数字格式时为真。",
391
+ "descServiceCategory": "这是电台的主服务还是附属服务。",
392
+ "descTotalStations": "上次搜台找到的数字电台数量。",
393
+ "descInitialScanProgress": "首次搜台的进度百分比。",
394
+ "descTuneAidLevel": "接收强度,用于辅助调整天线方向。"
375
395
  }
@@ -59,31 +59,52 @@ const XML_AMP_CATALOG = [
59
59
  },
60
60
  {
61
61
  state: "soundProgram",
62
- common: { nameKey: "soundProgram", type: "string", role: "state", read: true, write: true },
62
+ common: {
63
+ nameKey: "soundProgram",
64
+ descKey: "descSoundProgram",
65
+ type: "string",
66
+ role: "state",
67
+ read: true,
68
+ write: true
69
+ },
63
70
  statusField: "soundProgram",
64
71
  toInner: (value) => `<Surround><Program_Sel><Current><Sound_Program>${(0, import_entities.escapeXmlText)(value)}</Sound_Program></Current></Program_Sel></Surround>`
65
72
  },
66
73
  {
67
74
  state: "sound.pureDirect",
68
- common: { nameKey: "pureDirect", type: "boolean", role: "switch", read: true, write: true },
75
+ common: {
76
+ nameKey: "pureDirect",
77
+ descKey: "descPureDirect",
78
+ type: "boolean",
79
+ role: "switch",
80
+ read: true,
81
+ write: true
82
+ },
69
83
  statusField: "pureDirect",
70
84
  toInner: (value) => `<Sound_Video><Pure_Direct><Mode>${value ? "On" : "Off"}</Mode></Pure_Direct></Sound_Video>`
71
85
  },
72
86
  {
73
87
  state: "sound.straight",
74
- common: { nameKey: "straight", type: "boolean", role: "switch", read: true, write: true },
88
+ common: { nameKey: "straight", descKey: "descStraight", type: "boolean", role: "switch", read: true, write: true },
75
89
  statusField: "straight",
76
90
  toInner: (value) => `<Surround><Program_Sel><Current><Straight>${value ? "On" : "Off"}</Straight></Current></Program_Sel></Surround>`
77
91
  },
78
92
  {
79
93
  state: "sound.direct",
80
- common: { nameKey: "direct", type: "boolean", role: "switch", read: true, write: true },
94
+ common: { nameKey: "direct", descKey: "descDirect", type: "boolean", role: "switch", read: true, write: true },
81
95
  statusField: "direct",
82
96
  toInner: (value) => `<Sound_Video><Direct><Mode>${value ? "On" : "Off"}</Mode></Direct></Sound_Video>`
83
97
  },
84
98
  {
85
99
  state: "sound.adaptiveDrc",
86
- common: { nameKey: "adaptiveDRC", type: "string", role: "state", read: true, write: true },
100
+ common: {
101
+ nameKey: "adaptiveDRC",
102
+ descKey: "descAdaptiveDRC",
103
+ type: "string",
104
+ role: "state",
105
+ read: true,
106
+ write: true
107
+ },
87
108
  statusField: "adaptiveDrc",
88
109
  toInner: (value) => `<Sound_Video><Adaptive_DRC>${(0, import_entities.escapeXmlText)(value)}</Adaptive_DRC></Sound_Video>`
89
110
  },
@@ -91,7 +112,14 @@ const XML_AMP_CATALOG = [
91
112
  // Read-only: openHAB reads the Dialogue_Lvl path, but the write value structure
92
113
  // (Val/Exp/Unit vs bare) is not confirmed by a reference, so no write is offered.
93
114
  state: "sound.dialogueLevel",
94
- common: { nameKey: "dialogueLevel", type: "number", role: "value", read: true, write: false },
115
+ common: {
116
+ nameKey: "dialogueLevel",
117
+ descKey: "descDialogueLevel",
118
+ type: "number",
119
+ role: "value",
120
+ read: true,
121
+ write: false
122
+ },
95
123
  statusField: "dialogueLevel"
96
124
  },
97
125
  {
@@ -156,13 +184,27 @@ const XML_AMP_CATALOG = [
156
184
  },
157
185
  {
158
186
  state: "sound.extraBass",
159
- common: { nameKey: "extraBass", type: "boolean", role: "switch", read: true, write: true },
187
+ common: {
188
+ nameKey: "extraBass",
189
+ descKey: "descExtraBass",
190
+ type: "boolean",
191
+ role: "switch",
192
+ read: true,
193
+ write: true
194
+ },
160
195
  statusField: "extraBass",
161
196
  toInner: (value) => `<Sound_Video><Extra_Bass>${value ? "Auto" : "Off"}</Extra_Bass></Sound_Video>`
162
197
  },
163
198
  {
164
199
  state: "sound.ypaoVolume",
165
- common: { nameKey: "ypaoVolume", type: "boolean", role: "switch", read: true, write: true },
200
+ common: {
201
+ nameKey: "ypaoVolume",
202
+ descKey: "descYpaoVolume",
203
+ type: "boolean",
204
+ role: "switch",
205
+ read: true,
206
+ write: true
207
+ },
166
208
  statusField: "ypaoVolume",
167
209
  toInner: (value) => `<Sound_Video><YPAO_Volume>${value ? "Auto" : "Off"}</YPAO_Volume></Sound_Video>`
168
210
  },
@@ -190,7 +232,7 @@ const XML_AMP_CATALOG = [
190
232
  // predecessor's blind `Scene_Load` is gone; nothing ever proved it worked (#615).
191
233
  {
192
234
  state: "hdmiOut1",
193
- common: { nameKey: "hdmiOUT1", type: "boolean", role: "switch", read: true, write: true },
235
+ common: { nameKey: "hdmiOUT1", descKey: "descHdmiOUT1", type: "boolean", role: "switch", read: true, write: true },
194
236
  statusField: "hdmiOut1",
195
237
  mainOnly: true,
196
238
  writeZone: "System",
@@ -198,7 +240,7 @@ const XML_AMP_CATALOG = [
198
240
  },
199
241
  {
200
242
  state: "hdmiOut2",
201
- common: { nameKey: "hdmiOUT2", type: "boolean", role: "switch", read: true, write: true },
243
+ common: { nameKey: "hdmiOUT2", descKey: "descHdmiOUT2", type: "boolean", role: "switch", read: true, write: true },
202
244
  statusField: "hdmiOut2",
203
245
  mainOnly: true,
204
246
  writeZone: "System",
@@ -206,7 +248,14 @@ const XML_AMP_CATALOG = [
206
248
  },
207
249
  {
208
250
  state: "multiroom.party",
209
- common: { nameKey: "partyModeAllZones", type: "boolean", role: "switch", read: true, write: true },
251
+ common: {
252
+ nameKey: "partyModeAllZones",
253
+ descKey: "descPartyModeAllZones",
254
+ type: "boolean",
255
+ role: "switch",
256
+ read: true,
257
+ write: true
258
+ },
210
259
  statusField: "party",
211
260
  mainOnly: true,
212
261
  writeZone: "System",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/xml/catalog.ts"],
4
- "sourcesContent": ["import type { ObjectDef } from \"../catalog/types\";\nimport type { I18nKey } from \"../i18n\";\nimport { escapeXmlText } from \"./entities\";\nimport type { BasicStatus } from \"./protocol\";\n\n/**\n * The single source for XML/YNC amplifier states: one entry per unified state\n * carries BOTH its ioBroker object (`common`) AND its Basic_Status read field +\n * PUT-XML builder \u2014 replacing the former `XML_AMP_STATES` (device-controller) /\n * `XML_STATE_MAPPINGS` (command-mapper) pair kept in sync by hand. The controller\n * reads `common`, the command-mapper reads `statusField`/`toInner`.\n */\nexport interface XmlAmpEntry {\n /** Unified state id, relative to the zone prefix. */\n state: string;\n /**\n * ioBroker common for the object, carrying its name as a translation KEY: this catalog is a\n * module-level constant, so the controller resolves the key when it creates the object.\n */\n common: Omit<ObjectDef[\"common\"], \"name\"> & { nameKey: I18nKey; descKey?: I18nKey };\n /** The Basic_Status field this state reads from; absent for a write-only command (e.g. scene recall). */\n statusField?: keyof BasicStatus;\n /** Build the inner PUT XML for a written value; absent means read-only. */\n toInner?: (value: unknown) => string;\n /** Only exists on the main zone (a system/main-wide feature like scenes, HDMI outputs, party). */\n mainOnly?: boolean;\n /** Override the write target element (e.g. `System` for HDMI outputs and party); default is the zone element. */\n writeZone?: string;\n}\n\n/** The unified XML amplifier catalog \u2014 object + read field + PUT builder in one list. */\nexport const XML_AMP_CATALOG: XmlAmpEntry[] = [\n {\n state: \"power\",\n common: { nameKey: \"power\", type: \"boolean\", role: \"switch.power\", read: true, write: true },\n statusField: \"power\",\n toInner: value => `<Power_Control><Power>${value ? \"On\" : \"Standby\"}</Power></Power_Control>`,\n },\n {\n state: \"volume\",\n common: {\n nameKey: \"volume\",\n type: \"number\",\n role: \"level.volume\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -80.5,\n max: 16.5,\n step: 0.5,\n },\n statusField: \"volume\",\n toInner: value =>\n `<Volume><Lvl><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Volume>`,\n },\n {\n state: \"mute\",\n common: { nameKey: \"mute\", type: \"boolean\", role: \"media.mute\", read: true, write: true },\n statusField: \"mute\",\n toInner: value => `<Volume><Mute>${value ? \"On\" : \"Off\"}</Mute></Volume>`,\n },\n {\n state: \"input\",\n common: { nameKey: \"input\", type: \"string\", role: \"media.input\", read: true, write: true },\n statusField: \"input\",\n toInner: value => `<Input><Input_Sel>${escapeXmlText(value)}</Input_Sel></Input>`,\n },\n {\n state: \"soundProgram\",\n common: { nameKey: \"soundProgram\", type: \"string\", role: \"state\", read: true, write: true },\n statusField: \"soundProgram\",\n toInner: value =>\n `<Surround><Program_Sel><Current><Sound_Program>${escapeXmlText(value)}</Sound_Program></Current></Program_Sel></Surround>`,\n },\n {\n state: \"sound.pureDirect\",\n common: { nameKey: \"pureDirect\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"pureDirect\",\n toInner: value => `<Sound_Video><Pure_Direct><Mode>${value ? \"On\" : \"Off\"}</Mode></Pure_Direct></Sound_Video>`,\n },\n {\n state: \"sound.straight\",\n common: { nameKey: \"straight\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"straight\",\n toInner: value =>\n `<Surround><Program_Sel><Current><Straight>${value ? \"On\" : \"Off\"}</Straight></Current></Program_Sel></Surround>`,\n },\n {\n state: \"sound.direct\",\n common: { nameKey: \"direct\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"direct\",\n toInner: value => `<Sound_Video><Direct><Mode>${value ? \"On\" : \"Off\"}</Mode></Direct></Sound_Video>`,\n },\n {\n state: \"sound.adaptiveDrc\",\n common: { nameKey: \"adaptiveDRC\", type: \"string\", role: \"state\", read: true, write: true },\n statusField: \"adaptiveDrc\",\n toInner: value => `<Sound_Video><Adaptive_DRC>${escapeXmlText(value)}</Adaptive_DRC></Sound_Video>`,\n },\n {\n // Read-only: openHAB reads the Dialogue_Lvl path, but the write value structure\n // (Val/Exp/Unit vs bare) is not confirmed by a reference, so no write is offered.\n state: \"sound.dialogueLevel\",\n common: { nameKey: \"dialogueLevel\", type: \"number\", role: \"value\", read: true, write: false },\n statusField: \"dialogueLevel\",\n },\n {\n state: \"sleep\",\n common: { nameKey: \"sleepTimer\", type: \"string\", role: \"state\", read: true, write: true },\n statusField: \"sleep\",\n toInner: value => `<Power_Control><Sleep>${escapeXmlText(value)}</Sleep></Power_Control>`,\n },\n // Tone, subwoofer trim and the Extra-Bass/YPAO toggles \u2014 exposed by the predecessor\n // adapter (yamaha-nodejs-soef) on real pre-2010 devices, and dropped in the rewrite.\n // Values verified against that library's PUT paths (audit findings F3/F4).\n // Tone/subwoofer values are real decibels on the state; the wire carries tenths with\n // Exp=1 (the same Val/Exp/Unit envelope as the volume above): *10 out, /10 on read.\n {\n state: \"sound.bass\",\n common: {\n nameKey: \"bass\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -6,\n max: 6,\n step: 0.5,\n },\n statusField: \"bass\",\n toInner: value =>\n `<Sound_Video><Tone><Bass><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Bass></Tone></Sound_Video>`,\n },\n {\n state: \"sound.treble\",\n common: {\n nameKey: \"treble\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -6,\n max: 6,\n step: 0.5,\n },\n statusField: \"treble\",\n toInner: value =>\n `<Sound_Video><Tone><Treble><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Treble></Tone></Sound_Video>`,\n },\n {\n state: \"sound.subwooferTrim\",\n common: {\n nameKey: \"subwooferTrim\",\n descKey: \"descSubwooferTrim\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -6,\n max: 6,\n step: 0.5,\n },\n statusField: \"subwooferTrim\",\n toInner: value =>\n `<Volume><Subwoofer_Trim><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Subwoofer_Trim></Volume>`,\n },\n {\n state: \"sound.extraBass\",\n common: { nameKey: \"extraBass\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"extraBass\",\n toInner: value => `<Sound_Video><Extra_Bass>${value ? \"Auto\" : \"Off\"}</Extra_Bass></Sound_Video>`,\n },\n {\n state: \"sound.ypaoVolume\",\n common: { nameKey: \"ypaoVolume\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"ypaoVolume\",\n toInner: value => `<Sound_Video><YPAO_Volume>${value ? \"Auto\" : \"Off\"}</YPAO_Volume></Sound_Video>`,\n },\n {\n state: \"sound.dialogueLift\",\n common: {\n nameKey: \"dialogueLift\",\n descKey: \"descDialogueLift\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n min: 0,\n max: 5,\n step: 1,\n },\n statusField: \"dialogueLift\",\n toInner: value =>\n `<Sound_Video><Dialogue_Adjust><Dialogue_Lift>${Number(value)}</Dialogue_Lift></Dialogue_Adjust></Sound_Video>`,\n },\n // HDMI outputs and party \u2014 the predecessor's setHDMIOutput / partyMode.\n // Main-zone-only; both are written on the System element (writeZone).\n // Scenes are NOT in this static list: the device declares its scenes itself\n // (`<Scene_Sel_Item>`: which exist, their titles, the `Scene_Sel` write value \u2014\n // per zone), so the controller builds them from that declaration. The\n // predecessor's blind `Scene_Load` is gone; nothing ever proved it worked (#615).\n {\n state: \"hdmiOut1\",\n common: { nameKey: \"hdmiOUT1\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"hdmiOut1\",\n mainOnly: true,\n writeZone: \"System\",\n toInner: value => `<Sound_Video><HDMI><Output><OUT_1>${value ? \"On\" : \"Off\"}</OUT_1></Output></HDMI></Sound_Video>`,\n },\n {\n state: \"hdmiOut2\",\n common: { nameKey: \"hdmiOUT2\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"hdmiOut2\",\n mainOnly: true,\n writeZone: \"System\",\n toInner: value => `<Sound_Video><HDMI><Output><OUT_2>${value ? \"On\" : \"Off\"}</OUT_2></Output></HDMI></Sound_Video>`,\n },\n {\n state: \"multiroom.party\",\n common: { nameKey: \"partyModeAllZones\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"party\",\n mainOnly: true,\n writeZone: \"System\",\n toInner: value => `<Party_Mode><Mode>${value ? \"On\" : \"Off\"}</Mode></Party_Mode>`,\n },\n];\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ObjectDef } from \"../catalog/types\";\nimport type { I18nKey } from \"../i18n\";\nimport { escapeXmlText } from \"./entities\";\nimport type { BasicStatus } from \"./protocol\";\n\n/**\n * The single source for XML/YNC amplifier states: one entry per unified state\n * carries BOTH its ioBroker object (`common`) AND its Basic_Status read field +\n * PUT-XML builder \u2014 replacing the former `XML_AMP_STATES` (device-controller) /\n * `XML_STATE_MAPPINGS` (command-mapper) pair kept in sync by hand. The controller\n * reads `common`, the command-mapper reads `statusField`/`toInner`.\n */\nexport interface XmlAmpEntry {\n /** Unified state id, relative to the zone prefix. */\n state: string;\n /**\n * ioBroker common for the object, carrying its name as a translation KEY: this catalog is a\n * module-level constant, so the controller resolves the key when it creates the object.\n */\n common: Omit<ObjectDef[\"common\"], \"name\"> & { nameKey: I18nKey; descKey?: I18nKey };\n /** The Basic_Status field this state reads from; absent for a write-only command (e.g. scene recall). */\n statusField?: keyof BasicStatus;\n /** Build the inner PUT XML for a written value; absent means read-only. */\n toInner?: (value: unknown) => string;\n /** Only exists on the main zone (a system/main-wide feature like scenes, HDMI outputs, party). */\n mainOnly?: boolean;\n /** Override the write target element (e.g. `System` for HDMI outputs and party); default is the zone element. */\n writeZone?: string;\n}\n\n/** The unified XML amplifier catalog \u2014 object + read field + PUT builder in one list. */\nexport const XML_AMP_CATALOG: XmlAmpEntry[] = [\n {\n state: \"power\",\n common: { nameKey: \"power\", type: \"boolean\", role: \"switch.power\", read: true, write: true },\n statusField: \"power\",\n toInner: value => `<Power_Control><Power>${value ? \"On\" : \"Standby\"}</Power></Power_Control>`,\n },\n {\n state: \"volume\",\n common: {\n nameKey: \"volume\",\n type: \"number\",\n role: \"level.volume\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -80.5,\n max: 16.5,\n step: 0.5,\n },\n statusField: \"volume\",\n toInner: value =>\n `<Volume><Lvl><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Volume>`,\n },\n {\n state: \"mute\",\n common: { nameKey: \"mute\", type: \"boolean\", role: \"media.mute\", read: true, write: true },\n statusField: \"mute\",\n toInner: value => `<Volume><Mute>${value ? \"On\" : \"Off\"}</Mute></Volume>`,\n },\n {\n state: \"input\",\n common: { nameKey: \"input\", type: \"string\", role: \"media.input\", read: true, write: true },\n statusField: \"input\",\n toInner: value => `<Input><Input_Sel>${escapeXmlText(value)}</Input_Sel></Input>`,\n },\n {\n state: \"soundProgram\",\n common: {\n nameKey: \"soundProgram\",\n descKey: \"descSoundProgram\",\n type: \"string\",\n role: \"state\",\n read: true,\n write: true,\n },\n statusField: \"soundProgram\",\n toInner: value =>\n `<Surround><Program_Sel><Current><Sound_Program>${escapeXmlText(value)}</Sound_Program></Current></Program_Sel></Surround>`,\n },\n {\n state: \"sound.pureDirect\",\n common: {\n nameKey: \"pureDirect\",\n descKey: \"descPureDirect\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n statusField: \"pureDirect\",\n toInner: value => `<Sound_Video><Pure_Direct><Mode>${value ? \"On\" : \"Off\"}</Mode></Pure_Direct></Sound_Video>`,\n },\n {\n state: \"sound.straight\",\n common: { nameKey: \"straight\", descKey: \"descStraight\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"straight\",\n toInner: value =>\n `<Surround><Program_Sel><Current><Straight>${value ? \"On\" : \"Off\"}</Straight></Current></Program_Sel></Surround>`,\n },\n {\n state: \"sound.direct\",\n common: { nameKey: \"direct\", descKey: \"descDirect\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"direct\",\n toInner: value => `<Sound_Video><Direct><Mode>${value ? \"On\" : \"Off\"}</Mode></Direct></Sound_Video>`,\n },\n {\n state: \"sound.adaptiveDrc\",\n common: {\n nameKey: \"adaptiveDRC\",\n descKey: \"descAdaptiveDRC\",\n type: \"string\",\n role: \"state\",\n read: true,\n write: true,\n },\n statusField: \"adaptiveDrc\",\n toInner: value => `<Sound_Video><Adaptive_DRC>${escapeXmlText(value)}</Adaptive_DRC></Sound_Video>`,\n },\n {\n // Read-only: openHAB reads the Dialogue_Lvl path, but the write value structure\n // (Val/Exp/Unit vs bare) is not confirmed by a reference, so no write is offered.\n state: \"sound.dialogueLevel\",\n common: {\n nameKey: \"dialogueLevel\",\n descKey: \"descDialogueLevel\",\n type: \"number\",\n role: \"value\",\n read: true,\n write: false,\n },\n statusField: \"dialogueLevel\",\n },\n {\n state: \"sleep\",\n common: { nameKey: \"sleepTimer\", type: \"string\", role: \"state\", read: true, write: true },\n statusField: \"sleep\",\n toInner: value => `<Power_Control><Sleep>${escapeXmlText(value)}</Sleep></Power_Control>`,\n },\n // Tone, subwoofer trim and the Extra-Bass/YPAO toggles \u2014 exposed by the predecessor\n // adapter (yamaha-nodejs-soef) on real pre-2010 devices, and dropped in the rewrite.\n // Values verified against that library's PUT paths (audit findings F3/F4).\n // Tone/subwoofer values are real decibels on the state; the wire carries tenths with\n // Exp=1 (the same Val/Exp/Unit envelope as the volume above): *10 out, /10 on read.\n {\n state: \"sound.bass\",\n common: {\n nameKey: \"bass\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -6,\n max: 6,\n step: 0.5,\n },\n statusField: \"bass\",\n toInner: value =>\n `<Sound_Video><Tone><Bass><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Bass></Tone></Sound_Video>`,\n },\n {\n state: \"sound.treble\",\n common: {\n nameKey: \"treble\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -6,\n max: 6,\n step: 0.5,\n },\n statusField: \"treble\",\n toInner: value =>\n `<Sound_Video><Tone><Treble><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Treble></Tone></Sound_Video>`,\n },\n {\n state: \"sound.subwooferTrim\",\n common: {\n nameKey: \"subwooferTrim\",\n descKey: \"descSubwooferTrim\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n unit: \"dB\",\n min: -6,\n max: 6,\n step: 0.5,\n },\n statusField: \"subwooferTrim\",\n toInner: value =>\n `<Volume><Subwoofer_Trim><Val>${Math.round(Number(value) * 10)}</Val><Exp>1</Exp><Unit>dB</Unit></Subwoofer_Trim></Volume>`,\n },\n {\n state: \"sound.extraBass\",\n common: {\n nameKey: \"extraBass\",\n descKey: \"descExtraBass\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n statusField: \"extraBass\",\n toInner: value => `<Sound_Video><Extra_Bass>${value ? \"Auto\" : \"Off\"}</Extra_Bass></Sound_Video>`,\n },\n {\n state: \"sound.ypaoVolume\",\n common: {\n nameKey: \"ypaoVolume\",\n descKey: \"descYpaoVolume\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n statusField: \"ypaoVolume\",\n toInner: value => `<Sound_Video><YPAO_Volume>${value ? \"Auto\" : \"Off\"}</YPAO_Volume></Sound_Video>`,\n },\n {\n state: \"sound.dialogueLift\",\n common: {\n nameKey: \"dialogueLift\",\n descKey: \"descDialogueLift\",\n type: \"number\",\n role: \"level\",\n read: true,\n write: true,\n min: 0,\n max: 5,\n step: 1,\n },\n statusField: \"dialogueLift\",\n toInner: value =>\n `<Sound_Video><Dialogue_Adjust><Dialogue_Lift>${Number(value)}</Dialogue_Lift></Dialogue_Adjust></Sound_Video>`,\n },\n // HDMI outputs and party \u2014 the predecessor's setHDMIOutput / partyMode.\n // Main-zone-only; both are written on the System element (writeZone).\n // Scenes are NOT in this static list: the device declares its scenes itself\n // (`<Scene_Sel_Item>`: which exist, their titles, the `Scene_Sel` write value \u2014\n // per zone), so the controller builds them from that declaration. The\n // predecessor's blind `Scene_Load` is gone; nothing ever proved it worked (#615).\n {\n state: \"hdmiOut1\",\n common: { nameKey: \"hdmiOUT1\", descKey: \"descHdmiOUT1\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"hdmiOut1\",\n mainOnly: true,\n writeZone: \"System\",\n toInner: value => `<Sound_Video><HDMI><Output><OUT_1>${value ? \"On\" : \"Off\"}</OUT_1></Output></HDMI></Sound_Video>`,\n },\n {\n state: \"hdmiOut2\",\n common: { nameKey: \"hdmiOUT2\", descKey: \"descHdmiOUT2\", type: \"boolean\", role: \"switch\", read: true, write: true },\n statusField: \"hdmiOut2\",\n mainOnly: true,\n writeZone: \"System\",\n toInner: value => `<Sound_Video><HDMI><Output><OUT_2>${value ? \"On\" : \"Off\"}</OUT_2></Output></HDMI></Sound_Video>`,\n },\n {\n state: \"multiroom.party\",\n common: {\n nameKey: \"partyModeAllZones\",\n descKey: \"descPartyModeAllZones\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n statusField: \"party\",\n mainOnly: true,\n writeZone: \"System\",\n toInner: value => `<Party_Mode><Mode>${value ? \"On\" : \"Off\"}</Mode></Party_Mode>`,\n },\n];\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }