开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 276|回复: 7
收起左侧

[2025开源大赛(第八届)] 基于Mosquitto开发的物联网设备模拟器

[复制链接]
发表于 昨天 10:00 | 显示全部楼层 |阅读模式   北京市北京市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 老男孩0001 于 2025-10-16 18:56 编辑

图片展示
2.png 1d4e1a9e-e586-4cba-85ae-5ee133c659fd.png


物联网设备模拟器

基于MQTT协议的物联网设备模拟器,用于开发和测试物联网平台。支持多种设备类型的模拟,包括传感器和执行器设备。

功能特性

  • 多种设备类型:支持温度传感器、湿度传感器、气压传感器、智能开关、智能灯泡、运动传感器等
  • MQTT通信:基于MQTT协议进行设备通信,支持QoS、保留消息、通配符主题等高级特性
  • 设备管理:支持批量设备创建、分组管理、状态监控等功能
  • 灵活配置:通过YAML配置文件轻松配置设备参数和MQTT连接
  • 完善日志:支持多级别日志记录,文件轮转,便于调试和监控
  • 扩展性强:基于面向对象设计,易于添加新的设备类型
  • 命令行界面:提供友好的命令行接口,支持多种运行模式

项目结构

物联网设备模拟器/
├── main.py                 # 主程序入口
├── config.yaml            # 配置文件
├── requirements.txt       # Python依赖包
├── README.md             # 项目说明文档
├── src/                  # 源代码目录
│   ├── __init__.py
│   ├── mqtt_client.py    # MQTT客户端封装
│   ├── device_base.py    # 设备基类和接口
│   ├── devices.py        # 具体设备实现
│   ├── device_manager.py # 设备管理器
│   └── config_manager.py # 配置和日志管理
└── examples/             # 示例脚本
    ├── basic_usage.py    # 基本使用示例
    └── mqtt_test.py      # MQTT连接测试

快速开始

1. 环境要求

  • Python 3.7+
  • MQTT服务器(如Mosquitto、EMQX等)

2. 安装依赖

# 克隆或下载项目到本地
cd 物联网设备模拟器

# 安装Python依赖
pip install -r requirements.txt

3. 配置MQTT服务器

使用Mosquitto(推荐)

Windows:

# 下载并安装Mosquitto
# 从 https://mosquitto.org/download/ 下载Windows版本

# 启动Mosquitto服务器
mosquitto -v

Linux/macOS:

# 安装Mosquitto
sudo apt-get install mosquitto mosquitto-clients  # Ubuntu/Debian
brew install mosquitto  # macOS

# 启动Mosquitto服务器
mosquitto -v

使用Docker

# 运行Mosquitto容器
docker run -it -p 1883:1883 eclipse-mosquitto:latest

4. 测试MQTT连接

在运行主程序之前,建议先测试MQTT连接:

# 测试MQTT连接
python examples/mqtt_test.py

# 测试特定功能
python examples/mqtt_test.py --test connection
python examples/mqtt_test.py --test pubsub

# 使用自定义MQTT服务器
python examples/mqtt_test.py -b your-mqtt-broker -p 1883

5. 运行模拟器

# 使用默认配置运行
python main.py

# 使用自定义配置文件
python main.py -c custom_config.yaml

# 仅验证配置文件
python main.py --validate

# 显示当前配置
python main.py --show-config

配置说明

配置文件结构

config.yaml 文件包含以下主要配置项:

# MQTT服务器配置
mqtt:
  broker: "localhost"        # MQTT服务器地址
  port: 1883                # MQTT服务器端口
  username: ""              # 用户名(可选)
  password: ""              # 密码(可选)
  keepalive: 60             # 心跳间隔(秒)
  qos: 1                    # 默认QoS级别
  clean_session: true       # 清理会话

# 设备配置
devices:
  temperature_sensors:      # 温度传感器
    count: 3                # 设备数量
    topic_prefix: "sensors/temperature"  # 主题前缀
    publish_interval: 5     # 发布间隔(秒)
    min_value: -10          # 最小值
    max_value: 50           # 最大值

  humidity_sensors:         # 湿度传感器
    count: 2
    topic_prefix: "sensors/humidity"
    publish_interval: 10
    min_value: 0
    max_value: 100

  smart_switches:           # 智能开关
    count: 5
    topic_prefix: "devices/switch"
    publish_interval: 30

  smart_lights:             # 智能灯泡
    count: 4
    topic_prefix: "devices/light"
    publish_interval: 15

# 日志配置
logging:
  level: "INFO"             # 日志级别
  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
  file: "device_simulator.log"  # 日志文件
  max_size: 10485760        # 最大文件大小(字节)
  backup_count: 5           # 备份文件数量

# 模拟器配置
simulator:
  auto_start: true          # 自动启动
  random_seed: null         # 随机种子(可选)
  data_variation: 0.1       # 数据变化幅度

设备类型说明

设备类型 说明 数据类型 支持命令
temperature_sensors 温度传感器 温度值(°C)
humidity_sensors 湿度传感器 湿度值(%)
pressure_sensors 气压传感器 气压值(hPa)
smart_switches 智能开关 开关状态 turn_on, turn_off, toggle
smart_lights 智能灯泡 亮度、颜色、状态 turn_on, turn_off, set_brightness, set_color
motion_sensors 运动传感器 运动检测状态

使用示例

基本使用

