Reklame

HomeKit er endelig ude i naturen, hvilket muliggør stemmestyring gennem Siri for en håndfuld forbrugersmart hjemmeenheder.

Desværre mener jeg en bogstavelig håndfuld - alt hvad du allerede har købt er sandsynligvis ikke kompatibelt. Imidlertid er protokollen allerede omvendt konstrueret, og en open source-emulator til HomeKit API er tilgængelig: eller i almindeligt engelsk, du kan nu oprette "falske" HomeKit-enheder, og Siri vil kontrollere dem ligesom enhver anden officiel 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 har brug for:

  • Hindbær Pi (Jeg har brugt en RPi2, der er en lille forskel i Node-versioner til at installere i betragtning af den opgraderede ARM-arkitektur - se noter senere).
  • En MQTT-mægler installeret på Raspberry Pi. Se afsnittet “Installer myg på din Pi” i min OpenHAB Guide del 2 OpenHAB Begyndervejledning Del 2: ZWave, MQTT, regler og kortlægningOpenHAB, open source-hjemmeautomatiseringssoftwaren, overstiger langt muligheden for andre hjemmeautomatiseringssystemer på markedet - men det er ikke let at få opsat. Faktisk kan det være direkte frustrerende.
    instagram viewer
    Læs mere
    . Det behøver ikke installeres specifikt på Pi - du kan endda bruge en skybaseret MQTT-server, men da vi alligevel har brug for en Pi til denne tutorial, er det 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 vil installere et NodeJS-program kaldet HAP-NodeJS til Raspberry Pi: dette vil danne en bro mellem HomeKit-anmodninger og Wi-Fi-enheder. Vi konfigurerer denne bro med ét tilbehør indtil videre, men du kan tilføje så mange, som du vil.

Jeg installerer dette faktisk på min eksisterende hjemmeserver, der kører OpenHAB - Jeg håber at forbinde de to på en senere dato, men ved nu, at de kan eksistere på samme Raspberry Pi. Hvis du gør det samme, bare ind sag, Lav en klone-sikkerhedskopi af dit nuværende Pi SD-kort Klon let dit SD-kort til problemfri Raspberry Pi-computingUanset om du har et SD-kort eller flere, er en ting, du har brug for, muligheden for at tage backup af 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.

Begynd med at udføre en fuld opgradering fra terminalen eller en SSH-session Opsætning af din hindbærpi til hovedløs brug sammen med SSHRaspberry 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 det. Fordelene ved SSH går ud over at forstyrre den daglige screening ... Læs mere .

sudo apt-get-opdatering. sudo apt-get-opgradering. 

Du skal muligvis gøre det to gange, hvis det har været et stykke tid.

Installer nu et par kernepakker, som vi har brug for:

sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev. 

Dernæst installerer vi den nyeste version af NodeJS. Du kan blive fristet til at gøre dette med apt-get, men ikke - den version er virkelig gammel nu og fungerer ikke. Besøg i stedet nodejs.org, gennemsøg download / release / nyeste-v5.x.0 / katalog, og kontroller, hvad linket til den nyeste version er. Du leder efter linux-armv7l til Raspberry Pi 2 eller linuxarmv6l til de originale RPi-modeller. Juster derefter URL'erne og katalognavne efter behov og 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-knude-v5.5.0-linux-armv7l.tar.gz. cd-knude-v5.5.0-linux-armv7l. sudo cp -R * / usr / local. 

Bekræft ved at skrive

node version. 

Og du skulle se v5.5 (eller hvad det seneste var, som du downloadede).

Dernæst har vi nogle nodemoduler, der skal installeres.

sudo npm installation -g npm. sudo npm installere -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 den kaldte HomeKit-emulator HAP-NodeJS:

git klon https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm genopbygning. sudo npm installere node-vedvarende. sudo npm installer srp. 

På dette tidspunkt kørte jeg denne fejl:#error Denne version af node / NAN / v8 kræver en C ++ 11-kompilator“. Hvis det sker med dig, skal du installere en nyere C ++ compiler med kommandoerne:

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-opdateringsalternativer - installer / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Nu skulle du ikke have et problem. Fortsæt med at køre disse kommandoer, en efter en:

