示例#1
0
def power(serial):
    try:
        serial_request(serial, "\r\nPwrOn", RESPONSE_END, timeout=IMM_COMMAND_TIMEOUT)
        yield
    finally:
        serial_request(serial, "\r\nPwrOff", RESPONSE_END, timeout=IMM_COMMAND_TIMEOUT)
        sleep(IMM_SHUTDOWN_WAIT)
示例#2
0
def force_capture_line(serial):
    try:
        serial_request(
            serial, "ForceCaptureLine", RESPONSE_END, timeout=IMM_COMMAND_TIMEOUT
        )
        yield
    finally:
        serial_request(serial, "ReleaseLine", RESPONSE_END, timeout=IMM_COMMAND_TIMEOUT)
示例#3
0
def stop(device_ids):
    with imm_components():
        with active_line() as serial:
            for device_id in device_ids:
                expected_response = "logging stopped.*" + REMOTE_RESPONSE_END
                serial_request(serial,
                               "#{0}Stop".format(device_id),
                               expected_response,
                               timeout=10)
示例#4
0
def set_interval(device_ids, interval):
    with imm_components():
        with active_line() as serial:
            for device_id in device_ids:
                serial_request(
                    serial,
                    "#{0}SampleInterval={1}".format(device_id, interval),
                    REMOTE_RESPONSE_END,
                    timeout=10,
                )
示例#5
0
def ping(serial):
    expected = re.escape("OK\r\n")
    try:
        logger.debug("Pinging iridium")
        serial_request(serial, "AT", expected, timeout=IRD_DEFAULT_TIMEOUT)
    except Exception:
        logger.error("Ping failed")
        raise Exception("Iridium did not respond correctly to ping")
    else:
        logger.debug("Iridium ping ok")
示例#6
0
def query_samples(serial, device_id, n=SEABIRD_RECENT_SAMPLES):
    raw = serial_request(serial,
                         "#{0}DN{1}".format(device_id, n),
                         REMOTE_RESPONSE_END,
                         timeout=10)

    return raw
示例#7
0
def _get_status(serial, device_id):
    raw = serial_request(serial,
                         "#{0}GetSD".format(device_id),
                         REMOTE_RESPONSE_END,
                         timeout=10)
    xml_like = re.search(
        re.escape("<StatusData") + r".*" + re.escape("</StatusData>"),
        raw,
        flags=re.DOTALL,
    ).group(0)

    status_data = ET.fromstring(xml_like)
    status = status_data.attrib
    status["datetime"] = datetime.strptime(
        status_data.find("DateTime").text, "%Y-%m-%dT%H:%M:%S")
    status["voltage"] = float(status_data.find("Power/vMain").text)
    status["voltage_li"] = float(status_data.find("Power/vLith").text)
    status["bytes"] = int(status_data.find("MemorySummary/Bytes").text)
    status["samples"] = int(status_data.find("MemorySummary/Samples").text)
    status["samples_free"] = int(
        status_data.find("MemorySummary/SamplesFree").text)
    status["samples_length"] = int(
        status_data.find("MemorySummary/SampleLength").text)
    status["sampling"] = status_data.find("AutonomousSampling").text

    return status
示例#8
0
def get_datetime(serial):
    expected_response = r".*? [\d-]+" + re.escape("\r\n")
    raw_date = serial_request(
        serial, "print,/par/time/utc/date", expected_response, timeout=10
    )

    expected_response = r".*? [\d\.:]+" + re.escape("\r\n")
    raw_time = serial_request(
        serial, "print,/par/time/utc/clock", expected_response, timeout=10
    )

    timestamp = datetime.strptime(
        raw_date.strip().split()[1] + " " + raw_time.strip().split()[1],
        "%Y-%m-%d %H:%M:%S.%f",
    )

    return timestamp
示例#9
0
def query_last_sample(serial, device_id):
    expected_response = re.escape("</SampleData>\r\n") + REMOTE_RESPONSE_END
    raw = serial_request(serial,
                         "!{0}SampleGetLast".format(device_id),
                         expected_response,
                         timeout=5)

    return raw
示例#10
0
def _get_sample_range(serial, device_id, begin, end):
    raw = serial_request(
        serial,
        "#{0}DD{1},{2}".format(device_id, begin, end),
        REMOTE_RESPONSE_END,
        timeout=10,
    )
    samples = parse_samples(device_id, raw)

    return samples
示例#11
0
def clear_mo_buffer(serial):
    logger.debug("Clearing MO buffer")
    expected = r"(?P<status>\d)" + re.escape("\r\n")
    response = serial_request(serial,
                              "AT+SBDD0",
                              re.escape("\r\n"),
                              timeout=IRD_DEFAULT_TIMEOUT)
    status = int(re.search(expected, response).groupdict()["status"])
    if status:
        raise Exception("SBD clear mo command returned error status")
示例#12
0
def send_sbd(serial, message):
    clear_mo_buffer(serial)
    sleep(1)

    size = message_size(message)
    assert size <= SBD_MAX_SIZE, "Message is too large: {0} > {1}".format(
        size, SBD_MAX_SIZE)

    # Initiate write text
    expected = "READY\r\n"
    serial_request(serial, "AT+SBDWT", expected, timeout=IRD_DEFAULT_TIMEOUT)
    sleep(5)

    # Submit message
    expected = r"(?P<status>\d)" + re.escape("\r\n\r\n") + r"OK" + re.escape(
        "\r\n")
    response = serial_request(serial,
                              message,
                              expected,
                              timeout=SBD_WRITE_TIMEOUT)
    status = int(re.search(expected, response).groupdict()["status"])
    if status:
        raise Exception("SBD write command returned error status")
    sleep(3)

    # Initiate transfer to GSS
    expected = (re.escape("+SBDIX: ") + (r"(?P<mo_status>\d+), "
                                         r"(?P<momsn>\d+), "
                                         r"(?P<mt_status>\d+), "
                                         r"(?P<mtmsn>\d+), "
                                         r"(?P<mt_length>\d+), "
                                         r"(?P<mt_queued>\d+)") +
                re.escape("\r\n"))
    response = serial_request(serial,
                              "AT+SBDIX",
                              expected,
                              timeout=SBD_TRANSMISSION_TIMEOUT)
    status = int(re.search(expected, response).groupdict()["mo_status"])
    if status:
        raise Exception("SBD transfer command returned error status")
示例#13
0
def check_signal(serial):
    expected = re.escape("+CSQ:") + r"(?P<strength>\d)" + re.escape("\r\n")
    try:
        logger.debug("Checking signal")
        response = serial_request(serial,
                                  "AT+CSQ",
                                  expected,
                                  timeout=IRD_DEFAULT_TIMEOUT)
    except Exception:
        logger.error("Signal check failed")
        raise Exception("Iridium did not respond correctly to signal query")

    strength = int(re.search(expected, response).groupdict()["strength"])
    logger.debug("Signal strength: {0}".format(strength))

    return strength
示例#14
0
def query_gga(serial):
    expected_response = re.escape("$GPGGA") + ".*" + re.escape("\r\n")
    raw = serial_request(serial, "out,,nmea/GGA", expected_response, timeout=10)

    return raw
示例#15
0
def send_wakeup_tone(serial):
    serial_request(serial, "SendWakeUpTone", RESPONSE_END, timeout=IMM_COMMAND_TIMEOUT)