# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import telnetlib, threading, time
# Controls Server Technology CW-16V1-C20M switched CDUs over Telnet
# Opens a new connection for every command to
# avoid threading and address space conflicts
class PowerStrip():
def __init__(self, host, user='admn', password='admn'):
self.host = host
self.user = user
self.password = password
def reboot(self, outlet, delay=0):
self.command('reboot', outlet, delay)
def off(self, outlet, delay=0):
self.command('off', outlet, delay)
def on(self, outlet, delay=0):
self.command('on', outlet, delay)
def command(self, command, outlet=1, delay=0):
if delay == 0:
self._do_command(command, outlet)
else:
threading.Timer(delay, self._do_command, (command, outlet)).start()
def _do_command(self, command, outlet=1):
tn = telnetlib.Telnet(self.host)
tn.read_until('Username: ')
tn.write(self.user + '\n')
tn.read_until('Password: ')
tn.write(self.password + '\n')
tn.read_until('Switched CDU: ')
tn.write('%s .a%d\n' % (command, outlet))
tn.read_some()
tn.close()