当前位置: 代码网 > 手机>品牌>华为 > 基于华为云 设备接入IoTDA的数据实时查看

基于华为云 设备接入IoTDA的数据实时查看

2024年08月02日 华为 我要评论
利用华为云设备接入IoTDA实现驾驶员疲劳检测的数据的实时上传

基于华为云 设备接入iotda的数据实时查看



前言

最近在打比赛,做了一个项目,本人有幸主要负责云端数据部分,在此写一下我的工作流程


一、数据收集

我们做的是驾驶员疲劳检测,此处利用了一个大佬的源代码并做出了一些修改
源代码链接

1 、导入的包和数据定义

在原作者基础上导入了一个包并就“驾驶员疲劳,玩手机,喝水,吸烟”四个状态及进行定义

import csv
#云端数据
fatigue_driving = 0
phone = 0
drink = 0
smoke = 0

2、实时修改数据

修改摄像头类的代码块

# 在函数中引入定义的全局变量
global fatigue_driving,phone,drink,smoke

如果成功检测,添加

#云端数据实时修改
            if "phone" in lab:
                phone = 1
            else:
                phone = 0

            if "drink" in lab:
                drink = 1
            else:
                drink = 0

            if "smoke" in lab:
                smoke = 1
            else:
                smoke = 0

在函数末尾将数据导入预先存好的excle中,filename是你自己的文件名

fatigue_driving1
phone0
drink0
smoke0
# 打开csv文件
    with open(filename, 'r', newline='') as csvfile:
        # 读取csv文件内容
        csvreader = csv.reader(csvfile)

        # 转换为列表,方便修改数据
        data = list(csvreader)
    #print(data)
    yunshuju = [fatigue_driving, phone, drink, smoke]
    # 修改每一行第二列的数字
    for k in range(len(yunshuju)):
        # 假设第二列是数字类型
        data[k][1] =yunshuju[k]
    #print(data)
    # 保存修改后的数据回到文件
    with open(filename, 'w', newline='') as csvfile:
        # 创建csv写入对象
        csvwriter = csv.writer(csvfile)
        # 写入修改后的数据
        csvwriter.writerows(data)

修改之后,就可以实时改变excle中的数据了

二、创建设备

1.进入华为云

华为云
选择产品设备接入iotda
在这里插入图片描述

2.创建产品

协议类型mqtt,数据格式json,其他随意
在这里插入图片描述

3.定义产品模型

自定义模型
在这里插入图片描述

4.添加属性

添加属性名称,定义他们的性质
在这里插入图片描述
最后效果
在这里插入图片描述

5.注册设备

注册设备,随便填一个设备标识码和密钥,记住他们,其实不记住也行,因为确定之后华为云会生成一个文件devices-key.txt,生成之后开始应该是未激活
在这里插入图片描述

三、数据上传代码

1.iot device sdk使用指南

iot device sdk(python)提供设备接入华为云iot物联网平台的python版本的sdk,提供设备和平台之间通讯能力,以及设备服务、网关服务、ota等高级服务,并且针对各种场景提供了丰富的demo代码。具体内容可以参考iot device sdk(python)使用指南,我们还需要他里面的包iot_device_sdk_python

2.导入库

from __future__ import absolute_import

from iot_device_sdk_python.client.listener.default_publish_action_listener import defaultpublishactionlistener
from typing import list
import time
import logging
from iot_device_sdk_python.client.client_conf import clientconf
from iot_device_sdk_python.client.connect_auth_info import connectauthinfo
from iot_device_sdk_python.iot_device import iotdevice
from iot_device_sdk_python.client.listener.property_listener import propertylistener
from iot_device_sdk_python.client.request.service_property import serviceproperty
from iot_device_sdk_python.client import iot_result

logging.basicconfig(level=logging.info,
                    format="%(asctime)s - %(threadname)s - %(filename)s[%(funcname)s] - %(levelname)s: %(message)s")
logger = logging.getlogger(__name__)

3.创建设备,属性上报

属性上报指的是设备将当前属性值上报给平台。属性设置指的是平台设置设备的属性值
创建设备,并且设置无限循环while true,设置循环时间time.sleep(1)

class cscdetector:
    _logger = logging.getlogger(__name__)

    def __init__(self, server_uri, port, device_id, secret, iot_cert_file):
        self.server_uri = server_uri
        self.port = port
        self.device_id = device_id
        self.secret = secret
        self.iot_cert_file = iot_cert_file

    def start(self):
        """ 创建设备 """
        connect_auth_info = connectauthinfo()
        connect_auth_info.server_uri = self.server_uri
        connect_auth_info.port = self.port
        connect_auth_info.id = self.device_id
        connect_auth_info.secret = self.secret
        connect_auth_info.iot_cert_path = self.iot_cert_file
        connect_auth_info.bs_mode = connectauthinfo.bs_mode_direct_connect

        client_conf = clientconf(connect_auth_info)

        device = iotdevice(client_conf)

        device.get_client().set_properties_listener(iicblistener(propertylistener))

        if device.connect() != 0:
            logger.error("init failed")
            return

        # 10s后上报一次设备的属性
        time.sleep(10)

        # 按照产品模型设置属性
        service_property = serviceproperty()
        service_property.service_id = "csc"
        service_property.properties = {"fatigue_driving": 0, "phone": 0, "drink": 0, "smoke": 0}
        # 组装成列表的形式
        services = [service_property]

        # 上报设备属性
        device.get_client().report_properties(services)

        while true:
            service_property = serviceproperty()
            service_property.service_id = "csc"
            data_upload = upload_data_read(filename)
            print(data_upload)
            service_property.properties = {"fatigue_driving": data_upload.get('fatigue_driving'),
                                           "phone": data_upload.get('phone'),
                                           "drink": data_upload.get('drink'),
                                           "smoke": data_upload.get('smoke')}
            # 组装成列表的形式
            services = [service_property]
            device.get_client().report_properties(services, defaultpublishactionlistener())
            time.sleep(1)

