def cycle_device_port(device_id, port, wait=2): """Cycle a port off then on""" if len(device_id) == 1: target = get_target_from_index(device_id) if target is None: return jsonify( {"error": f"Index {device_id} not found in devices list"}) else: target = get_target_from_id(device_id) if target is None: return jsonify({"error": f"Device with ID {device_id} not found"}) if not validate_port(target, port): return jsonify({ "error": "{} is out of range for device ({} - {})".format( port, sispm.getminport(target), sispm.getmaxport(target)) }) sispm.switchoff(target, port) time.sleep(wait) sispm.switchon(target, port) return jsonify("OK")
def interact_with_device(device_id, port, state): """One stop endpoint to do it all""" if len(device_id) == 1: target = get_target_from_index(device_id) if target is None: return jsonify( {"error": f"Index {device_id} not found in devices list"}) else: target = get_target_from_id(device_id) if target is None: return jsonify({"error": f"Device with ID {device_id} not found"}) if not validate_port(target, port): return jsonify({ "error": "{} is out of range for device ({} - {})".format( port, sispm.getminport(target), sispm.getmaxport(target)) }) action = sispm.switchon if state == 1 else sispm.switchoff action(target, port) return jsonify("OK")
def get_device_status(device_id=None, port=None): """Return dictionary of all device ports and status of each""" if device_id is not None: if len(device_id) == 1: target = get_target_from_index(device_id) if target is None: return jsonify( {"error": f"Index {device_id} not found in devices list"}) else: target = get_target_from_id(device_id) if target is None: return jsonify( {"error": f"Device with ID {device_id} not found"}) if port is None: retval = {"status": {}} for socket in range(sispm.getminport(target), sispm.getmaxport(target) + 1): retval["status"][socket] = sispm.getstatus(target, socket) elif validate_port(target, port): retval = {"status": sispm.getstatus(target, port)} else: return jsonify({ "error": "{} is out of range for device ({} - {})".format( port, sispm.getminport(target), sispm.getmaxport(target)) }) else: retval = {"status": {}} for device in sispm.connect(): device_id = sispm.getid(device) retval["status"][device_id] = {} for socket in range(sispm.getminport(device), sispm.getmaxport(device) + 1): retval["status"][device_id][socket] = sispm.getstatus( device, socket) return jsonify(retval)
def validate_port(device, port): """Verify port is available, return bool""" port_min = sispm.getminport(device) port_max = sispm.getmaxport(device) if port < port_min or port > port_max: return False return True
def status(devices): """ Outputs the status of all devices. @param devices list of devices """ for dev in devices: print("device {}".format(devices.index(dev)), end=", ") # Print device id. print(sispm.getid(dev)) # Print status of all outlets. for i in range(sispm.getminport(dev), 1 + sispm.getmaxport(dev)): print("\tstatus[{}] = {}".format(i, sispm.getstatus(dev, i)))
def checkport(dev, p): """ Checks if port p exists on the device. @param dev device @param p port @return port exists """ pmin = sispm.getminport(dev) pmax = sispm.getmaxport(dev) if p < pmin or p > pmax: print("Device {} only has ports {}..{}".format(sispm.getid(dev), pmin, pmax)) return False return True