Smart House Scenarios
Project description
SmartHouse
SmartHouse - библиотека для управления умным домом. На текущий момент реализована интеграция с экосистемой Яндекса.
Какие задачи решает
- Каркас для написания сценариев
- Использование устройств как объектов или напрямую через клиента
- Доведение устройств до конечного состояния (проверяет с сервера)
- Введение устройств в карантин, если они не отвечают или как-то еще сломаны, таким образом, чтобы сценарии продолжали работать корректно
- При быстром выводе из карантина (происходит опрос устройства) после последней команды доведет устройство до состояния с последней команды
- Хранение последних данных с устройств
- Система lock'ов устройств
- Обнаружение человеческого вмешательства и установка lock'ов, от сценариев на настроенное время
- Легкое хранилище данных в файле
- Интеграция с web для управления
- Интеграция с tg ботом для сообщений об ошибках и управлением
Quick start
SmartHouse can be installed using pip:
pip install smarthouse
Usage example:
import asyncio
import datetime
import time
from aiohttp import web
from smarthouse.action_decorators import looper, scheduler
from smarthouse.app import App
from smarthouse.yandex_client.device import HSVLamp, LuxSensor, run_async
from smarthouse.storage import Storage
from smarthouse.telegram_client import TGClient
def calc_sunset():
return datetime.timedelta(hours=18)
@scheduler((calc_sunset,))
async def pause_reset():
storage = Storage()
storage.put("pause", False)
@looper(3, (datetime.timedelta(hours=10), calc_sunset))
async def adaptive_lights_actions(lux_sensor, lamp_g_1, lamp_g_2):
storage = Storage()
if storage.get("pause"):
return
state_lux = await lux_sensor.illumination()
if lux_sensor.in_quarantine() and lux_sensor.quarantine().timestamp + 5 * 60 > time.time():
state_lux = await lux_sensor.illumination(proceeded_last=True)
needed_b = 1 - min(state_lux.result, 200) / 200
await run_async([lamp.on_temp(4500, needed_b) for lamp in (lamp_g_1, lamp_g_2)])
async def tg_pause_handler(tg_client: TGClient, update):
storage = Storage()
storage.put("pause", True)
await tg_client.write_tg("done")
routes = web.RouteTableDef()
async def main():
app = App(
storage_name="./storage/storage.yaml",
yandex_token="YA Token",
telegram_token="TG Token",
telegram_chat_id="Tg chat id",
tg_commands=[
("pause", "Pause"),
],
tg_handlers=[
(r"/pause", tg_pause_handler),
],
prod=True,
aiohttp_routes=routes,
)
await app.prepare()
lux_sensor = LuxSensor("3d580790-00dc-4ce3-9892-a4cdbb346269", "Датчик освещенности")
lamp_g_1 = HSVLamp("4b950171-0df0-4b23-aaeb-0f21c7393e73", "Лампа гостиная 1")
lamp_g_2 = HSVLamp(
"ed7f9d93-c79e-44b9-985d-0f252a26c894", "Лампа гостиная 2", human_time_func=lambda: time.time() + 15 * 60
)
tasks = [
adaptive_lights_actions(lux_sensor, lamp_g_1, lamp_g_2),
pause_reset(),
]
app.add_tasks(tasks)
await app.run()
if __name__ == "__main__":
asyncio.run(main())
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
smarthouse-2.3.0.tar.gz
(13.6 kB
view details)
Built Distribution
File details
Details for the file smarthouse-2.3.0.tar.gz
.
File metadata
- Download URL: smarthouse-2.3.0.tar.gz
- Upload date:
- Size: 13.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a446237b3ab530d46cffa8e04c95393a9ab3ab2063be65b4a2017f671345066d |
|
MD5 | 6f2d1e5eab26c4d101f89589441eba3f |
|
BLAKE2b-256 | 4c2193ed3f06aae8318eb494adafd83e41ec822c019dd22d25cebc706faab942 |
File details
Details for the file smarthouse-2.3.0-py3-none-any.whl
.
File metadata
- Download URL: smarthouse-2.3.0-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d0d8335d89fcebeba2bbb412feaff70b4a3d83fae583ffd3880c2f036400fa8 |
|
MD5 | b13db140516c4af13087f45787ab3531 |
|
BLAKE2b-256 | bf1062ca147ea391ca37a178940004d3364f103be60458114ad5c9e917a5e53d |