Skip to content

热门问题

问题1、如何更改连接数据库

蜂鸟物联网平台项目中用到了两种数据库,分别外关系型数据库和时序数据库,其中关系数据库存储设备、产品、告警、用户、角色等信息,时序数据库主要存储设备数据上报信息如属性、事件等等。 在平台启动时关系型数据库默认使用sqlite,时序数据库选择leveldb(其实leveldb并不算序数据库,它属于一种kv数据库,但它对数据有高写入和对数据的高压缩特性正好符合蜂鸟物联网平台的特性,所以平台对它进行了改造,让它支持了一些范围查询,但生产环境不建议使用)

如果想更换数据库连接,请更改项目中hummingbird/manifest/docker/config/configuration.toml配置文件。

关系型数据库

关系型数据库支持mysql(推荐8.0.x版本)和sqlite(默认)

toml
[Databases]
[Databases.Metadata]
[Databases.Metadata.Primary]
Type = 'sqlite'
DataSource = 'manifest/docker/db-data/core-data/core.db?_timeout=5000'
#如果想改为mysql请把上面两行注释,并把下面两行打开(注意如果选择mysql数据库,请先在mysql中创建hummmingbird数据库,并把hummingbird/manifest/sql/init.sql导入到数据库中)。
#Type = 'mysql'
#Dsn = 'root:123456@tcp(127.0.0.1:3306)/open-hummingbird?charset=utf8mb4&parseTime=True&loc=Local'

时序数据库

关系型数据库支持tdengine(推荐3.3.x.x版本)和leveldb(默认)

toml
[Databases.Data]
[Databases.Data.Primary]
Type = 'leveldb'
DataSource = 'manifest/docker/db-data/leveldb-core-data/'
#如果想改为tdengine请把上面两行注释,并把下面两行打开(注意如果选择tdengine数据库,请提前创建tdengine数据库)。
#Type = 'tdengine'
#Dsn = 'root:taosdata@ws(127.0.0.1:6041)/hummingbird'

问题2、如果在本地调试驱动

在开发自定义驱动部署上线的时候,会经常遇到如下问题。

1、驱动没有经过本地测试而直接发布上线环境,导致遇到问题回退镜像版本,从而影响产品质量。

2、用户在本地开发驱动完成后推送到线上环境进行验证,出问题返回修改、打包、再推送验证,反反复复,浪费时间。

解决这个问题的关键点就是驱动本地调试,用户可以在本地把编写好的驱动“跑”起来,调用sdk中的方法进行数据的收发,观察本地日志 再做项目修改,修改成功后再进行编译打包推送镜像仓库,一次性解决问题。

如何在本地调试驱动?

我们先来看一张图,下图很好的描述了驱动和蜂鸟的关系,首先驱动蜂鸟在启动的时候会各自启动一个RPC服务器,其中驱动RPC服务器(随机端口)的作用是接受蜂鸟的控制请求(用户通过设备调试/API接口/小程序),然后对数据进行转换和封装通过各种协议发送给设备。 蜂鸟服务器RPC服务的作用是接口驱动数据上报请求,如属性/事件/在线/离线上报(调用SDK方法),拿到数据后续再进行业务处理,理解驱动和平台关系我们再来看看如何本地调试驱动。 img.png

步骤一

在要调试的驱动项目中创建cmd/res/config.toml文件,文件写入如下内容。

toml
CustomParam = ""

[Logger]
FileName = "./logs/driver.log"
LogLevel = "INFO"

[Clients]
[Clients.Core]
Address = "hummingbird-core:57081"
UseTLS = false
CertFilePath = ""
ClientId = ""
Username = ""
Password = ""

[Service]
ID = "09399906"
Name = "test-driver"
Activated = false
[Service.Server]
Address = "0.0.0.0:33349"
UseTLS = false
CertFile = ""
KeyFile = ""

其中Address需要改为蜂鸟物联网平台机器启动的IP地址,如果蜂鸟机器的IP地址为192.168.1.2,那改为Address = "192.168.1.2:57081"

Service.ID 改为我的驱动页面要调试的驱动编号。 img_1.png

步骤二

使用 go run cmd/main.go -c cmd/res/config.toml 命令运行驱动,观察driver.log,如果出现Server start success.代表驱动本地启动成功。

img_2.png

问题3、启动驱动报“系统错误”

问题描述

通过使用如下命令启动蜂鸟物联网平台,在我的驱动菜单栏点击操作->启动时,系统弹出“系统错误”。

shell
go run cmd/hummingbird-core/main.go -c cmd/hummingbird-core/res/configuration.toml

问题说明

蜂鸟物联网平台和驱动启动运行都依赖docker环境,并且两个容器的网络可以互相访问,在驱动启动时会去寻找hummingbird所在的docker网络,如果没有找到 就会报“系统错误”。

解决方案

使用docker启动蜂鸟物联网平台即可解决此问题,我们一般使用docker compose命令。进入hummingbird/manifest/docker目录,运行docker compose up -d 命令

引用docker compose官方一段话加深理解: 默认情况下,Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问。