HomeKit er endelig ute i naturen, noe som gjør det mulig å styre stemmen via Siri for en håndfull forbrukerens smarte hjemmeapparater.
Dessverre mener jeg en bokstavelig håndfull - alt du allerede har kjøpt er sannsynligvis ikke kompatibelt. Protokollen er imidlertid allerede omvendt utviklet, og en åpen kildekodeemulator for HomeKit API er tilgjengelig: eller på vanlig engelsk kan du nå lage "falske" HomeKit-enheter, og Siri vil kontrollere dem akkurat som alle andre offisielle HomeKit-tilbehør.
I dag skal vi lage et Wi-Fi kontrollerbart lys, og kontrollere det med Siri. Her er en demonstrasjon.
Her er det du trenger:
- Raspberry Pi (Jeg har brukt en RPi2, det er en liten forskjell i Node versjoner å installere gitt den oppgraderte ARM arkitekturen - se notater senere).
- En MQTT-megler installert på Raspberry Pi. Se avsnittet "Installer Mosquitto på din Pi" i OpenHAB Guide del 2 OpenHAB Begynnerhåndbok Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB Begynnerhåndbok Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB, åpen kildekode hjemmeautomatiseringsprogramvare, langt overgår kapasiteten til andre hjemmeautomatiseringssystemer på markedet - men det er ikke lett å bli satt opp. Faktisk kan det være rett og slett frustrerende. Les mer . Det trenger ikke installeres spesielt på Pi - du kan til og med bruke en skybasert MQTT-server, men siden vi trenger en Pi for denne opplæringen, er det praktisk.
- NodeMCU v2 (Arduino kompatibel)
- Neopixel-lysdioder (jeg anbefaler 4 piksler for testing, da kan du legge til en ekstern strømforsyning og legge til så mange du vil)
Installere HomeKit Bridge
Vi skal installere en NodeJS-applikasjon kalt HAP-NodeJS til Raspberry Pi: dette vil danne en bro mellom HomeKit-forespørsler og Wi-Fi-enhetene. Vi konfigurerer denne broen med ett tilbehør for nå, men du kan legge til så mange du vil.
Jeg installerer egentlig dette på min eksisterende hjemmeserver som kjører OpenHAB - Jeg håper å koble de to sammen senere, men for nå, vet at de kan eksistere på samme Raspberry Pi. Hvis du gjør det samme, gjør du bare en klonskopi av ditt nåværende Pi SD-kort. Klone ditt SD-kort for problemfri, hindbær-Pi-databehandling. Klargjør enkelt SD-kortet ditt for problemfri, hindbær-Pi-databehandling. Uansett om du har en SD-kort eller flere, en ting du trenger, er evnen til å sikkerhetskopiere kortene dine for å unngå problemene som oppstår når Raspberry Pi ikke starter. Les mer . Hvis alt går galt, kan du gjenopprette det.
Begynn med å gjøre en full oppgradering fra Terminal eller en SSH-sesjon. Sette opp Raspberry Pi-en for hovedløs bruk med SSH. Sette opp Raspberry Pi For Headless Bruk Med SSH Raspberry Pi kan godta SSH-kommandoer når den er koblet til et lokalt nettverk (enten via Ethernet eller Wi-Fi), slik at du enkelt kan konfigurere den. Fordelene med SSH går utover å forstyrre den daglige screeningen ... Les mer.
sudo apt-get oppdatering sudo apt-get oppgradering
Du må kanskje gjøre det to ganger hvis det har vært en stund.
Sett nå noen kjernepakker vi trenger:
sudo apt-get install npm git-core libnss-mdns libavahi-kompatibel-libdnssd-dev
Deretter skal vi installere den nyeste versjonen av NodeJS. Du kan bli fristet til å gjøre dette med apt-get, men ikke - den versjonen er virkelig gammel nå, og vil ikke fungere. I stedet kan du besøke nodejs.org, bla til nedlasting / utgivelse / siste-v5.x.0 / katalog, og se hva koblingen for den nyeste versjonen er. Du leter etter linux-armv7l for Raspberry Pi 2, eller linuxarmv6l for de originale RPi-modellene. Deretter justerer du nettadressene og katalognavnene etter behov, last ned og installer ved hjelp av følgende kommandoer.
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
Bekreft ved å skrive
node-versjon
Og du bør se v5.5 (eller hva det siste var det du lastet ned).
Deretter har vi noen Node-moduler å installere.
sudo npm installere -g npm sudo npm installere -g node-gyp
I den første kommandoen bruker vi faktisk Node Package Manager (npm) for å installere en nyere versjon av seg selv. Flink!
Nå, for å laste ned HomeKit-emulatoren kalt HAP-NodeJS:
git klone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm gjenoppbygge sudo npm installasjons node-vedvarende sudo npm installere srp
På dette tidspunktet kjørte jeg denne feilen: " #error Denne versjonen av node / NAN / V8 krever en C ++ 11 compiler ". Hvis det skjer med deg, installer du en nyere C ++-kompilator med kommandoene:
sudo apt-get install gcc-4.8 g ++ - 4, 8 sudo oppdateringsalternativer - installer / usr / bin / gccgcc / usr / bin / gcc-4.6 20 sudo oppdateringsalternativer - installer / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo oppdateringsalternativer - installer / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo oppdateringsalternativer --installere / usr / bin / g ++ g ++ / usr / bin / g ++ - 4, 8 50
Nå burde du ikke ha et problem. Fortsett å kjøre disse kommandoene, en etter en:
sudo npm installere srp sudo npm installere mdns --unsafe-perm sudo npm installere debug sudo npm installere ed25519 --unsafe-perm sudo npm installere curve25519 --unsafe-perm
Det burde være alt. Prøv å kjøre emulatoren med:
node Core.js
Hvis du får feil, sier det ikke, kan du ikke finne en slik og en slik modul, bare bruk kommandoen sudo npm installere igjen, og fest navnet på hvilken modul som manglet. Forutsatt at alt er bra, bør du se noen advarsler, og HomeKit-broen din kjører. Slik ser suksessen ut:
Du kan se umiddelbart at den allerede har opprettet et sett med 6 falske enheter. Vi bruker dem som utgangspunkt for vårt eget Wi-Fi-lys senere, men vi bruker bare de som skal testes. Du kan også se mer feilsøkingsinformasjon hvis du starter serveren med:
DEBUG = * nod Core.js
Gå nå over til en Apple-enhet som kan kjøre Siri. Apple gir nysgjerrig ikke en lager HomeKit app unntatt til registrerte utviklere, så last ned gratis Elgato Eve app, en HomeKit administrasjon app som lar deg legge til (ikke-Elgato) enheter til ditt HomeKit nettverk.
Første gang du starter appen, må du nevne ditt hjem, gå videre og gå gjennom det. Velg deretter "Legg til tilbehør". Ignorer meldingen om å være nær den!
Det forteller deg å se etter en unik "HomeKit Setup Code" neste. Ignorer det, og klikk "Legg til [navnet på ditt hjem]".
Det vil også fortelle deg at enheten ikke er sertifisert. Faktisk er det ikke. Fortsett uansett. Når du kommer til skjermen og spør etter en tilbehørskode ...
Velg å skrive inn koden manuelt, og skriv inn følgende:
031-45-154
Dette kan bli funnet / endret i Light_accessory.js- filen, men mer om det senere. Legg dette tilbehøret til standardrommet ditt, ring det falsk lys, og fortsett å gå gjennom dialogene for å velge ikon etc.
Til slutt hoppe du tilbake til SSH-sesjonen der du har HAP-NodeJS i gang. Du har kanskje allerede sett en melding som sier "Er vi på?" - det er Elgato app-avstemningen for lysstatusen. Åpne Siri og fortell henne å "Slå på falsk lys", og prøv å slå den av igjen. Forhåpentligvis ser du noen feilsøkingsmeldinger fra HAP-NodeJS for å vise at den mottok kommandoene.
Er vi på Nei. Slå på lyset! Slår av lyset!
Fantastisk, det er trinn en ferdig. Nå trenger vi et virkelig lys før vi kommer tilbake for å konfigurere broen igjen.
Bygger et Wi-Fi-lys
Hardware siden av dette trinnet er overraskende enkelt hvis vi starter med bare fire Neopixels, da vi kan drive dem direkte fra NodeMCU dev-kort og dets USB-tilkobling. Hvis du har en lengre stripe, ikke bekymre deg - vi har definert dette i programvare, slik at resten bare ikke vil slå på.
Koble den røde strømkabelen fra en Neopixel-streng til VIN-pin, blå bakke til GND, og den grønne signalkabelen til pinmerket D2 på NodeMCU. Vær veldig forsiktig med polariteten: Hvis du blander opp bakken og VIN, sender du en strømstyrke gjennom styret ditt, og ødelegger det i prosessen.
Hvis Arduino-miljøet ditt ennå ikke er opprettet for å jobbe med ESP8266, fortsett og følg veiledningen i min ESP8266: Arduino Killer Møt Arduino Killer: ESP8266 Møt Arduino Killer: ESP8266 Hva om jeg fortalte deg at det er en Arduino-kompatibel dev bord med innebygd Wi-Fi for mindre enn $ 10? Vel, det er det. Les mer guide og kom tilbake etter at du har bekreftet det som fungerer. Installer disse tilleggsbiblioteker:
- lmroy's PubSubClient
- Adafruit's NeoPixels
Koden vi bruker, er en modifisering av Github-bruker Aditya Tannu-s. Jeg har fjernet unødvendig oppdateringsfunksjonalitet i luften, lagt til i noen HSV-funksjoner som manglet, og gjorde det lettere å skape flere lys ved å bare endre en enkeltvariabel. Hvis du ikke kan se koden som er innebygd nedenfor, finner du den på denne Gist.
Oppdater følgende linjer med din egen nettverksinformasjon, og et unikt navn for hver fixtur du lager (vert).
const char * ssid = "...."; const char * password = "..."; const char * vert = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);
IP-adressen til denne fixturen blir automatisk oppnådd via DHCP - det spiller ingen rolle om det endres, siden vi kobler til samme MQTT-server hver gang.
For tiden bruker vi bare 4 Neopixels, men du kan øke nummeret senere hvis du driver dem fra en ekstern kilde. Last opp koden, og la oss teste - bruk din favoritt MQTT-klient til å sende kommandoer (juster vertsnavnet i følgende instruksjoner hvis du har endret det) .
- Du kan sende videre til rootoffelight- kanalen for å slå den på. Send annen verdi til den kanalen for å slå den av.
- Du kan sende et nummer fra 0-360 til offisielt lys / fargetone for å endre fargen. Vi bruker HSV-fargeplassen, så 0 og 360 er røde, 120 er grønne og 240 er blå.
- Du sender en prosentverdi for lysstyrke (0-100, ikke inkludert% symbolet).
- Samme for metning. En verdi på 100 vil være fullstendig mettet (dvs. en solid farge), og null vil være ren hvit, uavhengig av hvilken fargetone som er angitt.
Når du har bekreftet at MQTT-drevet belysningsarmaturen virker, fortsett.
Konfigurere et nytt HomeKit tilbehør
Bytt tilbake til Raspberry Pi og avslutt HAP-NodeJS-appen hvis du ikke allerede har det. Naviger til / tilbehørskatalogen . For å gjøre det enkelt, kan du direkte laste ned koden som allerede er blitt koblet til "officelight" -festet ved å skrive inn følgende:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
I hovedsak er dette et duplikat av standardlystilbehøret, med noen variable navn endret (igjen, tilpasset Adysans arbeid, forenklet for enkel bruk). Her er det du bør vite for å lage ditt eget tilpassede tilbehør basert på dette.
- Alt tilbehør må være navngitt * _accessory.js
- Endre IP-adressen i alternativvariabelen øverst til MQTT-serveren din
- Hvis du har et annet fixturnavn, søk / erstatt alle forekomster av " offelight " med ditt unike fixturnavn . Du kan gjøre et søk / erstatt i Nano ved å trykke CTRL og \, skrive inn termen for å finne, termen som skal erstattes, og deretter A (som betyr alle forekomster). Gå gjennom hver av disse for å lære nøyaktig hvilke variabler som oppdateres.
- Opprett et unikt heksadesimale brukernavn for tilleggsutstyret ( light.username = "1B: 2B: 3C: 5D: 6E: FF"; )
- Ikke endre PIN-koden. Det følger et bestemt format, og med mindre du vet hva du gjør, vil den ikke kunne parre. Det er ikke noe problem med å holde dem like mellom lysene.
- Du kan gi din armatur et annet "Siri-navn" når du legger dem til Elgato Eve-appen, og rediger dem når som helst slik at du ikke står fast med ditt første valg. Det er ikke nødvendig å redigere konfigurasjonsfilene eller starte serveren på nytt.
- Når du har flere armaturer, kan du bruke Elgato Eve-appen til å gruppere dem etter rom, eller for å lage bestemte scener som består av flere komplekse handlinger. Scener kan bestå av flere handlinger, for eksempel: Slå på kontorlyset, dim det til 25%, gjør det rødt og aktiver kaffemaskinen.
Du må legge til ditt nye tilbehør gjennom din HomeKit-app på nytt igjen.
Til slutt vil vi kjøre vår HAP-NodeJS app når Pi er startet på nytt. Legg til følgende i din etc / rc.local- fil, rett før utgangen 0 .
sudo node /home/pi/HAP-NodeJS/Core.js </ dev / null &
Du kan se at jeg har kombinert dette med noen andre kommandoer som jeg allerede har satt til å starte ved oppstart.
Hvis dette er første gang du bruker rc.local, må du kanskje sette den som kjørbar:
sudo chmod 755 /etc/rc.local
Hvis du av en eller annen grunn trenger å kjøre den i feilsøkingsmodus igjen, kan du drepe den kjørende Node-appen med:
killall node
Ett siste trinn: Gå til tilbehørskatalogen, og slett GarageDoorOpener_accessory.js . På tidspunktet for skriving er dette buggy, og vil føre til at serveren bryter etter en stund.
Hva vil du kontrollere med Siri?
Nå som du har grunnleggende ned, er det virkelig ingen grense for hva du kan kontrollere - hvis du kan kode det i Javascript, kan du lage din egen tilbehørsfil. Det er så mye potensial her, jeg tror du skal ha det gøy. Gi meg beskjed i kommentarene hva du kommer med!