Hoe maak je een DIY Siri-Controlled Wi-Fi Light

In deze gids leert u hoe u een Wi-Fi-bestuurbaar licht kunt maken en kunt bedienen met Siri.

In deze gids leert u hoe u een Wi-Fi-bestuurbaar licht kunt maken en kunt bedienen met Siri.
Advertentie

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

Ik bedoel jammer genoeg een letterlijke handvol - alles wat je al hebt gekocht, is waarschijnlijk niet compatibel. Het protocol is echter al reverse-engineered en een open source-emulator voor de HomeKit API is beschikbaar: of in gewoon Engels, je kunt nu "nep" HomeKit-apparaten maken en Siri beheert ze net als elk ander officieel HomeKit-accessoire.

Vandaag gaan we een Wi-Fi-bestuurbaar licht maken en bedienen met Siri. Hier is een demo.

Dit is wat je nodig hebt:

  • Raspberry Pi (ik heb een RPi2 gebruikt, er is een klein verschil in de knooppuntversies om te installeren gezien de bijgewerkte ARM-architectuur - zie opmerkingen later).
  • Een MQTT-makelaar geïnstalleerd op de Raspberry Pi. Zie de sectie "Mosquitto op je Pi installeren" in mijn OpenHAB Guide deel 2 OpenHAB-beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken OpenHAB-beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken OpenHAB, de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om het in te stellen. In feite kan het ronduit frustrerend zijn. Lees verder . Het hoeft niet specifiek op de Pi te worden geïnstalleerd - je kunt zelfs een op de cloud gebaseerde MQTT-server gebruiken, maar omdat we toch een Pi nodig hebben voor deze tutorial, is het handig.
  • NodeMCU v2 (compatibel met Arduino)
  • Neopixel LED's (ik raad 4 pixels aan om te testen, dan kun je een externe voeding toevoegen en zoveel toevoegen als je wilt)

De HomeKit Bridge installeren

We gaan een NodeJS-applicatie genaamd HAP-NodeJS installeren op de Raspberry Pi: dit vormt een brug tussen HomeKit-aanvragen en de Wi-Fi-apparaten. We zullen deze brug nu met één accessoire configureren, maar u kunt er zoveel toevoegen als u wilt.

Ik installeer dit eigenlijk op mijn bestaande thuisserver met OpenHAB - ik hoop de twee op een later tijdstip met elkaar te verbinden, maar weet nu dat ze naast elkaar kunnen bestaan ​​op dezelfde Raspberry Pi. Als je hetzelfde doet, maak dan een kloon-back-up van je huidige Pi-SD-kaart. Klonen Je SD-kaart klonen Voor probleemloze Raspberry Pi-computer Kloon eenvoudig je SD-kaart voor probleemloze Raspberry Pi-computing Of je er nu een hebt SD-kaart of meerdere, een ding dat je nodig hebt, is de mogelijkheid om een ​​back-up te maken van je kaarten om 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 van de Terminal of een SSH-sessie Uw Raspberry Pi instellen voor gebruik zonder hoofd met SSH Uw Raspberry Pi instellen voor gebruik zonder hoofd met SSH De Raspberry Pi kan SSH-opdrachten accepteren wanneer deze is aangesloten op een lokaal netwerk (hetzij via Ethernet of Wi-Fi), zodat u het gemakkelijk kunt instellen. De voordelen van SSH gaan verder dan het verstoren van de dagelijkse screening ... Lees meer.

 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 met apt-get te doen, maar doe dat niet - die versie is nu echt oud en zal niet werken. Bezoek in plaats daarvan nodejs.org, blader naar de download / release / latest-v5.x.0 / directory en controleer wat de link voor de nieuwste versie is. U zoekt linux-armv7l voor Raspberry Pi 2 of linuxarmv6l voor de originele RPi-modellen. Pas vervolgens, indien nodig, 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 node-v5.5.0-linux-armv7l.tar.gz cd node-v5.5.0-linux-armv7l sudo cp -R * / usr / local 

Bevestig door te typen

 knoop versie 

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

Vervolgens hebben we enkele Node-modules om te installeren.

 sudo npm install -g npm sudo npm install -g node-gyp 

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

Nu, om de HomeKit-emulator genaamd HAP-NodeJS te downloaden:

 git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm rebuild sudo npm install node-persist sudo npm install srp 

Op dit punt heb ik deze fout uitgevoerd: " #error Deze versie van node / NAN / v8 vereist een C ++ 11-compiler ". Als dat gebeurt, installeert u een recentere C ++ -compiler met de volgende opdrachten:

 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 

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

 sudo npm install srp sudo npm install mdns --unsafe-perm sudo npm install debug sudo npm install ed25519 --unsafe-perm sudo npm install curve25519 --unsafe-perm 

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

 knooppunt Core.js 

Als u fouten tegenkomt die zeggen dat het zo'n module niet kan vinden, gebruik dan gewoon de opdracht sudo npm install en plak de naam van de module aan die ontbreekt. Ervan uitgaande dat alles in orde is, zou u een paar waarschuwingen moeten zien, en uw HomeKit-brug zal worden uitgevoerd. Dit is hoe succes eruit ziet:

hap-nodejs geïnstalleerd

Je ziet meteen dat het al een set van 6 nep-apparaten heeft gemaakt. We zullen die later gebruiken als startpunt voor ons eigen wifi-licht, maar we zullen die nu gewoon gebruiken om te testen. U kunt ook meer foutopsporingsinformatie zien als u de server start met:

 DEBUG = * knooppunt Core.js 

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

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

elgato eve 1

Hierna wordt aangegeven dat u moet zoeken naar een unieke "HomeKit Setup-code". Negeer dat en klik op "Toevoegen aan [naam van uw huis]".

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

elgato eve 2

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

 031-45-154 

Dit kan worden gevonden / gewijzigd in het bestand Light_accessory.js, maar daarover later meer. Voeg dit accessoire toe aan je standaardkamer, noem het Fake Light en blijf door de dialogen lopen om pictogram etc. te kiezen.

Tot slot, ga terug naar de SSH-sessie waar u HAP-NodeJS hebt uitgevoerd. Misschien heb je al een bericht gezien met de mededeling 'Zijn we actief?' - dat is de Elgato-app die om de lichtstatus vraagt. Open Siri en zeg haar dat ze "Fake light inschakelen" en probeer het vervolgens opnieuw uit te schakelen. Hopelijk zie je enkele foutopsporingsberichten van HAP-NodeJS om aan te geven dat het de opdrachten heeft ontvangen.

 Zijn we aan de beurt? Nee. Het licht aan! Het licht uitschakelen! 

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

Een Wi-Fi Light bouwen

De hardware-kant van deze stap is verrassend eenvoudig als we beginnen met slechts vier Neopixels, omdat we die direct van de NodeMCU dev-kaart en de USB-aansluiting kunnen voorzien. Als je een langere strip hebt, maak je geen zorgen - we hebben dit in de software gedefinieerd, dus de rest kan gewoon niet worden ingeschakeld.

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 voorzichtig met polariteit: als je de grond en het VIN door elkaar gooit, zul je een golf van kracht door je bord sturen en het vernietigen tijdens het proces.

Als je Arduino-omgeving nog niet is ingesteld om te werken met ESP8266, ga je gang en volg je de gids in mijn ESP8266: Arduino Killer Maak kennis met de Arduino-moordenaar: ESP8266 Maak kennis met de Arduino-moordenaar: ESP8266 Wat als ik je heb verteld dat er een Arduino-compatibele ontwikkelaar is? bord met ingebouwde Wi-Fi voor minder dan $ 10? Welnu, dat is er. Lees meer gids en kom dan terug nadat je hebt bevestigd dat het werkt. Installeer deze extra bibliotheken:

  • PubSubClient van lmroy
  • Neopixels van Adafruit

De code die we gebruiken is een wijziging van Github-gebruiker Aditya Tannu's - ik heb de onnodige over-the-air-updatefunctionaliteit verwijderd, toegevoegd aan sommige ontbrekende HSV-functies en het gemakkelijker gemaakt om meer lichten te maken door alleen een enkele variabele. Als je de onderstaande code niet kunt zien, vind je deze op deze Gist.

