[PYTHON] Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi

Objectif

Comme le dit le titre. Je me réfère entièrement aux articles suivants. Merci beaucoup. Le code est presque le même, donc si vous le signalez, nous le supprimerons immédiatement.

Changement des valeurs du thermo-hygromètre Bot avec Raspberry Pi https://qiita.com/c60evaporator/items/7c3156a6bbb7c6c59052

Il y avait une partie qui ne fonctionnait pas dans mon environnement, donc je vais mettre le code qui fonctionnait comme un journal privé.

environnement

IMG_5275.jpg

Vérifiez l'adresse Mac du thermo-hygromètre SwitchBot

Vous pouvez le vérifier depuis l'application sur votre smartphone.

IMG_5276.PNG IMG_5277.PNG

Vérifiez si le capteur saute des données

pi@raspberrypi:~ $ sudo hcitool lescan | grep EB:F6:31:8C:1F:E9
EB:F6:31:8C:1F:E9 (unknown)
EB:F6:31:8C:1F:E9 (unknown)
EB:F6:31:8C:1F:E9 (unknown)

Quelle est cette commande?

NAME
       hcitool - configure Bluetooth connections

DESCRIPTION
       hcitool  is  used to configure Bluetooth connections and send some spe-
       cial command to Bluetooth devices. If no command is given,  or  if  the
       option -h is used, hcitool prints some usage information and exits.

Obtenez de la valeur en Python

Utilisez bluepy. Reportez-vous à l'URL liée.

pi@raspberrypi:~ $ sudo install libglib2.0-dev
pi@raspberrypi:~ $ pip3 install bluepy
pi@raspberrypi:~ $ cd .local/lib/python3.7/site-packages/bluepy
pi@raspberrypi:~ $ sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper

Script Python

switchbot.py


from bluepy import btle
import struct

class SwitchbotScanDelegate(btle.DefaultDelegate):
    def __init__(self, macaddr):
        btle.DefaultDelegate.__init__(self)
        self.sensorValue = None
        self.macaddr = macaddr

    def handleDiscovery(self, dev, isNewDev, isNewData):
        if dev.addr == self.macaddr:
            for (adtype, desc, value) in dev.getScanData():  
                if desc == '16b Service Data':
                    self._decodeSensorData(value)

    def _decodeSensorData(self, valueStr):
        valueBinary = bytes.fromhex(valueStr[4:])
        batt = valueBinary[2] & 0b01111111
        isTemperatureAboveFreezing = valueBinary[4] & 0b10000000
        temp = ( valueBinary[3] & 0b00001111 ) / 10 + ( valueBinary[4] & 0b01111111 )
        if not isTemperatureAboveFreezing:
            temp = -temp
        humid = valueBinary[5] & 0b01111111
        self.sensorValue = {
            'SensorType': 'SwitchBot',
            'Temperature': temp,
            'Humidity': humid,
            'BatteryVoltage': batt
        }

main.py


from bluepy import btle
from switchbot import SwitchbotScanDelegate

scanner = btle.Scanner().withDelegate(SwitchbotScanDelegate('eb:f6:31:8c:1f:e9'))
scanner.scan(5.0)
print(scanner.delegate.sensorValue)
pi@raspberrypi:~ $ python3 ./main.py
{'SensorType': 'SwitchBot', 'Temperature': 25.2, 'Humidity': 68, 'BatteryVoltage': 100}

Recommended Posts

Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
Créer une API pour le thermo-hygromètre Switchbot avec Node-RED
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Observez le groupe de météores Futago avec RaspberryPi4
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Mesurer la température du processeur de Raspeye avec Python
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
Informer périodiquement l'état de traitement de Raspberry Pi avec python → Google Spreadsheet → LINE
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
Visualisons la pièce avec tarte aux râpes, partie 1
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
Exploitons GPIO de Raspeye avec Python CGI
Plantes Mutter avec Raspberry Pi
Jouez avec le module de caméra Raspberry Pi Zero WH Partie 1
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
Votre URL n'a pas répondu avec la valeur du paramètre de défi.
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Comment obtenir la température du thermo-hygromètre SwitchBot à l'aide de Raspberry Pi
La vraie valeur de l'automatisation Terraform à partir d'Oracle Cloud
J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
Notez ce que vous voulez faire à l'avenir avec Razpai
Contrôlez librement l'affichage du tableau d'affichage RGB LED Matirix Lightning avec Raspberry Pi 3B +
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Trouvez la définition de la valeur de errno
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
Extraire la valeur maximale avec les pandas.
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
Communication série avec Raspberry Pi + PySerial
Prenez le journal d'exécution du céleri
À propos de la valeur de retour de pthread_mutex_init ()
Notifier LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe # 1
Configuration du système d'exploitation avec Raspberry Pi Imager
Avertir LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe n ° 2
À propos de la valeur de retour de l'histogramme.
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Classification en temps réel de plusieurs objets dans les images de la caméra avec apprentissage en profondeur de Raspberry Pi 3 B + et PyTorch
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Résolution du problème de la valeur initiale des équations différentielles ordinaires avec JModelica
Essayez de déplacer 3 servos avec Raspeye
Astuces: [Python] Calculez la valeur moyenne de la zone spécifiée avec bedgraph
Utiliser une webcam avec Raspberry Pi
Construction d'un environnement distribué avec la série Raspberry PI (Partie 1: Résumé de la disponibilité des clients sans disque par modèle)
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
Afficher la force du signal RSSI d'un SSID spécifique (raspberry pi (linux))
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Utilisez Rasppie pour résoudre le problème de connexion Wi-Fi mobile insuffisante
[J'ai touché le Raspberry Pi (1)] J'ai résumé les opérations de base de Minecraft Pi Edition (2015.5.23 pré-version)
Sortie CSV des données d'impulsion avec Raspberry Pi (vérifier l'entrée analogique avec python)