예제 #1
0
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")
예제 #2
0
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")
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
파일: sispmctl.py 프로젝트: xypron/pysispm
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)))
예제 #6
0
파일: sispmctl.py 프로젝트: xypron/pysispm
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