def __init__(self, config): """Initialize the amplifier.""" self._name = config[CONF_NAME] self._nad_receiver = NADReceiverTCP(config.get(CONF_HOST)) self._min_vol = (config[CONF_MIN_VOLUME] + 90) * 2 # from dB to nad vol (0-200) self._max_vol = (config[CONF_MAX_VOLUME] + 90) * 2 # from dB to nad vol (0-200) self._volume_step = config[CONF_VOLUME_STEP] self._state = None self._mute = None self._nad_volume = None self._volume = None self._source = None self._source_list = self._nad_receiver.available_sources()
def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the NAD platform.""" if config.get(CONF_TYPE) == 'RS232': from nad_receiver import NADReceiver add_entities([ NAD(config.get(CONF_NAME), NADReceiver( config.get(CONF_SERIAL_PORT)), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_SOURCE_DICT)) ], True) elif config.get(CONF_TYPE) == 'Telnet': from nad_receiver import NADReceiverTelnet add_entities([ NAD( config.get(CONF_NAME), NADReceiverTelnet(config.get(CONF_HOST), config.get(CONF_PORT)), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_SOURCE_DICT)) ], True) else: from nad_receiver import NADReceiverTCP add_entities([ NADtcp( config.get(CONF_NAME), NADReceiverTCP(config.get(CONF_HOST)), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_VOLUME_STEP), ) ], True)
def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the NAD platform.""" from nad_receiver import NADReceiverTCP add_devices([NADtcp( NADReceiverTCP(config.get(CONF_HOST)), config.get(CONF_NAME), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_VOLUME_STEP), )], True)
def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the NAD platform.""" if config.get(CONF_TYPE) == "RS232": add_entities( [ NAD( config.get(CONF_NAME), NADReceiver(config.get(CONF_SERIAL_PORT)), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_SOURCE_DICT), ) ], True, ) elif config.get(CONF_TYPE) == "Telnet": add_entities( [ NAD( config.get(CONF_NAME), NADReceiverTelnet(config.get(CONF_HOST), config.get(CONF_PORT)), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_SOURCE_DICT), ) ], True, ) else: add_entities( [ NADtcp( config.get(CONF_NAME), NADReceiverTCP(config.get(CONF_HOST)), config.get(CONF_MIN_VOLUME), config.get(CONF_MAX_VOLUME), config.get(CONF_VOLUME_STEP), ) ], True, )
class NADtcp(MediaPlayerEntity): """Representation of a NAD Digital amplifier.""" def __init__(self, config): """Initialize the amplifier.""" self._name = config[CONF_NAME] self._nad_receiver = NADReceiverTCP(config.get(CONF_HOST)) self._min_vol = (config[CONF_MIN_VOLUME] + 90) * 2 # from dB to nad vol (0-200) self._max_vol = (config[CONF_MAX_VOLUME] + 90) * 2 # from dB to nad vol (0-200) self._volume_step = config[CONF_VOLUME_STEP] self._state = None self._mute = None self._nad_volume = None self._volume = None self._source = None self._source_list = self._nad_receiver.available_sources() @property def name(self): """Return the name of the device.""" return self._name @property def state(self): """Return the state of the device.""" return self._state @property def volume_level(self): """Volume level of the media player (0..1).""" return self._volume @property def is_volume_muted(self): """Boolean if volume is currently muted.""" return self._mute @property def supported_features(self): """Flag media player features that are supported.""" return SUPPORT_NAD def turn_off(self): """Turn the media player off.""" self._nad_receiver.power_off() def turn_on(self): """Turn the media player on.""" self._nad_receiver.power_on() def volume_up(self): """Step volume up in the configured increments.""" self._nad_receiver.set_volume(self._nad_volume + 2 * self._volume_step) def volume_down(self): """Step volume down in the configured increments.""" self._nad_receiver.set_volume(self._nad_volume - 2 * self._volume_step) def set_volume_level(self, volume): """Set volume level, range 0..1.""" nad_volume_to_set = int( round(volume * (self._max_vol - self._min_vol) + self._min_vol) ) self._nad_receiver.set_volume(nad_volume_to_set) def mute_volume(self, mute): """Mute (true) or unmute (false) media player.""" if mute: self._nad_receiver.mute() else: self._nad_receiver.unmute() def select_source(self, source): """Select input source.""" self._nad_receiver.select_source(source) @property def source(self): """Name of the current input source.""" return self._source @property def source_list(self): """List of available input sources.""" return self._nad_receiver.available_sources() def update(self): """Get the latest details from the device.""" try: nad_status = self._nad_receiver.status() except OSError: return if nad_status is None: return # Update on/off state if nad_status["power"]: self._state = STATE_ON else: self._state = STATE_OFF # Update current volume self._volume = self.nad_vol_to_internal_vol(nad_status["volume"]) self._nad_volume = nad_status["volume"] # Update muted state self._mute = nad_status["muted"] # Update current source self._source = nad_status["source"] def nad_vol_to_internal_vol(self, nad_volume): """Convert nad volume range (0-200) to internal volume range. Takes into account configured min and max volume. """ if nad_volume < self._min_vol: volume_internal = 0.0 elif nad_volume > self._max_vol: volume_internal = 1.0 else: volume_internal = (nad_volume - self._min_vol) / ( self._max_vol - self._min_vol ) return volume_internal