Werbung

HomeKit ist endlich in der Wildnis und ermöglicht die Sprachsteuerung über Siri für eine Handvoll Smart-Home-Geräte für Verbraucher.

Leider meine ich eine wörtliche Handvoll - alles, was Sie bereits gekauft haben, ist wahrscheinlich nicht kompatibel. Das Protokoll wurde jedoch bereits rückentwickelt, und ein Open-Source-Emulator für die HomeKit-API ist verfügbar: oder in Im Klartext können Sie jetzt „gefälschte“ HomeKit-Geräte erstellen, und Siri steuert sie wie jedes andere offizielle HomeKit Zubehörteil.

Heute werden wir ein Wi-Fi-steuerbares Licht erstellen und es mit Siri steuern. Hier ist eine Demo.

Folgendes benötigen Sie:

  • Himbeer-Pi (Ich habe ein RPi2 verwendet. Aufgrund der aktualisierten ARM-Architektur gibt es einen kleinen Unterschied bei den zu installierenden Knotenversionen - siehe Hinweise später).
  • Ein auf dem Raspberry Pi installierter MQTT-Broker. Siehe den Abschnitt "Installieren Sie Mosquitto auf Ihrem Pi" in meinem OpenHAB-Handbuch Teil 2 OpenHAB Anfängerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme
    instagram viewer
    OpenHAB, die Open-Source-Hausautomationssoftware, übertrifft die Fähigkeiten anderer Hausautomationssysteme auf dem Markt bei weitem - aber die Einrichtung ist nicht einfach. In der Tat kann es geradezu frustrierend sein. Weiterlesen
    . Es muss nicht speziell auf dem Pi installiert werden - Sie können sogar einen Cloud-basierten MQTT-Server verwenden, aber da wir für dieses Tutorial ohnehin einen Pi benötigen, ist dies praktisch.
  • NodeMCU v2 (Arduino-kompatibel)
  • Neopixel-LEDs (Ich würde 4 Pixel zum Testen empfehlen, dann können Sie ein externes Netzteil hinzufügen und so viele hinzufügen, wie Sie möchten)

Installieren der HomeKit Bridge

Wir werden eine NodeJS-Anwendung namens installieren HAP-NodeJS zum Raspberry Pi: Dies bildet eine Brücke zwischen HomeKit-Anforderungen und den Wi-Fi-Geräten. Wir werden diese Bridge vorerst mit einem Zubehör konfigurieren, aber Sie können so viele hinzufügen, wie Sie möchten.

Ich installiere dies tatsächlich auf meinem vorhandenen Heimserver, auf dem OpenHAB ausgeführt wird. Ich hoffe, die beiden auf einmal miteinander zu verbinden später, aber vorerst wissen, dass sie auf dem gleichen Raspberry Pi koexistieren können. Wenn Sie dasselbe tun, klicken Sie einfach auf Fall, Erstellen Sie eine Klonsicherung Ihrer aktuellen Pi SD-Karte Klonen Sie einfach Ihre SD-Karte für störungsfreies Raspberry Pi ComputingUnabhängig davon, ob Sie eine oder mehrere SD-Karten haben, müssen Sie Ihre Karten sichern, um Probleme zu vermeiden, die auftreten, wenn Ihr Raspberry Pi nicht startet. Weiterlesen . Wenn alles schief geht, können Sie das wiederherstellen.

Beginnen Sie mit einem vollständigen Upgrade vom Terminal oder einem SSH-Sitzung Einrichten Ihres Raspberry Pi für die kopflose Verwendung mit SSHDer Raspberry Pi kann SSH-Befehle akzeptieren, wenn er mit einem lokalen Netzwerk verbunden ist (entweder über Ethernet oder Wi-Fi), sodass Sie es einfach einrichten können. Die Vorteile von SSH gehen über das tägliche Screening hinaus ... Weiterlesen .

sudo apt-get update. sudo apt-get upgrade. 

Möglicherweise müssen Sie diese zweimal ausführen, wenn es eine Weile her ist.

Installieren Sie nun einige Kernpakete, die wir benötigen:

sudo apt-get install npm git-core libnss-mdns libavahi-kompatibel-libdnssd-dev. 

Als Nächstes installieren wir die neueste Version von NodeJS. Sie könnten versucht sein, dies mit zu tun apt-get, aber nicht - diese Version ist jetzt wirklich alt und wird nicht funktionieren. Besuchen Sie stattdessen nodejs.org, navigieren Sie zu download / release / latest-v5.x.0 / Verzeichnis, und überprüfen Sie, was der Link für die neueste Version ist. Du schaust nach linux-armv7l für Raspberry Pi 2 oder linuxarmv6l für die originalen RPi-Modelle. Laden Sie anschließend die URLs und Verzeichnisnamen nach Bedarf herunter und laden Sie sie mit den folgenden Befehlen herunter.

wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz. tar -xvf node-v5.5.0-linux-armv7l.tar.gz. cd node-v5.5.0-linux-armv7l. sudo cp -R * / usr / local. 

Bestätigen Sie durch Eingabe

Knotenversion. 

Und Sie sollten v5.5 sehen (oder was auch immer das neueste war, das Sie heruntergeladen haben).

Als nächstes müssen einige Knotenmodule installiert werden.

sudo npm install -g npm. sudo npm install -g node-gyp. 

In diesem ersten Befehl verwenden wir tatsächlich den Node Package Manager (npm), um eine neuere Version von sich selbst zu installieren. Klug!

Laden Sie nun den HomeKit-Emulator namens herunter HAP-NodeJS:

Git-Klon https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm neu erstellen. sudo npm install node-persist. sudo npm install srp. 

Zu diesem Zeitpunkt habe ich diesen Fehler ausgeführt: „#error Diese Version von Node / NAN / v8 erfordert einen C ++ 11-Compiler“. Installieren Sie in diesem Fall einen neueren C ++ - Compiler mit den folgenden Befehlen:

sudo apt-get install gcc-4.8 g ++ - 4.8. sudo update-alternatives --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. sudo update-alternatives --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. sudo update-alternatives --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. sudo update-alternatives --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Jetzt sollten Sie kein Problem haben. Führen Sie diese Befehle nacheinander weiter aus:

sudo npm install srp. sudo npm installiere mdns --unsafe-perm. sudo npm install debug. sudo npm install ed25519 --unsafe-perm. sudo npm install kurve25519 --unsafe-perm. 

Das sollte alles sein. Versuchen Sie, den Emulator auszuführen mit:

Knoten Core.js. 

Wenn Sie Fehler erhalten, die besagen, dass das eine oder andere Modul nicht gefunden werden kann, verwenden Sie einfach das sudo npm installieren Befehl erneut und bringen Sie den Namen des fehlenden Moduls an. Vorausgesetzt, alles ist in Ordnung, sollten einige Warnungen angezeigt werden und Ihre HomeKit-Bridge wird ausgeführt. So sieht Erfolg aus:

hap-nodejs installiert

Sie können sofort sehen, dass bereits 6 gefälschte Geräte erstellt wurden. Wir werden diese später als Ausgangspunkt für unser eigenes Wi-Fi-Licht verwenden, aber wir werden sie vorerst nur zum Testen verwenden. Sie können auch weitere Debug-Informationen anzeigen, wenn Sie den Server starten mit:

DEBUG = * Knoten Core.js

Wechseln Sie jetzt zu einem Apple-Gerät, auf dem Siri ausgeführt werden kann. Apple bietet seltsamerweise keine Standard-HomeKit-App an, außer für registrierte Entwickler. Laden Sie die kostenlose App herunter Elgato Eve App, eine HomeKit-Verwaltungs-App, mit der Sie Ihrem HomeKit-Netzwerk Geräte hinzufügen können (auch Nicht-Elgato-Geräte).

Wenn Sie die App zum ersten Mal starten, müssen Sie Ihr Zuhause benennen. Wählen Sie dann "Zubehör hinzufügen". Ignorieren Sie die Nachricht, dass Sie in der Nähe sind!

Elgato Vorabend 1

Sie werden aufgefordert, als Nächstes nach einem eindeutigen "HomeKit-Setup-Code" zu suchen. Ignorieren Sie das und klicken Sie auf "Zu [Name Ihres Hauses] hinzufügen".

Außerdem erfahren Sie, dass das Gerät nicht zertifiziert ist. In der Tat nicht. Mach trotzdem weiter. Wenn Sie auf dem Bildschirm nach einem Zubehörcode fragen ...

Elgato Vorabend 2

Geben Sie den Code manuell ein und geben Sie Folgendes ein:

031-45-154

Dies kann in der gefunden / geändert werden Light_accessory.js Datei, aber dazu später mehr. Fügen Sie dieses Zubehör Ihrem Standardzimmer hinzu und nennen Sie es Falsches Lichtund gehen Sie weiter durch die Dialoge, um das Symbol usw. auszuwählen.

