Установка
Тестировалось только на Ubuntu 22.04
Последняя версия
git clone https://codeberg.org/strizhechenko/mqtt_automator.git /opt/mqtt/
apt install python3.11
python3.11 -m pip install /opt/mqtt/
cd /opt/mqtt/examples/config_example.yml /opt/mqtt/config.yml # правим его под себя
cp -va /opt/mqtt/automator.service /etc/systemd/system/mqtt-automator.service
systemctl enable --now mqtt-automator
Обновление из pypi
Установить с нуля таким образом не выйдет. Всё равно требуется установка systemd-юнита и написание config.yml, который должен лежать в /opt/mqtt/.
pip3 install mqtt-automator
Разработка
Если планируется делать доработки и делиться ими: лучше использовать pyenv с python3.11, я тестировал только на нём. Внутри virtualenv выполните:
pip install '/opt/mqtt/[test]'
pre-commit install-hooks
Запуск тестов:
pytest # параметры он прочитает из pyproject.toml
Запуск линтера:
pylint # параметры он прочитает из pyproject.toml
Поддерживаемые устройства
- термостат Lytko 101
- рекуператоры Vakio Base Smart
- светильники Yeelink
Почему не Home Assistant?
- Хотелось поразвлекаться с asyncio и сделать чудо-монолит
- Хотелось понимать, как управляются устройства под капотом
- У меня своеобразные хотелки в вопросе приоритета управления устройствами через физические кнопки
- Хотелось иметь максимально простой формат конфиг-файла, причём один на все устройства
- Оно потребляет всего 20мб оперативной памяти, разве не стоило велосипедов?
Архитектура
В одном потоке уживаются несколько вечных асинхронных тасок. Это как треды/потоки, только задачи в терминологии asyncio. За счёт того что я не строю хайлоад - они прекрасно уживаются и имеют общее состояние. Скорее всего есть баги конкурентности, но ничего страшного от них не случится.
Таски:
- schedule - расписание, эдакий cron для управления устройством, но с учётом его текущего состояния - лишние события, которые ничего не изменят, посылаться не будут.
- feedback - построение изначального состояния устройств за счёт получения его от брокера при подписке на топики + обработка действий с устройством мимо этой системы - через пульты и кнопки, ручками. Ручные действия имеют приоритет над расписанием в течение 4 часов.
В целом проект придерживается минимализма. Небольшой файл в 40 строк - лучше, чем дополнительная зависимость на 1мб.
Персистентного состояния нет, если демон был перезапущен - он потеряет информацию о ручных действиях. Можно было бы держать эти словари (devices.base.BaseClient.block) в sqlite, postgresql или redis, но это кажется излишним усложнением.
План развития
- Оформить код как библиотеку, перенести
automator.pyвнутрь неё. Это позволит стороннему пользователю установить её из pypi, импортироватьfrom $libname.automator import Automator,from $libname.devices.base import BaseClient, реализовать клиент к своему устройству и добавить его вAutomator.client_mapмежду инициализацией и запуском. - В будущем хочу добавить простенький веб-интерфейс на aiohttp + jinja2 (в качестве третьей вечной таски), через который можно будет управлять устройствами.
- Дописать тесты к движку правил.
Происхождение
Изначально форк https://github.com/roppert/mosquitto-python-example.git, но от него не осталось почти ничего.
Metadata
Release files for mqtt-automator 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mqtt_automator-0.0.4.tar.gz | 15.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mqtt_automator-0.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.9 kB
Release files / mqtt_automator-0.0.4.tar.gz
| Download URL | mqtt_automator-0.0.4.tar.gz |
|---|---|
| Size | 15.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e49e0613ddea9a409590e737737373c50488d3063cc1a262a8023d01b8f5b47e
|
|
BLAKE2b-256 checksum How to use checksums |
72fd92f00efbb5d26e973617ac1ab96d0a5d08f519247ffeba4d822141e66a38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.12
|
Release files / mqtt_automator-0.0.4-py3-none-any.whl
| Download URL | mqtt_automator-0.0.4-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a4eca22cce239a3c682bb0a59447c60ad1d434ac03c8ab85868c867ea4c7b193
|
|
BLAKE2b-256 checksum How to use checksums |
0b5cf9fd367b5631590e12c1b9c9413b6d57a268b5f9042ea3c1f5fd7abe0135
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.12
|
Security for mqtt-automator 0.0.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.