yamahayxc
Ein Plugin zur Steuerung von Yamaha MusicCast-kompatiblen Geräten (Receiver, Streaminglautsprecher u.ä.), z.B. An/Aus, Eingangswahl, Lautstärke und Mute, Play/Pause, aktuellen Status lesen
Die Grundlage für das Plugin wurde schamlos bei Raoul Thill geklaut, dem Autor des yamaha-Plugins für ältere Yamaha-Receiver in SmartHomeNG.
Anmerkungen
Das Plugin wird nach Bedarf weiterentwickelt und unterstützt noch längst nicht alle möglichen Funktionen, die im Yamaha Extended Control (YXC)-Standard definiert sind. Ich nutze es aber selbst täglich. Die genutzten und getesteten Geräte sind RX-V483, ISX-18D und WX-010. Das Plugin nutzt die YXC API, welche auf dem Austausch von JSON-formatierten Daten basiert. Es abonniert die Daten der konfigurierten Geräte, um laufend mit Statusmeldungen versorgt zu werden. Diese werden per UDP verteilt, solange eine Kommunikation zwischen Client (Plugin) und Gerät erfolgt und 10 Minuten nach der letzten Kommunikation. Das Plugin kann mit mehreren Verbindungen gleichzeitig umgehen. Bisher habe ich keine Fehler feststellen können, aber ich habe nur 5 Geräte zum Testen.
Items können nach eigenen Vorstellungen eingerichtet werden; sie werden vom Plugin durch das Item-Attribut yamahayxc_cmd
identifiziert. Steuerungs- und Statusitems können unterhalb des Geräteitems nicht verzweigen, sie müssen alle auf derselben Ebene unmittelbar unterhalb des Geräteitems sein. (sorry)
Das update
-Item hat keine eigene Funktion. Wenn dieses Item geändert wird, wird der aktuelle Status vom Gerät aktiv abgefragt. Solange das Abonnement aktiv ist, wird das nicht benötigt, weil die Daten vom Gerät aktiv aktuell gehalten werden. Wenn der Timeout von 10 Minuten überschritten ist und mit dem update
-Item die Informationen abgefragt werden, läuft das Abonnement von Neuem los.
Änderungen, Hinweise und Erweiterungen werden jederzeit angenommen, Wünsche können etwas dauern…
Derzeit sind nur die Zonen main und netusb implementiert. Weitere Zonen werden gern aufgenommen, wenn Testhardware zur Verfügung gestellt wird ;)
Seit SmartHomeNG v1.7 werden Item-Structs bereitgestellt, mit denen die Funktionalitäten eines einfachen Players und zusätzlich Weckerfunktionen genutzt werden können.
Anforderungen
Das folgende Python-Modul muss vorhanden sein:
requests
Dies wird normalerweise durch SmartHomeNG automatisch installiert. Wer es manuell installieren möchte, kann das über das PIP-Tool oder über die Distribution tun:
# Python
pip3 install requests
# Debian based
sudo apt-get install python3-requests
# Arch Linux
sudo pacman -S python-requests
# Fedora
sudo dnf install python3-requests
Konfiguration
plugin.yaml
yamahayxc:
plugin_name = YamahaYXC
items.yaml
media:
wx010:
yamahayxc_host: 192.168.2.211
yamahayxc_zone: main
struct: yamahayxc.basic
oder ohne Item-Structs (mit identischem Resultat):
media:
wx010:
yamahayxc_host: 192.168.2.211
yamahayxc_zone: main
# writable items to control device/playback
# True = power on, False = standby
power:
type: bool
yamahayxc_cmd: power
enforce_updates: 'True'
# numeric volume. Range is 0..60 on my devices. May vary
volume:
type: num
yamahayxc_cmd: volume
enforce_updates: 'True'
# True = mute enable, False = mute disable
mute:
type: bool
yamahayxc_cmd: mute
enforce_updates: 'True'
# input source as string. Heavily dependent on device.
input:
type: str
yamahayxc_cmd: input
enforce_updates: 'True'
# possible values are 'play', 'stop', 'pause', 'previous', 'next'...
playback:
type: str
yamahayxc_cmd: playback
enforce_updates: 'True'
# values are numeric and can (as of now) not be queried by the plugin
preset:
type: num
yamahayxc_cmd: preset
enforce_updates: 'True'
# values are numeric and can be 0 / 30 / 60 / 90 / 120 [minutes]
sleep:
type: num
yamahayxc_cmd: sleep
enforce_updates: 'True'
# read-only items to monitor device/playback status
# name of current track, if available
track:
type: str
yamahayxc_cmd: track
# name of current artist, if available. Radio station name for net_radio
artist:
type: str
yamahayxc_cmd: artist
# this is the URL of current album art image, if supported / supplied
# it is hosted on the respective yamaha device
albumart:
type: str
yamahayxc_cmd: albumart
# current time of playback in percent of total_time
# -1 if total_time is not available
play_pos:
type: num
yamahayxc_cmd: play_time
# total time of playback in seconds. 0 if not applicable / available
totaltime:
type: num
yamahayxc_cmd: total_time
# write-only item to pass arbitrary command. Use at own discretion
passthru:
type: str
yamahayxc_cmd: passthru
enforce_updates: 'True'
# write-only item to force update of all items above. See notes.
update:
type: bool
yamahayxc_cmd: state
enforce_updates: 'True'
# the following items are only valid for devices with alarm clock functions
# these are included in addition to the others from the 'alarm' struct:
# enable / disable alarm function
alarm_on:
type: bool
yamahayxc_cmd: alarm_on
enforce_updates: 'True'
# enable / disable alarm beep (solo or in addition to music)
alarm_beep:
type: bool
yamahayxc_cmd: alarm_beep
enforce_updates: 'True'
# get/set alarm time. Formatted as 4 digit 24 hour string
alarm_time:
type: str
yamahayxc_cmd: alarm_time
enforce_updates: 'True'
Beispiel der Nutzung per CLI-Plugin
> up media.wx010.power=True
> up media.wx010.input=net_radio
> up media.wx010.volume=15
> up media.wx010.mute=True
> up media.wx010.mute=False
> up media.wx010.playback=play
> up media.wx010.power=False
> up media.wx010.passthru='v1/Main/setPower?power=off'
> up media.wx010.alarm_time='1430'
- PS:
Das war gelogen. Der WX-010 hat gar keine Wecker-Funktionen…