Advertentie

HomeKit is eindelijk in het wild, waardoor spraakbediening via Siri mogelijk is voor een handvol smart home-apparaten voor consumenten.

Helaas bedoel ik een letterlijk handjevol - alles wat je al hebt gekocht, is waarschijnlijk niet compatibel. Het protocol is echter al reverse-engineered en er is een open source-emulator voor de HomeKit API beschikbaar: of in gewoon Engels, je kunt nu "nep" HomeKit-apparaten maken, en Siri zal ze bedienen net als elke andere officiële HomeKit accessoire.

Vandaag gaan we een Wi-Fi-bestuurbare lamp maken en deze bedienen met Siri. Hier is een demo.

Dit heb je nodig:

  • Raspberry Pi (Ik heb een RPi2 gebruikt, er is een klein verschil in Node-versies om te installeren gezien de verbeterde ARM-architectuur - zie opmerkingen later).
  • Een MQTT-broker geïnstalleerd op de Raspberry Pi. Zie de sectie "Installeer Mosquitto op uw Pi" in mijn OpenHAB Guide deel 2 OpenHAB-beginnershandleiding deel 2: ZWave, MQTT, regels en grafiekenOpenHAB, de open source software voor huisautomatisering, overtreft ver de mogelijkheden van andere huisautomatiseringssystemen op de markt - maar het is niet eenvoudig om te installeren. Het kan zelfs ronduit frustrerend zijn.
    instagram viewer
    Lees verder
    . Het hoeft niet specifiek op de Pi te worden geïnstalleerd - je kunt zelfs een cloudgebaseerde MQTT-server gebruiken, maar aangezien we toch een Pi nodig hebben voor deze tutorial, is het handig.
  • NodeMCU v2 (compatibel met Arduino)
  • Neopixel-leds (ik zou 4 pixels aanbevelen om te testen, dan kunt u een externe voeding toevoegen en er zoveel toevoegen als u wilt)

De HomeKit Bridge installeren

We gaan een NodeJS-applicatie genaamd genaamd installeren HAP-knooppuntJS naar de Raspberry Pi: dit zal een brug vormen tussen HomeKit-verzoeken en de Wi-Fi-apparaten. We configureren deze bridge voorlopig met één accessoire, maar je kunt er zoveel toevoegen als je wilt.

Ik installeer dit eigenlijk op mijn bestaande thuisserver met OpenHAB - ik hoop de twee met elkaar te verbinden op een latere datum, maar voor nu, weet dat ze naast elkaar kunnen bestaan ​​op dezelfde Raspberry Pi. Als je hetzelfde doet, gewoon binnen geval, maak een kloonback-up van uw huidige Pi SD-kaart Kloon eenvoudig uw SD-kaart voor probleemloze Raspberry Pi-computingOf je nu één SD-kaart of meerdere hebt, één ding dat je nodig hebt, is de mogelijkheid om een ​​back-up van je kaarten te maken om de problemen te voorkomen die optreden wanneer je Raspberry Pi niet opstart. Lees verder . Als alles fout gaat, kun je dat herstellen.

Begin met een volledige upgrade vanuit de Terminal of een SSH-sessie Uw Raspberry Pi instellen voor gebruik zonder hoofd met SSHDe Raspberry Pi kan SSH-opdrachten accepteren wanneer deze is verbonden met een lokaal netwerk (via Ethernet of Wi-Fi), zodat u deze eenvoudig kunt instellen. De voordelen van SSH gaan verder dan het verstoren van de dagelijkse screening ... Lees verder .

sudo apt-get update. sudo apt-get upgrade. 

Mogelijk moet u die twee keer doen als het een tijdje geleden is.

Installeer nu enkele kernpakketten die we nodig hebben:

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