Kehren Sie schließlich zur SSH-Sitzung zurück, in der HAP-NodeJS ausgeführt wird. Möglicherweise haben Sie bereits eine Nachricht mit der Aufschrift "Sind wir eingeschaltet?" Gesehen. - Das ist die Elgato-App, die nach dem Lichtstatus fragt. Öffne Siri und fordere sie auf, „falsches Licht einzuschalten“ und es dann erneut auszuschalten. Hoffentlich werden einige Debug-Meldungen von HAP-NodeJS angezeigt, um anzuzeigen, dass die Befehle empfangen wurden.

Sind wir dran? Licht einschalten! Licht ausschalten!

Fantastisch, der erste Schritt ist abgeschlossen. Jetzt benötigen wir ein aktuelles Licht, bevor wir zurückkehren, um die Brücke erneut zu konfigurieren.

Aufbau eines Wi-Fi Light

Die Hardware-Seite dieses Schritts ist überraschend einfach, wenn wir mit nur vier Neopixeln beginnen, da wir diese direkt von der NodeMCU-Entwicklungsplatine und ihrer USB-Verbindung mit Strom versorgen können. Wenn Sie einen längeren Streifen haben, machen Sie sich keine Sorgen - wir haben dies in der Software definiert, sodass der Rest nicht aktiviert wird.

Verbinden Sie das rote Stromkabel von einem Neopixel-Strang mit dem VIN-Pin, die blaue Masse mit GND und das grüne Signalkabel mit dem mit D2 gekennzeichneten Pin auf der NodeMCU. Seien Sie sehr vorsichtig mit der Polarität: Wenn Sie den Boden und die Fahrgestellnummer verwechseln, senden Sie einen Stromstoß durch Ihr Board und zerstören ihn dabei.

Wenn Ihre Arduino-Umgebung noch nicht für die Verwendung mit ESP8266 eingerichtet ist, befolgen Sie die Anleitung in meinem ESP8266: Arduino Killer Lernen Sie den Arduino Killer kennen: ESP8266Was wäre, wenn ich Ihnen sagen würde, dass es ein Arduino-kompatibles Entwicklungsboard mit integriertem WLAN für weniger als 10 US-Dollar gibt? Nun, das gibt es. Weiterlesen Sie können dann zurückkehren, nachdem Sie bestätigt haben, dass dies funktioniert. Installieren Sie diese zusätzlichen Bibliotheken:

  • lmroys PubSubClient
  • NeoPixel von Adafruit

Der von uns verwendete Code ist eine Modifikation von Github-Benutzer Aditya Tannus - Ich habe die unnötige Funktion zur drahtlosen Aktualisierung entfernt, einige fehlende HSV-Funktionen hinzugefügt und es einfacher gemacht, mehr Lichter zu erstellen, indem nur eine einzige Variable geändert wurde. Wenn Sie den unten eingebetteten Code nicht sehen können, finden Sie ihn unter dieser Kern.

Aktualisieren Sie die folgenden Zeilen mit Ihren eigenen Netzwerkinformationen und einem eindeutigen Namen für jedes von Ihnen erstellte Gerät (Host).

const char * ssid = "..."; const char * password = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);

Die IP-Adresse dieses Geräts wird automatisch über DHCP abgerufen. Es spielt keine Rolle, ob sie sich ändert, da wir jedes Mal eine Verbindung zum gleichen MQTT-Server herstellen.

Derzeit verwenden wir nur 4 Neopixel. Sie können die Anzahl jedoch später erhöhen, wenn Sie sie über eine externe Quelle mit Strom versorgen. Laden Sie den Code hoch und testen Sie - verwenden Sie Ihren bevorzugten MQTT-Client, um Befehle zu senden (Passen Sie den Hostnamen in den folgenden Anweisungen an, wenn Sie ihn geändert haben.).

  • Du kannst senden auf zur Wurzel offizielles Licht Kanal, um es einzuschalten. Senden Sie einen anderen Wert an diesen Kanal, um ihn auszuschalten.
  • Sie können eine Nummer von 0-360 an das offizielle Licht / den Farbton senden, um die Farbe zu ändern. Wir verwenden die HSV-Farbraum0 und 360 sind also rot, 120 ist grün und 240 ist blau.
  • Sie senden einen Prozentwert für die Helligkeit (0-100, ohne das% -Symbol).
  • Gleiches gilt für die Sättigung. Ein Wert von 100 ist vollständig gesättigt (dh eine Volltonfarbe), und Null ist unabhängig vom angegebenen Farbton rein weiß.

Sobald Sie bestätigt haben, dass Ihre MQTT-gesteuerte Leuchte funktioniert, fahren Sie fort.

Konfigurieren eines neuen HomeKit-Zubehörs

