Annonse
HomeKit er endelig ute i naturen, og muliggjør stemmekontroll gjennom Siri for en håndfull forbruker-smarte hjemme-enheter.
Dessverre mener jeg en bokstavelig håndfull - alt du allerede har kjøpt, er sannsynligvis ikke kompatibelt. Imidlertid er protokollen allerede omvendt konstruert og en open source-emulator for HomeKit API er tilgjengelig: eller i på vanlig engelsk, kan du nå lage "falske" HomeKit-enheter, og Siri vil kontrollere dem akkurat som alle andre offisielle HomeKit-enheter tilbehør.
I dag skal vi lage et Wi-Fi-kontrollerbart lys, og kontrollere det med Siri. Her er en demonstrasjon.
Dette er hva du trenger:
- Bringebær 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 mygg på din Pi” i min OpenHAB Guide del 2 OpenHAB Begynnerveiledning Del 2: ZWave, MQTT, regler og kartleggingOpenHAB, open source-hjemmeautomatiseringsprogramvaren, overskrider langt mulighetene til andre hjemme-automatiseringssystemer på markedet - men det er ikke lett å få satt opp. Faktisk kan det være direkte frustrerende. Les mer . Den trenger ikke å installeres spesifikt på Pi - du kan til og med bruke en skybasert MQTT-server, men siden vi uansett trenger en Pi for denne opplæringen, er det praktisk.
- NodeMCU v2 (Arduino-kompatibel)
- Neopixel-lysdioder (jeg vil anbefale 4 piksler for testing, så kan du legge til en ekstern strømforsyning og legge til så mange du vil)
Installere HomeKit Bridge
Vi kommer til å installere et NodeJS-program som heter 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 foreløpig, men du kan legge til så mange du vil.
Jeg installerer dette faktisk på min eksisterende hjemmeserver som kjører OpenHAB - jeg håper å koble de to på en senere dato, men foreløpig, vet at de kan eksistere på samme Raspberry Pi. Hvis du gjør det samme, bare inn sak, lage en klone-sikkerhetskopi av ditt nåværende Pi SD-kort Klon enkelt SD-kortet ditt for problemfri Raspberry Pi-databehandlingEnten du har ett SD-kort eller flere, en ting du trenger er muligheten til å sikkerhetskopiere kortene dine for å unngå problemer som oppstår når Raspberry Pi ikke klarer å starte opp. Les mer . Hvis alt går galt, kan du gjenopprette det.
Begynn med å fullføre oppgraderingen fra terminalen eller en SSH-økt Sette opp bringebærpien din for hodeløs bruk med SSHRaspberry Pi kan godta SSH-kommandoer når de er koblet til et lokalt nettverk (enten med Ethernet eller Wi-Fi), slik at du enkelt kan konfigurere den. Fordelene med SSH går ut over å 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 gått en stund.
Installer nå noen få kjerne pakker vi kommer til å trenge:
sudo apt-get install npm git-core libnss-mdns libavahi-compat-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. Besøk i stedet nodejs.org, bla til nedlasting / release / nyeste v5.x.0 / katalog, og sjekk hva lenken for den nyeste versjonen er. Du ser etter linux-armv7l til Raspberry Pi 2, eller linuxarmv6l for de originale RPi-modellene. Deretter justerer du URL-er og katalognavn etter behov, last ned og installer ved å bruke 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 skulle se v5.5 (eller hva det siste var at du lastet ned).
Deretter har vi noen Node-moduler å installere.
sudo npm installere -g npm. sudo npm installer -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 som heter HAP-NodeJS:
git klon https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm ombygging. sudo npm installer node-vedvarer. sudo npm installer srp.
På dette tidspunktet kjørte jeg denne feilen: “#error Denne versjonen av node / NAN / v8 krever en C ++ 11-kompilator“. Hvis det skjer med deg, installerer du en nyere C ++ -kompilator med kommandoene:
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.
Nå skal du ikke ha noe problem. Fortsett å kjøre disse kommandoene, en etter en:
sudo npm installer srp. sudo npm install mdns --unsafe-perm. sudo npm installere feilsøking. sudo npm installere ed25519 --unsafe-perm. sudo npm installere curve25519 --unsafe-perm.
Det skal være alt. Prøv å kjøre emulatoren med:
node Core.js.
Hvis du får feil med å si at den ikke kan finne en slik og slik modul, bare bruk sudo npm installere kommandoen igjen, og fest navnet på den modulen som manglet. Forutsatt at alt er bra, bør du se noen advarsler, og HomeKit-broen kjører. Slik ser suksess ut:
Du kan se umiddelbart at det allerede er laget et sett med 6 falske enheter. Vi bruker disse som utgangspunkt for vårt eget Wi-Fi-lys senere, men vi bruker bare de for nå til å teste. Du kan også se mer feilsøkingsinformasjon hvis du starter serveren med:
DEBUG = * node Core.js
Hopp nå over til en Apple-enhet som kan kjøre Siri. Apple tilbyr nysgjerrig ikke en aksje-HomeKit-app, bortsett fra til registrerte utviklere, så last ned gratis Elgato Eve-appen, en HomeKit-administrasjonsapp som lar deg legge til (til og med ikke-Elgato) enheter til HomeKit-nettverket.
Første gang du lanserer appen, må du navngi hjemmet ditt, gå videre og gå gjennom den. Velg deretter "Legg til tilbehør". Ignorer meldingen om å være i nærheten!
Den vil fortelle deg å se etter en unik "HomeKit Setup Code" neste. Ignorer det, og trykk “Legg til [navnet på hjemmet]”.
Det vil også fortelle deg at enheten ikke er sertifisert. Det er den faktisk ikke. Fortsett uansett. Når du kommer til skjermen og ber om tilbehørskode ...
Velg å oppgi koden manuelt, og skriv inn følgende:
031-45-154
Dette kan bli funnet / endret i Light_accessory.js fil, men mer om det senere. Legg dette tilbehøret til standardrommet ditt, kall det Fake Light, og fortsett å gå gjennom dialogene for å velge ikon osv.
Til slutt, hopp tilbake til SSH-økten der du har HAP-NodeJS. Du har kanskje allerede sett en melding som sier "Er vi på?" - det er Elgato-appen som poller for lysstatus. Åpne Siri og si til henne: "Slå på falskt lys", og prøv å slå det av igjen. Forhåpentligvis ser du noen feilsøkingsmeldinger fra HAP-NodeJS for å vise at de mottok kommandoene.
Er vi på? Nei. Slå på lyset! Slå lyset av!
Fantastisk, det er trinn en ferdig. Nå trenger vi et faktisk lys, før vi kommer tilbake for å konfigurere broen igjen.
Bygge et Wi-Fi-lys
Maskinvaresiden av dette trinnet er overraskende enkelt hvis vi starter med bare fire Neopixels, da vi kan få strøm direkte fra NodeMCU dev-kortet og USB-tilkoblingen. Hvis du har en lengre stripe, ikke bekymre deg - vi har definert dette i programvare, så resten slår ikke på.
Koble den røde strømkabelen fra en Neopixel-streng til VIN-pinnen, blå bakken til GND, og den grønne signalkabelen til pinnen merket D2 på NodeMCU. Vær veldig forsiktig med polaritet: hvis du blander bakken og VIN, vil du sende en kraftig bølge gjennom brettet ditt og ødelegge det i prosessen.
Hvis Arduino-miljøet ditt ennå ikke er konfigurert til å fungere med ESP8266, kan du fortsette og følge guiden i min ESP8266: Arduino Killer Møt Arduino Killer: ESP8266Hva om jeg fortalte deg at det er et Arduino-kompatibelt dev-brett med innebygd Wi-Fi for under 10 dollar? Det er det. Les mer guide så kom tilbake etter at du har bekreftet at det fungerer. Installer disse ekstra bibliotekene:
- lmroy's PubSubClient
- Adafruits NeoPixels
Koden vi bruker er en modifisering av Github-bruker Aditya Tannu's - Jeg har fjernet den unødvendige over-the-air-oppdateringsfunksjonaliteten, lagt til noen HSV-funksjoner som manglet, og gjort det lettere å lage flere lys ved bare å endre en enkelt variabel. 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 armatur du oppretter (vert).
const char * ssid = "..."; const char * password = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);
IP-adressen til denne armaturen blir automatisk oppnådd gjennom DHCP - det spiller ingen rolle om den endres, siden vi kobler til den samme MQTT-serveren hver gang.
Foreløpig bruker vi bare 4 Neopixels, men du kan øke antallet senere hvis du strømmer 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 på til roten officelight kanal for å slå den på. Send hvilken som helst annen verdi til den kanalen for å slå den av.
- Du kan sende et nummer fra 0-360 til offisielt lys / fargetone for å endre farge. Vi bruker HSV fargerom, så 0 og 360 er røde, 120 er grønne og 240 er blå.
- Du sender en prosentverdi for lysstyrke (0-100, inkluderer ikke% -symbolet).
- Samme for metning. En verdi på 100 vil være fullmettet (dvs. en ensfarget farge), og null vil være rent hvitt, uavhengig av fargetone som er angitt.
Når du har bekreftet at din MQTT-drevne lysarmatur fungerer, kan du gå videre.
Konfigurere et nytt HomeKit-tilbehør
Bytt tilbake til Raspberry Pi og avslutt HAP-NodeJS-appen hvis du ikke allerede har gjort det. Naviger til /accessories katalogen. For å gjøre dette enkelt, kan du direkte laste ned kode som allerede er koblet til "officelight" -armaturen ved å skrive inn følgende:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
I hovedsak er dette en duplikat av standardlysetilbehør, med endrede variabelnavn (igjen, tilpasset fra Adysans arbeid, forenklet for brukervennlighet). Dette er hva du bør vite for å lage dine egne tilpassede tilbehør basert på dette.
- Alt tilbehør må ha navnet *_accessory.js
- Endre IP-adressen i alternativvariabelen øverst til din MQTT-server
- Hvis du har et annet inventarnavn, kan du søke / erstatte alle forekomster av "officelight”Med ditt unike inventarnavn. Du kan gjøre et søk / erstatte i Nano ved å trykke på CTRL og \, skriv ordet for å finne, begrepet som skal erstattes, og trykk deretter EN (som betyr alle forekomster). Gå gjennom hver av disse for å lære nøyaktig hvilke variabler som oppdateres.
- Lag et unikt heksadesimal brukernavn for tilbehøret (lett.brukernavn = “1B: 2B: 3C: 5D: 6E: FF”;)
- Ikke endre PIN-koden. Det følger et spesifikt format, og med mindre du vet hva du gjør, vil det ikke være i stand til å koble seg sammen. Det er ikke noe problem å holde dem like mellom lysene.
- Du kan gi fixturen din et annet "Siri-navn" når du legger dem til Elgato Eve-appen, og redigerer dem når som helst, slik at du ikke sitter fast med det første valget. Det er ikke nødvendig å redigere konfigurasjonsfilene eller starte serveren på nytt.
- Når du har fått flere inventar, kan du bruke Elgato Eve-appen til å gruppere dem etter rom, eller for å lage spesifikke 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 det nye tilbehøret via den valgte HomeKit-appen.
Endelig ønsker vi å kjøre HAP-NodeJS-appen hver gang Pi startes på nytt. Legg til følgende i din etc / rc.local rett, rett før avkjørsel 0.
sudo node /home/pi/HAP-NodeJS/Core.js dev / null &
Du kan se at jeg har kombinert dette med noen andre kommandoer jeg allerede har satt for å starte på oppstart.
Hvis dette er første gang du bruker rc.local, kan det hende du må angi det som kjørbart:
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
Et siste trinn: naviger til tilbehørskatalogen, og slett GarageDoorOpener_accessory.js. I skrivende stund er dette feil, og vil føre til at serveren går i stykker etter en stund.
Hva vil du kontrollere med Siri?
Nå som du har fått det grunnleggende, 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 potensiale her, jeg tror du kommer til å ha det veldig gøy. Gi meg beskjed i kommentarene hva du kommer på!
James har en BSc i kunstig intelligens, og er CompTIA A + og Network + sertifisert. Han er hovedutvikler av MakeUseOf, og bruker fritiden sin på å spille VR paintball og brettspill. Han har bygd pc-er siden han var liten.