sudo npm installer srp. sudo npm install mdns --unsafe-perm. sudo npm installation debug. sudo npm installere ed25519 --unsafe-perm. sudo npm installere curve25519 --unsafe-perm. 

Det burde være alt. Prøv at køre emulatoren med:

node Core.js. 

Hvis du får fejl med at sige, at det ikke kan finde et sådant og sådan modul, skal du bare bruge sudo npm installation kommandoen igen, og anbring navnet på det modul, der manglede. Hvis man antager, at alt er godt, skal du se et par advarsler, og din HomeKit-bro kører. Sådan ser succes ud:

hap-nodejs installeret

Du kan straks se, at det allerede er oprettet et sæt med 6 falske enheder. Vi bruger dem som udgangspunkt for vores eget Wi-Fi-lys senere, men vi vil bare bruge dem til nu til at teste. Du kan også se flere fejlfindingsoplysninger, hvis du starter serveren med:

DEBUG = * node Core.js

Spring nu over til en Apple-enhed, der er i stand til at køre Siri. Apple leverer underligt ikke en lager HomeKit-app undtagen til registrerede udviklere, så download den gratis Elgato Eve-app, en HomeKit-administrationsapp, der giver dig mulighed for at tilføje (endda ikke-Elgato) enheder til dit HomeKit-netværk.

Første gang du starter appen, skal du navngive dit hjem, gå videre og gå igennem det. Vælg derefter "Tilføj tilbehør". Ignorer beskeden om at være tæt på den!

elgato-aften 1

Den fortæller dig, at du skal kigge efter en unik "HomeKit-opsætningskode" næste. Ignorer det, og tryk på "Føj til [navnet på dit hjem]".

Det fortæller dig også, at enheden ikke er certificeret. Det er det faktisk ikke. Gå alligevel videre. Når du kommer til skærmen og beder om en tilbehørskode ...

elgato-aften 2

Vælg at indtaste koden manuelt, og skriv følgende:

031-45-154

Dette kan findes / ændres i Light_accessory.js fil, men mere om det senere. Føj dette tilbehør til dit standardværelse, kald det Falske lys, og fortsæt med at gå gennem dialogerne for at vælge ikon osv.

Endelig, hopp tilbage til SSH-sessionen, hvor du har HAP-NodeJS, der kører. Du har muligvis allerede set en meddelelse, der siger "Er vi på?" - det er Elgato-appen, der poller for lysstatus. Åbn Siri og fortæl hende: "Tænd for falsk lys", og prøv derefter at slukke det igen. Forhåbentlig ser du nogle fejlfindingsmeddelelser fra HAP-NodeJS for at vise, at de har modtaget kommandoerne.

Er vi på? Nej. Tænd for lyset! Sluk for lyset!

Fantastisk, det er trin et afsluttet. Nu har vi brug for et faktisk lys, før vi vender tilbage til at konfigurere broen igen.

Bygning af et Wi-Fi-lys

Hardwaresiden af ​​dette trin er overraskende enkel, hvis vi starter med kun fire Neopixels, da vi kan tænde dem direkte fra NodeMCU dev-kortet og dets USB-forbindelse. Hvis du har en længere strip, skal du ikke bekymre dig - vi har defineret dette i software, så resten bare ikke tændes.

Tilslut det røde strømkabel fra en Neopixel-streng til VIN-stiften, blå jord til GND, og ​​det grønne signalkabel til stiften markeret D2 på NodeMCU. Vær meget forsigtig med polaritet: Hvis du blander jorden og VIN, sender du en kraftig bølge gennem dit bord og ødelægger det i processen.

Hvis dit Arduino-miljø endnu ikke er konfigureret til at fungere med ESP8266, skal du gå videre og følg vejledningen i min ESP8266: Arduino Killer Mød Arduino Killer: ESP8266Hvad hvis jeg fortalte dig, at der er et Arduino-kompatibelt dev-kort med indbygget Wi-Fi for mindre end $ 10? Det er der. Læs mere guiden kommer derefter tilbage, efter at du har bekræftet, at det fungerer. Installer disse ekstra biblioteker:

  • lmroy's PubSubClient
  • Adafruits NeoPixels

Koden, vi bruger, er en ændring af Github-bruger Aditya Tannu's - Jeg har fjernet den unødvendige over-the-air-opdateringsfunktionalitet, tilføjet 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 den indlejrede kode nedenfor, finder du den på denne Gist.