Vervolgens gaan we de nieuwste versie van NodeJS installeren. Je zou in de verleiding kunnen komen om dit te doen apt-get, maar niet - die versie is nu echt oud en zal niet werken. Bezoek in plaats daarvan nodejs.orgblader naar de download / release / nieuwste-v5.x.0 / directory en controleer wat de link voor de nieuwste versie is. Je zoekt linux-armv7l voor Raspberry Pi 2, of linuxarmv6l voor de originele RPi-modellen. Pas vervolgens de URL's en mapnamen aan, download en installeer met de volgende opdrachten.

wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz. tar -xvf knooppunt-v5.5.0-linux-armv7l.tar.gz. cd knooppunt-v5.5.0-linux-armv7l. sudo cp -R * / usr / local. 

Bevestig door te typen

knooppunt versie. 

En je zou v5.5 moeten zien (of wat de laatste was die je hebt gedownload).

Vervolgens moeten we enkele Node-modules installeren.

sudo npm installeren -g npm. sudo npm installeer -g knooppunt-gyp. 

Bij die eerste opdracht gebruiken we eigenlijk de Node Package Manager (npm) om een ​​nieuwere versie van zichzelf te installeren. Slim!

Nu, om de HomeKit-emulator genoemd te downloaden HAP-knooppuntJS:

git kloon https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm herbouwen. sudo npm install node-persist. sudo npm installeer srp. 

Op dit punt heb ik deze fout gemaakt: "#error Deze versie van node / NAN / v8 vereist een C ++ 11-compiler“. Als dat je overkomt, installeer dan een recentere C ++ -compiler met de opdrachten:

sudo apt-get installeer gcc-4.8 g ++ - 4.8. sudo update-alternatieven --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20. sudo update-alternatieven --install / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. sudo update-alternatieven --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. sudo update-alternatieven --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50. 

Nu zou je geen probleem moeten hebben. Blijf deze opdrachten één voor één uitvoeren:

sudo npm installeer srp. sudo npm installeer mdns --unsafe-perm. sudo npm install debug. sudo npm installeer ed25519 --unsafe-perm. sudo npm installeren curve25519 --unsafe-perm. 

Dat zou alles moeten zijn. Probeer de emulator uit te voeren met:

knooppunt Core.js. 

Als je foutmeldingen krijgt dat het deze en die module niet kan vinden, gebruik dan de sudo npm installeren commando opnieuw en plaats de naam van de module die ontbrak. Ervan uitgaande dat alles in orde is, zou u een paar waarschuwingen moeten zien en uw HomeKit-brug zal werken. Zo ziet succes eruit:

hap-nodejs geïnstalleerd

Je kunt meteen zien dat er al een set van zes nep-apparaten is gemaakt. Die gebruiken we later als uitgangspunt voor ons eigen wifi-lampje, maar die gebruiken we voorlopig gewoon om te testen. U kunt ook meer informatie over foutopsporing zien als u de server start met:

DEBUG = * knooppunt Core.js

Spring nu naar een Apple-apparaat dat Siri kan gebruiken. Apple biedt merkwaardig genoeg geen stock HomeKit-app behalve aan geregistreerde ontwikkelaars, dus download de gratis Elgato Eve-app, een HomeKit-beheerapp waarmee u (zelfs niet-Elgato) apparaten aan uw HomeKit-netwerk kunt toevoegen.

De eerste keer dat je de app start, moet je je huis een naam geven, ga je gang en loop je daar doorheen. Selecteer vervolgens "Accessoire toevoegen". Negeer de boodschap dat je er dichtbij bent!

elgato eve 1

Het zal je vertellen om vervolgens te zoeken naar een unieke "HomeKit-installatiecode". Negeer dat en klik op "Toevoegen aan [naam van je huis]".

Het geeft ook aan dat het apparaat niet is gecertificeerd. Dat is het inderdaad niet. Ga toch door. Wanneer u op het scherm komt en om een ​​accessoire-code vraagt ​​...

elgato eve 2

Kies ervoor om de code handmatig in te voeren en typ het volgende:

031-45-154

