新能源电动车监控数据上报

简介: 本场景介绍了阿里云原生数据库Lindorm定位智能海量数据存储场景,可提供车辆数据实时监控,助力建立驾驶行为分析等服务。

新能源电动车监控数据上报

1. 搭建ECS实例环境

搭建ECS实例环境

本步骤需要在ECS控制台操作,开通ECS实例,并完成相关配置。

登录ECS控制台,按照页面引导购买ECS实例。

说明:购买ECS实例过程中,镜像选择CentOS 7.3 64位。

设置安全组,开通3000、1883、1880端口的访问。

2. 开通Lindorm数据库

开通Lindorm数据库

本步骤需Lindorm控制台操作,开通Lindorm实例,并完成相关配置。

登录Lindorm控制台,在实例列表页,单击创建,按照页面引导购买Lindorm实例。

说明:

选择 “时序节点规格(OpenTSDB API)”,设置节点数为2。

Lindorm数据库的地域,需与ECS实例保持一致。

若选择“一键开通并克隆”,则Lindorm数据库会完成克隆,可跳过此步骤。您可前往Lindorm控制台的实例页,查看实例信息。

通过克隆,自动生成的实例备注名默认为InstanceforTest。

配置白名单:进入Lindorm实例的访问控制页面,将ECS绑定的公网IP添加入Lindorm的白名单中。

开通公网访问:进入Lindorm实例的数据库连接页面,选择时序引擎,单击开通外网地址。

3. 搭建车辆数据接收环境

搭建车辆数据接收环境

本步骤需要在ECS控制台操作,登录开通的ECS,搭建mqtt服务器。

登录ECS控制台,在实例列表页,选择开通的ECS,单击远程连接-立即登录,输入密码后,登录ECS。

依次输入如下命令,搭建mqtt服务器。

说明:请逐条复制命令运行。

echo “安装openssl、gcc、g++”
sudo yum install openssl-devel 
sudo yum -y install gcc+ gcc-c++
echo “下载mosquitto安装包”
wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz
echo '解压'
tar -zxvf mosquitto-1.6.8.tar.gz
echo '进入mosquitto-1.6.8'
cd mosquitto-1.6.8
echo '编译'
make
echo '安装'
sudo make install
echo '创建配置文件'
mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
echo '创建用户组及用户'
sudo groupadd mosquitto
sudo useradd -g mosquitto mosquitto -s /sbin/nologin
echo '启动运行mqtt服务器'
mosquitto -c /etc/mosquitto/mosquitto.conf -d
echo 'ps查看'
ps -aux | grep mosquitto
echo “如果出现找不到libmosquitto.so.1的情况,执行下面两步命令”
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig
echo “测试mosquitto安装是否正常”
echo “另外启动一个shell,订阅消息,可以收到发送的消息”
mosquitto_sub  -t rimelink
echo “发送消息”
mosquitto_pub -t rimelink -h localhost -m 'hello, mosquitto'

4. 搭建车辆数据转存流程

搭建车辆数据转存流程

本步骤需要在ECS控制台操作,登录开通的ECS,安装Node-RED,搭建车辆数据的转存流程。

在ECS服务器上,安装Node-RED。

说明:请逐条复制运行。

wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
xz -d node-v12.16.1-linux-x64.tar.xz
tar -xvf node-v12.16.1-linux-x64.tar
cp -arp node-v12.16.1-linux-x64 /usr/local/
echo '安装node.js'
sudo yum install nodejs
echo '安装node-red'
npm install -g --unsafe-perm node-red
echo “重新生成node和npm的软链接”
rm -f /usr/bin/npm /usr/bin/node
ln -s /usr/local/node-v12.16.1-linux-x64/bin/npm /usr/bin/npm
ln -s /usr/local/node-v12.16.1-linux-x64/bin/node /usr/bin/node
echo '运行node-red'
nohup node-red > node-red.log 2>&1 &

配置数据转存流程。

1) 在浏览器中输入http://{公网IP:1880},登录Node-RED控制台,复制如下JSON,导入转存流程模板。

