Annons

HomeKit är äntligen ute i naturen, vilket möjliggör röstkontroll genom Siri för en handfull konsumentsmarta hemanordningar.

Tyvärr menar jag en bokstavlig handfull - allt du redan har köpt är förmodligen inte kompatibelt. Protokollet har emellertid redan utvecklats omvänd och en open source-emulator för HomeKit API är tillgänglig: eller i vanligt engelska, du kan nu skapa "falska" HomeKit-enheter, och Siri kommer att styra dem precis som alla andra officiella HomeKit-enheter tillbehör.

Idag kommer vi att skapa ett kontrollerbart Wi-Fi-ljus och kontrollera det med Siri. Här är en demo.

Här är vad du behöver:

  • Raspberry Pi (Jag har använt en RPi2, det finns 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 mygg på din Pi" i min OpenHAB Guide del 2 OpenHAB nybörjarguide del 2: ZWave, MQTT, regler och kartläggningOpenHAB, open source-hemmeautomationsprogramvaran, överstiger mycket kapaciteten för andra hemmeautomationssystem på marknaden - men det är inte lätt att konfigurera. I själva verket kan det vara rent frustrerande.
    instagram viewer
    Läs mer
    . Det behöver inte installeras specifikt på Pi - du kan till och med använda en molnbaserad MQTT-server, men eftersom vi ändå behöver en Pi för den här självstudien är det bekvämt.
  • NodeMCU v2 (Arduino kompatibel)
  • Neopixel-lysdioder (jag rekommenderar 4 pixlar för testning, då 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 bro mellan HomeKit-förfrågningar och Wi-Fi-enheter. Vi konfigurerar denna bro med ett tillbehör för närvarande, men du kan lägga till så många du vill.

Jag installerar det här faktiskt på min befintliga hemserver som kör OpenHAB - jag hoppas kunna ansluta de två på ett senare datum, men vet för närvarande att de kan samexistera på samma Raspberry Pi. Om du gör samma sak bara i fall, skapa en klonbackup av ditt nuvarande Pi SD-kort Klon enkelt ditt SD-kort för problemfri Raspberry Pi-datorOavsett om du har ett SD-kort eller flera, en sak som du behöver är förmågan att säkerhetskopiera dina kort för att undvika de problem som uppstår när din Raspberry Pi inte startar. Läs mer . Om allt går fel kan du återställa det.

Börja med att göra en fullständig uppgradering från terminalen eller en SSH-session Ställa in din hallonpi för huvudlös användning med SSHRaspberry Pi kan acceptera SSH-kommandon när de är anslutna till ett lokalt nätverk (antingen via Ethernet eller Wi-Fi), vilket gör att du enkelt kan konfigurera det. Fördelarna med SSH går utöver upprörande av den dagliga screeningen ... Läs mer .

sudo apt-get-uppdatering. sudo apt-get upgrade. 

Du kan behöva göra det 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 kommer vi att installera den senaste versionen av NodeJS. Du kanske frestas att göra detta med apt-get, men gör inte - den versionen är verkligen gammal nu och kommer inte att fungera. Besök istället nodejs.org, bläddra till download / release / senaste-v5.x.0 / katalogen och kolla vad länken för den senaste versionen är. Du letar efter linux-armv7l för Raspberry Pi 2 eller linuxarmv6l för de ursprungliga RPi-modellerna. Därefter justerar du URL: er och katalognamn 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.gz. tar -xvf-nod-v5.5.0-linux-armv7l.tar.gz. cd-nod-v5.5.0-linux-armv7l. sudo cp-R * / usr / local. 

Bekräfta genom att skriva

nodversion. 

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 installera -g npm. sudo npm installera -g nod-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!

Ladda ner HomeKit-emulatorn nu HAP-NodeJS:

git klon https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm ombyggnad. sudo npm installera node-persist. sudo npm install srp. 

Vid det här momentet körde jag det här felet: “#error Denna version av noden / NAN / v8 kräver en C ++ 11-kompilator“. Om det händer dig installerar du en nyare C ++ -kompilerare med kommandona:

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. 

Nu ska du inte ha några problem. Fortsätt köra dessa kommandon, en efter en:

sudo npm install srp. sudo npm installera mdns --unsafe-perm. sudo npm installera felsökning. sudo npm installera ed25519 --unsafe-perm. sudo npm installera curve25519 --unsafe-perm. 

Det borde vara allt. Prova att köra emulatorn med:

node Core.js. 

Om du får fel som säger att den inte kan hitta en sådan och sådan modul, använd bara sudo npm installera kommandot igen och anbring namnet på vilken modul som saknades. Förutsatt att allt är bra, bör du se några varningar, och din HomeKit-bro kommer att köras. Så här ser framgång ut:

hap-nodejs installerat

Du kan se omedelbart att det redan har skapats en uppsättning av 6 falska enheter. Vi kommer att använda dessa som en utgångspunkt för vårt eget Wi-Fi-ljus senare, men vi kommer bara att använda dem för nu för att testa. Du kan också se mer felsökningsinformation om du startar servern med:

DEBUG = * nod Core.js

Hoppa nu över till en Apple-enhet som kan köra Siri. Apple ger nyfiken inte en lager HomeKit-app förutom till registrerade utvecklare, så ladda ner gratis 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 behöver 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!

elgato eve 1

Det kommer att säga dig att leta efter en unik "HomeKit Setup Code" nästa. Ignorera det och tryck på "Lägg till [ditt hemnamn]".

Det säger också att enheten inte är certifierad. Det är det inte. Fortsätt ändå. När du kommer till skärmen och ber om en tillbehörskod ...

elgato eve 2

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å genom dialogrutorna för att välja ikon etc.

Hoppa slutligen 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 frågar om ljusstatus. Öppna Siri och berätta för henne att "Slå på falskt ljus" och försök sedan stänga av det igen. Förhoppningsvis ser du några felsökningsmeddelanden från HAP-NodeJS för att visa att de fått kommandona.

Är vi på? Nej. Tända ljuset! Stänga av ljuset!

Fantastiskt, det är steg ett avslutat. Nu behöver vi ett faktiskt ljus innan vi kommer tillbaka för att konfigurera bron igen.

Bygga ett Wi-Fi-ljus

Hårdvaransidan av detta steg är förvånansvärt enkelt om vi börjar med bara fyra Neopixels, eftersom vi kan driva dem direkt från NodeMCU dev-kortet och dess USB-anslutning. Om du har en längre remsa, oroa dig inte - vi har definierat det här i programvara, så att resten bara inte slås på.

Anslut den röda strömkabeln från en Neopixel-sträng till VIN-stiftet, blå mark 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, skickar du en kraftig kraft genom ditt bräde och förstör det i processen.

Om din Arduino-miljö ännu inte är inställd för att fungera med ESP8266, fortsätt och följ guiden i min ESP8266: Arduino Killer Möt Arduino Killer: ESP8266Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi-Fi för mindre än $ 10? Det finns det. Läs mer guide kommer sedan tillbaka efter att du har bekräftat att det fungerar. Installera dessa ytterligare bibliotek:

  • lmroy's PubSubClient
  • Adafruits NeoPixels

Koden vi använder är en modifiering av Github-användare Aditya Tannu's - Jag har tagit bort den onödiga uppdateringsfunktionen över luften, 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 tillfället använder vi bara fyra 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 till roten officelight 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 officiell ljus / nyans för att ändra färg. Vi använder HSV färgutrymme, så 0 och 360 är röda, 120 är gröna och 240 är blå.
  • Du skickar ett procentvärde för ljusstyrka (0-100, inkluderar inte% -symbolen).
  • Samma för mättnad. Ett värde på 100 är helt mättat (dvs en fast färg) och noll kommer att vara rent vitt, oavsett vilken färgton som anges.

När du har bekräftat att din MQTT-driven lampa 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 /accessories katalogen. För att göra det enkelt kan du direkt ladda ner kod som redan har kopplats till "officelight" fixturen genom att skriva in följande:

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

I huvudsak är detta en duplikat av standardljustillbehöret, med vissa variabla namn ändrade (återigen, anpassade från Adysans arbete, förenklad 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 *_accessory.js
  • Ändra IP-adressen i alternativvariabeln överst till din MQTT-server
  • Om du har ett annat fixturnamn, sök / ersätt alla instanser av "officelight”Med ditt unika fixturnamn. Du kan göra en sökning / ersätta i Nano genom att trycka på CTRL och \, skriva termen för att hitta, termen att ersätta, tryck sedan på EN (vilket betyder 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. Det följer ett specifikt format, och såvida du inte vet vad du gör, kommer det inte att kunna kopplas ihop. Det finns inget problem med att hålla dem samma mellan ljus.
  • Du kan ge din fixtur 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 står fast vid ditt första val. Det finns inget behov av att redigera konfigurationsfilerna eller starta om servern.
  • När du har fått flera fixturer kan du använda appen Elgato Eve för att gruppera dem efter rum eller skapa specifika scener som består av flera komplexa åtgärder. Scener kan bestå av flera åtgärder, till exempel: slå på kontorsljuset, dima det till 25%, göra det rött och aktivera kaffemaskinen.

Du måste lägga till ditt nya tillbehör igenom din valbara HomeKit-app igen.

Slutligen vill vi köra vår HAP-NodeJS-app när Pi startas om. Lägg till följande till din etc / rc.local filen, 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 start.

rclocal run node vid start

Om det är första gången du använder rc.local kan du behöva ställa in det som körbart:

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 nod

Ett sista steg: navigera till tillbehörskatalogen och ta bort GarageDoorOpener_accessory.js. I skrivande stund är detta buggy 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 fått grunderna ner 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 kul. Låt mig veta i kommentarerna vad du kommer på!

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.