如何第三方控制点灯注册上线的设备+意外得子-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 732|回复: 4

[分享] 如何第三方控制点灯注册上线的设备+意外得子

[复制链接]
发表于 2022-3-29 16:11 | 显示全部楼层 |阅读模式
本帖最后由 jerryiot 于 2022-3-30 19:44 编辑

点灯起初可以注册设备到阿里云IOT,于是有了今天这个帖子。看我慢慢道来。
群里某人,每次点进去就在嘚嘚嘚说自己实现了第三方控制点灯设备,烦的一腿,怼了几句,最后就搞成了下面这个场面:
Snipaste_2022-03-30_19-37-42.jpg
Snipaste_2022-03-30_19-38-22.jpg


所以,情况就是这么个情况,那既然答应做人家爹,就要做好这个爹。开始分析:
需求,简单。设备通过点灯APP 注册到阿里云的broken. 然后通过第三方软件或程序控制设备。
MQTT协议不用多说,度娘教程一堆。控制设备,简单来说 就是模仿点灯的APP发送 publish 消息即可。
主要是点灯的APP 是个开源?WTF ?这开源还不简单,虽说我没玩过安卓开发,但是没吃过猪肉哦没见过猪跑吗?
二话不说,上来就撸代码。就这玩意开源了某人还要抓包,我抓你奶奶个腿哦?
点灯APP 源码地址:https://github.com/blinker-iot/blinker-app
OK,上流程:
1、首先,点灯登录时获取用户信息,此时登录方法:传一个 username 加个 hash加密 password 以获取 uuid及token,安排
2、有了uuid 和 token 获取 用户信息:
得到JSON信息,
随便找个JSON格式化,如下:我们只需要关于 阿里云BROKEN的相关信息,熟知的三元组罢了。
三元组都有了,怎么publish给阿里云,还需要一个TOPIC,那源码里面有啊TOPIC格式:
走blinker 的 topic格式:
走阿里云的 topic 格式:
于是,TOPIC 又有了,,HOST 跟三元组一起解析出来就是:productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";
那万事俱备了,要啥有啥,发个publish消息就完了呗????
用C#简单搞个客户端 作为第三方控制咯,其他语言当然没问题。
  1. static void Main(string[] args)
  2. {
  3.     String productKey = "xxxxx";
  4.     String deviceName = "xxxxxx";
  5.     String deviceSecret = "xxxxxxxx";

  6.     //计算Mqtt建联参数
  7.     MqttSign sign = new MqttSign();
  8.     sign.calculate(productKey, deviceName, deviceSecret);

  9.     Console.WriteLine("username: " + sign.getUsername());
  10.     Console.WriteLine("password: " + sign.getPassword());
  11.     Console.WriteLine("clientid: " + sign.getClientid());

  12.     //使用Paho链接阿里云物联网平台
  13.     int port = 443;
  14.     String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";

  15.     MqttClient mqttClient = new MqttClient(broker, port, true, MqttSslProtocols.TLSv1_2, null, null);
  16.     mqttClient.Connect(sign.getClientid(), sign.getUsername(), sign.getPassword());

  17.     Console.WriteLine("broker: " + broker + " Connected");

  18.     //Paho Mqtt 消息订阅
  19.     String topicReply = "/" + productKey + "/" + deviceName + "/r";
  20.     mqttClient.MqttMsgPublishReceived += MqttPostProperty_MqttMsgPublishReceived;
  21.     mqttClient.Subscribe(new string[] { topicReply }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
  22.     Console.WriteLine("subscribe: " + topicReply);

  23.     //Paho Mqtt 消息发布
  24.     String topic = "/" + productKey + "/" + deviceName + "/s";
  25.     String message2 = "{"deviceType":"DiyArduino","data":{"btn-abc":"tap"},"fromDevice":"ca0e0914792711eca1545254","toDevice":"F3A3CF150IR0C9FJT7QGGM8V"}";


  26.     mqttClient.Publish(topic, Encoding.UTF8.GetBytes(message2));
  27.     Console.WriteLine("publish: " + message2);

  28.     while(true) {
  29.         Thread.Sleep(5000);
  30.         mqttClient.Publish(topic, Encoding.UTF8.GetBytes(message2));
  31.         Console.WriteLine("publish: " + message2);
  32.     }

  33.     //Paho Mqtt 断开连接
  34.     mqttClient.Disconnect();
  35. }
复制代码
代码很简单啊,5秒循环 publish  一个 btn-abc tap 消息,
设备烧写点灯hello例程,中介选择阿里云,默认接收到btn-abc tap 设备会 灭灯或亮灯呢。
那接下来运行上面三方程序,查看设备的灯状态就OK了,5秒一闪。呵呵。上个视频,免得儿子不相信。
5秒一个 publish 控制灯IO的高低电平。

就这点东西?感谢点灯平台,竟然让我有了个“网络儿子”。

原创文章,转载请注明出处:
https://jerrycoding.com/article/blinker-3rd


发表于 2022-3-29 16:56 | 显示全部楼层
本帖最后由 blinkersb123 于 2022-3-29 16:58 编辑

牛牛牛  支持一下
发表于 2022-3-29 17:05 | 显示全部楼层
牛         
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 05:36 , Processed in 0.084655 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表