Deze kunt u vinden / wijzigen in de Light_accessory.js bestand, maar daarover later meer. Voeg dit accessoire toe aan je standaardkamer, noem het Nep licht, en blijf door de dialoogvensters lopen om een ​​pictogram te kiezen enz.

Spring ten slotte terug naar de SSH-sessie waar je HAP-NodeJS hebt draaien. Je hebt misschien al een bericht gezien met de tekst 'Zijn we bezig?' - dat is de Elgato-app die vraagt ​​naar de lichtstatus. Open Siri en zeg haar dat ze 'Neplicht inschakelen' moet proberen en probeer het vervolgens weer uit te schakelen. Hopelijk zie je enkele foutopsporingsberichten van HAP-NodeJS om te laten zien dat het de opdrachten heeft ontvangen.

Zijn we bezig? Nee. Het licht aandoen! Het licht uitdoen!

Fantastisch, dat is stap één klaar. Nu hebben we een echt licht nodig voordat we terugkomen om de brug opnieuw te configureren.

Een wifi-lamp bouwen

De hardware-kant van deze stap is verrassend eenvoudig als we beginnen met slechts vier Neopixels, omdat we die rechtstreeks van het NodeMCU-dev-bord en de USB-aansluiting kunnen voorzien. Maak je geen zorgen als je een langere strip hebt - we hebben dit in software gedefinieerd, dus de rest gaat gewoon niet aan.

Sluit de rode voedingskabel van een Neopixel-streng aan op de VIN-pin, blauwe aarde op GND en de groene signaalkabel op de pin gemarkeerd met D2 op de NodeMCU. Wees heel voorzichtig met polariteit: als je de grond en het VIN door elkaar haalt, stuur je een golf van kracht door je bord en vernietig je het tijdens het proces.

Als je Arduino-omgeving nog niet is ingesteld om met ESP8266 te werken, ga je gang en volg de gids in mijn ESP8266: Arduino Killer Maak kennis met de Arduino Killer: ESP8266Wat als ik je vertelde dat er een Arduino-compatibel dev-bord is met ingebouwd Wi-Fi voor minder dan $ 10? Nou, dat is er. Lees verder gids en kom dan terug nadat je hebt bevestigd dat dit werkt. Installeer deze extra bibliotheken:

  • lmroy's PubSubClient
  • Neofixels van Adafruit

De code die we gebruiken, is een wijziging van Github-gebruiker Aditya Tannu’s - Ik heb de overbodige over-the-air update-functionaliteit verwijderd, toegevoegd aan enkele HSV-functies die ontbraken, en het gemakkelijker gemaakt om meer lichten te creëren door slechts één enkele variabele te wijzigen. Als u de onderstaande code niet kunt zien, vindt u deze op deze Gist.

Werk de volgende regels bij met uw eigen netwerkinformatie en een unieke naam voor elk armatuur dat u maakt (host).

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

Het IP-adres van deze armatuur wordt automatisch verkregen via DHCP - het maakt niet uit of het verandert, omdat we elke keer verbinding maken met dezelfde MQTT-server.

Voorlopig gebruiken we slechts vier Neopixels, maar u kunt het aantal later verhogen als u ze van een externe bron voorziet. Upload de code en laten we testen: gebruik je favoriete MQTT-client om opdrachten te verzenden (pas de hostnaam aan in de volgende instructies als je deze hebt gewijzigd).

  • Je kan versturen Aan naar de wortel officelight kanaal om het in te schakelen. Stuur een andere waarde naar dat kanaal om het uit te schakelen.
  • Je kunt een nummer van 0-360 naar het officelight / hue sturen om de kleur te veranderen. We gebruiken de HSV-kleurruimte, dus 0 en 360 zijn rood, 120 is groen en 240 is blauw.
  • U verzendt een percentagewaarde voor helderheid (0-100, exclusief het% -symbool).
  • Hetzelfde geldt voor verzadiging. Een waarde van 100 is volledig verzadigd (dwz een effen kleur) en nul is puur wit, ongeacht de opgegeven tint.

