智能家居接入Alexa App和语音平台

接入流程

公司已有自己的halo app--云平台--网关设备,现在需要支持alexa控制设备(智能家居私有云对接aws智能家居云)

alexa控制设备的流程

halo云平台需要实现接口功能

  1. Oauth2.0鉴权

  2. 实现Discovery、ReportState、PowerController、BrightnessController、ColorTemperatureController、ThermostatController等技能api接口

    1. 官方文档:https://developer.amazon.com/en-US/docs/alexa/device-apis/smart-home-general-apis.html
  3. 基于lambda-runtime实现alexa-->lambda-->halo云平台转发

    1. 官方文档:https://www.cargo-lambda.info/guide/getting-started.html

创建技能

登录alexa开发者平台,创建smart home技能

创建/发布Lambda函数

登录aws控制台,创建/发布lambda函数

选择美国和欧洲地区,发布lambda函数(因为技能alexa技能只支持北美、欧洲/印度、中东)

lambda函数我们可以选择在aws控制台进行创建并编写lambda具体实现接口代码(官方文档也有实例,python、nodejs等),也可以基于官方lambda-runtime实现,然后发布到aws指定区域,由于我们是用rust自己实现了alexa discover、reportstate等相关技能特性后端接口,lambda只是作为透传转发技能的请求

rust 复制代码
use std::sync::LazyLock;
use std::time::Duration;
use anyhow::anyhow;
use reqwest::Client;
use serde_json::Value;
use tracing::{error, info};

const DEFAULT_URL: &'static str = "halo云实现技能接口的请求地址";
static DEFAULT_HTTP_CLIENT: LazyLock<Client> = LazyLock::new(|| {
    Client::builder()
        .connect_timeout(Duration::from_secs(5))
        .no_proxy()
        .build()
        .unwrap()
});

#[tokio::main]
async fn main() -> Result<(), lambda_runtime::Error> {
    tracing_subscriber::fmt()
        .with_target(false)
        .without_time()
        .init();

    let service_fn = lambda_runtime::service_fn(handle);
    lambda_runtime::run(service_fn).await?;
    Ok(())
}

#[inline]
async fn handle
(
    event: lambda_runtime::LambdaEvent<Value>
) -> Result<Value, lambda_runtime::Error>
{
    info!("lambda_event ======> {:?}", event);

    let resp_value = DEFAULT_HTTP_CLIENT
        .post(DEFAULT_URL)
        .json(&event.payload)
        .send()
        .await
        .map_err(|err| {
            error!("send msg error =======> {err}");
            anyhow!(err)
        })?
        .json::<Value>()
        .await
        .map_err(|err| {
            error!("parse msg error =======> {err}");
            anyhow!(err)
        })?;

    info!("resp_value ======> {resp_value}");

    Ok(resp_value)
}

打包此lambda函数并发布到北美、欧洲地区

shell 复制代码
# 打包 
cargo lambda build --release --bin alexa-lambda

# 发布lambda,--region 指定发布区域
cargo lambda deploy --binary-name alexa-lambda --region us-east-1

lambda添加alexa触发器,并设置技能id

分别发布lambda函数到北美、欧洲地区,并设置alexa触发器

配置技能

smart home配置,关联技能和lambda函数

账号关联设置

测试

1、alexa开发者账号地区设置

2、安装/设置Alexa app

  • 手机系统语言设置为英文,手机连接翻墙的网络

  • 在google play应用商城安装Alexa App

  • 登录alexa app登录alexa 开发者账号(创建技能的账号),跳过相关无关紧要设置

3、alexa app关联技能

图2滚动到底部,找到Your Skills

4、发现设备

由于Alexa不会自动轮询请求设备列表,被动式的,需要我们通过语音/输入:discover my devices,Alexa才会向lambda发送Discovery请求获取设备列表(需要等一段时间,在设备菜单栏中才会刷新设备列表)

5、控制设备

进入设备详情页,Alexa不会主动调Report State获取设备属性,查阅官方文档,是会主动调的,也不知道什么原因,需要主动询问Alexa这个设备的状态,它才会发起Report state请求,同步设备属性,刷新APP UI设备属性值

6、在alexa开发者控制台测试设备

相关推荐
明天会出太阳18 小时前
GB/T 50034‑2024 照明工程落地:UGR、RG0、Ra 参数核查与不同空间设计要点
智能家居·武汉·knx·照明设计·无主灯
翼龙云_cloud1 天前
亚马逊云渠道代理商:VPC 教程 利用 EC2 自建 NAT 实例降低私有子网出网成本
网络·云计算·aws
嵌入式阿蔡2 天前
项目实战 02:智能家居环境网关——ESP32 做 BLE 中心 + 本地联动
网络·单片机·嵌入式硬件·esp32·智能家居·嵌入式实时数据库
阿钱真强道4 天前
06 极物科技 | 创明RS485窗帘 - UDP 通讯协议规范
udp·智能家居·通讯协议·极物·极物智能·极物科技·创明窗帘
jikemaoshiyanshi4 天前
企业搭建大模型网关与智能路由体系,如何实现精细化推理分发?——AWS 双层网关架构适配规模化业务落地
架构·云计算·aws
径硕科技JINGdigital4 天前
AI 训练时 GPU 利用率低,哪些云上高性能存储方案更适合优化训练成本?AWS 按 I/O 瓶颈分层选型
人工智能·云计算·aws
3C速讯4 天前
智能门锁生物识别方案技术对比:3D双目人脸 vs 3D结构光 vs 掌静脉的实测数据分析
智能家居·智能门锁
明天会出太阳5 天前
酒店照明设计:大堂、客房、餐厅的照度与色温工程化要点
智能家居·武汉·酒店灯光设计·灯具定制
zhonyu鱼5 天前
Home Assistant:开源的智能家居自动化平台,统一控制全屋设备
开源·自动化·智能家居
欧阳天羲5 天前
全屋智能家居一体化方案‑配套资料文档合集
云原生·eureka·智能家居