Name | xaal.lib JSON |
Version |
0.7.7
JSON |
| download |
home_page | None |
Summary | Official Python stack for xAAL protocol |
upload_time | 2024-11-06 22:34:38 |
maintainer | None |
docs_url | None |
author | None |
requires_python | None |
license | GPL License |
keywords |
xaal
home-automation
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
xaal.lib
========
**xaal.lib** is the official Python stack to develop home-automation devices and gateways
with the xAAL protocol. For a full description of the protocol check out
http://recherche.imt-atlantique.fr/xaal/
Dependencies
~~~~~~~~~~~~
xaal.lib depends on :
* cbor2
* pysodium
* configobj
* coloredlogs
* decorator
* tabulate
* aioconsole
Install
~~~~~~~
Please refer to the official `full documentation to install the lib in a virtualenv
<https://gitlab.imt-atlantique.fr/xaal/code/python/-/blob/main/README.rst>`_
Usage
~~~~~
The main goal of xaal.lib is to provide an API to easily develop devices & gateways.
**xaal.lib.Engine send / receive / parse to|from xAAL Bus**.
To receive / parse / display incoming xAAL messages, you can simply try something like
this:
.. code-block:: python
from xaal.lib import Engine
def display(msg):
print(msg)
eng = Engine()
eng.subscribe(display)
eng.run()
The Engine will call the display function every time it receive a xAAL message.
Let's take a look at a simple lamp device :
.. code-block:: python
from xaal.lib import Device,Engine,tools
# create and configure the lamp device, with a random address
dev = Device("lamp.basic", tools.get_random_uuid())
dev.product_id = 'Dummy Lamp'
dev.url = 'http://www.acme.org'
dev.info = 'My fake lamp'
# add an xAAL attribute 'light'
light = dev.new_attribute('light')
# declare two device methods ON & OFF
def on():
light.value = True
def off():
light.value = False
dev.add_method('turn_on',on)
dev.add_method('turn_off',off)
# last step, create an engine and register the lamp
eng = Engine()
eng.add_device(dev)
eng.run()
To avoid to rewrite the same code for each device, you can use the `xaal.schemas package <https://gitlab.imt-atlantique.fr/xaal/code/python/-/tree/main/libs/schemas>`_.
This package provides a set of predefined devices, you can use them as a template to create your own device.
.. code-block:: python
from xaal.schemas import devices
from xaal.lib import Engine
# create and configure the lamp device
dev = devices.lamp()
# last step, create an engine and register the lamp
eng = Engine()
eng.add_device(dev)
eng.run()
FAQ
~~~
The core engine run forever so how can I use it in webserver, GUI or to develop device
with IO. The whole API is absolutely not thread safe, so **don't use threads** unless you
exactly know what's going on. Anyways, you have several options to fix this issue:
* You can use you own loop and periodically call *eng.loop()*
for example, you can do something like this:
.. code:: python
while 1:
do_some_stuff()
eng.loop()
* You can use a engine timer, to perform some stuff.
.. code:: python
def read_io():
pass
# call the read_io function every 10 sec
eng.add_timer(read_io,10)
eng.run()
* Use the **AsyncEngine**. Python version > 3.8 provides async programming with **asyncio** package.
*AsyncEngine* use the same API as *Engine*, but it is a **asynchronous** engine. You can use
*coroutines* in device methods, timers functions and callbacks. It provides additionals features
like the *on_start* and *on_stop* callbacks.
* Use an alternate coroutine lib, you can use **gevent** or **greenlet** for example. Look at
apps/rest for a simple greenlet example.
Raw data
{
"_id": null,
"home_page": null,
"name": "xaal.lib",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "xaal, home-automation",
"author": null,
"author_email": "Jerome Kerdreux <Jerome.Kerdreux@imt-atlantique.fr>",
"download_url": "https://files.pythonhosted.org/packages/85/7b/40cee0c021bc0e0a8373127a8d8e40711737bcfd8e40bebbf6ebdf9e9763/xaal_lib-0.7.7.tar.gz",
"platform": null,
"description": "\nxaal.lib\n========\n**xaal.lib** is the official Python stack to develop home-automation devices and gateways\nwith the xAAL protocol. For a full description of the protocol check out\nhttp://recherche.imt-atlantique.fr/xaal/\n\n\nDependencies\n~~~~~~~~~~~~\nxaal.lib depends on :\n * cbor2\n * pysodium\n * configobj\n * coloredlogs\n * decorator\n * tabulate\n * aioconsole\n\n\nInstall\n~~~~~~~\nPlease refer to the official `full documentation to install the lib in a virtualenv\n<https://gitlab.imt-atlantique.fr/xaal/code/python/-/blob/main/README.rst>`_\n\n\nUsage\n~~~~~\nThe main goal of xaal.lib is to provide an API to easily develop devices & gateways.\n**xaal.lib.Engine send / receive / parse to|from xAAL Bus**.\n\n\nTo receive / parse / display incoming xAAL messages, you can simply try something like\nthis:\n\n.. code-block:: python\n\n from xaal.lib import Engine\n\n def display(msg):\n print(msg)\n\n eng = Engine()\n eng.subscribe(display)\n eng.run()\n\nThe Engine will call the display function every time it receive a xAAL message.\n\nLet's take a look at a simple lamp device :\n\n.. code-block:: python\n\n from xaal.lib import Device,Engine,tools\n\n # create and configure the lamp device, with a random address\n dev = Device(\"lamp.basic\", tools.get_random_uuid())\n dev.product_id = 'Dummy Lamp'\n dev.url = 'http://www.acme.org'\n dev.info = 'My fake lamp'\n\n # add an xAAL attribute 'light'\n light = dev.new_attribute('light')\n\n # declare two device methods ON & OFF\n def on():\n light.value = True\n\n def off():\n light.value = False\n\n dev.add_method('turn_on',on)\n dev.add_method('turn_off',off)\n\n # last step, create an engine and register the lamp\n eng = Engine()\n eng.add_device(dev)\n eng.run()\n\n\nTo avoid to rewrite the same code for each device, you can use the `xaal.schemas package <https://gitlab.imt-atlantique.fr/xaal/code/python/-/tree/main/libs/schemas>`_.\nThis package provides a set of predefined devices, you can use them as a template to create your own device.\n\n.. code-block:: python\n\n from xaal.schemas import devices\n from xaal.lib import Engine\n\n # create and configure the lamp device\n dev = devices.lamp()\n\n # last step, create an engine and register the lamp\n eng = Engine()\n eng.add_device(dev)\n eng.run()\n\n\nFAQ\n~~~\nThe core engine run forever so how can I use it in webserver, GUI or to develop device\nwith IO. The whole API is absolutely not thread safe, so **don't use threads** unless you\nexactly know what's going on. Anyways, you have several options to fix this issue:\n\n* You can use you own loop and periodically call *eng.loop()*\n for example, you can do something like this:\n\n .. code:: python\n\n while 1:\n do_some_stuff()\n eng.loop()\n\n* You can use a engine timer, to perform some stuff.\n\n .. code:: python\n\n def read_io():\n pass\n\n # call the read_io function every 10 sec\n eng.add_timer(read_io,10)\n eng.run()\n\n* Use the **AsyncEngine**. Python version > 3.8 provides async programming with **asyncio** package.\n *AsyncEngine* use the same API as *Engine*, but it is a **asynchronous** engine. You can use\n *coroutines* in device methods, timers functions and callbacks. It provides additionals features\n like the *on_start* and *on_stop* callbacks.\n\n* Use an alternate coroutine lib, you can use **gevent** or **greenlet** for example. Look at\n apps/rest for a simple greenlet example.\n",
"bugtrack_url": null,
"license": "GPL License",
"summary": "Official Python stack for xAAL protocol",
"version": "0.7.7",
"project_urls": {
"Documentation": "https://redmine.imt-atlantique.fr/projects/xaal/repository/xaal/entry/code/Python/branches/0.7/libs/lib/README.rst",
"Homepage": "https://recherche.imt-atlantique.fr/xaal/",
"Source": "https://redmine.imt-atlantique.fr/projects/xaal/repository/xaal/show/code/Python/branches/0.7/libs/lib"
},
"split_keywords": [
"xaal",
" home-automation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "50a852547a92fa1907308fa77b1eee7343ecaf4409c93f81a9eb1ce3f46b4ed5",
"md5": "239832aadc2dda2b48470b55390b9d8a",
"sha256": "e2f21e6b9ba6d7dfffdf218acdc71f4566179f62a69ced5843c55175ae05f1fa"
},
"downloads": -1,
"filename": "xaal.lib-0.7.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "239832aadc2dda2b48470b55390b9d8a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 29621,
"upload_time": "2024-11-06T22:34:36",
"upload_time_iso_8601": "2024-11-06T22:34:36.709013Z",
"url": "https://files.pythonhosted.org/packages/50/a8/52547a92fa1907308fa77b1eee7343ecaf4409c93f81a9eb1ce3f46b4ed5/xaal.lib-0.7.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "857b40cee0c021bc0e0a8373127a8d8e40711737bcfd8e40bebbf6ebdf9e9763",
"md5": "578d9ab2fe63fd67aacef0035fa605b1",
"sha256": "d7d78792ba4646ed0d4322a8722351875adfadb67cd8f06eeb57c735d8fdf59b"
},
"downloads": -1,
"filename": "xaal_lib-0.7.7.tar.gz",
"has_sig": false,
"md5_digest": "578d9ab2fe63fd67aacef0035fa605b1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 28178,
"upload_time": "2024-11-06T22:34:38",
"upload_time_iso_8601": "2024-11-06T22:34:38.438013Z",
"url": "https://files.pythonhosted.org/packages/85/7b/40cee0c021bc0e0a8373127a8d8e40711737bcfd8e40bebbf6ebdf9e9763/xaal_lib-0.7.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-06 22:34:38",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "xaal.lib"
}