Maison > développement back-end > Tutoriel Python > Création d'un contrôleur de chauffage intelligent avec Python, Docker et Bluetooth #2

Création d'un contrôleur de chauffage intelligent avec Python, Docker et Bluetooth #2

DDD
Libérer: 2024-12-30 15:26:09
original
168 Les gens l'ont consulté

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

Chapitre 2 : Cracker le contrôle Bluetooth avec Python

Introduction

Dans le Chapitre 1, nous avons établi les bases du contrôle des radiateurs Terma MOA Blue à l'aide d'un Raspberry Pi, d'un Docker et Python.

Il est maintenant temps d’approfondir :

  • Comment fonctionne BLE et comment nous l'avons utilisé pour communiquer avec les radiateurs.
  • Débogage des connexions Bluetooth à l'aide de bluetoothctl.
  • Données d'encodage et de décodage pour les réglages de température et de mode.
  • Le script Python qui rassemble tout cela.

Bluetooth Low Energy (BLE) – Aperçu rapide

Les radiateurs Terma MOA Blue utilisent le Bluetooth Low Energy (BLE) pour la communication. Les appareils BLE exposent des caractéristiques du GATT, qui agissent comme des points de données que vous pouvez lire à partir de ou écrire dans.

Concepts clés :

  • UUID : ID uniques identifiant des points de données spécifiques, comme la température ou le mode.
  • Caractéristiques : Propriétés BLE contenant les données réelles.
  • Descripteurs : Métadonnées supplémentaires sur les caractéristiques.
  • Opérations d'écriture ou de lecture : Certaines caractéristiques ne prennent en charge que les lectures (par exemple, la température actuelle), tandis que d'autres autorisent les écritures (par exemple, le réglage de la température).

Débogage des connexions Bluetooth avec bluetoothctl

Avant d'automatiser le processus avec Python, nous avons utilisé bluetoothctl pour les tests manuels et le débogage.

Étape 1 : Rechercher des appareils

bluetoothctl
scan on
Copier après la connexion
Copier après la connexion

Recherchez les appareils nommés "Terma Wireless".

  • Assurez-vous que le radiateur est en mode d'appairage : Appuyez et maintenez enfoncé le bouton de température pendant 5 secondes jusqu'à ce que le voyant clignote. Cela active le mode d’appairage.
  • Identifiez l'appareil le plus proche : L'appareil avec la valeur RSSI la plus basse (par exemple, RSSI : -50) est probablement le appareil de chauffage le plus proche. Les valeurs RSSI inférieures (plus négatives) indiquent des signaux plus faibles, alors concentrez-vous sur le signal le plus fort.

Étape 2 : Associer avec le radiateur

pair <DEVICE_ADDRESS>
Copier après la connexion
Copier après la connexion

Lorsque vous y êtes invité, saisissez le code PIN 123456.

Étape 3 : Faites confiance et connectez-vous

trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
Copier après la connexion
Copier après la connexion

Étape 4 : Lire les caractéristiques

Une fois connecté, utilisez :

bluetoothctl
scan on
Copier après la connexion
Copier après la connexion

Cela affiche les UUID disponibles pour la lecture et l'écriture de données.

Remarques importantes :

  1. Oubliez d'abord les autres appareils :
  2. Si le radiateur est déjà couplé avec un autre appareil (par exemple, une application téléphonique), vous devrez le dissocier de cet appareil avant de continuer.
  3. Les radiateurs ne peuvent maintenir un seul appariement actif à la fois.

  4. Reconnexion après des échecs :

    • Si le radiateur a été connecté avec succès mais ne parvient pas à se reconnecter par la suite, suivez les étapes suivantes :
    pair <DEVICE_ADDRESS>
    
    Copier après la connexion
    Copier après la connexion
  • Puis ré-appairez en suivant les étapes ci-dessus.
  1. Une connexion initiale est requise pour le script Python :
    • La première connexion doit être établie manuellement via bluetoothctl.
    • Une fois couplé, le script Python pourra interagir avec le radiateur.
    • Cependant, si vous associez ultérieurement le radiateur à un autre appareil (interrompant la connexion), vous devrez supprimer et reconnecter manuellement du Raspberry Pi avant d'exécuter à nouveau le script. .

Cracker le format de données du radiateur

Encodage de la température

Les radiateurs codent les températures sous forme de deux octets (petit-boutiste) avec une précision de 0,1°C.

Exemple :

trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
Copier après la connexion
Copier après la connexion

Décodage Python :

info <DEVICE_ADDRESS>
Copier après la connexion

Encodage Python :

 remove <DEVICE_ADDRESS>
Copier après la connexion

Mode d'encodage

Les modes de fonctionnement sont stockés sous forme de octets simples avec des valeurs spécifiques :

  • 0 : Désactivé
  • 5 : Manuel (température ambiante)
  • 6 : Manuel (Température de l'élément chauffant)
  • 33 : Mode élément chauffant vérifié (Hex : 0x21)

Décodage Python :

Hex: 012d → Decoded: 30.1°C
Copier après la connexion

Encodage 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)
Copier après la connexion

Principales leçons apprises

  1. Défis de couplage Bluetooth :

    • L'appairage manuel nécessitait souvent d'activer le mode d'appairage et de ressaisir le code PIN.
    • Faire confiance à l'appareil était essentiel pour éviter les déconnexions.
  2. Erreurs d'encodage :

    • Tentatives initiales utilisées 256 mise à l'échelle au lieu de 255 pour le codage de la température.
    • La correction à la mise à l'échelle little-endian de 0,1°C a résolu les erreurs de décodage.
  3. Problèmes de gestion des modes :

    • Les modes BLE n'étaient pas bien documentés et nous avons dû procéder à une rétro-ingénierie des valeurs.
    • Test confirmé 33 (0x21) a fonctionné pour le mode Température manuelle de l'élément chauffant.

Quelle est la prochaine étape ?

Dans le prochain chapitre, je vais :

  • Développez le script pour prendre en charge plusieurs radiateurs.
  • Introduisez l'intégration Docker pour un déploiement plus facile.
  • Commencez à explorer les configurations d'automatisation avec Home Assistant.

Commentaires et suggestions ?

Consultez le dépôt GitHub :

? GitHub - ha-hudsonread-heater-control

Faites-moi part de vos réflexions et suggestions dans les commentaires ci-dessous !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal