首页 > 后端开发 > Python教程 > 使用 Python、Docker 和蓝牙构建智能加热器控制器 #2

使用 Python、Docker 和蓝牙构建智能加热器控制器 #2

DDD
发布: 2024-12-30 15:26:09
原创
180 人浏览过

Building a Smart Heater Controller with Python, Docker, and Bluetooth #2

第二章:用Python破解蓝牙控制

介绍

第 1 章中,我们使用 Raspberry PiDockerDocker 建立了控制 Terma MOA Blue 加热器的基础

Python

    现在是时候深入研究:
  • BLE 的工作原理
  • 以及我们如何使用它与加热器进行通信。 使用 bluetoothctl
  • 调试蓝牙连接
  • 编码和解码数据
  • 用于温度和模式设置。
  • 将所有内容整合在一起的 Python 脚本

低功耗蓝牙 (BLE) – 快速概述 Terma MOA Blue 加热器使用 低功耗蓝牙 (BLE) 进行通信。 BLE 设备公开GATT 特征,其作用类似于数据点,您可以读取或

写入

关键概念:
  • UUID:
  • 标识特定数据点(例如温度或模式)的唯一 ID。
  • 特性:
  • BLE 属性保存实际数据。
  • 描述符:
  • 有关特征的附加元数据。 写入与读取操作:某些特性仅支持读取(例如当前温度),而其他特性则允许
  • 写入
(例如设置温度)。

使用 bluetoothctl 调试蓝牙连接 在使用 Python 自动化该过程之前,我们使用

bluetoothctl

进行手动测试和调试。

第 1 步:扫描设备
bluetoothctl
scan on
登录后复制
登录后复制

查找名为

“Terma Wireless”
    的设备。
  • 确保加热器处于配对模式:按下并
  • 按住温度按钮 5 秒钟
  • 直到指示灯闪烁。这将激活配对模式。 识别最近的设备:具有RSSI 值最低(例如RSSI:-50)的设备可能是最近的加热器。较低(负值较大)的 RSSI 值表示信号较弱,因此请关注
  • 最强信号

第 2 步:与加热器配对
pair <DEVICE_ADDRESS>
登录后复制
登录后复制

出现提示时,输入 PIN 码

123456

.

第 3 步:信任和联系
trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
登录后复制
登录后复制

第 4 步:读取特征


连接后,使用:
bluetoothctl
scan on
登录后复制
登录后复制

这会显示可用于读取和写入数据的UUID

重要提示:

  1. 首先忘记其他设备:
  2. 如果加热器已与其他设备(例如手机应用程序)配对,您需要在继续之前与该设备取消配对
  3. 加热器一次只能维持一个活跃配对

  4. 失败后重新连接:

    • 如果加热器连接成功但后来无法重新连接,请使用以下步骤:
    pair <DEVICE_ADDRESS>
    
    登录后复制
    登录后复制
  • 然后使用上述步骤重新配对
  1. Python 脚本需要初始连接:
    • 第一个连接必须通过bluetoothctl手动建立
    • 配对后,Python 脚本将能够与加热器交互。
    • 但是,如果您稍后将加热器与其他设备配对(断开连接),则需要在再次运行脚本之前从 Raspberry Pi 手动删除重新连接 .

破解加热器的数据格式

温度编码

加热器将温度编码为两个字节(小端),0.1°C 精度

示例:

trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
登录后复制
登录后复制

Python 解码:

info <DEVICE_ADDRESS>
登录后复制

Python 编码:

 remove <DEVICE_ADDRESS>
登录后复制

模式编码

操作模式存储为单字节,具体值:

  • 0: 关闭
  • 5:手册(室温)
  • 6: 手册(加热元件温度)
  • 33: 已验证的加热元件模式(十六进制:0x21)

Python 解码:

Hex: 012d → Decoded: 30.1°C
登录后复制

Python 编码:

def decode_temperature(data):
    current_temp = ((data[1] << 8) | data[0]) / 10
    target_temp = ((data[3] << 8) | data[2]) / 10
    return round(current_temp, 1), round(target_temp, 1)
登录后复制

主要经验教训

  1. 蓝牙配对挑战:

    • 手动配对通常需要启用配对模式并重新输入 PIN。
    • 信任设备对于避免断开连接至关重要。
  2. 编码错误:

    • 最初尝试使用 256 缩放 而不是 255 进行温度编码。
    • 纠正little-endian 0.1°C 缩放解决了解码错误。
  3. 模式处理问题:

    • BLE 模式没有详细记录,我们必须对这些值进行逆向工程。
    • 测试已确认33 (0x21)适用于手动加热元件温度模式。

接下来是什么?

在下一章中,我将:

  • 扩展脚本以支持多个加热器
  • 引入Docker集成以更轻松地部署。
  • 开始与家庭助理探索自动化设置

反馈和建议?

查看 GitHub 存储库

? GitHub - ha-hudsonread-heater-control

请在下面的评论中告诉我您的想法和建议!

以上是使用 Python、Docker 和蓝牙构建智能加热器控制器 #2的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板