[PYTHON] Comment utiliser facilement les appareils électroménagers IOT de Siri par piratage API

introduction

Les appareils électroménagers IOT qui peuvent être contrôlés à partir d'un smartphone via Wi-Fi sont pratiques, n'est-ce pas? Mais Il est difficile d'ouvrir une application dédiée pour chaque appareil électroménager à chaque fois. .. De plus, à mesure que le nombre d'appareils électroménagers augmente, le nombre d'applications augmente également. .. .. (´Д `)

simplement, ** Je veux faire fonctionner tous les appareils électroménagers à la maison simplement en appelant Siri! **

Au moins, je veux le faire fonctionner en quelques clics depuis appleWatch. Nous prévoyons d'intégrer des appareils électroménagers IOT dans Siri.

Écoulement brutal

Dans cet article, je vais expliquer grossièrement dans le flux suivant.

  1. Découvrez le type d'interaction de l'application avec les appareils électroménagers IOT
  2. Contrôlez les appareils ménagers IOT à partir d'un navigateur, d'un logiciel gratuit ou d'outils API IDE et vérifiez leur comportement.
  3. Codez le programme de contrôle
  4. Configuration pour une utilisation avec Siri (en utilisant Raspberry Pi)

Cliquez ici pour le dépôt GitHub ↓ Github:akiraset/daikinCleaner

environnement

L'environnement suivant est supposé.

--RaspberryPi: Pour faire de homebridge résident et en faire un hub homekit --iPhone: utilisez l'application d'appareils électroménagers IOT et utilisez-la avec mitmproxy --appleWatch: C'est amusant à utiliser ♪ Il est facile à utiliser depuis le futon lorsque vous vous couchez la nuit. (iPhone peut être utilisé comme substitut) --Mac: PC, Linux est également acceptable, mais veuillez lire la méthode d'installation appropriée.

Examen: Que sont les appareils électroménagers dits IOT?

"L'Internet des objets est connecté à Internet" C'est expliqué dans Chimata, mais en un mot, les appareils électroménagers IOT actuels ** Appareils ménagers pouvant être contrôlés par une application pour smartphone via Wi-Fi! ** Je pense que c'est un mot pour le moment.

En tant que fonctionnalité, les fabricants fournissent des applications pour contrôler les appareils ménagers. Purificateur d'air → App A Télévision → App B Climatiseur → App C ︙ Ah ... le nombre d'applications augmente régulièrement. Si vous essayez de faire fonctionner 10 appareils électroménagers, vous devez installer 10 applications et les utiliser correctement, ce qui est une situation compliquée et mystérieuse. Il semble y avoir un mouvement pour unifier, mais cela prendra du temps.

Hmmm, après tout c'est gênant (´Д `) Comme je l'ai mentionné au début, je veux juste l'activer et le désactiver depuis Siri et appleWatch.

Interaction entre les appareils électroménagers IOT et les applications: les appareils électroménagers IOT sont-ils contrôlés par l'API?

J'ai remarqué un jour Le fait que les appareils électroménagers peuvent être contrôlés lorsqu'ils sont connectés au même réseau via Wi-Fi signifie N'est-il pas simplement contrôlé en échangeant avec l'API? ** Si vous connaissez les spécifications de l'API, pouvez-vous la contrôler par programme sans utiliser d'application?! **

Cependant, veuillez noter qu'il existe deux types d'appareils électroménagers IOT, une application et une authentification requises / non requises. De la conclusion, Avec l'authentification, il semble difficile de contrôler depuis le programme. Peut-être que l'application et les appareils ménagers communiquent à l'aide de la clé d'authentification. Je pense qu'il est difficile de le contrôler par programme car la clé d'authentification que vous utilisez ne peut pas être obtenue. À titre d'exemple de ma maison, le chauffe-eau NORITZ est un appareil électroménager IOT, mais il nécessite une certification. J'ai cherché Iloilo, mais mes compétences ne m'ont pas permis de contrôler le chauffe-eau NORITZ à partir du programme. IMG_7425.png Si vous y réfléchissez bien, il est trop dangereux pour un chauffe-eau qui gère le gaz et le feu de prendre facilement le contrôle. Comme prévu, NORITZ! C'est pourquoi ce sont ** les appareils électroménagers IOT qui ne nécessitent pas de certification. ** **

Appareils électroménagers IOT sans authentification: Purificateur d'air Daikin

J'ai trouvé un appareil électroménager IOT qui répond aux conditions chez moi. "Purificateur d'air à diffusion d'humidification Daikin MCK70W" IMG_7423.png

Cette fois, nous procéderons sur la base de cet appareil électroménager.

Découvrez les spécifications API avec les appareils électroménagers IOT

Tout d'abord, il est nécessaire de comprendre quel type de spécifications API sont utilisées pour la communication.

La première chose à faire est de rechercher d'abord les spécifications de l'API sur le site du fabricant. Si le fabricant publie les spécifications de l'API, il est le plus fiable et le plus simple de s'y référer.

