基于腾讯云的对象存储服务-MQTT协议

        前段时间使用腾讯云进行某医疗项目的开发。该项目使用的协议为MQTT协议,现将一些个人的心得及干货写下来,供参考(若文中有什么地方出现不符的,请批评指正)。
        本项目,前期基于本地的服务端,将所采集的个人信息及其所采集的相关医疗数据保存在本地。这样做对于本地的内存要求和后期查看相关信息造成不便。
        所以我将该设备通过MQTT协议与腾讯云对接,起初与腾讯云的物联网平台对接进行属性的上报,依此来创建小程序,在移动端进行数据的实时查看。
        对于我(大二学生)来说,这个操作是我之前经常使用的,只是为了来实时获取设备端的一些信息。python代码如下,供参考:

# 本代码是我在PyQt5中写的,有些地方可能需要根据不同的运行环境修改
'''
*******************<-腾讯云物联网开发平台->***********************
'''
HOST = "*****************" # ip
PORT = 1883 # 端口号
Username = "*************************" # 用户姓名
Password = "*********************" # 设备密钥
MQTT_site = "***********" #  MQTT服务器地址
topic = "$thing/up/property/ID/name"

# 模拟数据
data_1 = {"ID":1,"name":"张三","sex":"男","phone":"123","diagnose":"正常"}
# 连接腾讯云-物联网开发平台
class MqttThread(QThread,QObject):
    messageReceived = pyqtSignal(str)

    # 初始化,此处进行本地与云端的对接操作
    def __init__(self,parent= None):
        super().__init__()
        self.client = mqtt.Client()

        self.client.on_connect = self.on_connect
        self.client.on_message = self.on_message
        self.client.connect(MQTT_site, PORT, 60 * 12)
        self.txy_init()
        self.client.loop_start()
        
        self.messageReceived.connect(self.on_messageReceived)    
    # 物联网开发平台属性上报(json格式)

    def property_txy(self):
        global data_1
        data = {
            "method": "report",
            "clientToken": "123456",  # 例如:123456
            "params": {
                # message及数据可更改,前面的默认即可
                "message": {
                    "ID": data_1["ID"],
                    "name": data_1["name"],
                    "sex": data_1["sex"],
                    "phone": data_1["phone"],
                    "diagnose":data_1["diagnose"]
                }
            }
        }
        payload = json.dumps(data)
        # 此处的topic在前面已经定义
        self.client.publish(topic, payload, qos=1)
        
    def txy_init(self):
        self.client = mqtt.Client(protocol = 3)
        self.client.username_pw_set(Username, Password)
        self.client.on_connect = self.on_connect
        self.client.connect(HOST, PORT, keepalive = 60 * 12)  # 订阅频道
        time.sleep(0.02)

    def on_connect(self,client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        self.client.subscribe("test/topic")

    def on_message(self, client, userdata, msg):
        print(msg.topic+" "+str(msg.payload))
        self.parent.update_lable(str(msg.payload))

    def on_messageReceived(self,message):
        print("Received meaaage:"+message)


        但是在我写完成之后,我突然想到一个关键问题,这样写也不能保存每个人的信息啊,于是我就使用了以下的方式来解决--对象存储。
        所实现的效果是,按照采集当天的日期自动创建一个文件夹格式是这样:2024/02/10,当天患者的个人信息按照ID-姓名-性别-电话号码.txt的格式存储到该文件夹下。
        最近正在实现的一个操作是,本地端将MySql中所存储的的个人信息(ID,name,sex,phone)删除后,云端也将该患者的信息进行删除。待实现后进行更新。
代码如下:

# 本代码是我在PyQt5中写的,有些地方可能需要根据不同的运行环境修改
# 腾讯云存储
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
from qcloud_cos import CosClientError
from qcloud_cos import CosServiceError
import logging

'''
*******************<-腾讯云对象存储->***********************
'''
logging.basicConfig(level=logging.INFO,stream=sys.stdout)
appid = "**********"
secret_id = '***********************' # API密钥ID
secretKey = '**********************' # 创建存储桶的时候生成的KEY
region_info = "******************" # 创建存储桶时选择的地址
token = None    # 使用临时密钥需要传入 Token,默认为空,可不填
scheme = 'https'    # 默认
bucket = "*****************"   # 项目名称-appid   

# 对象存储
class Data_txy(QThread):
    
    # 本地与对象存储建立连接
    def __init__(self):
        super().__init__() 
        logging.basicConfig(level = logging.INFO,stream = sys.stdout)
        config = CosConfig(Region = region_info, Secret_id = secret_id, Secret_key = secretKey, Token = token, Scheme = scheme)
        self.client = CosS3Client(config)

    # 上传患者信息的文件
    def data_storage(self):
        self.time_1 = datetime.date.today() # 获取当天日期作为文件夹名称
        file_name = ''
    # name为本地存储患者信息的文件,内容为ID-name-sex-phone
        f = open(name_personal,"r")
        for line in f.readlines():
            file_name = file_name + str(line.strip('\n')) + '.txt'
        f.close()
        #上传由 '/' 分隔的对象名,自动创建包含文件的文件夹。想要在此文件夹中添加新文件时,只需要在上传文件至 COS 时,将 Key 填写为此目录前缀即可。
        dir_name = str(self.time_1) # 存储桶文件包名称
        object_key = dir_name + '/' +file_name
    # data_txy_site 为本地存储的所采集的数据
        with open(data_txy_site, 'rb') as fp:
            response = self.client.put_object(
                Bucket = bucket,  # Bucket 由 BucketName-APPID 组成
                Body = fp,
                Key = object_key,
                EnableMD5 = True,
                StorageClass = str(self.time_1),
                ContentType = 'text/html; charset=utf-8'
                )
        print(response['ETag'])
    
    # 列出对象存储中存储的所有文件
    def files_listed(self):
        response = self.client.list_objects(Bucket=bucket)
        if 'Contents' in response:
            for content in response['Contents']:
                print(content['Key'])


有问题的地方请批评指正。

 

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在腾讯云上搭建一个mqtt服务器,您可以使用开源的EMQX Broker。它支持百万计的并发量控制,并且单机版本是免费的。企业集群分布式部署需要收费。以下是搭建步骤: 1.首先,您需要先备案。提交备案后,腾讯云工作人员会审核您的真实身份,并在几分钟后,工信部会发送短信核验。请根据短信提示进行核验。 2.登录EMQX后台管理界面,打开浏览器并输入云服务器的公网IP地址,后面加上端口号18083(具体的端口号可以参考云防火墙配置时的端口功能说明表格)。默认的用户名是admin,密码是public。登录后,您可以自行设置界面风格。 3.在EMQX后台管理界面中,您可以配置和管理mqtt服务器的各种功能和设置。例如,您可以创建和管理设备和用户,设置订阅规则和访问权限,查看实时数据流等。 总结来说,要搭建腾讯云上的mqtt服务器,您需要先备案并通过审核,然后登录EMQX后台管理界面进行配置和管理。希望这些信息对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于腾讯云部署MQTT服务器](https://blog.csdn.net/NicolasLearner/article/details/113844469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【手把手教你搭建MQTT服务器 + 域名备案 + 申请与部署SSL证书】](https://blog.csdn.net/qq_57238596/article/details/128210050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值