Wechseln Sie zurück zum Raspberry Pi und beenden Sie die HAP-NodeJS-App, falls Sie dies noch nicht getan haben. Navigieren Sie zu /accessories Verzeichnis. Um dies zu vereinfachen, können Sie Code, der bereits mit dem "officelight" -Gerät gekoppelt ist, direkt herunterladen, indem Sie Folgendes eingeben:

wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js

Im Wesentlichen handelt es sich hierbei um ein Duplikat des Standard-Lichtzubehörs, wobei einige Variablennamen geändert wurden (ebenfalls angepasst an Adysans Arbeit, vereinfacht zur Vereinfachung der Verwendung). Folgendes sollten Sie wissen, um auf dieser Grundlage Ihr eigenes benutzerdefiniertes Zubehör zu erstellen.

  • Alle Zubehörteile müssen * benannt sein_accessory.js
  • Ändern Sie die IP-Adresse in der Optionsvariablen oben in Ihren MQTT-Server
  • Wenn Sie einen anderen Gerätenamen haben, suchen / ersetzen Sie alle Instanzen von "offizielles Licht”Mit Ihrem eindeutigen Gerätenamen. Sie können in Nano suchen / ersetzen, indem Sie auf drücken STRG und \Geben Sie den zu findenden Begriff ein, den zu ersetzenden Begriff, und drücken Sie dann EIN (bedeutet alle Instanzen). Gehen Sie diese Schritte durch, um genau zu erfahren, welche Variablen aktualisiert werden.
  • Erstellen Sie einen eindeutigen hexadezimalen Benutzernamen für das Zubehör (light.username = "1B: 2B: 3C: 5D: 6E: FF";)
  • Ändern Sie den PIN-Code nicht. Es folgt einem bestimmten Format. Wenn Sie nicht wissen, was Sie tun, kann es nicht gekoppelt werden. Es ist kein Problem, sie zwischen den Lichtern gleich zu halten.
  • Sie können Ihrem Gerät einen anderen "Siri-Namen" geben, wenn Sie es zur Elgato Eve-App hinzufügen, und diese jederzeit bearbeiten, damit Sie nicht an Ihrer ursprünglichen Wahl festhalten. Es ist nicht erforderlich, die Konfigurationsdateien zu bearbeiten oder den Server neu zu starten.
  • Sobald Sie mehrere Geräte haben, können Sie sie mit der Elgato Eve-App nach Raum gruppieren oder bestimmte Szenen erstellen, die aus mehreren komplexen Aktionen bestehen. Szenen können aus mehreren Aktionen bestehen, z. B.: Schalten Sie das Bürolicht ein, dimmen Sie es auf 25%, machen Sie es rot und aktivieren Sie die Kaffeemaschine.

Sie müssen Ihr neues Zubehör erneut über die HomeKit-App Ihrer Wahl hinzufügen.

Schließlich möchten wir unsere HAP-NodeJS-App ausführen, wenn der Pi neu gestartet wird. Fügen Sie Folgendes zu Ihrem hinzu etc / rc.local Datei, kurz vor dem Ausfahrt 0.

sudo node /home/pi/HAP-NodeJS/Core.js  dev / null &

Sie können sehen, dass ich dies mit einigen anderen Befehlen kombiniert habe, die ich bereits für den Start beim Booten festgelegt habe.

rclocal run node beim Start

Wenn Sie rc.local zum ersten Mal verwenden, müssen Sie es möglicherweise als ausführbare Datei festlegen:

sudo chmod 755 /etc/rc.local

Wenn Sie es aus irgendeinem Grund erneut im Debug-Modus ausführen müssen, können Sie die laufende Node-App mit folgenden Aktionen beenden:

Killall-Knoten

Ein letzter Schritt: Navigieren Sie zum Zubehörverzeichnis und löschen Sie das GarageDoorOpener_accessory.js. Zum Zeitpunkt des Schreibens ist dies fehlerhaft und führt dazu, dass der Server nach einer Weile ausfällt.

Was wirst du mit Siri kontrollieren?

Nachdem Sie die Grundlagen verstanden haben, gibt es keine Grenzen mehr für Ihre Steuerung. Wenn Sie sie in Javascript codieren können, können Sie Ihre eigene Zubehördatei erstellen. Hier gibt es so viel Potenzial, ich denke, Sie werden viel Spaß haben. Lassen Sie mich in den Kommentaren wissen, was Sie sich einfallen lassen!

James hat einen BSc in künstlicher Intelligenz und ist CompTIA A + und Network + zertifiziert. Er ist der Hauptentwickler von MakeUseOf und verbringt seine Freizeit mit VR-Paintball und Brettspielen. Er baut seit seiner Kindheit PCs.