[PYTHON] So bedienen Sie IOT-Haushaltsgeräte von Siri aus einfach durch API-Hacking

Einführung

IOT-Haushaltsgeräte, die über WLAN von einem Smartphone aus gesteuert werden können, sind praktisch, nicht wahr? Aber Es ist mühsam, jedes Mal eine dedizierte Anwendung für jedes Haushaltsgerät zu öffnen. .. Darüber hinaus steigt mit der Anzahl der Haushaltsgeräte auch die Anzahl der Apps. .. .. (´Д `)

einfach, ** Ich möchte alle Haushaltsgeräte zu Hause bedienen, indem ich Siri anrufe! **

Zumindest möchte ich es mit nur wenigen Fingertipps von appleWatch bedienen. Wir planen, IOT-Haushaltsgeräte in Siri zu integrieren.

Rauer Fluss

In diesem Artikel werde ich im folgenden Ablauf grob erklären.

  1. Finden Sie heraus, welche Art von Interaktion die App mit IOT-Haushaltsgeräten hat
  2. Steuern Sie IOT-Haushaltsgeräte über einen Browser, freie Software oder IDE-API-Tools und überprüfen Sie deren Verhalten.
  3. Codieren Sie das Steuerprogramm
  4. Für die Verwendung mit Siri einrichten (mit Raspberry Pi)

Klicken Sie hier für das GitHub-Repository ↓ Github:akiraset/daikinCleaner

Umgebung

Die folgende Umgebung wird angenommen.

--RaspberryPi: Um Homebridge zu einem Homekit-Hub zu machen --iPhone: Betreiben Sie die IOT Home Appliance-App und verwenden Sie sie mit Mitmproxy --appleWatch: Es macht Spaß zu bedienen ♪ Es ist einfach, vom Futon aus zu bedienen, wenn Sie nachts ins Bett gehen. (iPhone kann als Ersatz verwendet werden) --Mac: PC, Linux ist ebenfalls akzeptabel, aber bitte lesen Sie die entsprechende Installationsmethode.

Rückblick: Was sind sogenannte IOT-Haushaltsgeräte?

"Internet der Dinge Dinge sind mit dem Internet verbunden" Das wird in Chimata erklärt, aber kurz gesagt, die aktuellen IOT-Haushaltsgeräte ** Haushaltsgeräte, die von einer Smartphone-App über WLAN gesteuert werden können! ** Ich denke, das ist vorerst ein Wort.

Als Funktion bieten Hersteller Apps zur Steuerung von Haushaltsgeräten an. Luftreiniger → App A. TV → App B. Klimaanlage → App C. ︙ Ah ... die Anzahl der Apps nimmt stetig zu. Wenn Sie versuchen, 10 Haushaltsgeräte zu betreiben, müssen Sie 10 Apps installieren und ordnungsgemäß verwenden. Es scheint einen Schritt zur Vereinigung zu geben, aber es wird einige Zeit dauern.

Hmmm, es ist doch lästig (´Д `) Wie eingangs erwähnt, möchte ich es nur über Siri und appleWatch ein- und ausschalten.

Interaktion zwischen IOT-Haushaltsgeräten und Apps: Werden IOT-Haushaltsgeräte von der API gesteuert?

Ich habe es eines Tages bemerkt Die Tatsache, dass Haushaltsgeräte gesteuert werden können, wenn sie über WLAN mit demselben Netzwerk verbunden sind, bedeutet Wird es nicht einfach durch den Austausch mit der API gesteuert? ** Wenn Sie die API-Spezifikationen kennen, können Sie sie programmgesteuert steuern, ohne eine App zu verwenden ?! **

Beachten Sie jedoch, dass zwei Arten von IOT-Haushaltsgeräten erforderlich sind: Anwendung und Authentifizierung erforderlich / nicht erforderlich. Aus der Schlussfolgerung, Bei der Authentifizierung scheint es schwierig zu sein, das Programm zu steuern. Möglicherweise kommunizieren die App und die Haushaltsgeräte über den Authentifizierungsschlüssel. Ich denke, es ist schwierig, es programmgesteuert zu steuern, da der von Ihnen verwendete Authentifizierungsschlüssel nicht abgerufen werden kann. Als Beispiel für mein Haus ist der NORITZ-Warmwasserbereiter ein IOT-Haushaltsgerät, für das jedoch eine Zertifizierung erforderlich ist. Ich habe nach Iloilo gesucht, aber aufgrund meiner Fähigkeiten konnte ich den NORITZ-Warmwasserbereiter nicht über das Programm steuern. IMG_7425.png Wenn Sie sorgfältig darüber nachdenken, ist es für einen Warmwasserbereiter, der mit Gas und Feuer umgeht, zu gefährlich, um die Kontrolle zu übernehmen. Wie erwartet, NORITZ! Deshalb sind es ** IOT-Haushaltsgeräte, für die keine Zertifizierung erforderlich ist. ** ** **

IOT-Haushaltsgeräte ohne Zertifizierung: Daikin Air Purifier

Ich habe ein IOT-Haushaltsgerät gefunden, das die Bedingungen in meinem Haus erfüllt. "Daikin Befeuchtungsstreamer Luftreiniger MCK70W" IMG_7423.png

Dieses Mal werden wir basierend auf diesem Haushaltsgerät fortfahren.

Informieren Sie sich über API-Spezifikationen mit IOT-Haushaltsgeräten

Zunächst muss verstanden werden, welche API-Spezifikationen für die Kommunikation verwendet werden.

Als erstes müssen Sie zuerst auf der Website des Herstellers nach API-Spezifikationen suchen. Wenn der Hersteller die API-Spezifikationen veröffentlicht, ist es am zuverlässigsten und am einfachsten, auf sie zu verweisen.

Leider veröffentlichen nur wenige Hersteller die API-Spezifikationen für IOT-Haushaltsgeräte. In diesem Fall müssen Sie diese selbst suchen. Wie ??: Denken:

Wenn Sie in die Mitte der Steuerungs-App und der IOT-Haushaltsgeräte gelangen und einen Blick auf den Inhalt der API werfen können. .. Auf diese Weise können Sie den API-Inhalt überprüfen, den Sie betreiben möchten. Sie müssen nicht alle API-Spezifikationen kennen, sondern nur die Funktionen, die Sie steuern möchten. Es wäre auch gut, wenn die App tatsächlich einen Befehl geben und den Inhalt des Befehls überprüfen könnte.

Verwenden Sie mitmproxy

Das perfekte Werkzeug ist "Mitmproxy". Der Name steht für "Mann im mittleren Stellvertreter".

Mitmproxy ist ein in Python geschriebenes Programm und wird häufig zum Überprüfen von Anforderungen und Antworten verwendet, indem zwischen der Anwendung und dem Server eingegeben wird, hauptsächlich bei der Entwicklung von Smartphone-Anwendungen.

Einzelheiten finden Sie im folgenden Artikel. ↓ Es ist etwas alt, aber leicht verständlich organisiert. Einführung in Mitmproxy für Entwickler mobiler Apps

Was Sie mit Mitmproxy machen, ist

  1. Installieren Sie mitmproxy auf einem Mac
  2. Stellen Sie das iPhone auf Proxy ein. Mit Mac kommunizieren
  3. Geben Sie tatsächlich einen Befehl mit der App aus und überprüfen Sie die Anforderung und Antwort auf dem Mac in der Mitte

Dann werde ich kurz die Einführungsmethode vorstellen.

Mitmproxy vorbereiten

Zuerst ist das Setup.

install Verwenden Sie pip, um es auf Ihrem Mac zu installieren. Für die Installation ist Xcode erforderlich.


#install
pip install mitmproxy