Malheureusement, peu de fabricants publient les spécifications API pour les appareils électroménagers IOT, donc dans ce cas, vous devrez les rechercher vous-même. Comment ??: penser:

Si vous pouvez entrer au milieu de l'application de contrôle et des appareils électroménagers IOT et jetez un coup d'œil au contenu de l'API. .. De cette façon, vous pouvez vérifier le contenu de l'API que vous souhaitez exploiter. Vous n'avez pas besoin de connaître toutes les spécifications de l'API, il vous suffit de connaître uniquement les fonctions que vous souhaitez contrôler. En outre, il serait bon que l'application puisse réellement donner une commande et vérifier le contenu de la commande.

Utilisez mitmproxy

L'outil parfait est «mitmproxy». Le nom signifie «homme dans le proxy intermédiaire».

mitmproxy est un programme écrit en python, et est un outil souvent utilisé pour vérifier la demande et la réponse en entrant entre l'application et le serveur, principalement dans le développement d'applications pour smartphone.

Pour plus de détails, veuillez vous référer à l'article suivant ↓ C'est un peu vieux, mais il est organisé de manière facile à comprendre. Introduction à mitmproxy pour les développeurs d'applications mobiles

Ce que vous faites avec mitmproxy est

  1. Installez mitmproxy sur Mac
  2. Configurez l'iPhone pour communiquer par proxy avec Mac
  3. En fait, émettez une commande avec l'application et vérifiez la demande et la réponse sur le Mac au milieu

Ensuite, je présenterai brièvement la méthode d'introduction.

Préparation de mitmproxy

Le premier est la configuration.

install Pour l'installer sur votre Mac, utilisez pip. Xcode est requis pour l'installation.


#install
pip install mitmproxy

préparation iphone

Ensuite, du côté de l'iPhone, définissez mitmproxy fonctionnant sur Mac pour être accepté en tant que serveur proxy. Sélectionnez Paramètres> Wi-Fi> Réseau connecté> Proxy HTTP sur votre iPhone. Définissez le contenu suivant.

--Serveur: adresse IP Mac

Si vous le pouvez, démarrez mitmproxy du côté Mac.

mitmproxy

Après avoir démarré sur Mac, il est nécessaire d'obtenir le certificat de mitmproxy côté iPhone, donc Revenez à l'iPhone à nouveau. Ouvrez le navigateur de votre iPhone et accédez à l'adresse http: // mitm.it. IMG_7431.PNG

Sélectionnez la marque Apple et installez le certificat. Vous êtes maintenant prêt à utiliser mitmproxy.

En fait, vérifiez l'API de l'application avec mitmproxy.

Maintenant, émettons une commande depuis l'application.

・ L'application Daikin ↓ Essayez d'exécuter le mode d'humidification. IMG_7430.PNG

・ J'ai pu confirmer la réception de la demande avec mitmproxy ↓ スクリーンショット 2020-03-08 22.00.33.png

Oui je l'ai eu! De la même manière, vérifiez les fonctions dont vous pensez avoir besoin.

développement de

Une fois que vous avez saisi les spécifications API minimales requises, écrivez un programme de contrôle qui utilise l'API. Il est recommandé de coder tout en vérifiant le mouvement pour voir si l'API confirmée par mitmproxy peut vraiment contrôler les appareils électroménagers IOT, car elle est facile à comprendre.

Vérifions le comportement des appareils électroménagers à l'aide de l'API

Vous pouvez vérifier en appuyant sur l'API depuis le navigateur, mais c'est très inefficace, nous vous recommandons donc d'utiliser l'outil de confirmation d'API. J'utilise les outils API d'IntelliJ. Si vous n'utilisez pas JetBrains, utilisez des fonctionnalités similaires à votre IDE, et vous en aurez probablement une. Si vous n'en avez pas, le logiciel gratuit appelé «Postman» est réputé pour sa facilité d'utilisation. Téléchargement du facteur

Ce qui suit est une description de l'outil ʻIntelliJ: RESTful Web Service Test`. Je pense que les autres outils API sont similaires, alors veuillez les lire.

・ Commandez le purificateur d'air pour qu'il démarre en mode humidification スクリーンショット 2020-03-06 10.38.56.png

・ Obtenez des informations sur le capteur du purificateur d'air スクリーンショット 2020-03-06 10.37.14.png

-Vous pouvez également vérifier et exécuter l'historique de manière rétroactive. スクリーンショット 2020-03-06 10.35.50.png Il y a un message "Ce client REST est ~", mais il n'y a pas de problème et vous pouvez l'utiliser normalement. Je vais vous expliquer brièvement.

---- Méthode: GET / POST etc. --Host / Port: adresse IP cible (dans ce cas, l'adresse IP de l'appareil électroménager IOT) --Path: Puisqu'il s'agit d'une API, le contenu de ce chemin diffère en fonction du contenu de traitement. Voici important. --Request parameters: ajoutez les paramètres requis. Ajouter avec «+», supprimer avec «-». Vous pouvez le modifier en double-cliquant. --Vert en haut à gauche : Exécution. La demande sera envoyée. (Les appareils électroménagers IOT se comportent) --Request body: Vous pouvez utiliser le fichier json enregistré comme paramètre dans le texte, le contenu du fichier, etc.

