Wie man ein DIY Siri-Controlled Wi-Fi Light herstellt
HomeKit ist endlich in der Wildnis und ermöglicht die Sprachsteuerung von Siri für eine Handvoll Smart Home-Geräte für Endverbraucher.
Ich meine leider eine buchstäbliche Handvoll - alles, was Sie bereits gekauft haben, ist wahrscheinlich nicht kompatibel. Das Protokoll wurde jedoch bereits in umgekehrter Reihenfolge entwickelt und ein Open Source-Emulator für die HomeKit-API ist verfügbar: oder in einfachem Englisch können Sie jetzt erstellen “Fälschung” HomeKit-Geräte, und Siri steuert sie wie jedes andere offizielle HomeKit-Zubehör.
Heute erstellen wir ein Wi-Fi-steuerbares Licht und steuern es mit Siri. Hier ist eine Demo.
Folgendes benötigen Sie:
- Raspberry Pi (Ich habe ein RPi2 verwendet, es gibt einen kleinen Unterschied in den zu installierenden Knotenversionen angesichts der aktualisierten ARM-Architektur - 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-Einsteigerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme OpenHAB-Einsteigerhandbuch Teil 2: ZWave, MQTT, Regeln und Diagramme OpenHAB, die Open-Source-Hausautomationssoftware, übertrifft bei weitem die Fähigkeiten anderer Home-Automation-Systeme auf dem Markt - aber es ist nicht leicht, sich einzurichten. 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. Da wir jedoch für dieses Lernprogramm ohnehin einen Pi benötigen, ist es praktisch.
- NodeMCU v2 (Arduino-kompatibel)
- Neopixel-LEDs (zum Testen würde ich 4 Pixel empfehlen, dann können Sie ein externes Netzteil hinzufügen und beliebig viele hinzufügen)
Installieren der HomeKit Bridge
Wir werden eine NodeJS-Anwendung namens HAP-NodeJS auf dem Raspberry Pi installieren: Dadurch wird eine Brücke zwischen HomeKit-Anforderungen und den Wi-Fi-Geräten gebildet. Wir werden diese Bridge vorerst mit einem Zubehör konfigurieren, aber Sie können beliebig viele hinzufügen.
Ich installiere dies tatsächlich auf meinem bestehenden Home-Server, auf dem OpenHAB ausgeführt wird. Ich hoffe, dass die beiden zu einem späteren Zeitpunkt miteinander verbunden werden können, aber jetzt wissen Sie, dass sie auf demselben Raspberry Pi koexistieren können. Wenn Sie dasselbe tun, nur für den Fall, machen Sie ein Klon-Backup Ihrer aktuellen Pi-SD-Karte. Klonen Sie einfach Ihre SD-Karte für problemloses Raspberry Pi-Computing. Klonen Sie einfach Ihre SD-Karte für problemloses Raspberry-Pi-Computing Eine oder mehrere SD-Karten benötigen Sie zum Sichern Ihrer Karten, um Probleme zu vermeiden, die auftreten, wenn Ihr Raspberry Pi nicht booten kann. Weiterlesen . Wenn alles schief geht, können Sie das wieder herstellen.
Beginnen Sie mit einem vollständigen Upgrade vom Terminal oder einer SSH-Sitzung. Einrichten des Raspberry Pi für die Verwendung ohne Heads mit SSH Einrichten des Raspberry Pi für die Verwendung ohne Heads mit SSH Das Raspberry Pi akzeptiert SSH-Befehle, wenn es mit einem lokalen Netzwerk (entweder über Ethernet) verbunden ist oder Wi-Fi), damit Sie es problemlos einrichten können. Die Vorteile von SSH gehen über das tägliche Screening hinaus ... Mehr lesen .
Sudo Apt-Get Update Sudo Apt-Get Upgrade
Möglicherweise müssen Sie dies zweimal tun, 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-compat-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 funktioniert nicht. Besuchen Sie stattdessen nodejs.org und navigieren Sie zu download / release / latest-v5.x.0 / Verzeichnis und prü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 ursprünglichen RPi-Modelle. Passen Sie dann die URLs und Verzeichnisnamen nach Bedarf an, laden Sie sie herunter und installieren Sie sie mit den folgenden Befehlen.
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 mit der Eingabe
Knotenversion
Sie sollten v5.5 (oder was auch immer Sie zuletzt heruntergeladen haben) sehen..
Als nächstes müssen wir einige Knotenmodule installieren.
sudo npm install -g npm sudo npm install -g knoten-gyp
In diesem ersten Befehl verwenden wir tatsächlich den Node Package Manager (npm), um eine neuere Version von sich selbst zu installieren. Klug!
Um jetzt den HomeKit-Emulator namens HAP-NodeJS herunterzuladen:
git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm Neuerstellung 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“. Wenn dies bei Ihnen der Fall ist, installieren Sie einen neueren C ++ - Compiler mit den Befehlen:
sudo apt-get install gcc-4.8 g ++ - 4.8 sudo-Update-Alternativen --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-Alternativen --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo-Update-Alternativen --install / usr / bin / g ++ g ++ / usr / bin / g ++ - 4,8 50
Jetzt sollten Sie kein Problem haben. Führen Sie die folgenden Befehle nacheinander aus:
sudo npm install srp sudo npm installieren mdns --unsafe-perm sudo npm installieren debug sudo npm installieren ed25519 --unsafe-perm sudo npm installieren curve25519 --unsafe-perm
Das sollte alles sein. Führen Sie den Emulator aus mit:
Knoten Core.js
Wenn Sie die Fehlermeldung erhalten, dass dieses Modul nicht gefunden werden kann, verwenden Sie einfach das sudo npm installieren Befehl erneut, und fügen Sie den Namen des fehlenden Moduls an. Angenommen, es ist alles in Ordnung, sollten Sie einige Warnungen sehen und Ihre HomeKit-Brücke läuft. So sieht Erfolg aus:
Sie können sofort erkennen, dass bereits 6 falsche Geräte erstellt wurden. Wir werden diese später als Ausgangspunkt für unser eigenes Wi-Fi-Licht verwenden, wir werden sie jedoch erst jetzt zum Testen verwenden. Sie können auch weitere Debug-Informationen anzeigen, wenn Sie den Server mit folgendem starten:
DEBUG = * Knoten Core.js
Springen Sie jetzt zu einem Apple-Gerät, auf dem Siri ausgeführt werden kann. Apple bietet kurioserweise keine HomeKit-App an, außer für registrierte Entwickler. Laden Sie also die kostenlose Elgato Eve-App herunter, eine HomeKit-Verwaltungs-App, mit der Sie (auch Nicht-Elgato) -Geräte zu Ihrem HomeKit-Netzwerk hinzufügen können.
Wenn Sie die App zum ersten Mal starten, müssen Sie Ihrem Zuhause einen Namen geben. Dann wählen Sie “Zubehör hinzufügen”. Ignorieren Sie die Nachricht, dass Sie sich ihr nähern!
Es wird dir sagen, dass du nach einem Unikat suchst “HomeKit-Setup-Code” Nächster. Ignoriere das und drücke “Zu [Name Ihres Hauses] hinzufügen”.
Es sagt Ihnen auch, dass das Gerät nicht zertifiziert ist. In der Tat ist es nicht. Machen Sie trotzdem weiter. Wenn Sie zum Bildschirm gelangen und nach einem Zubehörcode fragen ...
Wählen Sie, um den Code manuell einzugeben, und geben Sie Folgendes ein:
031-45-154
Dies kann im gefunden / geändert werden Lichtzubehör.js Datei, aber dazu später mehr. Fügen Sie dieses Zubehör zu Ihrem Standardraum hinzu, rufen Sie es an Scheinlicht, Gehen Sie durch die Dialoge und wählen Sie das Symbol etc.
Zum Schluss springen Sie zurück zur SSH-Sitzung, in der HAP-NodeJS ausgeführt wird. Möglicherweise haben Sie bereits eine Nachricht gesehen “Sind wir dran?” - Das ist die Elgato-App, die den Lichtstatus abfragt. Öffne Siri und sage es ihr “Scheinlicht einschalten”, dann versuchen Sie es wieder auszuschalten. Hoffentlich sehen Sie einige Debug-Meldungen von HAP-NodeJS, um zu zeigen, dass er die Befehle erhalten hat.
Sind wir dran? Licht einschalten! Licht ausschalten!
Fantastisch, das ist der erste Schritt. Jetzt brauchen wir ein aktuelles Licht, bevor wir die Brücke wieder konfigurieren.
Aufbau eines Wi-Fi-Lichts
Die Hardwareseite dieses Schrittes ist überraschend einfach, wenn wir mit nur vier Neopixeln beginnen, da wir diese direkt von der NodeMCU-Entwicklungsplatine und ihrem USB-Anschluss aus versorgen können. Wenn Sie einen längeren Strip haben, machen Sie sich keine Sorgen - wir haben dies in der Software definiert, sodass der Rest sich nicht einschalten lässt.
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 an der NodeMCU. Seien Sie bei der Polarität sehr vorsichtig: Wenn Sie Boden und VIN miteinander vermischen, senden Sie einen Stromstoß durch Ihr Board und zerstören es dabei.
Wenn Ihre Arduino-Umgebung noch nicht für die Arbeit mit ESP8266 eingerichtet ist, folgen Sie den Anweisungen in meinem ESP8266: Arduino-Killer Triff den Arduino-Killer: ESP8266 Triff den Arduino-Killer: ESP8266 Was wäre, wenn ich Ihnen einen Arduino-kompatiblen Entwickler sagen würde Board mit eingebautem WLAN für weniger als 10 US-Dollar? Nun, das gibt es. Lesen Sie den Leitfaden und dann zurück, nachdem Sie bestätigt haben, dass das funktioniert. Installieren Sie diese zusätzlichen Bibliotheken:
- lmroy's PubSubClient
- Adafruit's NeoPixels
Der Code, den wir verwenden, ist eine Modifikation des Github-Benutzers Aditya Tannu. Ich habe die überflüssige Over-the-Air-Update-Funktion entfernt, einige HSV-Funktionen hinzugefügt, die fehlten, und es wurde einfacher, mehr Lichtquellen zu erzeugen, indem nur eine geändert wurde einzelne Variable. Wenn Sie den unten eingebetteten Code nicht sehen können, finden Sie ihn bei diesem Gist.
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 sich das Gerät ändert, da wir jedes Mal eine Verbindung zum selben MQTT-Server herstellen.
Im Moment verwenden wir nur 4 Neopixel, aber Sie können die Anzahl später erhöhen, wenn Sie sie von einer externen Quelle aus betreiben. Laden Sie den Code hoch und lassen Sie uns testen - 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 Zahl zwischen 0 und 360 zum Amtlicht / Farbton senden, um die Farbe zu ändern. Wir verwenden den HSV-Farbraum, also 0 und 360 sind Rot, 120 ist Grün und 240 ist Blau.
- Sie senden einen Prozentwert für die Helligkeit (0-100, ohne das% -Zeichen).
- Gleiches für die Sättigung. Ein Wert von 100 ist vollständig gesättigt (dh eine durchgehende Farbe), und Null ist unabhängig vom angegebenen Farbton reinweiß.
Wenn Sie Ihre MQTT-betriebene Leuchte funktionieren, können Sie fortfahren.
Konfigurieren eines neuen HomeKit-Zubehörs
Wechseln Sie wieder zum Raspberry Pi und beenden Sie die HAP-NodeJS-App, falls Sie dies noch nicht getan haben. Navigieren Sie zu /Zubehör Verzeichnis. Um dies zu vereinfachen, können Sie Code, der bereits mit dem gepaart wurde, direkt herunterladen “offizielles Licht” Fixture, 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 Standardzubehörs light, bei dem einige Variablennamen geändert wurden (wiederum angepasst an die Arbeit von Adysan, die zur Vereinfachung vereinfacht wurden). Hier erfahren Sie, was Sie wissen müssen, um daraus ein eigenes Zubehör zu erstellen.
- Alle Zubehörteile müssen * genannt werden_Zubehör.js
- Ändern Sie die IP-Adresse in der Optionsvariablen oben in Ihren MQTT-Server
- Wenn Sie einen anderen Gerätenamen haben, suchen oder ersetzen Sie alle Instanzen von “offizielles Licht” mit Ihrem eindeutigen Gerätenamen. Sie können in Nano suchen / ersetzen, indem Sie drücken STRG und \, Geben Sie den zu suchenden Begriff ein, den zu ersetzenden Begriff, und klicken Sie dann auf EIN (bedeutet alle Fälle). Durchlaufen Sie jeden Schritt, 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 und wenn Sie nicht wissen, was Sie tun, kann es nicht gekoppelt werden. Es gibt kein Problem damit, sie zwischen den Lichtern gleich zu halten.
- Sie können Ihrem Gerät ein anderes geben “Siri Name” Wenn Sie sie zur Elgato Eve-App hinzufügen, können Sie sie jederzeit bearbeiten, sodass Sie nicht an Ihrer ursprünglichen Auswahl festhalten. Es ist nicht erforderlich, die Konfigurationsdateien zu bearbeiten oder den Server neu zu starten.
- Sobald Sie mehrere Fixtures haben, können Sie sie mit der Elgato Eve-App nach Räumen gruppieren oder bestimmte Szenen erstellen, die aus mehreren komplexen Aktionen bestehen. Szenen können aus mehreren Aktionen bestehen, zum Beispiel: 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 Ihre 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, direkt vor dem Ausfahrt 0.
Sudo-Knoten /home/pi/HAP-NodeJS/Core.js < /dev/null &
Sie können sehen, dass ich dies mit einigen anderen Befehlen kombiniert habe, die ich bereits beim Booten festgelegt habe.
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 folgendermaßen beenden:
Killall-Knoten
Ein letzter Schritt: Navigieren Sie zum Zubehörverzeichnis und löschen Sie das Verzeichnis GarageDoorOpener_accessory.js. Zum Zeitpunkt des Schreibens ist dies fehlerhaft und führt dazu, dass der Server nach einer Weile ausfällt.
Was kontrollieren Sie mit Siri??
Jetzt, da Sie mit den Grundlagen vertraut sind, gibt es keine Grenzen für das, was Sie kontrollieren können. Wenn Sie es in Javascript programmieren können, können Sie eine 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 dazu bringen!
Erfahren Sie mehr über: Siri, Smart Lighting.