想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com
总结软件运行的体验效果:(1) 非常流畅。两个窗口肉眼感觉不到延迟。(2)服务器不要钱。这个方案验证之后,可以衍生出很多实际的例子了:{
"imageData": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBD...",
"imageName": "my_image.png"
}





{
"ProductKey": "a12qAqNZg3i",
"DeviceName": "video_de1",
"DeviceSecret": "206a4bc03642930542a9bcb8925b9a0f"
}

最大一次只能传递10KB。



物联网平台的域名格式为:productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com,其中productKey是您在物联网平台上创建的产品的标识符,cn-shanghai表示物联网服务器所在的地区。
MQTT协议的域名格式为:productKey.iot-as-mqtt.cn-shanghai.aliyuncs.com,其中productKey是您在物联网平台上创建的产品的标识符,cn-shanghai表示物联网服务器所在的地区。
HTTPS协议的域名格式为:productKey.iot-as-http.cn-shanghai.aliyuncs.com,其中productKey是您在物联网平台上创建的产品的标识符,cn-shanghai表示物联网服务器所在的地区。
需要注意的是,以上的域名规则中,productKey需要替换成你在物联网平台上创建产品时生成的实际productKey。下面是阿里云国内的服务器地域和可用区详情:
地域名称 所在城市 Region ID 可用区数量
华北 1 青岛 cn-qingdao 2
华北 2 北京 cn-beijing 10
华北 3 张家口 cn-zhangjiakou 3
华北 5 呼和浩特 cn-huhehaote 2
华北 6 乌兰察布 cn-wulanchabu 3
华东 1 杭州 cn-hangzhou 8
华东 2 上海 cn-shanghai 8
华南 1 深圳 cn-shenzhen 6
华南 2 河源 cn-heyuan 2
华南 3 广州 cn-guangzhou 2
西南 1 成都 cn-chengdu 2
端口号是:1883
我的设备参数:
{
"ProductKey": "a12qAqNZg3i",
"DeviceName": "video_de1",
"DeviceSecret": "206a4bc03642930542a9bcb8925b9a0f"
}
经过上面的格式解释,我的阿里云服务器登录的域名就是(选择的是上海服务器):
a12qAqNZg3i.iot-as-mqtt.cn-shanghai.aliyuncs.com
解析域名对应的IP地址:
Microsoft Windows [版本 10.0.19044.2604]
(c) Microsoft Corporation。保留所有权利。
C:\Users\11266>ping a12qAqNZg3i.iot-as-mqtt.cn-shanghai.aliyuncs.com
正在 Ping vpc-sh-prod.mqtt.iotgds.aliyuncs.com.gds.alibabadns.com [47.103.191.238] 具有 32 字节的数据:
来自 47.103.191.238 的回复: 字节=32 时间=40ms TTL=88
来自 47.103.191.238 的回复: 字节=32 时间=40ms TTL=88
来自 47.103.191.238 的回复: 字节=32 时间=40ms TTL=88
来自 47.103.191.238 的回复: 字节=32 时间=40ms TTL=88
47.103.191.238 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 40ms,最长 = 40ms,平均 = 40ms
C:\Users\11266>
打开生成工具:
生成MQTT登录的密匙: 填入的参数就是前面创建设备得到信息。
mqttClientId:
video_de1|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username:
video_de1&a12qAqNZg3i
password:
02F7190BE8C33C1A8009EDBAF824BFDC6784FC67
总结:发布主题:
/sys/a12qAqNZg3i/video_de1/thing/event/property/post
上报属性消息的格式:
{"method":"thing.event.property.post","params":{"image":"1234567890"}}
订阅主题:
/sys/a12qAqNZg3i/video_de1/thing/service/property/setIP地址:47.103.191.238
端口号:1883
mqttClientId: video_de1|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_de1&a12qAqNZg3i
password: 02F7190BE8C33C1A8009EDBAF824BFDC6784FC67
发布主题:
/sys/a12qAqNZg3i/video_de1/thing/event/property/post
上报属性消息的格式:
{"method":"thing.event.property.post","params":{"image":"1234567890"}}
订阅主题:
/sys/a12qAqNZg3i/video_de1/thing/service/property/set
数据接收成功:
到此服务器创建成功。


