当前位置:网站首页 >  攻略

基于Linux服务器搭建农产品冷链监控运维系统

时间:2026年06月05日 07:25:54 来源:易频IT社区

一、系统架构与基础环境准备

本指南旨在构建一套基于Linux服务器的农产品环境(温度、湿度)实时监控系统。系统采用MQTT协议进行数据传输,InfluxDB进行时序数据存储,Grafana进行可视化展示。所有操作基于Ubuntu 22.04 LTS版本验证。

1. 更新系统基础组件

首先执行系统更新并安装必要的基础工具,确保后续软件安装不报错。

```bash sudo apt update && sudo apt upgrade -y sudo apt install -y wget curl gnupg2 software-properties-common ```

2. 安装Python3及依赖库

我们需要Python来编写数据模拟采集脚本和入库脚本。安装Python3及pip管理工具。

```bash sudo apt install -y python3 python3-pip pip3 install paho-mqtt influxdb-client requests ```

二、部署MQTT消息中间件

使用Eclipse Mosquitto作为消息代理,负责接收传感器上报的数据。

1. 安装Mosquitto

```bash sudo apt install -y mosquitto mosquitto-clients ```

2. 配置Mosquitto服务

编辑配置文件以允许本地匿名连接(生产环境建议开启鉴权),并设置持久化。

修改配置文件 /etc/mosquitto/mosquitto.conf,输入以下完整内容:

```bash sudo nano /etc/mosquitto/mosquitto.conf ```

在文件中粘贴以下内容:

```text listener 1883 allow_anonymous true persistence true persistence_location /var/lib/mosquitto/ ```

3. 启动并设置开机自启

```bash sudo systemctl enable mosquitto sudo systemctl restart mosquitto sudo systemctl status mosquitto ``>

确保状态显示为 active (running)

三、部署InfluxDB时序数据库

InfluxDB非常适合存储农产品环境监控这类带时间戳的连续数据。

1. 添加InfluxDB官方GPG密钥与源

```bash wget -q https://repos.influxdata.com/influxdata-archive_compat.key cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list ```

2. 安装并启动InfluxDB

```bash sudo apt update && sudo apt install -y influxdb2 sudo systemctl enable influxdb sudo systemctl start influxdb ```

3. 初始化数据库配置

执行初始化命令,设置Bucket(存储桶)、Organization(组织)和Token。请务必记录下生成的Token。