附:数据阅读函数

def upload_data_read(filename):
    data_file = open(filename, encoding='utf-8')
    data_upload = dict()
    for line in data_file.readlines():
        curline = line.split(',')
        data_upload[curline[0]]= int(curline[1])
    return  data_upload

4.平台设置设备属性

定义类csclistener,两个方法:on_property_set方法处理写属性,on_property_get方法处理读属性。

class csclistener(propertylistener):
    def __init__(self, iot_device: iotdevice):
        """ 传入一个iotdevice实例 """
        self.device = iot_device

    def on_property_set(self, request_id: str, services: list[serviceproperty]):
        """
        处理写属性
        :param request_id:  请求id
        :param services:    list<serviceproperty>
        """

        """ 遍历service """
        for service_property in services:
            logger.info("on_property_set, service_id:" + service_property.service_id)
            """ 遍历属性 """
            for property_name in service_property.properties:
                logger.info("set property name:" + property_name)
                logger.info("set property value:" + str(service_property.properties[property_name]))
        self.device.get_client().respond_properties_set(request_id, iot_result.success)

    def on_property_get(self, request_id: str, service_id: str):
        """
        处理读属性。多数场景下,用户可以直接从平台读设备影子,此接口不用实现。
        但如果需要支持从设备实时读属性,则需要实现此接口。
        :param request_id:  请求id
        :param service_id:  服务id,可选
        """
        service_property = serviceproperty()
        service_property.service_id = "csc"
        data_upload = upload_data_read(filename)
        service_property.properties = {"fatigue_driving": data_upload.get('fatigue_driving'),
                                       "phone": data_upload.get('phone'),
                                       "drink": data_upload.get('drink'),
                                       "smoke": data_upload.get('smoke')}
        services = [service_property]
        self.device.get_client().respond_properties_get(request_id, services)

5.主函数

根据自己的信息填写

def main():
    server_uri = ""
    port = 8883
    device_id = ""
    secret = ""
    iot_ca_cert_path = "./resources/globalsignrsaovsslca2018.crt.pem"

    iicb_detector = iicbdetector(server_uri=server_uri,
                                  port=port,
                                  device_id=device_id,
                                  secret=secret,
                                  iot_cert_file=iot_ca_cert_path)
    iicb_detector.start()

四、效果展示

同时运行两个函数
在这里插入图片描述
云平台端
在这里插入图片描述

总结

呦呵,收获不错

(0)

相关文章:

  • 关于云计算和raid技术的对比

    关于云计算和raid技术的对比

    云计算和RAID技术是两个不同领域的概念,但它们可以在存储和数据保护方面进行对比。云计算(Cloud Computing)是指通过网络将计算资源、存储资源和应用... [阅读全文]
  • 云计算——容器

    本章会讲解云计算中的容器,了解容器的基本作用,核心,组成,以及特点…

    2024年08月02日 品牌
  • HarmonyOS简介

    HarmonyOS内置强大的AI能力,面向HarmonyOS生态应用的开发,通过不同层次的AI能力开放,满足开发者的不同开发场景下的诉求,降低应用的开发门槛,帮助开发者快速实现应用…

    2024年08月02日 品牌
  • 如何看待鸿蒙HarmonyOS?

    鸿蒙系统,自2019年8月9日诞生就一直处于舆论风口浪尖上的系统,从最开始的“套壳”OpenHarmony安卓的说法,到去年的不再兼容安卓的NEXT版本的技术预览版发布,对于鸿蒙到…

    2024年08月02日 品牌
  • 鲸鸿动能广告接入如何高效变现流量?

    广告是App开发者最常用的流量变现方法之一,当App拥有一定数量用户时,开发者就需要考虑如何进行流量变现,帮助App实现商业可持续增长。是广告服务依托华为终端强大的平台与数据能力为…

    2024年08月02日 品牌
  • HUAWEI MateBook X Pro升级2T SSD并保留一键恢复功能

    上网查了很多资料,大多数都有提到MateBook X Pro最大只支持1T SSD,去到华为的服务中心升级也只能支持1T容量,偶尔也有几个网友提到成功升级到2T,但是过程与方法均未…

    2024年08月02日 品牌

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com