php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!


  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

    • 1、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266① 在阿里云购买搭建私有云服务器,配置 SSL 证书 ,做好准备工作!

    • 2、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266② 全面认识第三方授权机制 oauth2.0 协议,如何在 php 上搭建 oauth2.0服务端!

    • 3、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266③渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!


文章目录

    • 一、前言;
    • 二、天猫精灵如何授权?
    • 三、天猫精灵请求有哪些?
        • 3.1 发现设备列表:
        • 3.2 查询某个设备属性:
        • 3.3 控制某个设备:
    • 四、天猫精灵请求我们应该如何响应?
        • 4.1 发现设备列表响应:
        • 4.2 查询某个设备状态回应:
        • 4.3 控制某个设备回应:
    • 五、其他

一、前言;

  • 新年也快来临了,一个月没写嵌入式开发代码了。临近年末,工作也就不断加紧,偶尔做下自己的服务器!天猫精灵对接已经完毕,今天抽出点时间,终于可以写下这篇文章了。
  • 毕竟自己出身嵌入式,又自学于网络编程,这对整个协议的流程了解容易上手!因为涉及到一些商业机密,不想被骂!我这里就不在多详细地做笔记,只做协议分析,和在开发过程中遇到的坑。如有需要技术讨论,请加群群里大牛一起讨论。

二、天猫精灵如何授权?


  • 上篇文章已经提到,在开发时期,天猫精灵服务器官网会向我们在后台填写的地址发起一个 oauth2.0协议的请求,要识别这个是否oauth2.0的请求,需要自己来做判断。下面,我们来看看我的后台授权截图:、
    • 天猫精灵发起请求,之后,我们自己向用户展示一个登录界面 ,用来绑定此账号下面的所有设备。
    • 服务器验证密码账号是否正确,之后天猫精灵会拿我们的授权码去兑换access_token,然后我们根据这个access_token就可以识别是天猫精灵根据哪个用户来请求数据了。
    • 下面的是aligenie服务器后台授权,当我们的应用被通过审核就可以在天猫精灵app上操作这个了!

在这里插入图片描述


三、天猫精灵请求有哪些?


  • 开始这个的讲解,要知道天猫精灵服务器很人性化,把设备的某个属性作为技能点来写入和读取,这种编程思想让我很感觉到是AI时代的进步!那么,下面的协议都是涉及有技能点设计以及请求的动作!
  • 上面已经提到了如果授权成功,那么天猫精灵会来向我们的服务器发起请求,那么我们服务器需要怎么样来做判断这个请求了?其实在开发文档中非常详细了:点我查看

  • 协议请求时候,都是json数据,以下面控制为例:
{"header":{"namespace":"AliGenie.Iot.Device.Control","name":"TurnOn","messageId":"1bd5d003-31b9-476f-ad03-71d471922820","payLoadVersion":1},"payload":{"accessToken":"123456789abc","deviceId":"34234","deviceType":"light","attribute":"powerstate","value":"on","extensions":{"extension1":"","extension2":""}}}
  • messageId是作为调试追踪某个消息来的,总的来说,没什么用!
  • 其实我们看header里面的namespace就可以知道天猫精灵请求都是什么内容了!总的来说就只有三个:
namespace含义
AliGenie.Iot.Device.Discovery设备发现,天猫精灵来请求当前用户的设备列表
AliGenie.Iot.Device.Control设备控制,控制某个设备
AliGenie.Iot.Device.Query设备属性查询,查询某个设备的状态

3.1 发现设备列表:


  • 以下面为例,简单分析天猫精灵在请求什么?
    • name就是上面我们说的在设备发现,说明天猫精灵来请求当前用户的设备列表了。
    • 那么这个天猫精灵是指哪个用户呢?我们根据颁发的accessToken来做识别就好了!
{"header": {"messageId": "bf5a411b-e65f-486f-84ed-123456789902","name": "DiscoveryDevices","namespace": "AliGenie.Iot.Device.Discovery","payLoadVersion": 1},"payload": {"accessToken": "d4c3e4c57f7415dac5be"}
}