from src.device_manager import DeviceManager
from src.devices import TemperatureSensor, SmartSwitch

# 创建设备管理器
manager = DeviceManager(broker="localhost", port=1883)

# 创建设备
temp_sensor = TemperatureSensor("temp_001", "sensors/temperature", 5)
smart_switch = SmartSwitch("switch_001", "devices/switch", 30)

# 添加设备
manager.add_device(temp_sensor)
manager.add_device(smart_switch)

# 连接并启动
manager.connect()
manager.start_all_devices()

# 发送命令
manager.send_command_to_device("switch_001", {"action": "turn_on"})

运行示例脚本

# 基本使用示例
python examples/basic_usage.py basic

# 高级使用示例
python examples/basic_usage.py advanced

# 交互式示例
python examples/basic_usage.py interactive

MQTT主题结构

数据发布主题

设备会定期向以下主题发布数据:

{topic_prefix}/{device_id}/data

例如:

  • sensors/temperature/temp_001/data
  • devices/switch/switch_001/data

状态发布主题

设备状态变化时会发布到:

{topic_prefix}/{device_id}/status

命令订阅主题

设备会订阅以下主题接收命令:

{topic_prefix}/{device_id}/command

消息格式

数据消息

{
  "device_id": "temp_001",
  "device_type": "TemperatureSensor",
  "timestamp": 1640995200.123,
  "data": {
    "temperature": 23.5,
    "unit": "°C"
  }
}

状态消息

{
  "device_id": "switch_001",
  "device_type": "SmartSwitch",
  "timestamp": 1640995200.123,
  "status": "online",
  "state": {
    "power": true
  }
}

命令消息

{
  "action": "turn_on",
  "parameters": {
    "brightness": 80
  }
}

扩展开发

添加新设备类型

  1. 继承 SensorDeviceActuatorDevice 基类
  2. 实现 generate_data() 方法
  3. 如果是执行器,实现 handle_command() 方法
from src.device_base import SensorDevice

class CustomSensor(SensorDevice):
    def __init__(self, device_id: str, topic_prefix: str, publish_interval: int):
        super().__init__(device_id, topic_prefix, publish_interval)

    def generate_data(self) -> dict:
        return {
            "custom_value": self._generate_random_value(0, 100),
            "unit": "custom_unit"
        }

自定义MQTT处理

from src.mqtt_client import MQTTClient

def custom_message_handler(topic: str, payload: str, qos: int):
    print(f"收到消息: {topic} -> {payload}")

client = MQTTClient("custom_client")
client.set_on_message_callback(custom_message_handler)
client.connect()
client.subscribe("custom/topic", qos=1)

故障排除

常见问题

  1. MQTT连接失败

    • 检查MQTT服务器是否运行
    • 验证服务器地址和端口
    • 检查用户名密码(如果需要)
  2. 设备无法启动

    • 检查配置文件格式
    • 验证设备参数
    • 查看日志文件
  3. 消息收发异常

    • 检查主题权限
    • 验证QoS设置
    • 检查网络连接

调试技巧

  1. 启用调试日志

    logging:
     level: "DEBUG"
  2. 使用MQTT测试工具

    # 订阅所有消息
    mosquitto_sub -h localhost -t "#" -v
    
    # 发布测试消息
    mosquitto_pub -h localhost -t "test/topic" -m "test message"
  3. 检查日志文件

    tail -f device_simulator.log

性能优化

大规模设备模拟

  1. 调整发布间隔:增加 publish_interval 减少消息频率
  2. 使用QoS 0:对于不重要的数据使用QoS 0
  3. 批量操作:使用设备分组功能进行批量控制
  4. 资源监控:监控CPU和内存使用情况

网络优化

  1. 消息压缩:对于大量数据考虑消息压缩
  2. 连接池:复用MQTT连接
  3. 本地缓存:缓存频繁访问的数据

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

贡献

欢迎提交 Issue 和 Pull Request 来改进这个项目。

联系方式

开源仓库: https://github.com/xsxz01/iot-device-emulator

如有问题或建议,请通过以下方式联系:

  • 提交 GitHub Issue
  • 发送邮件至项目维护者

注意:这是一个用于开发和测试的模拟器,不建议在生产环境中使用。在生产环境中,请使用真实的物联网设备。


结帖率:100% (4/4)

签到天数: 15 天

发表于 13 分钟前 高大上手机用户 | 显示全部楼层   山西省大同市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 16 天

发表于 昨天 16:56 | 显示全部楼层   浙江省宁波市

源码在哪里?
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 8 天

发表于 昨天 16:21 | 显示全部楼层   广东省东莞市
在回复中给你链接吧。看着界面不错,学习一下。
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 15 天

发表于 昨天 15:29 高大上手机用户 | 显示全部楼层   山西省大同市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 2 天

 楼主| 发表于 昨天 14:31 | 显示全部楼层   北京市北京市

我编辑了好几次,后面内容就截断了,然后过审也是截断的结果,就很离谱
回复 支持 反对

使用道具 举报

结帖率:50% (15/30)

签到天数: 13 天

发表于 昨天 14:18 | 显示全部楼层   上海市上海市
源码在哪里?
回复 支持 反对

使用道具 举报

结帖率:85% (28/33)

签到天数: 8 天

发表于 昨天 14:18 | 显示全部楼层   黑龙江省哈尔滨市
源码呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

关闭

精易论坛 - 有你更精彩上一条 /2 下一条

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表