Skip to main content

Установка

Тестировалось только на 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. За счёт того что я не строю хайлоад - они прекрасно уживаются и имеют общее состояние. Скорее всего есть баги конкурентности, но ничего страшного от них не случится.

Таски:

  1. schedule - расписание, эдакий cron для управления устройством, но с учётом его текущего состояния - лишние события, которые ничего не изменят, посылаться не будут.
  2. 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)

Source distribution for mqtt-automator 0.0.4
File Size Uploaded Provenance
mqtt_automator-0.0.4.tar.gz 15.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mqtt-automator 0.0.4
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page