[{'id':'99bd800f.7ed3','type':'tab','label':'mqtt2Lindorm','disabled':false,'info':''},{'id':'329162c1.3169ce','type':'mqtt in','z':'99bd800f.7ed3','name':'BEV','topic':'topic','qos':'2','datatype':'utf8','broker':'cb1d3631.5b6b28','nl':false,'rap':false,'rh':'0','x':610,'y':500,'wires':[['60757334.92409c']]},{'id':'60757334.92409c','type':'function','z':'99bd800f.7ed3','name':'MQTT to Lindorm','func':'var tokens = msg.topic.split('/');
var dest = tokens[tokens.length-1];
let ts = Date.now();
console.log(ts);
msg.headers = { 'Content-type' : 'application/json' }
msg.payload = '[{\'metric\':\'vehicle\', \'tags\':{\'sensor_a1\':\'a1\'},\'timestamp\':' + ts + ', \'fields\':' + msg.payload + '}]' ;
console.log(msg.payload);
return msg;','outputs':1,'noerr':0,'initialize':'','finalize':'','libs':[],'x':910,'y':460,'wires':[['5571d60f.d66b48']]},{'id':'5571d60f.d66b48','type':'http request','z':'99bd800f.7ed3','name':'','method':'POST','ret':'txt','paytoqs':'ignore','url':'http://ld-bp1ef09pjj62026vx-proxy-tsdb.lindorm.rds.aliyuncs.com:8242/api/mput','tls':'','persist':true,'proxy':'','authType':'','x':1180,'y':400,'wires':[['341c1a02.fd2f36']]},{'id':'341c1a02.fd2f36','type':'debug','z':'99bd800f.7ed3','name':'','active':true,'tosidebar':true,'console':false,'tostatus':false,'complete':'true','targetType':'full','statusVal':'','statusType':'auto','x':1370,'y':500,'wires':[]},{'id':'cb1d3631.5b6b28','type':'mqtt-broker','z':'99bd800f.7ed3','name':'225','broker':'8.136.192.53','port':'1883','clientid':'node-red','usetls':false,'verifyservercert':true,'protocolVersion':'4','keepalive':'15','cleansession':true,'birthTopic':'','birthQos':'0','birthRetain':'false','birthPayload':'','birthMsg':{},'closeTopic':'','closeRetain':'false','closePayload':'','closeMsg':{},'willTopic':'','willQos':'0','willRetain':'false','willPayload':'','willMsg':{},'sessionExpiry':''}]

导入后,选择mqtt2Lindorm流程,显示的转存模板如下:

2) 修改节点配置,编辑mqtt-broker节点,填入mosquitto IP地址(即公网IP地址,端口号默认1883)。

3) 编辑http 请求节点,配置Lindorm数据库连接信息:数据库URL地址,数据库用户名和密码。

说明:

数据库URL地址,可进入Lindorm数据库实例详情的数据库连接-时序引擎,进行用户名和密码的创建或查看。

数据库URL地址,可进入Lindorm数据库实例详情的数据库连接-时许引擎页面获取。

4) 点击部署,完成车辆数据转存流程的部署。

5. 模拟车辆数据写入,自动同步至Lindorm

模拟车辆数据写入,自动同步至Lindorm

本步骤需要在ECS控制台操作。登录开通的ECS,在Node-RED上模拟车辆数据写入。

您可以在Node-RED上执行如下命令,构造车辆模拟数据:

mosquitto_pub -h {公网IP} -t topic -m '{'lon': 223.573209,'lat': 45.674483,'enginStatus': 0,'acOnOff': 0,'sunRoof': 0,'frontFogLightStatus': 0,'dippedLightStatus': 0,'rearFogLightStatus': 0,'turnLightStatus': 0,'highBeamLightStatus': 0,'leftFrontDoorStatus': 0,'rightRearDorrStatus': 0 }'

说明:您也可以执行以下命令,下载并运行脚本,不断地写入模拟数据。

wget https://database-experience.oss-cn-shanghai.aliyuncs.com/write.sh; chmod 777 write.sh; nohup sh write.sh > /dev/null 2>&1 &

说明:全量模拟数据格式如下:

名称

类型

是否必填(Y/N)

说明

statusCode

String

Y

(200成功,非200失败)

statusMessage

String

Y

状态描述

data

Object

N

业务数据

lon

String

Y

经度

单位:千万分之一度

lat

String

Y

纬度

单位:千万分之一度

