Refactor into __main__ block

This commit is contained in:
Reid 'arrdem' McKenzie 2021-10-11 21:26:06 -06:00
parent e02af611ad
commit b0130c27a6

View file

@ -40,10 +40,10 @@ import smbus
#
# <order> selects which Cluster CTRL devices matches that <order> number
if __name__ == "__main__":
args = len(sys.argv)
args = len(sys.argv)
if ( args == 1 or sys.argv[1] == 'help' or sys.argv[1] == '--help' or sys.argv[1] == '-h' or sys.argv[1] == '/?' ):
if ( args == 1 or sys.argv[1] == 'help' or sys.argv[1] == '--help' or sys.argv[1] == '-h' or sys.argv[1] == '/?' ):
print( "Usage :{} <cmd> ".format(sys.argv[0]) )
print( "" )
print( "## Commands <cmd>")
@ -100,93 +100,93 @@ if ( args == 1 or sys.argv[1] == 'help' or sys.argv[1] == '--help' or sys.argv[1
print( "" )
sys.exit()
# Read configruation file
#
config = {}
if os.path.isfile("/etc/default/clusterctrl"):
# Read configruation file
#
config = {}
if os.path.isfile("/etc/default/clusterctrl"):
with open ("/etc/default/clusterctrl") as configfile:
for line in configfile:
if( line[:1] != '#' ):
k, v = line.partition("=")[::2]
config[k.strip().lower()] = v.split('#')[0].strip(" \"'\n\t")
# If we're not a controller of some sort exit cleanly
if( 'type' not in config or not ( config['type'] == "c" or config['type'] == "cnat" ) ):
# If we're not a controller of some sort exit cleanly
if( 'type' not in config or not ( config['type'] == "c" or config['type'] == "cnat" ) ):
sys.exit()
# Config
# Config
# I2C address of ClusterCTRL device
I2C_ADDRESS = 0x20
# I2C address of ClusterCTRL device
I2C_ADDRESS = 0x20
# Number of Pi Zero in ClusterHAT (set below)
clusterhat_size = 0
# Number of Pi Zero in ClusterHAT (set below)
clusterhat_size = 0
# ClusterCTRL Registers
REG_VERSION = 0x00 # Register layout version
REG_MAXPI = 0x01 # Maximum number of Pi
REG_ORDER = 0x02 # Order - used to sort multiple ClusterCTRL devices
REG_MODE = 0x03 # N/A
REG_TYPE = 0x04 # 0=DA, 1=pHAT
REG_DATA7 = 0x05 #
REG_DATA6 = 0x06 #
REG_DATA5 = 0x07 #
REG_DATA4 = 0x08 #
REG_DATA3 = 0x09 #
REG_DATA2 = 0x0a #
REG_DATA1 = 0x0b #
REG_DATA0 = 0x0c #
REG_CMD = 0x0d # Command
REG_STATUS = 0x0e # Status
# ClusterCTRL Registers
REG_VERSION = 0x00 # Register layout version
REG_MAXPI = 0x01 # Maximum number of Pi
REG_ORDER = 0x02 # Order - used to sort multiple ClusterCTRL devices
REG_MODE = 0x03 # N/A
REG_TYPE = 0x04 # 0=DA, 1=pHAT
REG_DATA7 = 0x05 #
REG_DATA6 = 0x06 #
REG_DATA5 = 0x07 #
REG_DATA4 = 0x08 #
REG_DATA3 = 0x09 #
REG_DATA2 = 0x0a #
REG_DATA1 = 0x0b #
REG_DATA0 = 0x0c #
REG_CMD = 0x0d # Command
REG_STATUS = 0x0e # Status
# ClusterCTRL Commands
CMD_ON = 0x03 # Turn on Px (data0=x)
CMD_OFF = 0x04 # Turn off Px (data0=x)
CMD_ALERT_ON = 0x05 # Turn on Alert LED
CMD_ALERT_OFF = 0x06 # Turn off Alert LED
CMD_HUB_CYCLE = 0x07 # Reset USB HUB (turn off for data0*10ms, then back on)
CMD_LED_EN = 0x0A # Enable Px LED (data0=x)
CMD_LED_DIS = 0x0B # Disable Px LED (data0=x)
CMD_PWR_ON = 0x0C # Turn off PWR LED
CMD_PWR_OFF = 0x0D # Turn off PWR LED
CMD_RESET = 0x0E # Resets ClusterCTRL (does not keep power state)
CMD_GET_PSTATUS = 0x0F # Get Px power status (data0=x)
CMD_FAN = 0x10 # Turn fan on (data0=1) or off (data0=0)
CMD_GETPATH = 0x11 # Get USB path to Px (data0=x 0=controller) returned in data7-data0
CMD_USBBOOT_EN = 0x12 # Turn on USBBOOT
CMD_USBBOOT_DIS = 0x13 # Turn off USBBOOT
CMD_GET_USTATUS = 0x14 # Get Px USBBOOT status (data0=x)
CMD_SET_ORDER = 0x15 # Set order (data0=order)
CMD_SAVE = 0xF0 # Save current PWR/P1-LED/P2-LED/P1/P2/Order/Mode to EEPROM
CMD_SAVEDEFAULTS = 0xF1 # Save factory defaults
CMD_GET_DATA = 0xF2 # Get DATA (Temps/ADC/etc.)
CMD_SAVE_ORDER = 0xF3 # Save order to EEPROM
CMD_SAVE_USBBOOT = 0xF4 # Save usbboot status to EEPROM
CMD_SAVE_POS = 0xF5 # Save Power On State to EEPROM
CMD_SAVE_LED = 0xF6 # Save LED to EEPROM
CMD_NOP = 0x90 # Do nothing
# ClusterCTRL Commands
CMD_ON = 0x03 # Turn on Px (data0=x)
CMD_OFF = 0x04 # Turn off Px (data0=x)
CMD_ALERT_ON = 0x05 # Turn on Alert LED
CMD_ALERT_OFF = 0x06 # Turn off Alert LED
CMD_HUB_CYCLE = 0x07 # Reset USB HUB (turn off for data0*10ms, then back on)
CMD_LED_EN = 0x0A # Enable Px LED (data0=x)
CMD_LED_DIS = 0x0B # Disable Px LED (data0=x)
CMD_PWR_ON = 0x0C # Turn off PWR LED
CMD_PWR_OFF = 0x0D # Turn off PWR LED
CMD_RESET = 0x0E # Resets ClusterCTRL (does not keep power state)
CMD_GET_PSTATUS = 0x0F # Get Px power status (data0=x)
CMD_FAN = 0x10 # Turn fan on (data0=1) or off (data0=0)
CMD_GETPATH = 0x11 # Get USB path to Px (data0=x 0=controller) returned in data7-data0
CMD_USBBOOT_EN = 0x12 # Turn on USBBOOT
CMD_USBBOOT_DIS = 0x13 # Turn off USBBOOT
CMD_GET_USTATUS = 0x14 # Get Px USBBOOT status (data0=x)
CMD_SET_ORDER = 0x15 # Set order (data0=order)
CMD_SAVE = 0xF0 # Save current PWR/P1-LED/P2-LED/P1/P2/Order/Mode to EEPROM
CMD_SAVEDEFAULTS = 0xF1 # Save factory defaults
CMD_GET_DATA = 0xF2 # Get DATA (Temps/ADC/etc.)
CMD_SAVE_ORDER = 0xF3 # Save order to EEPROM
CMD_SAVE_USBBOOT = 0xF4 # Save usbboot status to EEPROM
CMD_SAVE_POS = 0xF5 # Save Power On State to EEPROM
CMD_SAVE_LED = 0xF6 # Save LED to EEPROM
CMD_NOP = 0x90 # Do nothing
# Get arbitrary data from ClusterCTRL
GET_DATA_VERSION = 0x00 # Get firmware version
GET_DATA_ADC_CNT = 0x01 # Returns number of ADC ClusterCTRL supports
GET_DATA_ADC_READ = 0x02 # Read ADC data for ADC number 'data0'
GET_DATA_ADC_TEMP = 0x03 # Read Temperature ADC
GET_DATA_FANSTATUS = 0x04 # Read fan status
# Get arbitrary data from ClusterCTRL
GET_DATA_VERSION = 0x00 # Get firmware version
GET_DATA_ADC_CNT = 0x01 # Returns number of ADC ClusterCTRL supports
GET_DATA_ADC_READ = 0x02 # Read ADC data for ADC number 'data0'
GET_DATA_ADC_TEMP = 0x03 # Read Temperature ADC
GET_DATA_FANSTATUS = 0x04 # Read fan status
# Files/paths
clusterctrl_prefix = '/dev/ClusterCTRL-'
vcgencmdpath = "/usr/bin/vcgencmd"
hat_product = "/proc/device-tree/hat/product"
hat_version = "/proc/device-tree/hat/product_ver"
hat_uuid = "/proc/device-tree/hat/uuid"
hat_vendor = "/proc/device-tree/hat/vendor"
hat_pid = "/proc/device-tree/hat/product_id"
nfsboot = "/var/lib/clusterctrl/boot/"
nfsroot = "/var/lib/clusterctrl/nfs/"
# Files/paths
clusterctrl_prefix = '/dev/ClusterCTRL-'
vcgencmdpath = "/usr/bin/vcgencmd"
hat_product = "/proc/device-tree/hat/product"
hat_version = "/proc/device-tree/hat/product_ver"
hat_uuid = "/proc/device-tree/hat/uuid"
hat_vendor = "/proc/device-tree/hat/vendor"
hat_pid = "/proc/device-tree/hat/product_id"
nfsboot = "/var/lib/clusterctrl/boot/"
nfsroot = "/var/lib/clusterctrl/nfs/"
# Functions
# Send command to ClusterCTRL via I2C
def send_cmd(c, cmd, data0=None,data1=None,data2=None,data3=None,data4=None,data5=None,data6=None,data7=None):
# Functions
# Send command to ClusterCTRL via I2C
def send_cmd(c, cmd, data0=None,data1=None,data2=None,data3=None,data4=None,data5=None,data6=None,data7=None):
#print("CMD: {} - {} {} {} {} {} {} {} {}"format(cmd, data0, data1, data2, data3,data4, data5, data6, data7))
if(data7 is not None): c[1].write_byte_data( I2C_ADDRESS, REG_DATA7, data7 )
if(data6 is not None): c[1].write_byte_data( I2C_ADDRESS, REG_DATA6, data6 )
@ -201,22 +201,22 @@ def send_cmd(c, cmd, data0=None,data1=None,data2=None,data3=None,data4=None,data
except IOError:
return False
# Read register from ClusterCTRL via I2C
def read_reg(c, offset, len=1):
# Read register from ClusterCTRL via I2C
def read_reg(c, offset, len=1):
if(len>1):
tmp = c[1].read_i2c_block_data( I2C_ADDRESS, offset, len )
else:
tmp = c[1].read_byte_data( I2C_ADDRESS, offset )
return tmp
# Get throttled status
def get_throttled():
# Get throttled status
def get_throttled():
if( not os.path.isfile(vcgencmdpath) or not os.access(vcgencmdpath,os.X_OK) ):
return 'NA'
return ( (os.popen(vcgencmdpath + ' get_throttled').readline()).split('=', 1)[-1].strip())
# Get USB path (eg 1-1.4.1) for I2C bus
def usbpathfrombus(bus):
# Get USB path (eg 1-1.4.1) for I2C bus
def usbpathfrombus(bus):
for device in glob.glob("/sys/bus/usb/drivers/i2c-tiny-usb/*/i2c*"):
parts = device.split('/')
path = parts[6].split(':')[0]
@ -225,8 +225,8 @@ def usbpathfrombus(bus):
return path
return False
# Build list of pi zero numbers to get USB path of
def getusbpaths():
# Build list of pi zero numbers to get USB path of
def getusbpaths():
paths = {}
zeros = []
@ -321,33 +321,33 @@ def getusbpaths():
paths[str(zero)] = cache_clusterctrl[c[0]]+pathdata
return paths
def is_float(n):
def is_float(n):
try:
float(n)
return True
except ValueError:
return False
##########
# Init #
##########
##########
# Init #
##########
# Get Pi power on delay from config
delay = 1 if 'clusterctrl_delay' not in config or not is_float(config['clusterctrl_delay']) or float(config['clusterctrl_delay'])<0 else config['clusterctrl_delay']
# Get Pi power on delay from config
delay = 1 if 'clusterctrl_delay' not in config or not is_float(config['clusterctrl_delay']) or float(config['clusterctrl_delay'])<0 else config['clusterctrl_delay']
maxpi=0
clusterctrl = False
maxpi=0
clusterctrl = False
# Do we have a ClusterHAT ?
# Do we have a ClusterHAT ?
# Check for override
clusterhat = 1 if 'clusterhat_force' not in config else config['clusterhat_force']
# Check for override
clusterhat = 1 if 'clusterhat_force' not in config else config['clusterhat_force']
if(clusterhat != 1):
if(clusterhat != 1):
parts = clusterhat.split('.')
version = int(parts[0])
version_minor = int(parts[1])
elif ( not os.path.isfile(hat_product)
elif ( not os.path.isfile(hat_product)
or not os.access(hat_product, os.R_OK)
or not os.path.isfile(hat_uuid)
or not os.access(hat_uuid, os.R_OK)
@ -358,7 +358,7 @@ elif ( not os.path.isfile(hat_product)
or not os.path.isfile(hat_version)
or not os.access(hat_version, os.R_OK) ):
clusterhat = False # No HAT found
else:
else:
# HAT has been found validate it
f = open(hat_product, 'r')
if ( f.read().strip('\x00') != 'ZC4:ClusterHAT' ):
@ -376,13 +376,13 @@ else:
version_minor = tmp - 32
else:
clusterhat = False # No ClusterHAT found
if ( clusterhat ):
if ( clusterhat ):
clusterhat_size = 4 if 'clusterhat_size' not in config else int(config['clusterhat_size'])
if clusterhat_size > 4: clusterhat_size = 4
fangpio = False if 'fangpio' not in config else int(config['fangpio'])
# Init ClusterHAT if we have one
if(clusterhat):
# Init ClusterHAT if we have one
if(clusterhat):
maxpi+=clusterhat_size
if ( version == 1 ):
import RPi.GPIO as GPIO
@ -454,19 +454,19 @@ if(clusterhat):
wp_link = -1
# Get list of ClusterCTRL I2C devices
busses = [] # Get list of devices
for fn in glob.glob(clusterctrl_prefix+'*'):
# Get list of ClusterCTRL I2C devices
busses = [] # Get list of devices
for fn in glob.glob(clusterctrl_prefix+'*'):
clusterctrl+=1
length = len(clusterctrl_prefix)
busses.append( ( smbus.SMBus(int(fn[length:])), int(fn[length:]) ) )
# Ensure we have at least one ClusterCTRL or a ClusterHAT
if( len(busses)<1 and not clusterhat ):
# Ensure we have at least one ClusterCTRL or a ClusterHAT
if( len(busses)<1 and not clusterhat ):
print("ERROR: No ClusterHAT/CTRL devices found\n")
sys.exit(1)
if(clusterctrl):
if(clusterctrl):
# Make sure we haven't got a conflict on the ClusterCTRL "order"
# When using multiple ClusterCTRL devices they each have an "order" which must be unique
orders = []
@ -490,8 +490,8 @@ if(clusterctrl):
# Sort devices based on order
ctrl.sort(key=lambda tup: tup[0])
# Are we running init and should we create the symlinks for usbboot?
if( args == 2 and sys.argv[1] == 'init'):
# Are we running init and should we create the symlinks for usbboot?
if( args == 2 and sys.argv[1] == 'init'):
if 'link' in config and config['link'] == "1":
# Only root should fiddle with the links
if os.geteuid() == 0 and os.path.isdir(nfsboot) and os.path.isdir(nfsroot):
@ -512,13 +512,13 @@ if( args == 2 and sys.argv[1] == 'init'):
os.unlink(nfsboot+path)
os.symlink(nfsroot+'p'+p+"/boot/", nfsboot+path)
##############
## End Init ##
##############
##############
## End Init ##
##############
# Parse arguments and do actions
# Parse arguments and do actions
if (args == 2 and ( sys.argv[1] == "on" or sys.argv[1] == "off" ) ):
if (args == 2 and ( sys.argv[1] == "on" or sys.argv[1] == "off" ) ):
# Turn on/off ALL devices
if(clusterhat):
# Turn all ClusterHAT ports on
@ -580,7 +580,7 @@ if (args == 2 and ( sys.argv[1] == "on" or sys.argv[1] == "off" ) ):
else:
send_cmd(c, CMD_OFF, pi)
send_cmd(c, CMD_ALERT_OFF)
elif ( args > 2 and ( sys.argv[1] == "on" or sys.argv[1] == "off" ) ):
elif ( args > 2 and ( sys.argv[1] == "on" or sys.argv[1] == "off" ) ):
# Turn on/off pX
actioned = 0
# Build list of pi zero numbers to turn alert LED on for
@ -644,7 +644,7 @@ elif ( args > 2 and ( sys.argv[1] == "on" or sys.argv[1] == "off" ) ):
else:
send_cmd(c, CMD_OFF, zero-lastpi+c[3])
break
elif ( args > 2 and sys.argv[1] == 'usbboot' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
elif ( args > 2 and sys.argv[1] == 'usbboot' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
# Enable of Disable USBBOOT (supported on Compute Modules) for Px
actioned = 0
# Build list of pi zero numbers to turn USBBOOT on for
@ -670,7 +670,7 @@ elif ( args > 2 and sys.argv[1] == 'usbboot' and ( sys.argv[2] == 'on' or sys.ar
actioned+=1
else:
send_cmd(c, CMD_USBBOOT_DIS, zero-lastpi+c[3])
elif ( args == 2 and sys.argv[1] == "status" ):
elif ( args == 2 and sys.argv[1] == "status" ):
# Show status of all Cluster HAT / ClusterCTRL devices
print ( "clusterhat:{}".format( clusterhat ) )
print ( "clusterctrl:{}".format( clusterctrl ) )
@ -762,7 +762,7 @@ elif ( args == 2 and sys.argv[1] == "status" ):
if ( read_reg( c, REG_DATA0 ) != 0xFF ):
print( "u{}:{}".format(cnt, read_reg( c, REG_DATA0 ) ) )
elif ( args == 3 and sys.argv[1] == 'hub' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
elif ( args == 3 and sys.argv[1] == 'hub' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
if(clusterhat):
if( version==1 ):
print ( "ERROR: hub control not supported on Cluster HAT v1.x\n")
@ -777,8 +777,8 @@ elif ( args == 3 and sys.argv[1] == 'hub' and ( sys.argv[2] == 'on' or sys.argv[
hub.off()
else:
hub.on()
# if(clusterctrl): # TODO
elif ( args == 3 and sys.argv[1] == 'hub' and ( sys.argv[2] == 'reset' ) ):
# if(clusterctrl): # TODO
elif ( args == 3 and sys.argv[1] == 'hub' and ( sys.argv[2] == 'reset' ) ):
if(clusterhat and version!=1 ):
if ( version_minor == 0 ):
hub.off()
@ -792,7 +792,7 @@ elif ( args == 3 and sys.argv[1] == 'hub' and ( sys.argv[2] == 'reset' ) ):
for c in ctrl:
send_cmd( c, CMD_HUB_CYCLE )
elif ( args == 3 and sys.argv[1] == 'alert' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
elif ( args == 3 and sys.argv[1] == 'alert' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
# Turn ALL ALERT LED on/off
if(clusterhat):
if(version==1):
@ -812,7 +812,7 @@ elif ( args == 3 and sys.argv[1] == 'alert' and ( sys.argv[2] == 'on' or sys.arg
send_cmd(c, CMD_ALERT_ON)
else:
send_cmd(c, CMD_ALERT_OFF)
elif ( args > 3 and sys.argv[1] == 'alert' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off') ):
elif ( args > 3 and sys.argv[1] == 'alert' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off') ):
# Turn on/off ALERT LED for pX
# Build list of pi zero numbers to turn alert LED on for
@ -848,7 +848,7 @@ elif ( args > 3 and sys.argv[1] == 'alert' and ( sys.argv[2] == 'on' or sys.argv
else:
send_cmd(c, CMD_ALERT_OFF)
break
elif ( args == 3 and sys.argv[1] == 'led' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
elif ( args == 3 and sys.argv[1] == 'led' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
# Enable or Disable LED (not supported on ClusterHAT v1.x)
if(clusterhat and version == 2):
if(sys.argv[2] == 'on'):
@ -861,7 +861,7 @@ elif ( args == 3 and sys.argv[1] == 'led' and ( sys.argv[2] == 'on' or sys.argv[
send_cmd(c, CMD_LED_EN, 0)
else:
send_cmd(c, CMD_LED_DIS, 0)
elif ( args == 3 and sys.argv[1] == 'wp' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
elif ( args == 3 and sys.argv[1] == 'wp' and ( sys.argv[2] == 'on' or sys.argv[2] == 'off' ) ):
# Not supported on ClusterCTRL or ClusterHAT v1.x
if(clusterhat and version == 2):
if ( sys.argv[2] == 'on' ):
@ -871,11 +871,11 @@ elif ( args == 3 and sys.argv[1] == 'wp' and ( sys.argv[2] == 'on' or sys.argv[2
print("Unable to disable EEPROM WP (Solder link set)")
else:
wp.off()
elif ( args > 1 and sys.argv[1] == 'getpath' ):
elif ( args > 1 and sys.argv[1] == 'getpath' ):
paths = getusbpaths()
for p, path in sorted(paths.iteritems()):
print( "p{}:{}".format(p, path) )
elif ( args == 3 and sys.argv[1] == 'savedefaults' ):
elif ( args == 3 and sys.argv[1] == 'savedefaults' ):
# Set default EEPROM for device with "order"
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order")
@ -887,7 +887,7 @@ elif ( args == 3 and sys.argv[1] == 'savedefaults' ):
print("saved")
sys.exit()
print("Error: Unable to find Cluster CTRL device with that order")
elif ( args == 4 and sys.argv[1] == 'setorder'):
elif ( args == 4 and sys.argv[1] == 'setorder'):
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order old")
sys.exit(1)
@ -898,7 +898,7 @@ elif ( args == 4 and sys.argv[1] == 'setorder'):
for c in ctrl:
if(int(sys.argv[2]) == int(c[0])):
send_cmd(c, CMD_SET_ORDER, int(sys.argv[3]))
elif ( args == 3 and sys.argv[1] == 'save' ):
elif ( args == 3 and sys.argv[1] == 'save' ):
# Set Power on state/USBBOOT/order to EEPROM for device with "order"
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order")
@ -911,7 +911,7 @@ elif ( args == 3 and sys.argv[1] == 'save' ):
sys.exit()
print("Error: Unable to find Cluster CTRL device with that order")
elif ( args == 3 and sys.argv[1] == 'saveorder' ):
elif ( args == 3 and sys.argv[1] == 'saveorder' ):
# Set order to EEPROM for device with "order"
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order")
@ -923,7 +923,7 @@ elif ( args == 3 and sys.argv[1] == 'saveorder' ):
sys.exit()
print("Error: Unable to find Cluster CTRL device with that order")
elif ( args == 3 and sys.argv[1] == 'saveusbboot' ):
elif ( args == 3 and sys.argv[1] == 'saveusbboot' ):
# Set usbboot to EEPROM for device with "order"
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order")
@ -935,7 +935,7 @@ elif ( args == 3 and sys.argv[1] == 'saveusbboot' ):
sys.exit()
print("Error: Unable to find Cluster CTRL device with that order")
elif ( args == 3 and sys.argv[1] == 'savepos' ):
elif ( args == 3 and sys.argv[1] == 'savepos' ):
# Set Power On State to EEPROM for device with "order"
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order")
@ -947,7 +947,7 @@ elif ( args == 3 and sys.argv[1] == 'savepos' ):
sys.exit()
print("Error: Unable to find Cluster CTRL device with that order")
elif ( args == 3 and sys.argv[1] == 'reset' ):
elif ( args == 3 and sys.argv[1] == 'reset' ):
# Reset Cluster CTRL device with "order"
if (int(sys.argv[2])<1 or int(sys.argv[2])>255):
print("Invalid order")
@ -959,7 +959,7 @@ elif ( args == 3 and sys.argv[1] == 'reset' ):
print("reset")
sys.exit()
print("Error: Unable to find Cluster CTRL device with that order")
elif ( args == 3 and sys.argv[1] == 'fan' and (sys.argv[2] == 'on' or sys.argv[2] == 'off')):
elif ( args == 3 and sys.argv[1] == 'fan' and (sys.argv[2] == 'on' or sys.argv[2] == 'off')):
# Turn all fan on/off
# "ClusterHAT" using GPIO
@ -980,7 +980,7 @@ elif ( args == 3 and sys.argv[1] == 'fan' and (sys.argv[2] == 'on' or sys.argv[2
send_cmd(c, CMD_FAN, 1)
else:
send_cmd(c, CMD_FAN, 0)
elif ( args == 4 and sys.argv[1] == 'fan' and (sys.argv[2] == 'on' or sys.argv[2] == 'off')):
elif ( args == 4 and sys.argv[1] == 'fan' and (sys.argv[2] == 'on' or sys.argv[2] == 'off')):
# Turn fan on/off for CTRL device with "order" or Controller if arg is "c"
if ( sys.argv[3] != 'c' and (int(sys.argv[3])<1 or int(sys.argv[3])>255)):
print("Invalid order")
@ -1003,10 +1003,10 @@ elif ( args == 4 and sys.argv[1] == 'fan' and (sys.argv[2] == 'on' or sys.argv[2
send_cmd(c, CMD_FAN, 0)
sys.exit()
elif ( args == 2 and sys.argv[1] == 'maxpi' ):
elif ( args == 2 and sys.argv[1] == 'maxpi' ):
print ( maxpi )
elif ( args == 2 and sys.argv[1] == 'init' ):
elif ( args == 2 and sys.argv[1] == 'init' ):
# First run init is handled above this is just here to allow the command to succeed
pass
else:
else:
print ("Error: Missing arguments")