Skip to main content

MATRIX Labs MALOS libraries

Project description

============================
MATRIXIO Python MALOS Driver
============================
A simple `Python`_ coroutine based driver for communicating with `MATRIX-MALOS services`_.

License
=======

This application follows the GNU General Public License, as described in the ``LICENSE`` file.

Installing
==========

The package is available on PyPI, so you can easily install via pip:

.. code-block:: console

$ pip install matrix-io-malos


Running the CLI client
======================

The library includes a simple command line client to start reading data from
your MALOS service right away.

.. code-block:: console

# Get the malosclient help screen
$ malosclient --help

# Get IMU data to STDOUT from a locally running MALOS service
$ malosclient IMU

# Get HUMIDITY data to STDOUT from a remotely running MALOS service
$ malosclient -h 192.168.0.100 HUMIDITY

# Get FACE detection data using a serialized driver config file
$ malosclient --driver-config-file ~/driver_config.proto VISION


Using the MalosDriver
=====================

To use the MALOS driver works as an async generator so in your code
you can do the following:

.. code-block:: python

import asyncio
import sys

from matrix_io.malos.driver import IMU_PORT, UV_PORT
from matrix_io.proto.malos.v1 import driver_pb2
from matrix_io.proto.malos.v1 import sense_pb2

from matrix_io.malos.driver import MalosDriver


async def imu_data(imu_driver):
async for msg in imu_driver.get_data():
print(sense_pb2.Imu().FromString(msg))
await asyncio.sleep(1.0)


async def uv_data(uv_driver):
async for msg in uv_driver.get_data():
print(sense_pb2.UV().FromString(msg))
await asyncio.sleep(1.0)


async def status_handler(driver):

type_mapping = {
driver_pb2.Status.MESSAGE_TYPE_NOT_DEFINED: "Not Defined",
driver_pb2.Status.STARTED: "Started",
driver_pb2.Status.STOPPED: "Stopped",
driver_pb2.Status.CONFIG_RECEIVED: "Config Received",
driver_pb2.Status.COMMAND_EXECUTED: "Command Executed",
driver_pb2.Status.STATUS_CRITICAL: "Critical",
driver_pb2.Status.STATUS_ERROR: "Error",
driver_pb2.Status.STATUS_WARNING: "Warning",
driver_pb2.Status.STATUS_INFO: "Info",
driver_pb2.Status.STATUS_DEBUG: "Debug"
}

async for msg in driver.get_status():
print(type_mapping[msg.type])

if msg.uuid:
print("UUID: {}".format(msg.uuid))
if msg.message:
print("MESSAGE: {}".format(msg.message))

await asyncio.sleep(1.0)


# Driver configuration
driver_config = driver_pb2.DriverConfig()

# Create the drivers
imu_driver = MalosDriver('localhost', IMU_PORT)
uv_driver = MalosDriver('localhost', UV_PORT)

# Create loop and initialize keep-alive
loop = asyncio.get_event_loop()
loop.run_until_complete(imu_driver.configure(driver_config))
loop.run_until_complete(uv_driver.configure(driver_config))
loop.create_task(imu_driver.start_keep_alive())
loop.create_task(uv_driver.start_keep_alive())

# Initialize data and error handlers
loop.create_task(imu_data(imu_driver))
loop.create_task(uv_data(uv_driver))
loop.create_task(status_handler(imu_driver))
loop.create_task(status_handler(uv_driver))

try:
loop.run_forever()
except KeyboardInterrupt:
print('Shutting down. Bye, bye !', file=sys.stderr)
finally:
loop.stop()
asyncio.gather(*asyncio.Task.all_tasks()).cancel()

loop.run_until_complete(loop.shutdown_asyncgens())
loop.close()

Who can answer questions about this library?
============================================

- Heitor Silva <heitor.silva@admobilize.com>
- Maciej Ruckgaber <maciek.ruckgaber@admobilize.com>

More Documentation
==================

.. toctree::
:titlesonly:

CHANGELOG

.. _0MQ: http://zeromq.org/
.. _Python: https://www.python.org/
.. _virtualenv: https://virtualenv.pypa.io/en/stable/
.. _matrixio-protos-0.0.25: https://pypi.org/project/matrix-io-proto
.. _pypi: https://pypi.org/
.. _MATRIX-MALOS services: https://matrix-io.github.io/matrix-documentation/matrix-core/getting-started/understanding-core/



Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

matrix_io-malos-0.4.1.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

matrix_io_malos-0.4.1-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file matrix_io-malos-0.4.1.tar.gz.

File metadata

  • Download URL: matrix_io-malos-0.4.1.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.8

File hashes

Hashes for matrix_io-malos-0.4.1.tar.gz
Algorithm Hash digest
SHA256 ce185b1a5e16f4c0a7b9798dfcadcadbe441a4a1db87a8bc4a57e4b5c7e8b6e9
MD5 a5bebf0848a0e74bddd6cbb7c669b20e
BLAKE2b-256 1f610283fbfcce9bc9103585be2551dac9806560d286d4c1cb6b564b91f1fb7f

See more details on using hashes here.

File details

Details for the file matrix_io_malos-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: matrix_io_malos-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 21.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.8

File hashes

Hashes for matrix_io_malos-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ff701b4f650ae45b6ea10c6a881a8809b080c310d2c97452ec88602d04cadc46
MD5 84ad91afe714ee6234e2ac98dc794858
BLAKE2b-256 871a96ccbd4e25c8e91f3075d0e8afafa28f5a6133de839270cd40fb9d4f812c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page