HomeKit är äntligen ute i naturen, vilket möjliggör röststyrning genom Siri för en handfull smarta hemenheter för konsumenter.
Tyvärr menar jag en bokstavlig handfull – allt du redan har köpt är förmodligen inte kompatibelt. Protokollet har dock redan omvänt konstruerats och en emulator med öppen källkod för HomeKit API är tillgänglig: eller på vanlig engelska, du kan nu skapa “falska” HomeKit-enheter, och Siri kommer att kontrollera dem precis som alla andra officiella HomeKit-tillbehör.
Idag ska vi skapa en Wi-Fi-kontrollerbar lampa och styra den med Siri. Här är en demo.
Här är vad du behöver:
Raspberry Pi (Jag har använt en RPi2, det är en liten skillnad i Node-versioner att installera med tanke på den uppgraderade ARM-arkitekturen – se anteckningar senare). En MQTT-mäklare installerad på Raspberry Pi. Se avsnittet “Installera Mosquitto på din Pi” i min OpenHAB Guide del 2. Det behöver inte installeras specifikt på Pi – du kan till och med använda en molnbaserad MQTT-server, men eftersom vi behöver en Pi för den här handledningen ändå , det är bekvämt. NodeMCU v2 (Arduino-kompatibel) Neopixel-lysdioder (jag skulle rekommendera 4 pixlar för testning, sedan kan du lägga till en extern strömförsörjning och lägga till så många du vill)
Installera HomeKit Bridge
Vi kommer att installera en NodeJS-applikation som heter HAP-NodeJS till Raspberry Pi: detta kommer att bilda en brygga mellan HomeKit-förfrågningar och Wi-Fi-enheterna. Vi kommer att konfigurera den här bryggan med ett tillbehör för tillfället, men du kan lägga till så många du vill.
Jag installerar faktiskt detta på min befintliga hemmaserver som kör OpenHAB – jag hoppas kunna koppla ihop de två vid ett senare tillfälle, men för nu vet du att de kan samexistera på samma Raspberry Pi. Om du gör detsamma, för säkerhets skull, gör en klonbackup av ditt nuvarande Pi SD-kort. Om allt går fel kan du återgå till det.
Börja med att göra en fullständig uppgradering från terminalen eller en SSH-session.
sudo apt-get updatesudo apt-get upgrade
Du kan behöva göra dessa två gånger om det har gått ett tag.
Installera nu några kärnpaket som vi kommer att behöva:
sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev
Därefter ska vi installera den senaste versionen av NodeJS. Du kan bli frestad att göra det här med apt-get, men gör det inte – den versionen är riktigt gammal nu och kommer inte att fungera. Besök istället nodejs.org, bläddra till download/release/latest-v5.x.0/ katalogen och kontrollera vad länken till den senaste versionen är. Du letar efter linux-armv7l för Raspberry Pi 2, eller linuxarmv6l för de ursprungliga RPi-modellerna. Justera sedan webbadresserna och katalognamnen efter behov, ladda ner och installera med följande kommandon.
wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gztar -xvf node-v5.5.0-linux-armv7l.tar.gz
cd node-v5.5.0-linux-armv7l
sudo cp -R * /usr/local
Bekräfta genom att skriva
node version
Och du bör se v5.5 (eller vad det senaste var som du laddade ner).
Därefter har vi några nodmoduler att installera.
sudo npm install -g npmsudo npm install -g node-gyp
I det första kommandot använder vi faktiskt Node Package Manager (npm) för att installera en nyare version av sig själv. Duktig!
Nu, för att ladda ner HomeKit-emulatorn som heter HAP-NodeJS:
git clone https://github.com/KhaosT/HAP-NodeJS.gitcd HAP-NodeJS
npm rebuild
sudo npm install node-persist
sudo npm install srp
Vid det här laget körde jag det här felet: “#error Den här versionen av node/NAN/v8 kräver en C++11-kompilator“. Om det händer dig, installera en nyare C++-kompilator med kommandona:
sudo apt-get install gcc-4.8 g++-4.8sudo 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
Nu borde du inte ha några problem. Fortsätt att köra dessa kommandon, ett efter ett:
sudo npm install srpsudo npm install mdns --unsafe-perm
sudo npm install debug
sudo npm install ed25519 --unsafe-perm
sudo npm install curve25519 --unsafe-perm
Det borde vara allt. Testa att köra emulatorn med:
node Core.js
Om du får felmeddelanden som säger att den inte kan hitta en sådan och en sådan modul, använd bara sudo npm installera kommandot igen och anbringa namnet på den modul som saknades. Förutsatt att allt är bra bör du se några varningar och din HomeKit-brygga kommer att köras. Så här ser framgången ut:
Du kan direkt se att det redan har skapats en uppsättning av 6 falska enheter. Vi kommer att använda dem som utgångspunkt för vårt eget Wi-Fi-ljus senare, men vi kommer bara att använda dem tills vidare för att testa. Du kan också se mer felsökningsinformation om du startar servern med:
DEBUG=* node Core.js
Hoppa nu över till en Apple-enhet som kan köra Siri. Apple tillhandahåller konstigt nog inte en HomeKit-app i lager förutom till registrerade utvecklare, så ladda ner den kostnadsfria Elgato Eve-appen, en HomeKit-hanteringsapp som gör att du kan lägga till (även icke-Elgato) enheter till ditt HomeKit-nätverk.
Första gången du startar appen måste du namnge ditt hem, gå vidare och gå igenom det. Välj sedan “Lägg till tillbehör”. Ignorera meddelandet om att vara nära det!
Det kommer att berätta för dig att leta efter en unik “HomeKit Setup Code” nästa. Ignorera det och tryck på “Lägg till [name of your home]”.
Den visar också att enheten inte är certifierad. Det är det verkligen inte. Varsågod ändå. När du kommer till skärmen och ber om en tillbehörskod…
Välj att ange koden manuellt och skriv in följande:
031-45-154
Detta kan hittas/ändras i Light_accessory.js fil, men mer om det senare. Lägg till detta tillbehör till ditt standardrum, kalla det Fake Light, och fortsätt gå igenom dialogrutorna för att välja ikon etc.
Slutligen, hoppa tillbaka till SSH-sessionen där du har HAP-NodeJS igång. Du kanske redan har sett ett meddelande som säger “Är vi på?” – det är Elgato-appen som kontrollerar ljusets status. Öppna Siri och säg till henne att “Slå på falskt ljus” och försök sedan stänga av det igen. Förhoppningsvis kommer du att se några felsökningsmeddelanden från HAP-NodeJS för att visa att den tog emot kommandona.
Are we on? No.Turning the light on!
Turning the light off!
Fantastiskt, det är steg ett klart. Nu behöver vi ett verkligt ljus innan vi kommer tillbaka för att konfigurera bron igen.
Bygga ett Wi-Fi-ljus
Hårdvarusidan av detta steg är förvånansvärt enkel om vi börjar med bara fyra Neopixlar, eftersom vi kan driva dem direkt från NodeMCU-utvecklarkortet och dess USB-anslutning. Om du har en längre remsa, oroa dig inte – vi har definierat detta i programvaran, så resten kommer bara inte att slås på.
Anslut den röda strömkabeln från en Neopixel-sträng till VIN-stiftet, blå jord till GND och den gröna signalkabeln till stiftet märkt D2 på NodeMCU. Var mycket försiktig med polaritet: om du blandar ihop marken och VIN, kommer du att skicka en våg av kraft genom din bräda och förstöra den i processen.
Om din Arduino-miljö ännu inte är konfigurerad för att fungera med ESP8266, fortsätt och följ guiden i min ESP8266: Arduino Killer-guide och kom sedan tillbaka efter att du har bekräftat att det fungerar. Installera dessa ytterligare bibliotek:
Koden vi använder är en modifiering av Github-användaren Aditya Tannus – jag har tagit bort den onödiga uppdateringsfunktionen, lagt till i vissa HSV-funktioner som saknades, och gjort det lättare att skapa fler lampor genom att bara ändra en enda variabel. Om du inte kan se koden inbäddad nedan, hittar du den på denna Gist.
Uppdatera följande rader med din egen nätverksinformation och ett unikt namn för varje fixtur du skapar (värd).
const char* ssid = "....";const char* password = "...";
const char* host = "officelight";
IPAddress MQTTserver(192, 168, 1, 99);
IP-adressen för denna fixtur erhålls automatiskt via DHCP – det spelar ingen roll om den ändras, eftersom vi ansluter till samma MQTT-server varje gång.
För närvarande använder vi bara 4 Neopixlar, men du kan öka antalet senare om du driver dem från en extern källa. Ladda upp koden och låt oss testa – använd din favorit MQTT-klient för att skicka kommandon (justera värdnamnet i följande instruktioner om du har ändrat det).
Du kan skicka på till roten kontorsljus kanal för att slå på den. Skicka något annat värde till den kanalen för att stänga av den. Du kan skicka ett nummer från 0-360 till officelight/hue för att ändra färg. Vi använder HSV-färgrymden, så 0 och 360 är röda, 120 är grön och 240 är blå. Du skickar ett procentvärde för ljusstyrka (0-100, inkludera inte symbolen %). Samma sak för mättnad. Ett värde på 100 kommer att vara helt mättat (dvs en enfärgad färg), och noll kommer att vara rent vitt, oavsett vilken nyans som anges.
När du har bekräftat att din MQTT-drivna belysningsarmatur fungerar, gå vidare.
Konfigurera ett nytt HomeKit-tillbehör
Byt tillbaka till Raspberry Pi och avsluta HAP-NodeJS-appen om du inte redan har gjort det. Navigera till /Tillbehör katalog. För att göra detta enkelt kan du direkt ladda ner kod som redan har parats till “kontorsljus”-armaturen genom att skriva in följande:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
I huvudsak är detta en dubblett av standardbelysningstillbehöret, med vissa variabelnamn ändrade (återigen, anpassade från Adysans arbete, förenklade för enkel användning). Här är vad du bör veta för att skapa dina egna anpassade tillbehör baserat på detta.
Alla tillbehör måste namnges *_tillbehör.js Ändra IP-adressen i alternativvariabeln längst upp till din MQTT-server Om du har ett annat fixturnamn, sök/ersätt alla instanser av “kontorsljus” med ditt unika fixturnamn. Du kan göra en sökning/ersätta i Nano genom att trycka CTRL och , skriv termen för att hitta, termen som ska ersättas och tryck sedan A (menar alla instanser). Gå igenom var och en av dessa för att lära dig exakt vilka variabler som uppdateras. Skapa ett unikt hexadecimalt användarnamn för tillbehöret (light.username = “1B:2B:3C:5D:6E:FF”;) Ändra inte PIN-koden. Den följer ett specifikt format, och om du inte vet vad du gör kommer den inte att kunna paras. Det är inga problem med att hålla dem lika mellan lamporna. Du kan ge din armatur ett annat “Siri-namn” när du lägger till dem i Elgato Eve-appen och redigera dem när som helst så att du inte fastnar med ditt första val. Det finns inget behov av att redigera konfigurationsfilerna eller starta om servern. När du har fått flera armaturer kan du använda Elgato Eve-appen för att gruppera dem efter rum eller för att skapa specifika scener som består av flera komplexa åtgärder. Scener kan bestå av flera åtgärder, såsom: tända kontorsbelysningen, dämpa den till 25 %, göra den röd och aktivera kaffemaskinen.
Du måste lägga till ditt nya tillbehör genom din valda HomeKit-app igen.
Slutligen vill vi köra vår HAP-NodeJS-app när Pi:n startas om. Lägg till följande till din etc/rc.local fil, precis före avsluta 0.
sudo node /home/pi/HAP-NodeJS/Core.js < /dev/null &
Du kan se att jag har kombinerat detta med några andra kommandon som jag redan har ställt in för att starta vid uppstart.
Om det är första gången du använder rc.local kan du behöva ställa in den som körbar:
sudo chmod 755 /etc/rc.local
Om du av någon anledning behöver köra den i felsökningsläge igen kan du döda den körande Node-appen med:
killall node
Ett sista steg: navigera till tillbehörskatalogen och ta bort GarageDoorOpener_accessory.js. I skrivande stund är detta buggigt och kommer att göra att servern går sönder efter ett tag.
Vad kommer du att kontrollera med Siri?
Nu när du har grunderna nere finns det verkligen ingen gräns för vad du kan kontrollera – om du kan koda det i Javascript kan du skapa din egen tillbehörsfil. Det finns så mycket potential här, jag tror att du kommer att ha väldigt roligt. Berätta för mig i kommentarerna vad du hittar på!
Om författaren
James Bruce (719 publicerade artiklar)
James har en BSc i artificiell intelligens och är CompTIA A+ och Network+ certifierad. När han inte är upptagen som Hardware Review Editor, gillar han LEGO, VR och brädspel. Innan han började på MakeUseOf var han ljustekniker, engelskalärare och datacenteringenjör.
Mer från James Bruce
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera
