Sådan fremstilles en DIY Siri-kontrolleret Wi-Fi-lys

  • Joseph Goodman
  • 0
  • 2062
  • 162
Reklame

HomeKit er endelig ude i naturen, hvilket muliggør stemmestyring gennem Siri til 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 på almindeligt engelsk kan du nu oprette “falsk” HomeKit-enheder, og Siri vil kontrollere dem ligesom ethvert andet officielt 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:

  • Raspberry 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 Mosquitto på din Pi” i min OpenHAB Guide del 2 OpenHAB Beginners vejledning Del 2: ZWave, MQTT, regler og kortlægning OpenHAB Beginners vejledning Del 2: ZWave, MQTT, regler og kortlægning OpenHAB, open source-hjemmeautomatiseringssoftwaren, overstiger langt mulighederne i andre hjemmeautomatiseringssystemer på markedet - men det er ikke let at blive opsat. Faktisk kan det være direkte frustrerende. . 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 faktisk dette på min eksisterende hjemmeserver, der kører OpenHAB - Jeg håber at forbinde de to på et senere tidspunkt, men ved nu, at de kan eksistere på samme Raspberry Pi. Hvis du gør det samme, bare i tilfælde af, oprette en klone-sikkerhedskopi af dit nuværende Pi SD-kort Klon let dit SD-kort til problemfri Raspberry Pi-computing Let klon dit SD-kort til problemfri Raspberry Pi-computing Uanset om du har et SD-kort eller flere, en ting, du har brug for, er muligheden for at tage backup af dine kort for at undgå de problemer, der opstår, når din Raspberry Pi ikke starter. . Hvis alt går galt, kan du gendanne til det.

Begynd med at udføre en komplet opgradering fra terminalen eller en SSH-session Opsætning af 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 den er forbundet til et lokalt netværk (enten af ​​Ethernet eller Wi-Fi), så du nemt kan konfigurere det. Fordelene ved SSH går ud over at forstyrre den daglige screening ... .

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, 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 node-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 installation -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!

For at downloade HomeKit-emulatoren kaldet HAP-NodeJS:

git klon https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm genopbygge sudo npm installere node-vedvarende sudo npm install 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 ++ -kompiler 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-opdateringsalternativer - install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo-opdatering-alternativer - install / 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 installere srp sudo npm installere mdns --unsafe-perm sudo npm installere debug sudo npm installere ed25519 --unsafe-perm sudo npm installere kurve25519 --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:

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!

Det fortæller dig, at du kigger efter et unikt “HomeKit-opsætningskode” Næste. Ignorer det, og slå “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 ...

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 om det “Tænd for falsk lys”, prøv derefter at slukke den igen. Forhåbentlig kan du se 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 arbejde med ESP8266, skal du gå videre og følge guiden 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 for mindre end $ 10? Det er der godt. guide så kom tilbage, når 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 koden indlejret nedenfor, finder du den ved denne Gist.

Opdater følgende linjer med dine egne netværksoplysninger og et unikt navn for hver fixtur, 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-farverummet, 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, inkluder ikke% -symbolet).
  • Samme for mætning. En værdi på 100 vil være fuldstændigt mættet (dvs. en ensfarvet farve), 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 afslut HAP-NodeJS-appen, hvis du ikke allerede har gjort det. Naviger til /tilbehør vejviser. For at gøre dette nemt kan du direkte downloade kode, der allerede er parret til “officelight” armatur 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 brugerdefinerede 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 armaturnavn. Du kan foretage en søgning / erstatte i Nano ved at trykke på CTRL og \, at skrive ordet for at finde, udtrykket, der skal erstattes, og derefter trykke 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.usname = “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 en anden “Siri navn” når du føjer dem til Elgato Eve-appen, og rediger dem når som helst, så du ikke sidder fast med dit oprindelige valg. Der er ikke behov for 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, såsom: 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.

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 meget sjovt. Fortæl mig i kommentarerne, hvad du kommer på!




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.