在virtualbox中新建虚拟镜像后,为规避网络不稳定的问题,选用桥接模式,使网络与本地一致。(原来使用双网卡模式,发现网络经常不稳定,使得在格式化硬盘及下载docker等方面失败)
虚拟机启动后使用root登录,此时根据提示运行setup-alpine
Select keyboard layout [none]: 是选择键盘布局,系统默认给你选了none,输入两次cn表示中文。其他都默认,root账户的密码如果要设置后继要记住使用,否则填空。
Which timezone are you in? (’?’ for list) [UTC] 这里输入PRC。
Enter mirror number (1-62) or URL to add (or r/f/e/done) [f] 选择源,r是代表随机指定一个源,f是是自动检测速度最快的源,e是编辑系统对应文件,可以选择f。建议使用e编辑对应的/etc/apk/repositories 文件(配置安装速度更快且稳定):
vi /etc/apk/repositories
按i切换成输入模式,写入镜像文件后按Esc, :wq (写入后保存退出),
如果后面显示相关镜像Not Found,重复上一步进入文件夹检查镜像文件输入是否有误。
http://mirrors.aliyun.com/alpine/v3.9/main
http://mirrors.aliyun.com/alpine/v3.9/community
根据提示键入内容
WARNING: Erase the above disk(s) and continue? [y/N]: 这里输入y确认格式化,等待格式化成功即可。
关机后,在virtualbox中的存储中移除掉之前的iso文件,否则下次启动还是在光盘启动的安装状态,而不是进入我们写入的sda磁盘中。
再次启动就可以进行linxu系统,使用root登录,可以使用命令进行更新系统或者安装删除软件:
apk update # 更新最新镜像源列表
apk upgrade # 升级所有软件
前面我们在安装系统的时候默认在测试源时选择使用e,编辑对应的/etc/apk/repositories 文件,所以文件里已经有对应的镜像文件,所以我们直接下载:
apk add docker #安装docker
rc-update add docker boot 设置为默认启动服务
service docker start 启动这个服务
service docker status 查看服务状态
安装docker时如果下载时显示全部ERROR,首先考虑网络问题,可以使用解决:
service networking restart 重启网络服务
如果只是部分条款丢失,如docker正常安装完成显示(11:11),丢失了三条,可以重复运行安装docker命令,直至显示丢失的三条完成安装为(3:3),即为下载完成。此时启动docker服务并查看状态,若显示started则为运行。若显示crashed(碰撞),可以重启docker:
service docker restart 重启docker服务
https://hub.docker.com/r/emqx/neuron/tagsNeuron docker 镜像下载:https://hub.docker.com/r/emqx/neuron/tags
docker pull emqx/neuron:2.5.3-alpine
下载完成后使用该命令可以查看是否下载完成。
docker images 查看所有镜像,可以看到这个emqx/neuron镜像
docker run -d --name neuron -p 7000:7000 --restart=always emqx/neuron:2.5.3-alpine
docker ps -a 查看容器,status为up的表示这个容器正在运行中
- tcp 7000:用于访问 web 和 http api 端口。
- --restart=always:docker 进程重启时,自动重启 neuron 容器。
- emqx/neuron:2.5.3-alpine 版本信息
查看下alpine的IP地址:
ip addr
ifconfig 在windows下这条命令是ipconfig
添加南向设备
设置ip为windows主机的IP
创建组
创建点位
在windows上启动modbus slaver模拟从端软件,模拟风速、风向、压力。(modbus-slaver软件在进行连接的时候需要序列号:5455415451475662)
打开数据监控,需要注意的是,在进行modbus-rtu连接时会弹出防火墙询问是否允许访问,选择是,因为对端口进行监控不允许访问会被拦截,值信息会显示插件未启用。
与建立modbus-rtu设备一样,只是把插件类型改成modbus-TCP,端口号改为503。
依次创建组和点位。启动modbus slaver模拟从端软件,模拟温湿度和报警灯。
需要注意的是,与是否启用防火墙不同,若 配置信息有误,数据监控会显示插件信息未回复:
正确配置以后则正常连接显示值:
在边缘网关的监控页面,也可以对报警灯状态来进行下发命令,开启或者关闭。
构建emqx
Docker | EMQX 文档
- 运行以下命令获取 Docker 镜像:docker pull emqx/emqx:5.3.0
- 运行以下命令启动 Docker 容器:
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.3.0
使用浏览器访问其ip:18083上的web服务页面,默认用户名密码为admin、public。这里的IP是指alpine主机的ip。
点击对应的应用,添加订阅,选择之前能正常运行的组,主题默认。
在对应emqx的18083页面,可以看到连接的客户端和订阅的主题。
如图
从北向设备发送数据到云平台
发布订阅以后可以在emqx的连接页面看到他默认的订阅信息,我们同样复制去MQTT中。
数据上下行格式 | Neuron 文档 (neugates.io)
发布消息的json格式可以通过官网查找。uuid:唯一标识符。
接收消息:
和上述基本相同
Webhook | EMQX 文档
HTTP 服务 | EMQX 文档
这里以HTTP为例
首先我们使用 Python 搭建一个简单的 HTTP 服务,用来接收 POST /
请求,该服务打印请求内容后返回 200 OK:见官网
文件所在目录运行如下命令:
# 安装 flask 依赖
pip install flask# 启动服务
python3 http_server.py
输入数据桥接名称,要求是大小写英文字母和数字的组合,这里我们输入 my_httpserver
至此您已经完成数据桥接创建,接下来将继续创建一条规则来指定需要写入的数据。
至此您已经完成整个创建过程,可以前往 数据集成 -> Flows 页面查看拓扑图,此时应当看到 t/#
主题的消息经过名为 my_rule
的规则处理,处理结果转发到 HTTP 服务。
使用 MQTT向 t/1
主题发布主题,可以直接用MQTT.fx订阅主题发布此操作同时会触发上下线事件。
打开Ubuntu虚拟机查看IP(ip addr |more)。在windows中浏览器通过ubuntu的IP加上9000端口来访问jetlinks。默认的用户名密码都是admin。 如果进不去稍等2-3分钟再试,其后台服务还没有完全启动完成。
注意此时产品还没有启用,做完链接配置以后再启用产品。 点入编辑添加物模型,这里的物模型标识要与前面neuron点位里面的标识一致。这样方便emqx的数据转发。
设备接入网关——新建接入方式,选择mqtt broker接入 ,配置完成后启用。
新增设备,需要是刚刚创建的产品中的设备,启用设备。此时,jetlinks已经作为mqtt客户端连接上了emqx。在emqx的web页面可以看到多了一个连接上来的客户端。
在emqx的集成/规则中创建规则,来进行数据转发。从之前的mqtt.fx中可以看出,对应主题为/neuron/emqx/modbus_tcp_device/modbus_tcp_group的上报传感器的报文数据的负载为:
{"node": "modbus_tcp_device", "group": "modbus_tcp_group", "timestamp": 1697634289873, "values": {"temperature": 18.0, "humidity": 64.5, "alarm": 0}, "errors": {}}
SELECT payload.values as v FROM "/neuron/emqx/modbus_tcp_device/modbus_tcp_group"
有关jetlinks格式参见其官网文档:MQTT直连接入 · JetLinks企业级物联网基础平台 (yuque.com)
规则创建完成后在jetlinks页面,就可以看到设备的运行状态中有数据了,数据的时间也在不断更新,数据的值来源于modbus-slaver中的模拟。
同理还可以实现从jetlinks云平台控制开关灯。
至此就完成了三方平台互相通信的过程。
首先我们先连接单个485型的二氧化碳传感器
点击终端(主机)配置COM200
二氧化碳传感器默认定值是2500,后续我们可以改为随机值,可以在网关上看到上传随机数据。
可以通过串口调试助手进行测试其串口通信是否正确:
使用串口转网口软件,我这里用的是VSPE:
指定设备类型为服务端:
配置相应COM口和波特率:
ip设置位0.0.0.0,表示监听本机所有IP。
打开网络调试助手,作为tcp-client连接本机的5555端口,发送modbus数据
和前文相同,在neuron中创建南北向设备,在emqx中创建规则使数据能够顺利交互,最后在jetlinks设备中看到虚拟设备的运行状态:
单个设备运行成功后,对整套系统就很好理解了,我们在此基础上创建一个实例,达到安装多个设备的效果:
参考Modbus TCP | Neuron 文档 (neugates.io) 在南向设备中添加点位,不同设备连接4150/4017的接口不同设备的点位也不同,这里我的数据作为一个参考:
仿真里面不支持单独寄存器地址的查询,而实际设备是支持的。 利用串口转网口程序补足虚拟仿真数据不交互的缺陷:
jetlinks云平台可以连接在线并获取数据:
从云平台和边缘网关上进行写开关操作,仿真中的报警灯均可以亮灯,风扇转动。