timestamp

String

Y

上报时间

enginStatus

String

Y

发动机状态:

0:default 

5:not run 

6:run

7:cranking

acOnOff

String

Y

空调开启/关闭

0:关

1:开

sunRoof

String

Y

天窗状态

0:未知位置

1:关闭

2:开启

3:全开

frontFogLightStatus

String

Y

前雾灯状态

0:OFF

1:ON

dippedLightStatus

String

Y

近光灯状态

0:OFF

1:ON

rearFogLightStatus

String

Y

后雾灯状态

0:OFF

1:ON

turnLightStatus

String

Y

转向灯状态

0:灯灭

1:右转向灯亮

2:左转向灯亮

3:双灯亮(危险警报灯)

highBeamLightStatus

String

Y

远光灯状态

0:OFF

1:ON 

leftFrontDoorStatus

String

Y

左前门状态

0:Unlock

1:Lock

rightRearDorrStatus

String

Y

右后门状态

0:Unlock

1:Lock

trunkDoor

String

Y

后备门状态

0:Unlock

1:Lock

leftRearDoorStatus

String

Y

左后门状态

0:Unlock

1:Lock

rightFrontDoorStatus

String

Y

右前门状态

0:Unlock

1:Lock

frDoorLock

String

Y

前右门锁状态

0:unlock

1:lock

rlDoorLock

String

Y

后左门锁状态

0:unlock

1:lock

rrDoorLock

String

Y

后右门锁状态

0:unlock

1:lock

flDoorLock

String

Y

前左门锁状态

0:unlock

1:lock

centrolLockStatus

String

Y

中控锁状态(删除)

0:Unlock

1:Lock

frontLeftWindow

String

Y

左前窗状态

0:window close(车窗关闭)

1:window breathe(透气窗)

2:window open(车窗打开)

frontRightWindow

String

Y

右前窗状态

0:window close(车窗关闭)

1:window breathe(透气窗)

2:window open(车窗打开)

rearLeftWindow

String

Y

左后窗状态

0:window close(车窗关闭)

1:window breathe(透气窗)

2:window open(车窗打开)

rearRightWindow

String

Y

右后窗状态

0:window close(车窗关闭)

1:window breathe(透气窗)

2:window open(车窗打开)

tireLeftFrontPressureStatus

String

Y

左前轮胎压状态

0:Normal

1:Over-pressure

2:Under-pressure

3:Reserved

tireRightFrontPressure

String

Y

右前轮胎压

单位:1.373Kpa

无效值:0xFF

tireRightFrontPressureStatus

String

Y

右前轮胎压状态

0:Normal

1:Over-pressure

2:Under-pressure

3:Reserved

tireLeftRearPressure

String

Y

左后轮胎压

单位:1.373Kpa

无效值:0xFF

tireLeftRearPressureStatus

String

Y

左后轮胎压状态

0:Normal

1:Over-pressure

2:Under-pressure

3:Reserved

tireLeftFrontPressure

String

Y

左前轮胎压

单位:1.373Kpa

无效值:0xFF

tireRightRearPressure

String

Y

右后轮胎压

单位:1.373Kpa

无效值:0xFF

tireRightRearPressureStatus

String

Y

右后轮胎压状态

0:Normal

1:Over-pressure

2:Under-pressure

3:Reserved

remainingFuel

String

Y

剩余油量

单位:1L

数值范围:

totalMileage

String

Y

总计里程

单位:Km

数值范围:

无效值:1000000~16777215

remainingMileage

String

Y

续航里程

单位:Km

数值范围:

averageFuel

String

Y

平均油耗

单位:L/100km

数值范围:

精度: 0.1

无效值:201~255

validEngineCoolerTemperature

String

Y

发动机冷却液温度有效位

0:Not valid

1:Valid

engineCoolerTemperature

String

Y

发动机冷却液温度

单位:℃

偏移量:-40

无效值:0xFF

validSpeed

String

Y

车速有效位

0:Not valid

1:Valid

speed

String

Y

车身速度

单位:0.05625km/h

无效值:0x1901~0x1FFF

pm25Status

String

Y

PM2.5过滤状态

0:reserve

1:优

2:良

3:差

4:关闭

5~7:reserve

stealAlarmStatus

