Esempio n. 1
0
def test_uplink_system_temperature(network_lora, caplog):
    """
    Pretend to invoke the datalogger on a LoPy4 with basic system sensors.
    Effectively, only the "system.temperature" sensor will be transmitted
    over LoRa telemetry.

    By intercepting the lora socket communication, proof that the
    submitted payload is correct by checking the raw payload value
    and decoding it through Cayenne.
    """

    # Define artificial LoRa conversation.
    network_lora.register_conversation()

    # Invoke datalogger with LoRaWAN telemetry settings for a single duty cycle.
    from test.settings import telemetry_lorawan
    invoke_datalogger_pycom(caplog, settings=telemetry_lorawan)

    # Capture log output.
    captured = caplog.text

    # Proof it works by verifying log output.
    assert "Starting Terkin datalogger" in captured, captured
    assert "platform: LoPy4" in captured, captured
    assert "[LoRa] Starting LoRa Manager" in captured, captured
    assert "Telemetry transport: CayenneLPP over LoRaWAN/TTN" in captured, captured
    assert "Telemetry status: SUCCESS (1/1)" in captured, captured

    # Check the raw LoRa payload.
    from mocket import Mocket
    assert Mocket.last_request() == bytearray(b'\x00g\x01\xbf\x00\x01\x00')

    # Check the value after decoding from CayenneLPP.
    from cayennelpp import LppFrame
    data = LppFrame.from_bytes(Mocket.last_request()).data

    # System temperature
    assert data[0].channel == 0
    assert data[0].type == 103
    assert data[0].value == (44.7, )

    # EOF?
    assert data[1].channel == 0
    assert data[1].type == 1
    assert data[1].value == (0, )

    assert "[LoRa] No downlink message processed" in captured, captured
Esempio n. 2
0
def test_uplink_environmental_sensors(mocker, network_lora, caplog):
    """
    Pretend to invoke the datalogger on a LoPy4 with environmental sensors.

    By intercepting the lora socket communication, proof that the
    submitted payload is correct by checking the raw payload value
    and decoding it through Cayenne.
    """

    # Define artificial LoRa conversation.
    network_lora.register_conversation()

    # Mix together different settings.
    from test.settings import telemetry_lorawan
    from test.settings import sensors as sensor_settings
    mocker.patch('test.settings.telemetry_lorawan.sensors',
                 sensor_settings.sensors)

    # Invoke datalogger with LoRaWAN telemetry settings for a single duty cycle.
    invoke_datalogger_pycom(caplog, settings=telemetry_lorawan)

    # Capture log output.
    captured = caplog.text

    # Proof it works by verifying log output.
    assert "Starting Terkin datalogger" in captured, captured
    assert "platform: LoPy4" in captured, captured
    assert "[LoRa] Starting LoRa Manager" in captured, captured
    assert "Telemetry transport: CayenneLPP over LoRaWAN/TTN" in captured, captured
    assert "Telemetry status: SUCCESS (1/1)" in captured, captured

    # Check the raw LoRa payload.
    from mocket import Mocket
    assert Mocket.last_request() == bytearray(
        b'\x00g\x01\xbf\x00\x03\x01\xa4\x00\x02\x01\x80\x01g\x01\xe1\x02g\x01\xe1'
        b'\x03g\x00\x97\x00s)7\x00h\x9b\x00\x01\x00')

    # Check the value after decoding from CayenneLPP.
    from cayennelpp import LppFrame
    data = LppFrame.from_bytes(Mocket.last_request()).data

    # System temperature
    assert data[0].channel == 0
    assert data[0].type == 103
    assert data[0].value == (44.7, )

    # Voltage
    assert data[1].channel == 0
    assert data[1].type == 3
    assert data[1].value == (4.2, )

    # Weight (kg)
    assert data[2].channel == 0
    assert data[2].type == 2
    assert data[2].value == (3.84, )

    # DS18B20 temperature
    assert data[3].channel == 1
    assert data[3].type == 103
    assert data[3].value == (48.1, )
    assert data[4].channel == 2
    assert data[4].type == 103
    assert data[4].value == (48.1, )

    # BME280 temperature
    assert data[5].channel == 3
    assert data[5].type == 103
    assert data[5].value == (15.1, )

    # BME280 pressure
    assert data[6].channel == 0
    assert data[6].type == 115
    assert data[6].value == (1055.1, )

    # BME280 humidity
    assert data[7].channel == 0
    assert data[7].type == 104
    assert data[7].value == (77.5, )

    # EOF?
    assert data[8].channel == 0
    assert data[8].type == 1
    assert data[8].value == (0, )

    assert "[LoRa] No downlink message processed" in captured, captured