summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2016-05-23 18:02:18 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2016-05-23 18:02:18 +0200
commit36169ffe15721ef2c56adab244ebbb4cddcc887c (patch)
treee5ad4a83fb65ba23ad91aae43e29dfc26d2708fa /main.py
downloaddenon-dran5-master.tar.gz
denon-dran5-master.zip
first commitHEADmaster
Diffstat (limited to 'main.py')
-rwxr-xr-xmain.py134
1 files changed, 134 insertions, 0 deletions
diff --git a/main.py b/main.py
new file mode 100755
index 0000000..c7ae3c6
--- /dev/null
+++ b/main.py
@@ -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"))