Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rmind_yandex_smart_home-0.1.8.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rmind_yandex_smart_home-0.1.8-py3-none-any.whl (25.0 kB view details)

Uploaded Python 3

File details

Details for the file rmind_yandex_smart_home-0.1.8.tar.gz.

File metadata

  • Download URL: rmind_yandex_smart_home-0.1.8.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

Hashes for rmind_yandex_smart_home-0.1.8.tar.gz
Algorithm Hash digest
SHA256 0242c0ac7eeb982c1fcdbbd29a5fd113e2d2c32fd06c8549a30dcb92439b79df
MD5 5e456d40adc1fa981d0446a64e1db53e
BLAKE2b-256 22468c3162708c41de7b50e00398628fd3c1b0c3cac2f0e4e2fad701bcd1837f

See more details on using hashes here.

File details

Details for the file rmind_yandex_smart_home-0.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for rmind_yandex_smart_home-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 deb95f80ec7dd4eb461b8179d6f79af4bdc578c620bb3d8e187a076ab240234d
MD5 b2c585af3d32d6d0bff928dcd6ff09fd
BLAKE2b-256 d9b7548c1debf2f18dde15f823f61c4a4438ff32d9168458f6b0182657185fd9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page