Obtenez le niveau de la batterie de SwitchBot avec Python

introduction

Le problème avec l'utilisation de SwitchBot est que la batterie est morte. Vous pouvez vérifier le niveau de la batterie en ouvrant l'application officielle, mais vous ne la voyez pas quotidiennement et vous la connaissez car la batterie est déchargée lorsque vous souhaitez l'utiliser. Je l'utilise pour déverrouiller le verrouillage automatique, c'est donc une question de vie ou de mort.

Il existe des commandes telles que Press in Python publiées par le SwitchBot officiel, mais rien ne permet d'obtenir le niveau de batterie restant. Quand j'ai enquêté sur le fait que ce n'était pas possible parce que je pouvais l'obtenir avec l'application, je l'ai trouvé. https://github.com/RoButton/switchbotpy

J'étais content de cela une fois, mais j'ai décidé d'ajouter une commande au Python officiel qui est stable car il y a des moments où je ne peux pas l'obtenir de manière stable.

Correction officielle de Python

Ajout de la commande d'acquisition des informations de réglage. Il est publié dans mon référentiel dérivé de l'officiel. https://github.com/kanon700/python-host/tree/feature/add_get_settings

Le contenu de la correction est le suivant

switchbot_py3.py


class Driver(object):
    handle = 0x16
    notif_handle = 0x13
    commands = {
        'press'     : '\x57\x01\x00',
        'on'        : '\x57\x01\x01',
        'off'       : '\x57\x01\x02',
        'settings'  : '\x57\x02',
    }

    def run_and_res_command(self, command):
        self.req.write_by_handle(self.handle, self.commands[command])
        return self.req.read_by_handle(self.notif_handle)

    def get_settings_value(self, value):
        value = struct.unpack('B' * len(value[0]), value[0])
        settings = {}
        settings["battery"] = value[1]
        settings["firmware"] = value[2] / 10.0
        settings["n_timers"] = value[8]
        settings["dual_state_mode"] = bool(value[9] & 16)
        settings["inverse_direction"] = bool(value[9] & 1)
        settings["hold_seconds"] = value[10]

        return settings

Script d'acquisition du niveau de batterie

Vous pouvez obtenir le niveau de batterie restant avec un script comme celui-ci.

SwitchBot_Battery_Get.py


#!/usr/bin/python3
# -*- coding: utf-8 -*-

from switchbot_py3 import Driver

switchbot = 'xx:xx:xx:xx:xx:xx' #Adresse MAC du switchbot

def main():
    bot = Driver(device=switchbot)
    bot.connect()
    value = bot.run_and_res_command('settings')
    settings = bot.get_settings_value(value)
    print("battery:" + str(settings["battery"]))


if __name__ == '__main__':
    main()

c'est tout

Recommended Posts

Obtenez le niveau de la batterie de SwitchBot avec Python
Obtenir des données de Quandl en Python
Obtenez des taux de change à partir des taux de change ouverts en Python
Obtenez la probabilité de précipitation de XML avec Python
Obtenir l'historique des métriques de MLflow en Python
Obtenir la date en Python
Obtenez des données de séries chronologiques de k-db.com avec Python
Obtenez uniquement des articles de pages Web en Python
Obtenez des commentaires YouTube en Python
Obtenez le mois dernier en Python
OCR à partir de PDF en Python
Obtenez des données du module GPS à 10 Hz avec Python
Obtenir la taille du terminal en Python
Obtenir explicitement EOF en python
Obtenez des notes Evernote en Python
Obtenez des synonymes japonais avec Python
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Obtenez la valeur tout en spécifiant la valeur par défaut de dict en Python
Appuyez sur REST en Python pour obtenir des données de New Relic
Obtenir des constantes de macro à partir du fichier d'en-tête C (++) (.h) en Python
Obtenir le message du premier offset avec le consommateur kafka en python
Extraire du texte d'images avec Python
Obtenir, publier un mémo de communication en Python
python Obtenez la météo à venir de l'API météo
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Démarrez avec Python avec Blender
Extraire des chaînes de fichiers avec Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
Obtenez des données supplémentaires vers LDAP avec python
Obtenir le code HTML de l'élément avec du sélénium Python
[Note] Obtenir des données de PostgreSQL avec Python
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Récupérer les frappes de / dev / input (python evdev)
Relancé de "pas d'accès Internet" en Python
Empêcher le double lancement de cron en Python
Comment obtenir stacktrace en python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Télécharger des images à partir de la liste d'URL en Python
Obtenez un jeton pour conoha avec python
Commençons avec TopCoder en Python (version 2020)
Générer une classe à partir d'une chaîne en Python
Générer un langage C à partir d'une expression S avec Python
Obtenir la liste de codes EDINET en Python
Convertir de Markdown en HTML en Python
Obtenez Cloud Logging disponible en Python en 10 minutes
[Python] Obtenez la couleur principale de la capture d'écran
Débarrassez-vous des images DICOM en Python
Obtenez votre propre adresse IP en Python
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Obtenez des options en Python à partir des fichiers JSON et des arguments de ligne de commande
Python en optimisation
CURL en Python
Récupérer le contenu de git diff depuis python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
Méta-analyse en Python
Unittest en Python