Opdater følgende linjer med dine egne netværksoplysninger og et unikt navn for hver armatur, du opretter (vært).

const char * ssid = "..."; const char * password = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);

IP-adressen til denne fixture opnås automatisk via DHCP - det betyder ikke noget, om den ændres, da vi opretter forbindelse til den samme MQTT-server hver gang.

For tiden bruger vi kun 4 Neopixels, men du kan øge antallet senere, hvis du tænker 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 roden officelight kanal for at tænde den. Send enhver anden værdi til den kanal for at slå den fra.
  • Du kan sende et nummer fra 0-360 til officielys / farvetone for at ændre farven. Vi bruger HSV farverum, så 0 og 360 er røde, 120 er grønne og 240 er blå.
  • Du sender en procentvis værdi for lysstyrke (0-100, inkluderer ikke% -symbolet).
  • Samme for mætning. En værdi på 100 vil være fuldt mættet (dvs. en ensfarvet), og nul vil være ren hvid, uanset den angivne farvetone.

Når du har bekræftet, at din MQTT-drevet lysarmatur fungerer, skal du gå videre.

Konfiguration af et nyt HomeKit-tilbehør

Skift tilbage til Raspberry Pi, og afslutt HAP-NodeJS-appen, hvis du ikke allerede har gjort det. Naviger til /accessories vejviser. For at gøre det nemt kan du direkte downloade kode, der allerede er parret til "officelight" -figuren ved at indtaste følgende:

wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js

I det væsentlige er dette en duplikat af standardtilbehøret til lyset, med nogle variabelnavne ændret (igen tilpasset fra Adysans arbejde, forenklet for brugervenligheden). Her er hvad du skal vide for at oprette dit eget tilpassede tilbehør baseret på dette.

  • Alt tilbehør skal navngives *_accessory.js
  • Skift IP-adresse i indstillingsvariablen øverst til din MQTT-server
  • Hvis du har et andet fixturnavn, skal du søge / udskifte alle forekomster af "officelight”Med dit unikke inventarnavn. Du kan foretage en søgning / erstatte i Nano ved at trykke på CTRL og \, indtastning af udtrykket for at finde, udtrykket, der skal erstattes, og tryk derefter på EN (hvilket betyder alle tilfælde). Gå gennem hver af disse for at lære præcist, hvilke variabler der opdateres.
  • Opret et unikt hexadecimalt brugernavn til tilbehøret (light.username = “1B: 2B: 3C: 5D: 6E: FF”;)
  • Skift ikke PIN-koden. Det følger et specifikt 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 lysene.
  • Du kan give din armatur et andet "Siri-navn", når du tilføjer dem til Elgato Eve-appen og redigere dem når som helst, så du ikke sidder fast med dit oprindelige valg. Det er ikke nødvendigt at redigere konfigurationsfilerne eller genstarte serveren.
  • Når du har fået flere inventar, kan du bruge appen Elgato Eve 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, f.eks.: tænd for kontorlyset, dæmp det til 25%, gør det rødt og aktiver kaffemaskinen.

Du bliver nødt til at tilføje dit nye tilbehør gennem din valgte HomeKit-app igen.

Endelig vil vi køre vores HAP-NodeJS-app, når Pi genstartes. Føj følgende til din etc / rc.local fil, lige før Afslut 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 indstillet til at starte på boot.

rclocal run node ved opstart

Hvis dette er første gang, du bruger rc.local, skal du muligvis indstille det til eksekverbar:

sudo chmod 755 /etc/rc.local

Hvis du af en eller anden grund har brug for at køre den i debugtilstand igen, kan du dræbe den kørende Node-app med:

killall-knude

Et sidste trin: navigere til tilbehørsmappen, og slet GarageDoorOpener_accessory.js. På dette tidspunkt er dette buggy og får serveren til at gå i stykker efter et stykke tid.

Hvad vil du styre med Siri?

Nu hvor du har fået det grundlæggende nede, er der virkelig ingen grænser for, hvad du kan kontrollere - hvis du kan kode det i Javascript, kan du oprette din egen tilbehørsfil. Der er så meget potentiale her, jeg tror, ​​du vil have det sjovt. Fortæl mig i kommentarerne, hvad du kommer på!

James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.