3.2 查询某个设备属性:

  • 因为目前天猫精灵不支持多设备查询!以下面单个设备查询为例:
    • 首先我们服务器来看看这个accessToken是否有效期内?
    • 那么我们怎么知道这时候天猫精灵要查询哪个设备呢?看deviceId这个字段,这个字段是我们在发现设备时候返回给它的,查询或者控制时候,都是根据这个字段来的!
{"header": {"messageId": "68a1f301-bc43-4cec-86d6-123456","name": "Query","namespace": "AliGenie.Iot.Device.Query","payLoadVersion": 1},"payload": {"accessToken": "0a8bb37def2b45e3e3c5d9c8af","attribute": "","deviceId": "a226","deviceType": "light","value": ""}
}

3.3 控制某个设备:

  • 以下面控制为例
  • 下面大概意思是:**控制deviceIdabc28的设备灯类型的色温为 2 **。
  • name是指设置动作,attribute是指其属性,value就是指其具体的数值了!可以为字符型或者整型!大家可以慢慢琢磨!
{"header": {"messageId": "8c134775-7640-4073-a9ad-a513483622222","name": "SetColorTemperature","namespace": "AliGenie.Iot.Device.Control","payLoadVersion": 1},"payload": {"accessToken": "0a8bb37def2b45e3e3","attribute": "colorTemperature","deviceId": "abc28","deviceType": "light","value": "2"}
}

四、天猫精灵请求我们应该如何响应?


  • 响应的格式那肯定要遵循天猫精灵的文档协议,要不然它会说我好像遇到了阻碍,智能家居遇到了问题!
  • 每次响应的name正常的话都是在后面加个Response"
  • 注意响应格式的头部必须要application/json;

4.1 发现设备列表响应:

  • payload是我们的设备列表,而里面是一个对象数组,下面为例是2个设备,每一个设备里面都要有下面的字段,具体的含义自己去看文档。每个字段都是有意义的!要严格遵循!
  • 还有要注意的是,其不能包含特殊字符,要不然在天猫精灵app会显示不了!
  • 有个坑就是:actions字段官网说该设备支持的技能点,但是在控制时候,天猫精灵还是发生其他技能点的控制信息来,感觉这个返回什么天猫精灵都没用的!
{"header": {"namespace": "AliGenie.Iot.DeviceCenter.Discovery","name": "DiscoveryDevicesResponse","messageId": "bf5a411b-e65f-486f-84ed-52891222222222222","payLoadVersion": 1},"payload": {"devices": [{"deviceId": "28","deviceName": "\u53cc\u8272\u706fB4E6","deviceType": "light","zone": "","brand": "","model": "\u534a\u9897\u5fc3\u810f\u54c1\u724c","icon": "https:\/\/www.domain.cn\/files\/ali_light.jpg","properties": [{"name": "powerstate","value": "off"}],"actions": ["TurnOn", "TurnOff", "SetBrightness", "AdjustBrightness", "SetTemperature", "Query"],"extensions": {"extension1": "","extension2": ""}}, {"deviceId": "26","deviceName": "cwLight68C6","deviceType": "light","zone": "","brand": "","model": "\u534a\u9897\u5fc3\u810f\u54c1\u724c","icon": "https:\/\/www.domain.com\/files\/ali_light.jpg","properties": [{"name": "powerstate","value": "off"}],"actions": ["TurnOn", "TurnOff", "SetBrightness", "AdjustBrightness", "SetTemperature", "Query"],"extensions": {"extension1": "","extension2": ""}}]}
}

4.2 查询某个设备状态回应:

  • 下面可以看到,多了properties这个字段,而且里面都是一个数组,都是以键值对存在的!
  • 当你对天猫精灵说客厅灯打开了吗?,就会查询客厅灯设备状态。如果返回下面,就会说:客厅灯当前为打开状态,色温为2700,亮度为65。天猫精灵会不断地把properties里面的属性一个一个读出来!@_@
{"properties": [{"name": "powerstate","value": "on"}, {"name": "onlinestate","value": "online"}, {"name": "remotestatus","value": "on"}, {"name": "colorTemperature","value": 2700}, {"name": "brightness","value": 65}],"header": {"namespace": "AliGenie.Iot.Device.Query","name": "QueryResponse","messageId": "0e2d981a-081b-44b6-9aa7-123456789","payLoadVersion": 1},"payload": {"deviceId": "abc28"}
}

