diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2016-05-23 18:02:18 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2016-05-23 18:02:18 +0200 |
| commit | 36169ffe15721ef2c56adab244ebbb4cddcc887c (patch) | |
| tree | e5ad4a83fb65ba23ad91aae43e29dfc26d2708fa /main.py | |
| download | denon-dran5-master.tar.gz denon-dran5-master.zip | |
Diffstat (limited to 'main.py')
| -rwxr-xr-x | main.py | 134 |
1 files changed, 134 insertions, 0 deletions
@@ -0,0 +1,134 @@ +#!/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")) |