Werk de volgende regels bij met uw eigen netwerkinformatie en een unieke naam voor elke fixture die u maakt (host).

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

Het IP-adres van dit 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 alleen 4 Neopixels, maar je kunt het nummer later verhogen als je ze van een externe bron voorziet. Upload de code en laten we testen - gebruik uw favoriete MQTT-client om opdrachten te verzenden (pas de hostnaam aan in de volgende instructies als u deze hebt gewijzigd) .

  • U kunt naar het officiële rootlichtkanaal sturen om het in te schakelen. Verzend een andere waarde naar dat kanaal om het uit te schakelen.
  • U kunt een nummer van 0-360 naar de officelight / hue sturen om de kleur te wijzigen. 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, omvat niet het% -symbool).
  • Hetzelfde voor verzadiging. Een waarde van 100 is volledig verzadigd (dat wil zeggen een effen kleur) en nul is puur wit, ongeacht de opgegeven tint.

Zodra je hebt bevestigd dat je MQTT-aangedreven verlichtingsarmatuur werkt, ga je verder.

Een nieuw HomeKit-accessoire configureren

Schakel terug naar de Raspberry Pi en beëindig de HAP-NodeJS-app als u dat nog niet hebt gedaan. Navigeer naar de map / accessories . Om dit gemakkelijk te maken, kunt u de code die al is gekoppeld aan de "officelight" -lamp direct downloaden 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 standaardlichtaccessoire, waarbij sommige variabelenamen zijn gewijzigd (opnieuw aangepast aan het werk van Adysan, vereenvoudigd voor gebruiksgemak). Hier is wat u moet weten voor het maken van uw eigen aangepaste accessoires op basis hiervan.

  • Alle accessoires moeten de naam * _accessory.js hebben
  • Verander het IP-adres in de options-variabele bovenaan naar uw MQTT-server
  • Als je een andere fixturenaam hebt, zoek / vervang dan alle instanties van " officelight " met je unieke fixturenaam . U kunt in Nano zoeken / vervangen door op CTRL en \ te drukken, de te zoeken term te typen, de te vervangen term te selecteren en vervolgens op A (dit betekent alle exemplaren) te drukken. Doorloop elk van deze om precies te weten 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 paren. Het is niet moeilijk om ze tussen de lichten hetzelfde te houden.
  • Je kunt je fixture een andere "Siri-naam" geven wanneer je ze aan de Elgato Eve-app toevoegt en deze op elk moment bewerken, zodat je niet vastzit aan je eerste keuze. Het is niet nodig om de configuratiebestanden te bewerken of de server opnieuw te starten.
  • Zodra je meerdere fixtures hebt, kun je de Elgato Eve-app gebruiken om ze per kamer te groeperen of om specifieke scènes te maken die uit meerdere complexe acties bestaan. Scènes kunnen uit meerdere acties bestaan, zoals: het bureaulicht inschakelen, het dimmen tot 25%, het rood maken en het koffiezetapparaat activeren.

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 uw etc / rc.local- bestand, vlak voor de uitgang 0 .

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

Je ziet dat ik dit heb gecombineerd met een aantal andere opdrachten die ik al heb ingesteld om te starten bij het opstarten.

rclocal knooppunt uitvoeren bij opstarten

Als dit de eerste keer is dat u rc.local gebruikt, moet u dit mogelijk instellen als uitvoerbaar bestand:

 sudo chmod 755 /etc/rc.local 

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

 dodelijke knoop 

Een laatste stap: navigeer naar de map accessoires en verwijder de GarageDoorOpener_accessory.js . Op het moment van schrijven is dit een bug en zal de server na een tijdje breken.

Wat wil je met Siri controleren?

Nu je de basis hebt, is er echt geen limiet aan wat je kunt bedienen. Als je het in Javascript kunt coderen, kun je je eigen accessoirebestand maken. Er is zoveel potentieel hier, ik denk dat je veel plezier zult hebben. Laat me in de comments weten wat je bedacht!

In this article