1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import telnetlib, threading, time 6 7 # Controls Server Technology CW-16V1-C20M switched CDUs over Telnet 8 # Opens a new connection for every command to 9 # avoid threading and address space conflicts 10 11 class PowerStrip(): 12 def __init__(self, host, user='admn', password='admn'): 13 self.host = host 14 self.user = user 15 self.password = password 16 17 def reboot(self, outlet, delay=0): 18 self.command('reboot', outlet, delay) 19 20 def off(self, outlet, delay=0): 21 self.command('off', outlet, delay) 22 23 def on(self, outlet, delay=0): 24 self.command('on', outlet, delay) 25 26 def command(self, command, outlet=1, delay=0): 27 if delay == 0: 28 self._do_command(command, outlet) 29 else: 30 threading.Timer(delay, self._do_command, (command, outlet)).start() 31 32 def _do_command(self, command, outlet=1): 33 tn = telnetlib.Telnet(self.host) 34 tn.read_until('Username: ') 35 tn.write(self.user + '\n') 36 tn.read_until('Password: ') 37 tn.write(self.password + '\n') 38 tn.read_until('Switched CDU: ') 39 tn.write('%s .a%d\n' % (command, outlet)) 40 tn.read_some() 41 tn.close() 42