```bash influx setup \ --username admin \ --password StrongPassword123! \ --org FarmMonitor \ --bucket cold_chain_data \ --retention 30d \ --force ``>

执行后会返回一个Token字符串,将其保存到环境变量中,方便后续操作:

```bash export INFLUX_TOKEN="你刚才复制的Token字符串" ```

四、编写数据采集与入库脚本

我们将模拟农产品冷链仓库中的温湿度传感器数据,并通过MQTT发送,再由另一个脚本消费并写入数据库。

1. 创建数据模拟发布脚本

创建文件 sensor_simulator.py

```bash nano ~/sensor_simulator.py ```

输入以下完整代码:

```python import random import time import json import paho.mqtt.client as mqtt MQTT配置 BROKER_ADDRESS = "localhost" PORT = 1883 TOPIC = "farm/warehouse/zone1" client = mqtt.Client("Sensor_Simulator_01") def on_connect(client, userdata, flags, rc): print(f"Connected to MQTT Broker with result code {rc}") client.on_connect = on_connect client.connect(BROKER_ADDRESS, PORT, 60) client.loop_start() try: while True: 模拟温度:-2℃ 到 5℃ (冷链环境) temp = round(random.uniform(-2.0, 5.0), 2) 模拟湿度:80% 到 95% humidity = round(random.uniform(80.0, 95.0), 2) payload = { "temperature": temp, "humidity": humidity, "location": "Zone-A-Shelf-1" } client.publish(TOPIC, json.dumps(payload)) print(f"Sent data: {payload}") time.sleep(5) 每5秒发送一次 except KeyboardInterrupt: client.loop_stop() ```

2. 创建数据消费与入库脚本

创建文件 data_writer.py。注意替换 YOUR_TOKEN 为你之前获取的Token。

```bash nano ~/data_writer.py ```

输入以下完整代码:

```python import json import paho.mqtt.client as mqtt from influxdb_client import InfluxDBClient, Point from influxdb_client.client.write_api import SYNCHRONOUS InfluxDB 配置 ORG = "FarmMonitor" BUCKET = "cold_chain_data" TOKEN = "YOUR_TOKEN" 请替换为实际Token URL = "http://localhost:8086" MQTT配置 BROKER = "localhost" TOPIC = "farm/warehouse/zone1" client_db = InfluxDBClient(url=URL, token=TOKEN, org=ORG) write_api = client_db.write_api(write_options=SYNCHRONOUS) def on_message(client, userdata, msg): try: payload = json.loads(msg.payload.decode()) temp = payload['temperature'] hum = payload['humidity'] loc = payload['location'] point = Point("sensor_data") \ .tag("location", loc) \ .field("temperature", temp) \ .field("humidity", hum) write_api.write(bucket=BUCKET, record=point) print(f"Written to DB: {temp}C, {hum}%") except Exception as e: print(f"Error processing message: {e}") client_mqtt = mqtt.Client("DB_Writer_01") client_mqtt.on_message = on_message client_mqtt.connect(BROKER, 1883, 60) client_mqtt.subscribe(TOPIC) print("Listening for data...") client_mqtt.loop_forever() ```

五、配置Systemd守护进程

为了防止脚本退出,使用Systemd将这两个Python脚本注册为系统服务。

1. 配置采集服务

创建服务文件:

```bash sudo nano /etc/systemd/system/farm-sensor.service ```

输入以下内容(假设Python路径为/usr/bin/python3,脚本在home目录):

```ini [Unit] Description=Farm Sensor Simulator After=network.target [Service] Type=simple User=root WorkingDirectory=/root ExecStart=/usr/bin/python3 /root/sensor_simulator.py Restart=always [Install] WantedBy=multi-user.target ```

2. 配置入库服务

```bash sudo nano /etc/systemd/system/farm-writer.service ```

输入以下内容:

```ini [Unit] Description=Farm Data Writer to InfluxDB After=network.target influxdb.service mosquitto.service [Service] Type=simple User=root WorkingDirectory=/root ExecStart=/usr/bin/python3 /root/data_writer.py Restart=always [Install] WantedBy=multi-user.target ```

3. 启动服务

```bash sudo systemctl daemon-reload sudo systemctl enable farm-sensor farm-writer sudo systemctl start farm-sensor farm-writer ```

检查日志确认运行正常:

```bash journalctl -u farm-writer -f ```

六、部署Grafana可视化面板

基于Linux服务器搭建农产品冷链监控运维系统

通过Grafana将存储的数据转化为直观的图表。

1. 安装Grafana

```bash sudo wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo add-apt-repository "deb https://packages.grafana.com/stable/deb stable main" sudo apt update sudo apt install -y grafana sudo systemctl enable grafana-server sudo systemctl start grafana-server ```

2. 配置数据源

1. 浏览器访问 http://服务器IP:3000,默认账号admin/admin(首次登录需修改密码)。

2. 点击 Configuration -> Data sources -> Add data source

3. 选择 InfluxDB

4. 配置以下参数:

  • Query Language: Flux
  • URL: http://localhost:8086
  • Organization: FarmMonitor
  • Token: 粘贴之前保存的Token

5. 点击 Save & Test,显示Data source is working即成功。

3. 创建监控仪表盘

1. 点击 Create -> Dashboard

2. 点击 Add an empty panel

3. 在Query编辑框中输入以下Flux查询语句:

```text from(bucket: "cold_chain_data") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "sensor_data") |> filter(fn: (r) => r._field == "temperature") ```

4. 右侧设置Panel Title为“冷链温度监控”,Visualization选择“Time series”。

5. 点击右上角 Apply 保存面板。

6. 再次添加面板,将Flux查询中的 r._field == "humidity" 以监控湿度。

七、设置报警阈值

农产品对温度极其敏感,我们需要设置报警规则。例如,当温度超过4℃时触发警报。

1. 创建Notification Channel

在Grafana中,进入 Alerting -> Notification channels,添加Email或Webhook通知方式(此处略过具体SMTP配置,假设已配置Email)。

2. 配置Panel Alert

1. 回到刚才创建的温度面板,点击编辑。

2. 切换到 Alert 选项卡。

3. 点击 Create Alert

4. 设置条件 WHEN avg() OF query(A, 5m, now) IS ABOVE 4

5. 设置Notifications,选择刚才创建的通道。

6. 保存Dashboard。

至此,一套完整的农产品冷链监控运维系统已搭建完成,能够实现数据的自动采集、存储、可视化展示及超限报警。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图