使用 Python、Docker 和蓝牙构建智能加热器控制器 #2
第二章:用Python破解蓝牙控制
介绍
在第 1 章中,我们使用 Raspberry Pi、Docker 和 Docker 建立了控制 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。
重要提示:
- 首先忘记其他设备:
- 如果加热器已与其他设备(例如手机应用程序)配对,您需要在继续之前与该设备取消配对。
加热器一次只能维持一个活跃配对。
-
失败后重新连接:
- 如果加热器连接成功但后来无法重新连接,请使用以下步骤:
pair <DEVICE_ADDRESS>
登录后复制登录后复制
- 然后使用上述步骤重新配对。
-
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)
主要经验教训
-
蓝牙配对挑战:
- 手动配对通常需要启用配对模式并重新输入 PIN。
- 信任设备对于避免断开连接至关重要。
-
编码错误:
- 最初尝试使用 256 缩放 而不是 255 进行温度编码。
- 纠正little-endian 0.1°C 缩放解决了解码错误。
-
模式处理问题:
- BLE 模式没有详细记录,我们必须对这些值进行逆向工程。
- 测试已确认33 (0x21)适用于手动加热元件温度模式。
接下来是什么?
在下一章中,我将:
- 扩展脚本以支持多个加热器。
- 引入Docker集成以更轻松地部署。
- 开始与家庭助理探索自动化设置。
反馈和建议?
查看 GitHub 存储库:
? GitHub - ha-hudsonread-heater-control
请在下面的评论中告诉我您的想法和建议!
以上是使用 Python、Docker 和蓝牙构建智能加热器控制器 #2的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。
