Simple smart-home automation system. Self-hosted, LAN only. Supports Vakio Lytko and Yeelink.
Project description
Установка
Тестировалось только на 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, но от него не осталось почти ничего.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mqtt_automator-0.0.4.tar.gz
.
File metadata
- Download URL: mqtt_automator-0.0.4.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e49e0613ddea9a409590e737737373c50488d3063cc1a262a8023d01b8f5b47e |
|
MD5 | 9277b58b4e8940e4312a6b1363d28653 |
|
BLAKE2b-256 | 72fd92f00efbb5d26e973617ac1ab96d0a5d08f519247ffeba4d822141e66a38 |
File details
Details for the file mqtt_automator-0.0.4-py3-none-any.whl
.
File metadata
- Download URL: mqtt_automator-0.0.4-py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4eca22cce239a3c682bb0a59447c60ad1d434ac03c8ab85868c867ea4c7b193 |
|
MD5 | 523d09cca4d7efe3be372275b475fd69 |
|
BLAKE2b-256 | 0b5cf9fd367b5631590e12c1b9c9413b6d57a268b5f9042ea3c1f5fd7abe0135 |