autre, --Response: Vous pouvez vérifier le contenu de la réponse. (La réponse des appareils ménagers IOT s'affiche)

Si vous codez le programme de contrôle en utilisant l'outil API, il fera beaucoup de progrès, alors essayez-le.

Programme de contrôle

C'est facile, mais j'ai écrit ce code grossièrement.

daikinCleaner.py



import sys
import requests

args = sys.argv
if len(args) == 1:
    print('An argument is necessary.')
    exit()
arg = args[1]

#Adresse IP du purificateur d'air
url = 'http://192.168.0.10'

#Informations de base
basic_info = '/common/basic_info'
#Acquisition de capteur
get_sensor = '/cleaner/get_sensor_info'

#Prenez le contrôle
get_control = '/cleaner/get_control_info'
#Contrôle SET
set_control = '/cleaner/set_control_info'

#Ensemble de paramètres que vous souhaitez exécuter
param_off = {'pow': 0}

param_max = {'pow': 1,
             'mode': 0,
             'humd': 3,
             'airvol': 5,
             }

param_hum = {'pow': 1,
             'mode': 4,
             'humd': 4,
             'airvol': 0,
             }


def control(params):
    return requests.get(url + set_control, params)


print('param: ', arg)

if arg == 'off':
    res = control(param_off)
    text = res.text
elif arg == 'max':
    res = control(param_max)
    text = res.text
elif arg == 'hum':
    res = control(param_hum)
    text = res.text
else:
    text = 'nothing'

print('res: ', text)

Réglez le programme de contrôle dans HomeKit.

Afin de fonctionner avec Siri, il est nécessaire que HomeKit d'Apple accepte toujours les commandes du programme, alors faites du Raspberry Pi un terminal hub de HomeKit et restez toujours prêt.

Pour enregistrer un programme dans HomeKit, vous pouvez facilement le définir en utilisant homebridge de la bibliothèque Node.js. Voir les articles précédents pour plus d'informations et de paramètres sur HomeKit et homebridge [Philips_Hue lié à l'API! ~ Make Raspberry Home Kit](https://qiita.com/akinko/items/58c650f99f25fc7e3cb5#%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%82 % 92homekit% E5% 8C% 96% E3% 81% 99% E3% 82% 8B)

Cette fois, j'ai ajouté ce qui suit à homebridge.

config.json



  "accessories": [
    {
      "accessory": "CMD",
      "name": "purificateur d'air",
      "on_cmd": "python3 /home/pi/daikinCleaner/daikinCleaner.py hum",
      "off_cmd": "python3 /home/pi/daikinCleaner/daikinCleaner.py off"
    }
  ]

Cette fois, ma peau est sèche en hiver, j'ai donc spécifié «hum» comme argument pour qu'elle puisse être activée / désactivée en mode humidification. Quand la pluie arrivera, je changerai l'argument en air rafraîchissant: thumbsup_tone2:

Une fois la configuration terminée, redémarrez homebridge et vous êtes prêt à partir! Je vais l'utiliser immédiatement !!

Convivialité

"Allumer le filtre à air (marche!)" → Le purificateur d'air fonctionne en mode humidification "Éteindre le filtre à air (arrêt)" → Le purificateur d'air s'éteint.

Il peut également être utilisé avec appleWatch (également avec iPhone) Appuyez simplement sur marche / arrêt! IMG_7422.png J'étais tellement heureux de l'avoir fait plusieurs fois devant le purificateur d'air.

Je l'ai également ajouté à la scène Home et je l'ai apprécié comme suit. "Bonne nuit" → Les lumières s'éteignent et la PS4 est éteinte et le purificateur d'air est éteint "Bonjour" → Certaines lumières sont allumées et le purificateur d'air démarre en mode humidification

Mon objectif est de vivre une vie endormie, alors je ferai de mon mieux pour le faire!

en conclusion

Cette fois, j'ai expliqué avec le purificateur d'air de Daikin, mais je pense que d'autres appareils électroménagers IOT peuvent également être contrôlés si l'authentification n'est pas requise en utilisant le Wi-fi. Nous étudierons les appareils électroménagers avec des étoiles un par un et les intégrerons dans la famille Siri ... C'est amusant et excitant d'imaginer. (Et le regard respecté de ma fille est recueilli.)

Merci d'avoir lu jusqu'au bout.

Recommended Posts

Comment utiliser facilement les appareils électroménagers IOT de Siri par piratage API
Les appareils électroménagers IoT les plus puissants de Cospa! Exploitez les produits TPLink de Raspberry Pi
Comment faire fonctionner Linux depuis la console
Comment appeler l'API Cloud à partir de GCP Cloud Functions
Comment faire fonctionner Linux depuis l'extérieur Procédure
[Python] Comment supprimer facilement un processus enfant lancé par multiprocessus à partir d'un autre processus
Comment publier un ticket depuis l'API Shogun
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
Comment utiliser NumPy
Comment masquer la clé API Google Maps du HTML
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon