XSmart System Tray – Power Control Python Script

Overview

The power supply fans, accessory power and PoE ports on the XSmart System Tray can be controlled via a simple Python script.

Step-By-Step Instructions

  1. Implement the following Python script:

    ######### Start Script ########
    #!/usr/bin/python
    
    #
    # Usage example is at the bottom.
    #
    
    import urllib, urllib2, json
    
    class BoardController:
    	def __init__(self, host, user=None, passwd=None):
    		self.creds = {'username': user, 'password': passwd}
    		self.host = host
    		self.retried = False
    		self.authToken = None
    
    	def authenticate(self):
    		url = "{host}/api/board/auth/login".format(host=self.host)
    		data = json.dumps(self.creds)
    		resp = json.loads(self.call(url, data))
    		self.authToken = resp['data']['token']
    
    	def call(self, url, data=None):
    		def do():
    			req = urllib2.Request(url, data)
    			req.add_header("Content-Type", "application/json")
    
    			if self.authToken is not None:
    				req.add_header("Authorization", "Bearer " + self.authToken)
    			return urllib2.urlopen(req)
    
    		try:
    			return do().read()
    		except urllib2.HTTPError, e:
    			if e.code in (401, 403) and not self.retried:
    				self.retried = True
    				self.authenticate()
    				return do().read()
    
    	def component(self, name, state):
    		url = "{host}/api/board/components/{name}/{state}".format(host=self.host, name=name, state=state)
    		self.call(url, "{}")
    
    	def on(self, component):
    		self.component(component, "on")
    
    	def off(self, component):
    		self.component(component, "off")
    
    
    # ------------------------------------------------------------------------------------------------------------
    
    # Board host is formatted as http://[IP_Address]:[HTTP_Port]. 
    # Replace ,  and  below with the actual Values.
    
    board = BoardController("http://:", "admin", "")
    
    # Component aliases have to be used as component names. They are listed in the API doc
    # in the Components section.  Un-comment the ports to enable by removing the "#" in the lines below.  "board.on" turns port on.  
    # "board.off" turns port off.  "Poe" is 24vdc passive PoE on switch port 4.  "Apoe" is active PoE on 
    # switch port 1.  "fans" are the XSmart System Tray Circulation Fans.
    
    #board.off("vdc12_1")
    #board.off("vdc12_2")
    #board.off("vdc24_1")
    #board.off("vdc24_2")
    #board.off("poe")
    #board.on("apoe")
    #board.on("fans")
    
    # Continue with other components if needed...
    
    ######### END SCRIPT #############