> 백엔드 개발 > 파이썬 튜토리얼 > Python, Docker 및 Bluetooth를 사용하여 스마트 히터 컨트롤러 구축 #2

Python, Docker 및 Bluetooth를 사용하여 스마트 히터 컨트롤러 구축 #2

DDD
풀어 주다: 2024-12-30 15:26:09
원래의
168명이 탐색했습니다.

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

2장: Python을 사용하여 Bluetooth 제어 크래킹

소개

1장에서는 Raspberry Pi, Docker를 이용하여 Terma MOA Blue 히터를 제어할 수 있는 기반을 마련하고, 파이썬.

이제 더 자세히 알아볼 시간입니다.

  • BLE의 작동 방식 및 이를 사용하여 히터와 통신하는 방법
  • bluetoothctl을 사용하여 블루투스 연결 디버깅.
  • 온도 및 모드 설정을 위한 데이터 인코딩 및 디코딩
  • 모든 것을 하나로 묶어주는 Python 스크립트

저전력 블루투스(BLE) – 간략한 개요

테르마 MOA 블루 히터는 저전력 블루투스(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 정밀도를 사용하여 온도를 2바이트(리틀 엔디안)로 인코딩합니다.

예:

trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
로그인 후 복사
로그인 후 복사

Python 디코딩:

info <DEVICE_ADDRESS>
로그인 후 복사

Python 인코딩:

 remove <DEVICE_ADDRESS>
로그인 후 복사

모드 인코딩

작동 모드는 특정 값이 포함된 단일 바이트로 저장됩니다.

  • 0: 끄기
  • 5: 수동(상온)
  • 6: 수동(발열체 온도)
  • 33: 검증된 발열체 모드(16진수: 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. 인코딩 실수:

    • 초기 시도에서는 온도 인코딩에 255 대신 256 스케일링을 사용했습니다.
    • 리틀 엔디안 0.1°C 스케일링으로 수정하여 디코딩 오류를 해결했습니다.
  3. 모드 처리 문제:

    • BLE 모드는 잘 문서화되어 있지 않아 값을 리버스 엔지니어링해야 했습니다.
    • 테스트 확인 33(0x21)수동 발열체 온도 모드에서 작동했습니다.

다음은 무엇입니까?

다음 장에서는 다음을 수행합니다.

  • 다중 히터를 지원하도록 스크립트를 확장합니다.
  • 더 쉬운 배포를 위해 Docker 통합을 도입하세요.
  • 홈 어시스턴트를 사용하여 자동화 설정 탐색을 시작하세요.

피드백과 제안이 있으신가요?

GitHub 저장소를 확인하세요.

? GitHub - ha-hudsonread-heater-control

아래 댓글로 여러분의 생각과 제안을 알려주세요!

위 내용은 Python, Docker 및 Bluetooth를 사용하여 스마트 히터 컨트롤러 구축 #2의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