本帖最后由 jerryiot 于 2022-3-30 19:44 编辑
点灯起初可以注册设备到阿里云IOT,于是有了今天这个帖子。看我慢慢道来。 群里某人,每次点进去就在嘚嘚嘚说自己实现了第三方控制点灯设备,烦的一腿,怼了几句,最后就搞成了下面这个场面:
所以,情况就是这么个情况,那既然答应做人家爹,就要做好这个爹。开始分析: 需求,简单。设备通过点灯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#简单搞个客户端 作为第三方控制咯,其他语言当然没问题。 - static void Main(string[] args)
- {
- String productKey = "xxxxx";
- String deviceName = "xxxxxx";
- String deviceSecret = "xxxxxxxx";
- //计算Mqtt建联参数
- MqttSign sign = new MqttSign();
- sign.calculate(productKey, deviceName, deviceSecret);
- Console.WriteLine("username: " + sign.getUsername());
- Console.WriteLine("password: " + sign.getPassword());
- Console.WriteLine("clientid: " + sign.getClientid());
- //使用Paho链接阿里云物联网平台
- int port = 443;
- String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";
- MqttClient mqttClient = new MqttClient(broker, port, true, MqttSslProtocols.TLSv1_2, null, null);
- mqttClient.Connect(sign.getClientid(), sign.getUsername(), sign.getPassword());
- Console.WriteLine("broker: " + broker + " Connected");
- //Paho Mqtt 消息订阅
- String topicReply = "/" + productKey + "/" + deviceName + "/r";
- mqttClient.MqttMsgPublishReceived += MqttPostProperty_MqttMsgPublishReceived;
- mqttClient.Subscribe(new string[] { topicReply }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
- Console.WriteLine("subscribe: " + topicReply);
- //Paho Mqtt 消息发布
- String topic = "/" + productKey + "/" + deviceName + "/s";
- String message2 = "{"deviceType":"DiyArduino","data":{"btn-abc":"tap"},"fromDevice":"ca0e0914792711eca1545254","toDevice":"F3A3CF150IR0C9FJT7QGGM8V"}";
- mqttClient.Publish(topic, Encoding.UTF8.GetBytes(message2));
- Console.WriteLine("publish: " + message2);
- while(true) {
- Thread.Sleep(5000);
- mqttClient.Publish(topic, Encoding.UTF8.GetBytes(message2));
- Console.WriteLine("publish: " + message2);
- }
- //Paho Mqtt 断开连接
- mqttClient.Disconnect();
- }
复制代码代码很简单啊,5秒循环 publish 一个 btn-abc tap 消息, 设备烧写点灯hello例程,中介选择阿里云,默认接收到btn-abc tap 设备会 灭灯或亮灯呢。 那接下来运行上面三方程序,查看设备的灯状态就OK了,5秒一闪。呵呵。上个视频,免得儿子不相信。 5秒一个 publish 控制灯IO的高低电平。
就这点东西?感谢点灯平台,竟然让我有了个“网络儿子”。。
原创文章,转载请注明出处: https://jerrycoding.com/article/blinker-3rd
|