4.3 控制某个设备回应:

  • 这个回应就比较简单了: name数值为TurnOnResponse,然后在payload后面加上这个设备的deviceId就可以了!
{"header":{"namespace":"AliGenie.Iot.Device.Control","name":"TurnOnResponse","messageId":"1bd5d003-31b9-476f-ad03-71d471922820","payLoadVersion":1},"payload":{"deviceId":"34234"}}

五、其他

  • 后台配置详情:

在这里插入图片描述

  • 之后,我们就可以在天猫精灵APP看到我们的设备了,品牌是半颗心脏,呵呵!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37294.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能家居领域小米,涂鸦,天猫精灵的 “中台之战”

深圳是跨境电商之都,仅一个华南城就云集了不少了全球排名前五十的亚马逊大卖家。总部不在深圳的跨境电商通常都会在深圳设立主抓供应链的分部。在今年这样疫情叠加外部环境不确定性的当下,大卖家们的日子按道理说不会好过,然而事实却大大出乎…

ESP8266-天猫精灵(智能家居)

本次更新与2018年10月2日 (弊端:wifi的配置在程序里边,设备更换所连接的wifi,还需要重新烧录初始化程序)——问题已解决,更新于博客最下方。 1:使用器材 天猫精灵、esp8266、LED(继电器) &am…

六级备考23天|CET-6|写作技巧1|开头段模版

目录 1 考前注意事项 2 真题参考 3 六级作文三段式 第一段 第二段 第三段 4 名言解释型作文 5 开头段的模版 why 型 6 选择型开头模版 7 国内学校/出国读书 8 团队精神和交流 9 作业 10 抽象意志品质类开头 ​ 11 信任的重要性​ 1 考前注意事项 定位错误 常识干扰 拼凑…

雅思英语作文计算机和历史,雅思考试|历史真题帮你搞定雅思写作3大高频话题-科技篇...

科技类 题目1 计算机让人们在家工作学习的利弊 Computers enable people to be able to work at home and children to study at home. Some people believe that it is convenient and cost-saving. Do you think the phenomenon positive or negative? 题目解读:…

六级备考21天|CET-6|写作技巧2|13:00~14:40

目录 【一】写作技巧1的作业 [1]Creativity [2]谚语:值得做的就值得做得好 [3]Star chasing 追星​ [4]team spirit&communication 团队精神和交流 [5]谚语:理解​ 【二】谚语重要性开头模版 [1]谚语:Understand 理解 【三】社会…

通过python批量获取阿里云账号余额并发送到钉钉群

脚本执行结果如下图 亲测可用 首先更新安装python版本 默认2.7.5太低无法使用 这里使用3.7.9版本 安装编译插件 yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel…

【python】使用apikey查询OpenAi可用余额

2023.04.02似乎官方禁用了之前的获取方式,通过https://api.openai.com/dashboard/billing/credit_grants将会得到如下回复 Your request to GET /dashboard/billing/credit_grants must be made with a session key (that is, it can only be made from the browse…

ChatGPT 可能会阻碍网络安全行业的发展

自 2022 年 <> 月推出以来&#xff0c;人工智能 &#xff08;AI&#xff09; 聊天机器人 ChatGPT 因其令人惊讶的人性化和准确的响应而引起了不小的轰动。 自动生成系统在推出仅两个月后就达到了创纪录的 100 亿月活跃用户。然而&#xff0c;虽然它的受欢迎程度持续增长…

CAD做图常用的命令

