#!/usr/bin/env python3 import sys import time import telnetlib class DenonDraN5(object): def __init__(self, ip): self.ip = ip self.tn = telnetlib.Telnet(ip) def sendRaw(self, msg): resp = '' self.tn.write(bytearray(msg + '\r', 'utf-8')) data = self.tn.read_until(b'\r', 0.2).decode('utf-8') while len(data) > 0: resp += data + '\n' data = self.tn.read_until(b'\r', 0.2).decode('utf-8') return resp[:len(resp) - 1] # remove last newline def queryRaw(self, msg): return self.sendRaw(msg + '?') def power(self, on = False, off = False): if on == True: return self.sendRaw('PWON') else: if off == True: return self.sendRaw('PWSTANDBY') return self.queryRaw('PW') def volume(self, volume = -1, increase = False, decrease = False, mute = False): if (volume == -1 and increase == False and decrease == False and mute == False): return self.queryRaw('MV') if mute == True: return self.sendRaw('MUON') if increase == True: return self.sendRaw('MVUP') if decrease == True: return self.sendRaw('MVDOWN') return self.sendRaw('MV' + str(volume).zfill(2)) def source(self, source = ''): if source == '': return self.queryRaw('SI') return self.sendRaw('SI' + source) def sleep(self, minutes = -1, off = False): if minutes == -1 and off == False: return self.queryRaw('SLP') if off == True: return self.sendRaw('SLPOFF') return self.sendRaw('SLP' + str(mintes).zfill(3)) def timer(self): # TODO return self.queryRaw('CLK') def sound(self): # TODO return '' def favorite(self, goto = -1, number = -1, store = False, delete = False): if goto == -1 and number == -1: return self.queryRaw('FV ') if number == -1: return self.sendRaw('FV ' + str(number).zfill(2)) if store == True: return self.sendRaw('FVMEM ' + str(number).zfill(2)) return self.sendRaw('FVDEL ' + str(number).zfill(2)) def prettify(self, msg): words = { 'PWON': 'Powered on', 'PWSTANDBY': 'In standby', 'MV': 'Volume ', 'MUON': 'Muted', 'MUOFF': 'Not muted', 'SIIRADIO': 'Playing radio', 'SISERVER': 'Playing from server' } resp = '' for line in msg.split('\n'): for key, value in words.items(): if key in line: line = line.replace(key, value) else: if value in line: line = line.replace(value, key) resp += line + '\n' return resp[:len(resp) - 1] # remove last newline def display(self): resp = '' resp += self.sendRaw('NSE') return resp def state(self, setState = ''): if setState == '': resp = self.power() time.sleep(1) resp += self.source() time.sleep(1) resp += self.volume() time.sleep(1) resp += self.sleep() time.sleep(1) resp += self.timer() time.sleep(1) resp += self.sound() time.sleep(1) #resp += self.favorite() return resp myPiccolo = DenonDraN5('192.168.1.85') print(myPiccolo.power(off=True)) #print(myPiccolo.sendRaw("NS9Z"))