Hur man gör ett DIY-styrt Wi-Fi-ljus

I den här guiden kommer du att lära dig hur du skapar ett Wi-Fi kontrollerbart ljus och kontrollerar det med Siri.

I den här guiden kommer du att lära dig hur du skapar ett Wi-Fi kontrollerbart ljus och kontrollerar det med Siri.
Annons

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 är emellertid redan omvänd konstruerat och en open source-emulator för HomeKit API finns tillgänglig: eller på vanlig engelska kan du nu skapa "falska" 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 Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB, open source hemautomatiseringsprogram, överträffar kapaciteten hos 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 nedladdningen / release / latest-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. 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 går att hitta en sådan modul, använd bara kommandot sudo npm installera 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:

hap-nodejs installerade

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 utom för registrerade utvecklare, så ladda ner gratis Elgato Eve app, 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!

elgato eve 1

Det kommer att berätta för dig att söka efter en unik "HomeKit Setup Code" nästa. Ignorera det och klicka på "Lägg till [namnet på ditt hem]".

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 ...

elgato eve 2

Välj att ange koden manuellt och skriv in följande:

 031-45-154 

Detta kan hittas / ändras i filen Light_accessory.js, men mer om det senare. Lägg till det här tillbehöret till ditt standardrum, ring det falskt ljus 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 vidare?" - det är Elgato-appen som valger för ljusstatusen. Ö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 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 upp marken och VIN, skickar du en strömkälla genom din bräda 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 vidare till rootoffelight- kanalen 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ärgen. 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 helt mättat (dvs en fast färg) och noll kommer att vara rent vit, oavsett den angivna nyansen.

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 katalogen / tillbehör . 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 ä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 kallas * _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 \, skriva termen för att hitta, termen som ska ersättas och tryck sedan på A (vilket betyder alla instanser). 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 ett annat "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- fil, precis före utgången 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.

rclocal run node vid uppstart

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 gör med!

In this article