1.熟练掌握一些常用的命令,并理解各参数的用法,也就20-40个命令, 2.掌握常用命令的快捷键,对有些命令可以了解. 3.边做边学,我用cad已经2年了,有些命令也不完全了解,用时再查看资料学习. 4.对照教科书一步一步,反复的做,一定要注意多回头想想 5.熟练掌握图层的用法 6.尽量在学习…

CAD绘图软件_常用指令

CAD软件介绍 CAD首先它是一个可视化的绘图软件&#xff0c;许多命令和操作可以通过菜单选项和工具按钮等多种方式实现。而且具有丰富的绘图和绘图辅助功能&#xff0c;如实体绘制、关键点编辑、对象捕捉、标注、鸟瞰显示控制等&#xff0c;它的工具栏、菜单设计、对话框、图形…

CAD使用命令绘图

参考https://xlncad.com/scripting-in-autocad/ 我们可以新建一个scr后缀的脚本文件 circle 10,10 10 ;画圆&#xff0c;坐标是10,10&#xff0c;半径是10&#xff09; polygon 5 30,30 i 30 ;画多边形&#xff0c;五边形&#xff0c;中⼼点坐标是30,30&#xff0c;内切圆&a…

完美解决textarea字数限制[转载]

###原文地址&#xff1a;https://blog.csdn.net/fb_01/article/details/51026774 input、textarea都有maxlength属性&#xff0c;但是textarea不兼容ie8/9&#xff0c;input兼容ie8/9。同时绑定onchange、onkeydown、onkeyup&#xff0c;ie8/9下解决不了右键粘贴问题。具体代码…

开源项目|EasyOCR一款实用的图片OCR文字识别项目

欢迎关注「全栈工程师修炼指南」 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&#x…

在英特尔锐炫™独立显卡运行类ChatGPT的开源大语言模型(LLM) Dolly 2.0

作者&#xff1a;李翊玮 & Aidova, Ekaterina 前言&#xff1a; 以下为当前一代大型语言模型&#xff08;LLM&#xff09;的基石说明。 人类偏好强化学习Reinforcement learning with human preferences&#xff08;RLHF&#xff09;和InstructGPT等技术一直是ChatGPT和…

《赛博朋克2077》推出游戏概念艺术图海报

在上个月的时候&#xff0c;《赛博朋克2077》官方曾公布过一些游戏概念艺术图。这些艺术图分别代表了新刻奇主义、新军权主义、刻奇主义、熵增主义这四个词汇在游戏中的表现。而最近官方把这四张图片制作成了海报并在CDRP商城出售。让我们一起来看一看吧&#xff01; “新刻奇主…

赛博朋克风格按钮 html+css

先看效果&#xff1a; 前言&#xff1a; 这个思路是我在b站看up主Steven做的&#xff0c;觉得很不错&#xff0c;然后自己也弄了一个。&#xff08;纯css&#xff09;&#xff0c;下面是详细过程。最后面有完整代码。 实现&#xff1a; 1. 首先定义一个div标签作为按钮&…

VScode赛博朋克主题SynthWave '84设置

VScode赛博朋克主题SynthWave 84安装设置 效果预览安装步骤问题注意 效果预览 安装步骤 下载安装插件(下面2个插件都要安装) SynthWave 84. Custom CSS and JS Loader. 修改 settings.json "vscode_custom_css.imports":["file:///C:/users/MyUsersName/synt…

Bugku-啊哒+赛博朋克

下载解压得到一张jpg文件 用010editor打开并搜索“flag”&#xff0c;发现末尾隐藏了一个zip 新建一个十六进制文件后复制并保存为zip格式&#xff0c;打开发现需要密码 回去细看&#xff1a;前两个 504B后的1403后面都是0100&#xff0c;并不是伪加密&#xff0c;尝试用arch…

AI作画—赛博朋克你听过嘛

赛博朋克是"控制论"与"朋克"的合成词&#xff0c;从文学作品中产生&#xff0c;逐渐演变成一种视觉表现风格。 赛博朋克脱胎于在1960-1970年代兴起的科幻小说新浪潮运动。发端于上世纪八十年代。1980年&#xff0c;科幻作家布鲁斯博斯克创造了这个词&…