Skip to main content

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

Таски:

  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, но от него не осталось почти ничего.

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

mqtt_automator-0.0.4.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

mqtt_automator-0.0.4-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

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

Hashes for mqtt_automator-0.0.4.tar.gz
Algorithm Hash digest
SHA256 e49e0613ddea9a409590e737737373c50488d3063cc1a262a8023d01b8f5b47e
MD5 9277b58b4e8940e4312a6b1363d28653
BLAKE2b-256 72fd92f00efbb5d26e973617ac1ab96d0a5d08f519247ffeba4d822141e66a38

See more details on using hashes here.

File details

Details for the file mqtt_automator-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for mqtt_automator-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a4eca22cce239a3c682bb0a59447c60ad1d434ac03c8ab85868c867ea4c7b193
MD5 523d09cca4d7efe3be372275b475fd69
BLAKE2b-256 0b5cf9fd367b5631590e12c1b9c9413b6d57a268b5f9042ea3c1f5fd7abe0135

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