Zodra u heeft bevestigd dat uw MQTT-gestuurde verlichtingsarmatuur werkt, gaat u verder.

Een nieuw HomeKit-accessoire configureren

Schakel terug naar de Raspberry Pi en beëindig de HAP-NodeJS-app als je dat nog niet hebt gedaan. Navigeer naar de /accessories directory. Om dit gemakkelijk te maken, kunt u direct code downloaden die al is gekoppeld aan de 'officelight'-armatuur door het volgende in te typen:

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

In wezen is dit een duplicaat van het standaard lichtaccessoire, waarbij enkele variabelenamen zijn gewijzigd (opnieuw aangepast van Adysans werk, vereenvoudigd voor gebruiksgemak). Dit is wat u moet weten om op basis hiervan uw eigen aangepaste accessoires te maken.

  • Alle accessoires moeten worden genoemd *_accessory.js
  • Wijzig het IP-adres in de optiesvariabele bovenaan in uw MQTT-server
  • Als je een andere armatuurnaam hebt, zoek / vervang dan alle instanties van "officelight”Met uw unieke armatuurnaam. U kunt zoeken / vervangen in Nano door op te drukken CTRL en \, typ de te zoeken term, de te vervangen term en druk op EEN (betekent alle instanties). Doorloop elk van deze om precies te leren welke variabelen worden bijgewerkt.
  • Maak een unieke hexadecimale gebruikersnaam voor het accessoire (light.username = "1B: 2B: 3C: 5D: 6E: FF";)
  • Wijzig de pincode niet. Het volgt een specifiek formaat en tenzij je weet wat je doet, kan het niet koppelen. Het is geen probleem om ze tussen lampen hetzelfde te houden.
  • U kunt uw armatuur een andere 'Siri-naam' geven wanneer u ze toevoegt aan de Elgato Eve-app, en deze op elk moment bewerken, zodat u niet vastzit aan uw oorspronkelijke keuze. U hoeft de configuratiebestanden niet te bewerken of de server opnieuw op te starten.
  • Zodra je meerdere armaturen hebt, kun je de Elgato Eve-app gebruiken om ze op kamer te groeperen of om specifieke scènes te maken die uit meerdere complexe acties bestaan. Scènes kunnen uit meerdere acties bestaan, zoals: zet de kantoorverlichting aan, dim deze tot 25%, maak hem rood en activeer de koffiemachine.

Je moet je nieuwe accessoire opnieuw toevoegen via je HomeKit-app naar keuze.

Ten slotte willen we onze HAP-NodeJS-app uitvoeren wanneer de Pi opnieuw wordt opgestart. Voeg het volgende toe aan je etc / rc.local bestand, vlak voor de uitgang 0.

sudo node /home/pi/HAP-NodeJS/Core.js  dev / null &

Je kunt zien dat ik dit heb gecombineerd met enkele andere opdrachten die ik al heb ingesteld om te starten bij het opstarten.

rclocal run node bij opstarten

Als dit de eerste keer is dat je rc.local gebruikt, moet je het misschien als uitvoerbaar bestand instellen:

sudo chmod 755 /etc/rc.local

Als je het om de een of andere reden opnieuw in de foutopsporingsmodus moet uitvoeren, kun je de actieve Node-app doden met:

killall-knooppunt

Een laatste stap: ga naar de map met accessoires en verwijder de GarageDoorOpener_accessory.js. Op het moment van schrijven is dit buggy en zal de server na een tijdje kapot gaan.

Wat ga je regelen met Siri?

Nu je de basis onder de knie hebt, is er echt geen limiet aan wat je kunt regelen - als je het in Javascript kunt coderen, kun je je eigen accessoire-bestand maken. Er is zoveel potentieel hier, ik denk dat je veel plezier zult hebben. Laat me in de comments weten wat je verzint!

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.