Yandex smart home cloud function engine
Project description
rmind.yandex.smart.home
Библиотека для упрощения реализации умного дома с Алисой в Yandex Cloud Function.
Необходимая облачная инфраструктура
Managed Service for YDB
хранение состояния устройств
| Переменные окружения | Значение | По умолчанию | Обязательный |
|---|---|---|---|
| YDB_ENDPOINT | grpcs | grpcs://ydb.serverless.yandexcloud.net:2135 | Нет |
| YDB_DATABASE | адресс БД | - | Да |
IoT Core/Брокер
общение с устройствами пользователя через MQTT протокол
| Переменные окружения | Значение | По умолчанию | Обязательный |
|---|---|---|---|
| MQTT_URL | адрес брокера | mqtt.cloud.yandex.net | Нет |
| MQTT_PORT | порт брокера | 8883 | Нет |
| MQTT_USER | пользователь | - | Да |
| MQTT_PASS | пароль | - | Да |
Пример устройства
from rmind_yandex_smart_home import YandexIoTDevice
from rmind_yandex_smart_home.yandex import on_off
class MyDevice(YandexIoTDevice):
def __init__(self, id, type):
super().__init__(id, "MyDeviceName", type)
@on_off()
def on_off(self, params):
value = params['value']
return 'on:1' if value else 'on:0'
Метод класса, помеченный атрибутом Capability (в данном случае @on_off), должен вернуть текст сообщения устройству, которое Engine отправит в MQTT очередь
f"/yandex-iot-core/{self.id}/commands"
Дальнейшая обработка сообщения проходит на IoT устройстве.
Так как IoT устройства обычно строятся на микроконтроллерах типа Arduino, esp32 и т.д., рекомендуется сложные преобразования делать в cloud function
# обработка rgb сообщения от yandex alice
# значение приходит в формате int
# для значения value:14210514 получим '216;213;210;'
def get_rgb_message(value):
h = hex(value)[2:]
if len(h) == 5:
h = '0' + h
r,g,b = tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
return f"{r};{g};{b}"
Использование в Cloud Function
import rmind_yandex_smart_home as rmind
engine = rmind.Engine()
engine.register_device(MyDevice(
"my-device-unique-id",
"devices.types.light"
))
def handler(event, context):
return engine.handle(event, context)
Входящие параметры Capability
on_off
Включение и выключение устройства
объявление
@on_off()
def on_off(self, params):
pass
params
{
"instance": "on",
"value": False
}
color_setting
Параметры цвета.В текущей реализации по умолчанию схема RGB. Параметры temperature_k и scenes необязательные.
объявление
@color_setting(temperature_k = [2700, 5100], scenes = ["party"])
def color_setting(self, params):
pass
возможные варианты params
// цвет RGB
{
"instance": "rgb",
"value": 14210514
}
// цветовая температура
{
"instance": "temperature_k",
"value": 5100
}
// Сцена
{
"instance": "scene",
"value": "party"
}
brightness
Яркость. Значение от 0 до 100
объявление
@brightness()
def brightness(self, params):
pass
params
{
"instance": "brightness",
"value": 50
}
Собственная реализация Capability
В следующих версиях я буду добавлять умения, но если Вам необходима что то конкретное, то в библиотеке можно реализовать свои кастомные умения.
Описание параметров и возможностей, с которыми работает алиса брать в документации Yandex
Пример реализации program
from rmind_yandex_smart_home.yandex import Capability
class program(Capability):
def __init__(self, **kwargs):
super().__init__("devices.capabilities.mode", **kwargs)
self.parameters = {
'instance': "program"
}
modes = kwargs.get('modes')
if modes is not None:
self.parameters['modes'] = [{'value': x} for x in modes]
def get_default(self):
return {
'instance': "program",
'value': "auto"
}
Пример использования
from rmind_yandex_smart_home import YandexIoTDevice
...
class MyDevice(YandexIoTDevice):
def __init__(self, id, type):
super().__init__(id, "MyDeviceName", type)
@program(modes=["auto", "one", "two"])
def program(self, params):
value = params['value']
return '1' if value == "auto" else '0'
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rmind_yandex_smart_home-0.1.3.tar.gz.
File metadata
- Download URL: rmind_yandex_smart_home-0.1.3.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
017422b90a76106d202a1c481adf70e091f1e6ee225e691df7b4c24c51030f6d
|
|
| MD5 |
fc975bc38901e3e80a2ac5a88181973a
|
|
| BLAKE2b-256 |
23d740d1c9e487c6bd716ab194360c6b858d117a15adecc379d02440f19c0023
|
File details
Details for the file rmind_yandex_smart_home-0.1.3-py3-none-any.whl.
File metadata
- Download URL: rmind_yandex_smart_home-0.1.3-py3-none-any.whl
- Upload date:
- Size: 25.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4999ab5fa873ddc88e4ef1860b2f7dbcde20c848daeb6d401f918cd8b6499fd8
|
|
| MD5 |
165391977339698428612176feb0b511
|
|
| BLAKE2b-256 |
b754a9067fb0f7f0f4cebfe0d83c69302906a9c958407dcf129181a60b072832
|