{
"ProductKey": "a12qAqNZg3i",
"DeviceName": "video_dev2",
"DeviceSecret": "30ebb8ffc4316fbe957fcfb13bdaec01"
}
接下来生成设备2的MQTT三元组密匙,和前面一样的方法。
mqttClientId:
video_dev2|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username:
video_dev2&a12qAqNZg3i
password:
15D2C020586E165E6A35BB2FA4DEB9DD59F3E73EIP地址:47.103.191.238
端口号:1883
mqttClientId: video_dev2|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_dev2&a12qAqNZg3i
password: 15D2C020586E165E6A35BB2FA4DEB9DD59F3E73E
发布主题:
/sys/a12qAqNZg3i/video_dev2/thing/event/property/post
上报属性消息的格式:
{"method":"thing.event.property.post","params":{"image":"abcdefg"}}
订阅主题:
/sys/a12qAqNZg3i/video_dev2/thing/service/property/set


创建完成。


添加主题:
设置数据目的:


编写解析器脚本:
帮助文档地址:https://help.aliyun.com/document_detail/270937.html。
下面编写代码,获取设备1上传的数据,转发给设备2。//通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。
var data = payload("json");
//直接流转物模型上报数据。
writeIotTopic(1000, "/a12qAqNZg3i/video_dev2/user/get", data)
写好解析器就发布。在云产品流转的首页启动解析器。

IP地址:47.103.191.238
端口号:1883
mqttClientId: video_de1|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_de1&a12qAqNZg3i
password: 02F7190BE8C33C1A8009EDBAF824BFDC6784FC67
设备1发布主题:
主题格式:/a12qAqNZg3i/video_de1/user/update
数据内容:{"method":"thing.event.property.post","params":{"image":"1234567890"}}IP地址:47.103.191.238
端口号:1883
mqttClientId: video_dev2|securemode=2,signmethod=hmacsha1,timestamp=1678078910527|
username: video_dev2&a12qAqNZg3i
password: 15D2C020586E165E6A35BB2FA4DEB9DD59F3E73E
设备2订阅主题:
主题格式:/a12qAqNZg3i/video_dev2/user/get
const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
//进行base64编码
//bindata:进行编码的图片数据
//base64:转换后的base64编码
//binlength:图片大小
char * base64_encode( u8 * bindata, char * base64, u32 binlength )
{
u32 i, j;
u8 current;
for ( i = 0, j = 0 ; i < binlength ; i += 3 )
{
current = (bindata[i] >> 2) ;
current &= (u8)0x3F;
base64[j++] = base64char[(int)current];
current = ( (u8)(bindata[i] << 4 ) ) & ( (u8)0x30 ) ;
if ( i + 1 >= binlength )
{
base64[j++] = base64char[(int)current];
base64[j++] = '=';
base64[j++] = '=';
break;
}
current |= ( (u8)(bindata[i+1] >> 4) ) & ( (u8) 0x0F );
base64[j++] = base64char[(int)current];
current = ( (u8)(bindata[i+1] << 2) ) & ( (u8)0x3C ) ;
if ( i + 2 >= binlength )
{
base64[j++] = base64char[(int)current];
base64[j++] = '=';
break;
}
current |= ( (u8)(bindata[i+2] >> 6) ) & ( (u8) 0x03 );
base64[j++] = base64char[(int)current];
current = ( (u8)bindata[i+2] ) & ( (u8)0x3F ) ;
base64[j++] = base64char[(int)current];
}
base64[j] = '\0';
return base64;
}
//解码base64
//base64:base64编码
//bindata:图片数据
int base64_decode( const char * base64, u8 * bindata )
{
u32 i, j;
u8 k;
u8 temp[4];
for ( i = 0, j = 0; base64[i] != '\0' ; i += 4 )
{
memset( temp, 0xFF, sizeof(temp) );
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i] )
temp[0]= k;
}
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i+1] )
temp[1]= k;
}
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i+2] )
temp[2]= k;
}
for ( k = 0 ; k < 64 ; k ++ )
{
if ( base64char[k] == base64[i+3] )
temp[3]= k;
}
bindata[j++] = ((u8)(((u8)(temp[0] << 2))&0xFC)) |
((u8)((u8)(temp[1]>>4)&0x03));
if ( base64[i+2] == '=' )
break;
bindata[j++] = ((u8)(((u8)(temp[1] << 4))&0xF0)) |
((u8)((u8)(temp[2]>>2)&0x0F));
if ( base64[i+3] == '=' )
break;
bindata[j++] = ((u8)(((u8)(temp[2] << 6))&0xF0)) |
((u8)(temp[3]&0x3F));
}
return j;
}

文章相关附件可以点击下面的原文链接前往下载: https://ost.51cto.com/resource/2571想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com 我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于