Hur man gör ett DIY-styrt Wi-Fi-ljus
HomeKit är äntligen ute i naturen, vilket möjliggör röstkontroll genom Siri för en handfull konsumentens smarta hemanordningar.
Tyvärr menar jag en bokstavlig handfull - allt du redan har köpt är förmodligen inte kompatibel. Protokollet har emellertid redan varit omvänd konstruerat och en open source emulator för HomeKit API finns tillgänglig: eller på vanlig engelska kan du nu skapa “falsk” HomeKit-enheter, och Siri kommer att styra dem precis som något annat officiellt HomeKit-tillbehör.
Idag ska vi skapa ett Wi-Fi kontrollerbart ljus och styra 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 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 OpenHAB Nybörjarhandledning Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Nybörjarhandbok Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB, öppen källkodsautomationsprogramvara, överstiger möjligheterna för andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande. 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 behöver en Pi för denna handledning ändå är det bekvämt.
- NodeMCU v2 (Arduino kompatibel)
- Neopixel-LED-lampor (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 som 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-enheterna. Vi konfigurerar den här bron med ett tillbehör för tillfället, men du kan lägga till så många som du vill.
Jag installerar faktiskt detta på min befintliga hemmeserver som kör OpenHAB. Jag hoppas att de båda kommer att anslutas vid ett senare tillfälle, men nu vet jag att de kan existera på samma Raspberry Pi. Om du gör detsamma, gör du bara en klonskopiering av ditt nuvarande Pi SD-kort. Klätt enkelt ditt SD-kort för problemfri hallon Pi-dator. Klätt enkelt ditt SD-kort för problemfri hallon Pi-dator. Oavsett om du har en SD-kort eller flera, en sak du behöver är möjligheten att säkerhetskopiera dina kort för att undvika 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äll in din Raspberry Pi för huvudlös användning med SSH. Ställ in din Raspberry Pi för huvudlös användning med SSH Raspberry Pi kan acceptera SSH-kommandon när den är ansluten till ett lokalt nätverk (antingen via Ethernet eller Wi-Fi), så att du enkelt kan konfigurera den. Fördelarna med SSH går utöver att störa den dagliga skärningen ... Läs mer .
sudo apt-få uppdatering sudo apt-get uppgradering
Du kan behöva göra dem två gånger om det har varit ett tag.
Installera nu några kärnpaket vi behöver:
sudo apt-get install npm git-core libnss-mdns libavahi-kompatibla-libdnssd-dev
Därefter kommer vi att installera den senaste versionen av NodeJS. Du kan bli frestad att göra detta med apt-get, men gör inte - den versionen är verkligen gammal nu och kommer inte att fungera. I stället besöker nodejs.org, bläddra till download / release / senaste-v5.x.0 / katalog och kolla vad länken för den senaste versionen är. Du letar efter Linux-armv7l för hallon Pi 2 eller linuxarmv6l för de ursprungliga RPi modellerna. Sedan justerar du webbadresserna och katalognamnen efter behov, hämtas och installeras med följande kommandon.
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
Bekräfta genom att skriva
nodversion
Och du borde se v5.5 (eller det senaste var det du hämtade).
Därefter har vi några Node-moduler att installera.
sudo npm installera -g npm sudo npm installera -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 hem HomeKit-emulatorn kallad HAP-NodeJS:
git klon https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm återuppbygga sudo npm installera nod-persist sudo npm installera srp
Vid denna tidpunkt sprang jag detta fel: “#error Denna version av nod / NAN / V8 kräver en C ++ 11 kompilator“. Om det händer med dig, installera en senare C ++-kompilator med kommandona:
sudo apt-get install gcc-4.8 g ++ - 4.8 sudo uppdateringsalternativ - installera / usr / bin / gccgcc / usr / bin / gcc-4.6 20 sudo uppdateringsalternativ - installera / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo uppdateringsalternativ - installera / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo uppdateringsalternativ - installera / usr / bin / g ++ g ++ / usr / bin / g ++ - 4,8 50
Nu borde du inte ha något problem. Fortsätt att köra dessa kommandon, en efter en:
sudo npm installera srp sudo npm installera mdns --unsafe-perm sudo npm installera debug sudo npm installera ed25519 --unsafe-perm sudo npm installera curve25519 --unsafe-perm
Det borde vara allting. Prova att köra emulatorn med:
nod Core.js
Om du får fel att säga att det inte finns någon sådan modul, använd bara sudo npm installera kommandot igen och ange namnet på vilken modul som saknades. Om du antar att allt är bra bör du se några varningar och din HomeKit-bro körs. Så här ser framgång ut:
Du kan se omedelbart att det redan har skapat en uppsättning 6 falska enheter. Vi använder dem som utgångspunkt för vårt eget Wi-Fi-ljus senare, men vi använder bara de för att nu kunna 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 tillhandahåller nyfikenhet inte en lager-hemkit-app med undantag för 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 måste du namnge ditt hem, fortsätt 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-kod” Nästa. Ignorera det och träffa “Lägg till i [ditt hemnamn]”.
Det kommer också att berätta att enheten inte är certifierad. Det är faktiskt inte. Fortsätt ändå. När du kommer till skärmen frågar du efter 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 det här tillbehöret till ditt standardrum, ring 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 valger för ljusstatusen. Öppna Siri och berätta för henne “Slå på falskt ljus”, 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 den fick kommandon.
Är vi på Nej. Slå på lampan! Släcker ljuset!
Fantastiskt, det är steg ett klart. Nu behöver vi ett verkligt ljus innan vi återkommer för att konfigurera bron igen.
Bygga ett Wi-Fi-ljus
Hårdvarans sida i detta steg är överraskande 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å vil resten inte slås på.
Anslut den röda strömkabeln från en Neopixel-sträng till VIN-stiftet, den blå marken till GND och den gröna signalkabeln till stiftet D2 på NodeMCU. Var försiktig med polaritet: om du blandar marken och VIN, skickar du en strömkälla genom din styrelse och förstör den i processen.
Om din Arduino-miljö inte är inställd för att fungera med ESP8266, följ och följ guiden i min ESP8266: Arduino Killer Möt Arduino Killer: ESP8266 Möt Arduino Killer: ESP8266 Vad händer om jag sa att det finns en Arduino-kompatibel dev bräda med inbyggd Wi-Fi för mindre än $ 10? Jo, det finns det. Läs mer guide kom då tillbaka när du har bekräftat att det fungerar. Installera dessa ytterligare bibliotek:
- lmroy's PubSubClient
- Adafruit's NeoPixels
Koden vi använder är en modifikation av Github-användaren Aditya Tannu-s. Jag har tagit bort den onödiga uppdateringsfunktionen, uppdaterad i vissa HSV-funktioner som saknades, och gjorde det lättare att skapa fler ljus genom att bara ändra en enda variabel. Om du inte kan se koden som är 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 * värd = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);
IP-adressen för denna fixtur erhålls automatiskt via DHCP - det spelar ingen roll om det ändras, eftersom vi ansluter till samma MQTT-server varje gång.
För närvarande använder vi bara 4 Neopixel, men du kan öka numret 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 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 tändningsljus / nyans för att ändra färg. Vi använder HSV-färgutrymmet, så 0 och 360 är röda, 120 är gröna och 240 är blåa.
- Du skickar ett procentvärde för ljusstyrka (0-100, inte med% -symbolen).
- Samma för mättnad. Ett värde på 100 kommer att vara fullständigt mättat (dvs en fast färg) och noll kommer att vara ren vit, oavsett vilken nyans som anges.
När du har bekräftat att din MQTT-driven lampan fungerar, fortsätt.
Konfigurera en ny HomeKit Accessory
Byta tillbaka till Raspberry Pi och avsluta HAP-NodeJS-appen om du inte redan har det. Navigera till /Tillbehör katalogen. För att göra det enkelt kan du direkt ladda ner kod som redan har kopplats till “officelight” fixtur 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 ändras (igen anpassat från Adysans arbete, förenklat för enkel användning). Här är vad du bör veta för att skapa 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ätt i Nano genom att trycka på CTRL och \, skriv termen för att hitta, termen som ska ersättas, och sedan träffa en (vilket betyder alla fall). Steg igenom var och en av dessa för att lära 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 visst format, och om du inte vet vad du gör kommer det inte att kunna para. Det är ingen fråga att hålla dem samma mellan ljus.
- Du kan ge din fixtur en annan “Siri namn” när du lägger till dem i Elgato Eve-appen och redigerar 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 servern igen.
- När du har flera fixturer kan du använda Elgato Eve-appen för att gruppera dem per 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, dimma det till 25%, göra det rött och aktivera kaffemaskinen.
Du måste lägga till ditt nya tillbehör via din HomeKit-app igen.
Slutligen vill vi köra vår HAP-NodeJS-app när Pi startas om. Lägg till följande i din etc / rc.local filen, strax före utgång 0.
sudo nod /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.
Om det här ä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 runda nod-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 orsaka att servern bryts efter ett tag.
Vad kommer du att kontrollera med Siri?
Nu när du har grunderna ner, finns det verkligen ingen gräns för vad du kan styra. Om du kan koda den i Javascript kan du skapa din egen tillbehörsfil. Det finns så mycket potential här, jag tror att du kommer att ha mycket roligt. Låt mig veta i kommentarerna vad du kommer med!
Utforska mer om: Siri, Smart Lighting.