HomeKit er endelig ude i det vilde, hvilket gør det muligt at styre via Siri for en håndfuld forbruger smart home devices.
Desværre mener jeg en bogstavelig håndfuld - alt hvad du allerede har købt, er sandsynligvis ikke kompatibel. Protokollen er imidlertid allerede omvendt konstrueret, og en open source emulator til HomeKit API er tilgængelig: eller i ren engelsk kan du nu oprette "falske" HomeKit-enheder, og Siri vil styre dem som alle andre officielle HomeKit-tilbehør.
I dag skal vi oprette et Wi-Fi kontrollerbart lys og styre det med Siri. Her er en demo.
Her er hvad du skal bruge:
- Hindbær Pi (Jeg har brugt en RPi2, der er en lille forskel i Node versioner til at installere givet den opgraderede ARM arkitektur - se notater senere).
- En MQTT-mægler installeret på Raspberry Pi. Se afsnittet "Installer Mosquitto på din Pi" i min OpenHAB Guide del 2 OpenHAB Begyndervejledning Del 2: ZWave, MQTT, Regler og kortlægning OpenHAB Begyndervejledning Del 2: ZWave, MQTT, Regler og diagrammer OpenHAB, open source home automation software, langt overstiger kapaciteten i andre hjemmeautomatiseringssystemer på markedet - men det er ikke let at komme i gang. Faktisk kan det være retfærdigt frustrerende. Læs mere . Det behøver ikke installeres specifikt på Pi - du kan endda bruge en cloud-baseret MQTT-server, men da vi har brug for en Pi til denne vejledning, er det alligevel praktisk.
- NodeMCU v2 (Arduino kompatibel)
- Neopixel LED'er (jeg vil anbefale 4 pixels til test, så kan du tilføje en ekstern strømforsyning og tilføje så mange som du vil)
Installation af HomeKit Bridge
Vi skal installere en NodeJS-applikation kaldet HAP-NodeJS til Raspberry Pi: Dette vil danne en bro mellem HomeKit-anmodninger og Wi-Fi-enhederne. Vi konfigurerer denne bro med et tilbehør til nu, men du kan tilføje så mange som du vil.
Jeg installerer faktisk dette på min eksisterende hjemmeserver, der kører OpenHAB - Jeg håber at forbinde de to sammen på et senere tidspunkt, men nu ved jeg, at de kan eksistere på samme Raspberry Pi. Hvis du gør det samme, skal du bare lave en klon sikkerhedskopiering af dit nuværende Pi SD-kort. Klon dit SD-kort til problemfri, hindbær-Pi-computeren. Klon dit SD-kort til problemfri, hindbær-Pi-computeren. Uanset om du har en SD-kort eller flere, en ting du har brug for er evnen til at sikkerhedskopiere dine kort for at undgå de problemer, der opstår, når din Raspberry Pi ikke starter. Læs mere . Hvis alt går galt, kan du gendanne det.
Start med at gøre en fuld opgradering fra Terminal eller en SSH-session. Indstil din Raspberry Pi til hovedløs brug med SSH. Opsætning af din Raspberry Pi til hovedløs brug med SSH. Raspberry Pi kan acceptere SSH-kommandoer, når de er tilsluttet et lokalt netværk (enten via Ethernet eller Wi-Fi), så du nemt kan konfigurere den. Fordelene ved SSH går ud over at forstyrre den daglige screening ... Læs mere.
sudo apt-get opdatering sudo apt-get opgradering
Det kan være nødvendigt at gøre dem to gange, hvis det har været et stykke tid.
Installer nu nogle kernepakker, vi skal bruge:
sudo apt-get install npm git-core libnss-mdns libavahi-kompatibel-libdnssd-dev
Dernæst vil vi installere den nyeste version af NodeJS. Du kan måske være fristet til at gøre dette med apt-get, men ikke - den version er virkelig gammel nu og vil ikke fungere. I stedet kan du besøge nodejs.org, browse til download / release / latest-v5.x.0 / biblioteket, og kontroller, hvad linket for den seneste version er. Du leder efter linux-armv7l til Raspberry Pi 2, eller linuxarmv6l til de originale RPi-modeller. Derefter justeres webadresserne og katalognavne efter behov, download og installer ved hjælp af 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
Bekræft ved at skrive
node version
Og du skal se v5.5 (eller hvad det senest var, at du downloadede).
Dernæst har vi nogle Node-moduler til at installere.
sudo npm installer -g npm sudo npm installer -g node-gyp
I den første kommando bruger vi faktisk Node Package Manager (npm) til at installere en nyere version af sig selv. Dygtig!
Nu skal du downloade HomeKit emulatoren kaldet HAP-NodeJS:
git klon https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm genopbygge sudo npm installationsnode-vedvarende sudo npm installere srp
På dette tidspunkt kørte jeg denne fejl: " #error Denne version af node / NAN / v8 kræver en C ++ 11 compiler ". Hvis det sker for dig, skal du installere en nyere C ++ compiler med kommandoerne:
sudo apt-get install gcc-4.8 g ++ - 4, 8 sudo opdateringsalternativer - installer / usr / bin / gccgcc / usr / bin / gcc-4.6 20 sudo opdateringsalternativer --installér / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo opdateringsalternativer --installér / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo opdateringsalternativer --installér / usr / bin / g ++ g ++ / usr / bin / g ++ - 4, 8 50
Nu skal du ikke have et problem. Fortsæt med at køre disse kommandoer, en efter 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 alting. Prøv at køre emulatoren med:
node Core.js
Hvis du får fejl, der siger, at den ikke kan finde et sådant modul, skal du blot bruge kommandoen sudo npm installere igen og anbringe navnet på hvilket modul der manglede. Forudsat at alt er godt, skal du se nogle advarsler, og din HomeKit-bro kører. Sådan ser succes ud:
Du kan straks se, at det allerede har oprettet et sæt 6 falske enheder. Vi bruger dem som udgangspunkt for vores eget Wi-Fi-lys senere, men vi bruger kun dem til nu at teste. Du kan også se flere fejlretningsoplysninger, hvis du starter serveren med:
DEBUG = * node Core.js
Spring nu over til en Apple-enhed, der kan køre Siri. Apple tilbyder nysgerrigt ikke en lager HomeKit app undtagen til registrerede udviklere, så download den gratis Elgato Eve app, en HomeKit administrationsapp, som gør det muligt at tilføje (endda ikke-Elgato) enheder til dit HomeKit netværk.
Første gang du starter appen, skal du nævne dit hjem, gå videre og gå igennem det. Vælg derefter "Tilføj tilbehør". Ignorer meddelelsen om at være tæt på den!
Det vil fortælle dig at søge efter en unik "HomeKit Setup Code" næste. Ignorer det, og tryk "Tilføj til [navn på dit hjem]".
Det vil også fortælle dig, at enheden ikke er certificeret. Faktisk er det ikke. Fortsæt alligevel. Når du kommer til skærmen og beder om en tilbehørskode ...
Vælg at indtaste koden manuelt, og indtast følgende:
031-45-154
Dette kan findes / ændres i filen Light_accessory.js, men mere senere. Tilføj dette tilbehør til dit standardrum, kald det Falsk lys, og fortsæt med at gå gennem dialogerne for at vælge ikon mv.
Endelig spring tilbage til SSH-sessionen, hvor du har HAP-NodeJS kørende. Du har måske allerede set en besked med at sige "er vi på?" - det er Elgato app-afstemningen for lysstatus. Åbn Siri og fortæl hende, at "Tænd falsk lys", og prøv derefter at slukke det igen. Forhåbentlig vil du se nogle fejlfejlmeddelelser fra HAP-NodeJS for at vise, at den har modtaget kommandoerne.
Er vi på Nej. Tænd lyset! Sluk lyset!
Fantastisk, det er trin et færdigt. Nu skal vi have et rigtigt lys, før vi kommer tilbage til at konfigurere broen igen.
Opbygning af et Wi-Fi-lys
Hardware side af dette trin er overraskende simpelt, hvis vi starter med kun fire Neopixels, da vi kan drive dem direkte fra NodeMCU dev board og dets USB-forbindelse. Hvis du har en længere strimmel, skal du ikke bekymre dig - vi har defineret dette i software, så resten vil bare ikke tænde.
Tilslut det røde strømkabel fra en Neopixel-streng til VIN-stiften, den blå jord til GND og det grønne signalkabel til stiften mærket D2 på NodeMCU. Vær meget forsigtig med polariteten: Hvis du blander jorden og VIN, sender du en strømstyrke gennem dit bord og ødelægger den i processen.
Hvis din Arduino-miljø endnu ikke er konfigureret til at fungere sammen med ESP8266, følg vejledningen i min ESP8266: Arduino Killer Mød Arduino Killer: ESP8266 Mød Arduino Killer: ESP8266 Hvad hvis jeg fortalte dig, at der er en Arduino-kompatibel dev bord med indbygget Wi-Fi til mindre end $ 10? Nå er der. Læs mere vejledning, kom så tilbage, efter at du har bekræftet, at det virker. Installer disse ekstra biblioteker:
- lmroy's PubSubClient
- Adafruit's NeoPixels
Koden, vi bruger, er en ændring af Github-bruger Aditya Tannu's - jeg har fjernet den unødvendige opdateringsfunktionalitet i luften, tilføjet i nogle HSV-funktioner, der manglede, og gjort det lettere at oprette flere lys ved kun at ændre en enkelt variabel. Hvis du ikke kan se koden indlejret nedenfor, finder du den på denne Gist.
Opdater følgende linjer med dine egne netværksoplysninger og et unikt navn for hver fixture, du opretter (vært).
const char * ssid = "...."; const char * password = "..."; const char * vært = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);
IP-adressen på denne armatur hentes automatisk via DHCP - det er ligegyldigt, om det ændres, da vi til enhver tid forbinder til den samme MQTT-server.
For tiden bruger vi kun 4 Neopixels, men du kan øge nummeret senere, hvis du styrer dem fra en ekstern kilde. Upload koden, og lad os teste - brug din foretrukne MQTT-klient til at sende kommandoer (juster værtsnavnet i følgende instruktioner, hvis du har ændret det) .
- Du kan sende til root officelight- kanalen for at tænde den. Send en anden værdi til den pågældende kanal for at slukke den.
- Du kan sende et nummer fra 0-360 til officellys / nuance for at ændre farven. Vi bruger HSV-farverummet, så 0 og 360 er røde, 120 er grønne og 240 er blå.
- Du sender en procentværdi for lysstyrke (0-100, ikke inkluderet% symbolet).
- Samme til mætning. En værdi på 100 vil være fuldt mættet (dvs. en solid farve), og nul vil være ren hvid, uanset det angivne farvetone.
Når du har bekræftet, at din MQTT-drevne belysningsarmatur virker, skal du fortsætte.
Konfiguration af et nyt HomeKit tilbehør
Skift tilbage til Raspberry Pi og afslut HAP-NodeJS appen, hvis du ikke allerede har det. Naviger til mappen / tilbehør . For at gøre det nemt kan du direkte downloade kode, der allerede er parret til "officelight" -indretningen ved at indtaste følgende:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
I det væsentlige er dette et duplikat af standardlystilbehøret, med nogle variable navne ændret (igen tilpasset Adysans arbejde, forenklet for brugervenlighed). Her er hvad du bør vide for at lave dit eget brugerdefinerede tilbehør baseret på dette.
- Alt tilbehør skal være navngivet * _accessory.js
- Skift IP-adressen i indstillingsvariablen øverst til din MQTT-server
- Hvis du har et andet fixturnavn, søg / erstat alle tilfælde af " officelight " med dit unikke fixturnavn. Du kan gøre en søgning / erstat i Nano ved at trykke på CTRL og \, skrive termen for at finde, udtrykket skal erstattes, og derefter trykke A (betyder alle forekomster). Gå gennem hver af disse for at lære præcist hvilke variabler der opdateres.
- Opret et unikt hexadecimalt brugernavn for tilbehøret ( light.username = "1B: 2B: 3C: 5D: 6E: FF"; )
- Du må ikke ændre PIN-koden. Det følger et bestemt format, og medmindre du ved hvad du laver, vil det ikke være i stand til at parre. Der er ikke noget problem med at holde dem ens mellem lys.
- Du kan give din armatur et andet "Siri-navn", når du tilføjer dem til Elgato Eve-appen, og rediger dem til enhver tid, så du ikke sidder fast med dit første valg. Der er ingen grund til at redigere konfigurationsfilerne eller genstarte serveren.
- Når du har flere armaturer, kan du bruge Elgato Eve-appen til at gruppere dem efter værelse eller til at oprette specifikke scener, der består af flere komplekse handlinger. Scener kan bestå af flere handlinger, såsom: Tænd for kontorlyset, reduc det til 25%, gør det rødt og aktiver kaffemaskinen.
Du skal tilføje dit nye tilbehør via din HomeKit-app igen.
Endelig vil vi køre vores HAP-NodeJS app, når Pi genstartes. Tilføj følgende til din etc / rc.local- fil lige før exit 0 .
sudo node /home/pi/HAP-NodeJS/Core.js </ dev / null &
Du kan se, at jeg har kombineret dette med nogle andre kommandoer, jeg allerede har sat til at starte ved opstart.
Hvis dette er første gang, du bruger rc.local, skal du muligvis indstille den som eksekverbar:
sudo chmod 755 /etc/rc.local
Hvis du af en eller anden grund har brug for at køre den i fejlsøgningstilstand igen, kan du dræbe den løbende Node-app med:
killall knudepunkt
Et sidste trin: Gå til tilbehørskataloget, og slet GarageDoorOpener_accessory.js . På tidspunktet for skrivningen er dette buggy, og det vil få serveren til at bryde efter et stykke tid.
Hvad vil du kontrollere med Siri?
Nu hvor du har det grundlæggende, er der virkelig ingen grænse for hvad du kan styre - hvis du kan kode det i Javascript, kan du lave din egen tilbehørsfil. Der er så meget potentiale her, jeg tror, du skal have det sjovt. Lad mig vide i kommentarerne, hvad du kommer med!