Updated to support older APC PDUs such as Neils APC (management software v3.0.3)
diff --git a/lavapdu/apcdrivers.py b/lavapdu/apcdrivers.py
index c840ba6..72d0d54 100644
--- a/lavapdu/apcdrivers.py
+++ b/lavapdu/apcdrivers.py
@@ -44,12 +44,18 @@
#self.connection.expect("4- Logout")
#self.connection.expect("> ")
- def _enter_outlet(self, outlet):
- self.connection.expect("Press <ENTER> to continue...")
+ def _enter_outlet(self, outlet, enter_needed=True):
+ outlet = "%s" % outlet
+ logging.debug("Attempting to enter outlet %s", outlet)
+ if (enter_needed):
+ self.connection.expect("Press <ENTER> to continue...")
+ logging.debug("Sending enter")
self.connection.send("\r")
self.connection.expect("> ")
+ logging.debug("Sending outlet number")
self.connection.send(outlet)
self.connection.send("\r")
+ logging.debug("Finished entering outlet")
def _port_interaction(self, command, port_number):
print("Attempting command: %s port: %i" % (command, port_number))
@@ -58,8 +64,10 @@
self.connection.send("\r")
self.connection.expect("1- Device Manager")
self.connection.expect("> ")
+ logging.debug("Entering Device Manager")
self.connection.send("1\r")
- res = self.connection.expect(["3- Outlet Control/Configuration","2- Outlet Control","2- Outlet Management"])
+ res = self.connection.expect(["3- Outlet Control/Configuration","2- Outlet Control","2- Outlet Management","------- Device Manager"])
+ logging.debug("Matched pattern %s", res)
if res == 0:
self.connection.send("3\r")
self._enter_outlet(port_number)
@@ -68,6 +76,9 @@
self._enter_outlet(port_number)
elif res == 2:
self.connection.send("2\r")
+ elif res == 3:
+ logging.debug("Matched ------- Device Manager")
+ self._enter_outlet(port_number, False)
res = self.connection.expect(["1- Control Outlet", "1- Outlet Control/Configuration"])
self.connection.expect("> ")
self.connection.send("1\r")
@@ -75,9 +86,13 @@
if res == 1:
logging.debug("Stupid paging thingmy detected, pressing enter")
self.connection.send("\r")
- logging.debug("We should now be at the outlet list")
- self.connection.send("%s\r" % port_number)
- self.connection.send("1\r")
+ self.connection.send("\r")
+ res = self.connection.expect(["Control Outlet %s" % port_number,"Control Outlet"])
+ if res == 0:
+ logging.debug("Already at the right port")
+ else:
+ self.connection.send("%s\r" % port_number)
+ self.connection.send("1\r")
self.connection.expect("3- Immediate Reboot")
self.connection.expect("> ")
if command == "reboot":
@@ -149,4 +164,4 @@
self._port_interaction("off", port_number)
def port_reboot(self, port_number):
- self._port_interaction("reboot", port_number)
\ No newline at end of file
+ self._port_interaction("reboot", port_number)
diff --git a/lavapdu/engine.py b/lavapdu/engine.py
index 6cb08a4..e8ab9ca 100644
--- a/lavapdu/engine.py
+++ b/lavapdu/engine.py
@@ -21,6 +21,7 @@
import pexpect
import os
import logging
+import sys
from apcdrivers import apc8959
from apcdrivers import apc7952
@@ -57,6 +58,7 @@
def get_connection(self, exec_string):
connection = pexpect.spawn(exec_string)
+ connection.logfile = sys.stdout
return connection
def is_busy(self):
@@ -80,22 +82,31 @@
if __name__ == "__main__":
- pe1 = PDUEngine("pdu15")
- pe1.driver.port_off(22)
- pe1.driver.port_on(22)
- pe1.close()
- pe2 = PDUEngine("pdu14")
- pe2.driver.port_off(6)
- pe2.driver.port_on(6)
- pe2.close()
- pe3 = PDUEngine("pdu01")
- pe3.driver.port_reboot(1)
- pe3.driver.port_off(1)
- pe3.driver.port_on(1)
- pe3.close()
- pe4 = PDUEngine("pdu02")
+ #pe1 = PDUEngine("pdu15")
+ #pe1.driver.port_off(22)
+ #pe1.driver.port_on(22)
+ #pe1.close()
+ #pe2 = PDUEngine("pdu14")
+ #pe2.driver.port_off(6)
+ #pe2.driver.port_on(6)
+ #pe2.close()
+ #pe3 = PDUEngine("pdu01")
+ #pe3.driver.port_reboot(1)
+ #pe3.driver.port_off(1)
+ #pe3.driver.port_on(1)
+ #pe3.close()
+ logging.basicConfig(level=logging.DEBUG)
+ logging.getLogger().setLevel(logging.DEBUG)
+ pe4 = PDUEngine("192.168.1.153")
+ pe4.driver.port_reboot(1)
+ pe4.driver.port_reboot(2)
+ pe4.driver.port_reboot(3)
+ pe4.driver.port_reboot(4)
+ pe4.driver.port_reboot(5)
+ pe4.driver.port_reboot(6)
+ pe4.driver.port_reboot(7)
pe4.driver.port_reboot(8)
- pe4.driver.port_off(8)
- pe4.driver.port_on(8)
+ #pe4.driver.port_off(8)
+ #pe4.driver.port_on(8)
pe4.close()