iPhone Vorbereitung

Stellen Sie als Nächstes auf der iPhone-Seite ein, dass Mitmproxy, das auf einem Mac ausgeführt wird, als Proxyserver akzeptiert wird. Wählen Sie auf Ihrem iPhone "Einstellungen> Wi-Fi> Verbundenes Netzwerk> HTTP-Proxy". Stellen Sie den folgenden Inhalt ein.

Wenn Sie können, starten Sie Mitmproxy auf der Mac-Seite.

mitmproxy

Nach dem Start auf dem Mac ist es erforderlich, das Mitmproxy-Zertifikat auf der iPhone-Seite zu erhalten Kehre wieder zum iPhone zurück. Öffnen Sie Ihren iPhone-Browser und rufen Sie die Adresse "http: // mitm.it" auf. IMG_7431.PNG

Wählen Sie die Apple-Marke und installieren Sie das Zertifikat. Jetzt können Sie Mitmproxy verwenden.

Überprüfen Sie die API aus der Anwendung mit mitmproxy.

Lassen Sie uns nun einen Befehl aus der App ausgeben.

・ Daikins App ↓ Versuchen Sie, den Befeuchtungsmodus auszuführen. IMG_7430.PNG

・ Ich konnte den Eingang der Anfrage mit mitmproxy bestätigen ↓ スクリーンショット 2020-03-08 22.00.33.png

Ja ich habe es verstanden! Überprüfen Sie auf die gleiche Weise die Funktionen, die Sie für erforderlich halten.

Entwicklung von

Wenn Sie die minimal erforderlichen API-Spezifikationen erreicht haben, schreiben Sie ein Steuerungsprogramm, das die API verwendet. Es wird empfohlen, während der Überprüfung der Bewegung zu codieren, um festzustellen, ob die von Mitmproxy bestätigte API IOT-Haushaltsgeräte wirklich steuern kann, da dies leicht zu verstehen ist.

Lassen Sie uns das Verhalten von Haushaltsgeräten mithilfe der API überprüfen

Sie können dies überprüfen, indem Sie die API im Browser aufrufen. Sie ist jedoch sehr ineffizient. Wir empfehlen daher, das API-Bestätigungstool zu verwenden. Ich verwende die API-Tools von IntelliJ. Wenn Sie JetBrains nicht verwenden, verwenden Sie ähnliche Funktionen wie Ihre IDE, und Sie werden wahrscheinlich eine haben. Wenn Sie noch keine haben, ist die kostenlose Software "Postman" für ihre Benutzerfreundlichkeit bekannt. Postman Download

Im Folgenden finden Sie eine Beschreibung des Tools "IntelliJ: RESTful Web Service Test". Ich denke, andere API-Tools sind ähnlich, also lesen Sie sie bitte.

・ Weisen Sie den Luftreiniger an, im Befeuchtungsmodus zu starten スクリーンショット 2020-03-06 10.38.56.png

・ Sensorinformationen vom Luftreiniger erhalten スクリーンショット 2020-03-06 10.37.14.png

-Sie können den Verlauf auch rückwirkend überprüfen und ausführen. スクリーンショット 2020-03-06 10.35.50.png Es wird die Meldung "Dieser REST-Client ist ~" angezeigt, es gibt jedoch kein Problem, und Sie können ihn normal verwenden. Ich werde es kurz erklären.

---- Methode: GET / POST etc. --Host / Port: Ziel-IP-Adresse (in diesem Fall die IP-Adresse der IOT-Home-Appliance) --Path: Da es sich um eine API handelt, unterscheidet sich der Inhalt dieses Pfads je nach Verarbeitungsinhalt. Hier ist wichtig.

andere,

Wenn Sie das Steuerungsprogramm während der Verwendung des API-Tools codieren, wird es große Fortschritte machen. Versuchen Sie es also bitte.

Steuerprogramm

