官方资料
视频设备接入amazon的智能家居系统, 有两种方式
- 通过rtsp接入, 方式简单, 但不能对讲
https://developer.amazon.com/zh/docs/smarthome/connect-a-camera-to-alexa.html - 通过webrtc接入, 支持双向对讲, 但是太复杂
https://developer.amazon.com/zh/docs/device-apis/alexa-rtcsessioncontroller.html
基本框架图
总体框架
厂商云的内部框架
创建lambda服务
地区要选择美国东部 (弗吉尼亚北部)
, 其它区不行. (至少, 我接入的时候, 是这么要求的)
lambda服务, 其实就是把代码托管给亚马逊运行.
https://console.aws.amazon.com/lambda/home?region=us-east-1#/home
- 选择一个蓝图, 搜索alexa, 随便选一个, 下一步
- 输入函数名称
- 角色 选择"从一个或多个模板创建角色"
- 策略模板 选择"简单微服务权限"
- 先不管js内容, 直接创建, 然后进入配置界面
- 触发器 选择"Alexa Smart Home"
还没有配置完, 因为缺少应用程序 ID
, 需要再去创建Alexa Skill
记录lambda的ID, 类似这样格式的arn:aws:lambda:us-east-1:3000000000:function:myTestFunc
创建SKILL
https://developer.amazon.com/alexa/console/ask/create-new-skill
- 创建, skill model选择
Smart Home
, 下一步 - payload version默认选择
v3
- lambda参数中的Default endpoint, 输入创建lambda服务步骤中生成的lambda ID
此时还没有配置完成, 因为lambda也没有配置完成.
此时可以看到skill ID, 类似这样子的,amzn1.ask.skill.6b3461e9-9bd8-4d55-b14e-000000000000
继续配置lambda服务
触发器的应用程序 ID
, 填入刚才生成的SKILL ID, 选择添加, 然后保存
继续配置skill
这时可以保存了, 先保存一下, 点击Setup Account Linking
, 配置账号关联
剩下的都是OAuth2.0的东西, 读者自己去配置吧.
再次配置lambda服务
上面创建的lambda, js还没有编辑. 使用python或java的, 自己去琢磨吧.
开发者需要先了解一下nodejs, http://nodejs.cn/api/
编辑index.js
将https://github.com/wzjwhut/alexa-camara-skill中的alexa_camera_skill.js的内容拷贝进去
保存
测试lambda
配置测试事件, 模拟请求.
https://github.com/wzjwhut/alexa-camara-skill 的test.js 有这些模拟请求.
找到配置测试事件
菜单,
创建新测试事件
, 名称Discovery
{
"directive": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover",
"payloadVersion": "3",
"messageId": "38A28869-DD5E-48CE-BBE5-00000000"
},
"payload": {
"scope": {
"type": "BearerToken",
"token": "123456"
}
}
}
}
创建新测试事件
, 名称uri
{
"directive": {
"header": {
"namespace": "Alexa.CameraStreamController",
"name": "InitializeCameraStreams",
"payloadVersion": "3",
"messageId": "38A28869-DD5E-48CE-BBE5-00000001",
"correlationToken": "123456"
},
"endpoint": {
"endpointId": "98029b8000ef4f7524d80450bf4e9a15",
"scope": {
"type": "BearerToken",
"token": "123456"
},
"cookie": {}
},
"payload": {
"cameraStreams": [
{
"protocol": "RTSP",
"resolution": {
"width": 1920,
"height": 1080
},
"authorizationType": "BASIC",
"videoCodec": "H264",
"audioCodec": "AAC"
},
{
"protocol": "RTSP",
"resolution": {
"width": 1280,
"height": 720
},
"authorizationType": "NONE",
"videoCodec": "MPEG2",
"audioCodec": "G711"
}
]
}
}
}
分别执行这两个测试事件, 查看执行结果