MariLib is a Python library to interact with a local Mari network. It connects to a Mari gateway via:
- UART, using MarilibEdge
- MQTT, using MarilibCloud
MariLib provides a stateful class with gateway and node information, network statistics, and a rich real-time TUI:
mira-edge-2.webm
To run with a gateway connected via UART:
# for example, using the Inria Argus MQTT broker
(.venv) $ python examples/mari_edge.py -m mqtts://argus.paris.inria.fr:8883You can see how it works using examples/mari_edge.py --help.
To run with a gateway connected via MQTT:
# for example, using the Inria Argus MQTT broker
(.venv) $ python examples/mari_cloud.py -n 0x0100 -m mqtts://argus.paris.inria.fr:8883To setup the environment, do:
$ python -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install -e .Here is a minimal example showcasing how to use MariLib:
import time
from marilib.marilib import MarilibEdge
from marilib.serial_uart import get_default_port
def main():
mari = MarilibEdge(lambda event, data: print(event.name, data), get_default_port())
while True:
for node in mari.gateway.nodes:
mari.send_frame(dst=node.address, payload=b"A" * 3)
statistics = [(f"{node.address:016X}", node.stats.received_rssi_dbm()) for node in mari.gateway.nodes]
print(f"Network statistics: {statistics}")
time.sleep(0.25)
if __name__ == "__main__":
main()See it in action in examples/minimal.py.