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.
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
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