String

Y

盗警状态

0: Disarmed

1: Armed

2: Prearmed

3: Alarmed'

alarmType

String

Y

警情类型

1:碰撞上报

2:侧翻(预留)

3:盗警

4:欠压

5:断电

6: 儿童遗忘报警

alarmTimestamp

String

Y

警情上报时间戳

6. (可选)对接Grafana,可视化展示数据

(可选)对接Grafana,可视化展示数据

安装并启动Grafana服务。

1)在ECS服务器上,运行如下命令,安装Grafana。

wget https://database-experience.oss-cn-shanghai.aliyuncs.com/grafana-6.2.2-1.x86_64.rpm; yum install grafana-6.2.2-1.x86_64.rpm

2)执行如下命令,启动Grafana服务。

service grafana-server start

接入Lindorm数据库的时许引擎数据源。

1)登录Grafana。在浏览器中输入Grafana登录页面的URL地址:ECS公网地址:3000。

例如:ECS 的公网地址是 xxx.xx.xx.xxx,那么在浏览器中输入地址http://xxx.xx.xx.xxx:3000

登录名:admin

密码:admin

2)在Grafana中创建一个数据源。创建时,如下设置需指定信息,其他设置采用默认值即可。

数据库类型:OpenTSDB。

HTTP URL:Lindorm数据库的VPC网络地址。可进入数据库控制台的实例详情-基础信息-查看VPC网络查看。

OpenTSDB版本:==2.3。

Resolution:millisecond。

3)单击Save&Test。

说明:若界面上弹出提示语Data source is working,则表明Grafana已经成功连接上指定的数据库实例。

创建展示数据的监控视图,查看数据大盘(dashboard)。

说明:

本案例已为您提供监控视图模板,您可直接导入模板,一键生成数据大盘。

您也可访问参考文档,手动搭建数据大盘。

1)下载监控视图模板(点击下载)。

2)单击 + > Import,进入模板导入页面。

3)单击Upload .json File,上传模板文件后,单击Import,完成导入。

效果图如下:

实验链接:https://developer.aliyun.com/adc/scenario/60678b87284a42e59926ca2b432657fd

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
数据可视化 数据处理
结构化分析与设计
一、结构化分析与设计 结构化分析与设计(Structured Analysis and Design,简称SAD)是一种软件开发方法论,旨在通过分析和设计来构建高质量的软件系统。 结构化分析与设计的主要特点包括以下几点: 1. 结构化分析:结构化分析是通过对系统需求进行分析,将系统分解为若干个功能模块,并定义它们之间的关系和交互。在结构化分析中,常用的工具和技术包括数据流图(Data Flow Diagram,简称DFD)、数据字典(Data Dictionary)和实体关系图(Entity-Relationship Diagram,简称ERD)等。 2. 结构化设计:结构化设计是在结构化分析
1132 2
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
|
人工智能 架构师 前端开发
手把手体验通义灵码2.0:AI程序员如何让我从“调参侠”进阶“架构师”?
通义灵码2.0是一款强大的AI编程工具,帮助开发者从“调参侠”进阶为“架构师”。它通过跨语言开发支持、智能单元测试生成和图生代码等功能,大幅提升开发效率。例如,将Python数据处理函数一键转为React+ECharts组件,自动生成单元测试用例,甚至通过草图生成前端布局代码。此外,新增的QwQ模型具备“代码脑补”能力,可推荐性能优化策略。尽管功能强大,但仍需注意环境隔离与代码审查,避免过度依赖。通义灵码2.0不仅是工具,更是开发者的“外接大脑”。
544 8
|
弹性计算 网络安全 数据安全/隐私保护
云起实验室QA
有关云起实验室问题可以在以下内容中寻找答案,如未找到答案可以在文后提问 或者加入云起实验室群聊 寻找管理员解答
云起实验室QA
|
API
FFmpeg中AVPacket、AVFrame结构的基本使用
FFmpeg中AVPacket和AVFrame结构的内存分配、释放和引用计数处理,以及如何避免内存泄漏。
561 3
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
1211 1
|
机器学习/深度学习 人工智能 自然语言处理
AI基础知识
【9月更文挑战第3天】
1486 7
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
627 0
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
1014 1

热门文章

最新文章