Es ist einfach, aber ich habe diesen Code grob geschrieben.

daikinCleaner.py



import sys
import requests

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

#IP-Adresse des Luftreinigers
url = 'http://192.168.0.10'

#Grundinformation
basic_info = '/common/basic_info'
#Sensorerfassung
get_sensor = '/cleaner/get_sensor_info'

#Holen Sie sich die Kontrolle
get_control = '/cleaner/get_control_info'
#Steuerung SET
set_control = '/cleaner/set_control_info'

#Satz von Parametern, die Sie ausführen möchten
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)

Stellen Sie das Steuerungsprogramm in HomeKit ein.

Um mit Siri arbeiten zu können, muss das HomeKit von Apple immer Programmbefehle akzeptieren. Machen Sie den Raspberry Pi also zu einem Hub-Terminal von HomeKit und stehen Sie immer bereit.

Um ein Programm in HomeKit zu registrieren, können Sie es einfach mithilfe der Homebridge der Node.js-Bibliothek festlegen. Weitere Informationen und Einstellungen zu HomeKit und Homebridge finden Sie in den vorherigen Artikeln [Philips_Hue ist mit API verknüpft! ~ Raspberry Home Kit erstellen](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)

Dieses Mal habe ich Homebridge Folgendes hinzugefügt.

config.json



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

Dieses Mal ist meine Haut im Winter trocken, daher habe ich als Argument "Brummen" angegeben, damit sie im Befeuchtungsmodus ein- und ausgeschaltet werden kann. Wenn der Regen kommt, werde ich das Argument in erfrischende Luft ändern: thumbsup_tone2:

Nachdem Sie sich bisher eingerichtet haben, starten Sie homebridge neu und Sie können loslegen! Ich werde es sofort benutzen !!

Benutzerfreundlichkeit

"Luftfilter einschalten (ein!)" → Der Luftreiniger arbeitet im Befeuchtungsmodus "Luftfilter ausschalten (aus)" → Der Luftreiniger schaltet sich aus.

Es kann auch mit appleWatch betrieben werden (auch mit iPhone) Tippen Sie einfach auf / aus! IMG_7422.png Ich war so glücklich, dass ich es viele Male vor dem Luftreiniger gemacht habe.

Ich habe es auch der Home-Szene hinzugefügt und es wie folgt genossen. "Gute Nacht" → Die Lichter gehen aus und PS4 ist ausgeschaltet und Luftreiniger ist aus "Guten Morgen" → Einige Lichter leuchten und der Luftreiniger startet im Befeuchtungsmodus

Mein Ziel ist es, ein schläfriges Leben zu führen, also werde ich mein Bestes geben, um dies zu tun!

abschließend

Diesmal erklärte ich mit Daikins Luftreiniger, aber ich denke, dass andere IOT-Haushaltsgeräte auch gesteuert werden können, wenn keine Authentifizierung über WLAN erforderlich ist. Wir werden Haushaltsgeräte mit Sternen einzeln untersuchen und sie in die Siri-Familie aufnehmen ... Es macht Spaß und ist aufregend, sich das nur vorzustellen. (Und der respektierte Blick meiner Tochter wird gesammelt.)

Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

So bedienen Sie IOT-Haushaltsgeräte von Siri aus einfach durch API-Hacking
Cospas stärkste IoT-Haushaltsgeräte! Betreiben Sie TPLink-Produkte von Raspberry Pi
So bedienen Sie Linux von der Konsole aus
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
So bedienen Sie Linux von außen Vorgehensweise
[Python] So löschen Sie einfach einen untergeordneten Prozess, der durch Multiprozess gestartet wurde, von einem anderen Prozess
So veröffentlichen Sie ein Ticket über die Shogun-API
So bedienen Sie die Discord API mit Python (Bot-Registrierung)
So bedienen Sie NumPy
So verbergen Sie den Google Maps-API-Schlüssel vor HTML
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python