| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> IFTTT-Iot Adapter 适配器软件设计与实现 -> 正文阅读 |
|
[嵌入式]IFTTT-Iot Adapter 适配器软件设计与实现 |
目录 1. 前言1.1 项目简要说明? ? ? ? 此项目是TP-LINK公司所属的一个项目,在此只做技术分享,不为任务商业用途。IFTTT 在全球 IoT 生态中占有一席之地,囊括了众多同类竞品的设备,可帮助用户实现跨品牌多设备之间的联动控制。根据 Action、Query 和 Trigger 业务场景设计,TP-LINK公司的Tapo 设备 如 Tapo Plug 和 Tapo Bulb 需要支持在 IFTTT 创建规则的情况下被连接和控制,同时 IFTTT 也需要接收来自 Tapo 设备的事件。所以此次项目实现 IFTTT-Iot Adapter 服务, 提供接口供 IFTTT 调用,内部对接 IoT-App Server,实现负责 IFTTT 和 IoT-App Server 之间消息的协议转换和转发。 1.2 任务概述????????新增一个 IFTTT-IOT Adapter 服务,支持配置开发 IFTTT service,具备新增如下功能:提供 Action 、Query 和 Trigger 接口供 IFTTT 调用;根据服务名分发请求到具体的服务;各个服务实现协议转换,调用自己的云端服务,如 Tapo 通过 gRPC 客户端调用 IoT[1]App Server 服务;新增处理设备状态更改事件的 kafka 消费者任务,消费事件,调用 IFTTT 的 http 实时 接口进行通知;对接 soho poller(事件分发模块),接收账号注销请求,清理用户数据。 ????????开发前需要仔细阅读官方开发文档,根据开发文档的指引和规范,设计好自己要实现的服务,明确接口的请求必要参数和相应数据格式以及请求流程。Ifttt要求开发者的服务暴露的接口需要满足开发文档的要求,主要有三类接口,分别是Action、Query和Trigger,另外都有其对应的field接口即获取字段属性。不同类型的请求接口有不同的请求参数和相应数据格式的要求。另外服务需要支持ifttt系统测试用例,要求服务实现一个testsetup接口完成测试准备工作并返回测试数据,服务内部需要区别测试模型下的请求并做对应的处理。服务在产生事件并需要上报的时候,调用ifttt的实时通知接口https://realtime.ifttt.com/v1/notifications?,之后ifttt会调用trigger获取事件消息。具体细节请查阅官方文档?Service API requirements - IFTTT。开发完服务并部署之后就可以在ifttt网站上创建service,完善必要的文案信息和接口细节,通过系统的自带测试用例过后,便可以创建小程序进行If This Then That的测试了。 ? ? ? ?此项目使用springboot技术开发。 1.3 术语定义
2 需求分析
|
设备/场 景 | Trigger | Query | Action |
Bulb | Device turned (on/off) Bulb color changed | Device Status (on/off) Current bulb/light color | Device turned (on/off) Change brightness Change color Change color temperature |
Plug | Device turned (on/off) | Device Status (on/off) | Device turned (on/off) |
????????由于 IFTTT 可以对接多个不同的服务,计划在实现的 IFTTT-Iot Adapter 中增加支持多个 服务的功能,与 IFTTT 对接的接口将请求根据服务名称分发到具体的服务,各个服务再根 据自己的业务具体处理 Action、Query、Trigger 的请求;各个服务实现自己的事件上报 接口,一旦有事件上报,实时通知 IFTTT。
? ? ? ? 1、对 第三方平台IFTTT 提供接口:HTTPS 协议;
????????2、内部调用 IoT-App Server 接口: gRPC 协议;
????????3、服务之间异步调用:通过 kafka,在 Trigger 场景下是 iot-subsubscription 给 IFTTT-Iot ????????Adapter 发送异步消息。
总体完成功能:
1. IFTTT-Iot Adapter 与周边服务构成总体系统结构图如上,IFTTT 发起 Action、Query 和 Trigger 请求,IFTTT-Iot Adapter 接收之后内部对请求做协议转换,通过 gRPC 请求调用 IoT-App Server 接口查询、控制设备(不包括在基础云维持长连接的旧固件的 Tapo Plug);
2. 设备端通过短连接的方式上报设备影子数据更改事件到二级订阅,二级订阅将事件写入 iot.ifttt.event.v2 主题队列,IFTTT-Iot Adapter 的消费者程序从中消费, 调用 IFTTT 实时通知接口。
IFTTT-Iot Adapter 的实现如下结构图,主要分成 Controller、Service、Dao、gRPC api 和 Consumer 几个模块:
????????IFTTT 调用 Actions 和 Queries 请求的流程:
????????IFTTT 调用 Trigger 请求的流程:
?
????????IFTTT-IOT Adapter 需要新增 kafka 消费者任务,持续消费来自主题 iot.ifttt.event.v2 的 消息。
????????IFTTT Adapter 需要接收 Tapo Plug 和 Tapo Bulb 的设备事件,二级订阅通过将设备上报 的事件消息写入特定主题队列来转发消息。
????????IFTTT Adapter 内部 kafka 消费者线程处理流程:
?说明:
1、步骤 6 实时通知的时候可以传 trigger_identity,可以区分一个 tilinkid 被多个 ifttt 用户账号使用的场景;如果调用超时,重试一次;
2、步骤 5 获取事件消息之后,根据 reportedChangedPropList 字段判断更改的属性, 然后根据 trigger 类型和用户 id 获取 trigger 信息,再包装 trigger event 数据,写入 数据库 写入的时候判断 trigger event 的数量是否超过 trigger event 的最大 数量,是的话删除存储时间最久的一条数据,再写入;
3、步骤 4 根据用户 trigger 配置过滤的时候先过滤对应 trigger 的,再按用户(包括 Owner 用户和分享用户)过滤。?
????????选用 mysql 数据库作为存储。
????????选用 mysql 原因:此应用主要用于存储用户数据、trigger 数据和事件消息,mysql 是 轻量级数据库,性能高,能够满足要求。
????????trigger_events(存储设备事件数据)
triggers(存储 trigger 信息包括和用户之间的关联关系)
ingredients(存储 trig event 的配料信息)?
?
users(存储用户信息)
此部分应该列出模块最终实现的接口列表,包括接口路径和定义
?
另外需要一个事件消费任务?
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:28:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |