Igår visade vi dig hur du skapar en DIY Wi-Fi-lampa som kan styras med Siri; Idag ska vi bygga vidare på den kunskapen för att få Siri att också arbeta med ett Sonos-ljudsystem, och sedan sätta ihop allt i en romantisk scen.
Kolla in slutresultatet:
Videon ovan var inte fejkad eller iscensatt — allt är möjligt med Siri och guiden nedan. Inget jailbreak krävs, även om det finns en del programmering som jag har tillhandahållit koden för.
Saker du behöver:
Raspberry Pi iOS-enhet Siri-kompatibel färgad belysning, som Philips Hue med en 2:a generationens hubb, eller vår DIY Wi-fi Light Sonos (eller annan uppspelningsenhet med ett HTTP API) (valfritt) NodeMCU/ESP8266, relä och eluttag ; eller ett kommersiellt HomeKit-uttagstillbehör
Varför är detta så komplicerat?
HomeKit, och att kontrollera dina enheter genom röststyrning är riktigt snyggt. Tyvärr är det slutna ekosystemet som Apple är, HomeKit, begränsat till en handfull enheter. Sonos är inte en av dem. Allt är dock inte förlorat. Tack vare några hårt arbetande hackare har HomeKit-protokollet nyligen omvänt konstruerats, och som visades i vårt förra projekt kan du nu skapa dina egna falska HomeKit-enheter. Vi kommer att dra nytta av det.
Börja med att följa vår DIY Wi-Fi light tutorial, eftersom det kommer att ligga till grund för allt annat. Faktum är att om du inte redan har ett Philips Hue-belysningssystem kan du gå vidare och faktiskt bygga Wi-Fi-ljuset som beskrivs i den handledningen.
Även om du har ett Hue-system, fortsätt och följ handledningen eftersom du måste skapa falska HomeKit-tillbehör för allt annat (koden anges nedan). Genom att fortsätta med den här guiden kommer jag att anta att du redan har HAP-NodeJS-servern igång och har framgångsrikt lagt till ett falskt ljus och testat servern, även om den inte är ansluten till en riktig DIY hårdvara.
Gör en spellista
Fortsätt och skapa en ny Sonos-spellista med namnet “Romantic”. Det behöver inte ha exakt samma namn, men du måste justera tillbehörsskripten senare om du ändrar det. Jag har lagt till några Marvin Gaye och Sade-låtar till mina. Slät.
Nästa, över på Raspberry Pi som kör HAB-NodeJS (om du inte vet vad jag pratar om har du inte läst guiden för Wi-Fi-ljus. Gör det först), navigera till din hemkatalog och skriv följande för att installera HTTP API för Sonos. Detta kommer att ge oss en webbadress som vi kan pinga för att utlösa vissa åtgärder på Sonos.
git clone https://github.com/jishi/node-sonos-http-api.git sonos
cd sonos
npm install production
npm install basic-auth sonos-discovery require-fu request-promise node-static async
npm start
Om du ser ett meddelande om att en sådan-och-så-modul inte hittas, gör bara ett annat npm installera och modulnamnet, försök sedan npm start om igen. Det är möjligt att jag redan hade några moduler installerade globalt från andra projekt, och du kan behöva installera fler. Förhoppningsvis kommer du att se något sånt här:
Grattis, du har nu ett enkelt HTTP API som du kan använda för att trigga din Sonos. Läs upp i dokumentationen för hela listan över kommandon, men formatet vi är mest intresserade av är:
http://[SERVER IP]:5005/[ROOM NAME]/[ACTION]
eller som ett specifikt exempel:
http://192.168.1.99:5005/master%20bedroom/playlist/romantic
Fallet verkar inte spela någon roll. %20 är en URL-kodning av ett blanksteg, men du bör också kunna skriva ett faktisk mellanslag och din webbläsare konverterar det automatiskt. Kommandot ovan triggar helt enkelt den romantiska spellistan till enheten i Master Bedroom. Använd paus kommando för att stoppa det:
http://192.168.1.99:5005/master%20bedroom/pause
Bortsett från, API ger oss också en funktion som kommer att vara väldigt praktisk för andra projekt: möjligheten att säga ett specifikt uttalande, som ett meddelande, och sedan fortsätta spela den aktuella kön. Prova:
http://192.168.1.99:5005/master%20bedroom/say/make%20use%20of%20is%20awesome/en-gb
Första gången du gör detta får du ett meddelande om att du måste registrera dig för en API-nyckel på VoiceRSS.org [No Longer Available] (upp till 350 förfrågningar per dag är gratis). När du är klar med det, skriv:
nano settings.json
och klistra in din nyckel till följande exempel:
{
"voicerss":"YOURAPIKEY"
}
Starta om servern och pinga URL:en igen. Efter några sekunder bör du höra en förtjusande engelsk röst. Du kan ändra slutet av webbadressen till sv-oss om du föredrar en amerikansk röst. Propert! Helt irrelevant för det här projektet, men snyggt ändå!
Slutligen, låt oss få den här servern att starta igen när Pi:n startas om:
sudo nano /etc/rc.local
Lägg till en rad före avsluta 0:
sudo node /home/pi/sonos/server.js < /dev/null &
CTRL-X, Y för att spara. Du kan se att jag kör det här tillsammans med OpenHAB, en gör-det-själv Bluetooth-närvarodetektor och HAP-NodeJS HomeKit-servern – du borde också ha den igång redan om du redan följt den nödvändiga Wi-Fi-ljushandledningen.
Att göra en HomeKit-enhet för Sonos
Kärnan i detta projekt är att Sonos inte kan styras av Siri, men vi kan lägga till en viss grad av kontroll genom att skapa en falsk HomeKit-enhet som aktiverar en viss spellista när vi slår på den – ett falskt ljus är det enklaste sättet att göra detta.
Navigera till din HAP-NodeJS/ katalogen först och installera modulen “request”.
sudo npm install request
Hoppa sedan ner till Tillbehör/ katalog och ta min färdiga fixtur med följande enkla kommando:
wget https://gist.githubusercontent.com/jamesabruce/72bd250fbcf054acaa25/raw/8272d4b9a4ef76db752cab2ddd9bdc47d09a65f1/Romantic_accessory.js
Gör några ändringar om du behöver — detta är inställt för Sonos standardplats för “Master Bedroom”, så ändra strängen master%20bedroom mot början av koden om du vill att den ska dirigeras till ett annat rum. Eftersom vi har fejkat att vara ett ljus, kommer det faktiskt inte att göra någonting att skicka ljusstyrkekommandot, även om jag någon gång kommer att uppdatera det för att hantera volymen. Det här är kodblocket som gör magin:
setPowerOn: function(on) {
console.log("Turning the light %s!", on ? "on" : "off");
FAKELIGHT.powerOn = on;
console.log(on);
if(on){
request('http://localhost:5005/master%20bedroom/playlist/romantic', function (error, response, body) {
console.log("Sent play request");
})
}
else{
request('http://localhost:5005/master%20bedroom/pause', function (error, response, body) {
console.log("Sent pause request");
})
}
},
Du kan se att det är förvånansvärt enkelt: när lampan tar emot ett setPowerOn-kommando från HomeKit, kontrollerar den om värdet är 1 (eller sant), och vilken punkt den pingar Sonos HTTP API-url för att spela den spellistan. Om det är något annat (dvs. 0, falskt), skickar den pauskommandot. Starta om din HAP-NodeJS-server, gå sedan vidare till en iOS-enhet och följ samma procedur som tidigare för att lägga till din falska “Romantic Playlist”-lampa (du behöver kopplingskoden 031-45-154).
Kontrollera att din nya enhet fungerar och fortsätt sedan. Om du känner för lite programmering, försök att kartlägga ljusstyrkan till volym (och dela din kod i kommentarerna, tack!).
(Valfritt) Fairy Lights och andra AC-enheter
Det kan förvåna dig att höra att det inte finns några officiella HomeKit fairy lights, och inte heller kunde jag hitta några HomeKit generiska eluttag som jag gillade utseendet/priset på – så jag knackade ihop en gör-det-själv med ett NodeMCU/ESP8266-devkort, ett relä och ett vanligt två-gängs eluttag. Jag kommer inte att beskriva hårdvaran för mycket eftersom du inte bör stoppa in saker i eluttag om du inte är helt säker på den typen av saker, men jag kommer att förse dig med min kod för NodeMCU-sidan (anslut reläutlösare till stift D2/GPIO4), och tillbehöret som hör till den.
Precis som Wi-Fi-lampan kommunicerar detta kommandon på en MQTT-kanal (“bedroomplug”), så du måste ändra koden med din MQTT-mäklaradress (kolla in del 2 av vår OpenHAB-guide om hur du ställer in en MQTT mäklare), ändra kanalnamnen om du vill, och självklart ange dina egna Wi-Fi-uppgifter.
Få alltid att falla på plats
Slutligen kommer vi att göra några “scener” med hjälp av Elgato Eve-appen, eller din föredragna HomeKit-hanterare. På HomeKit-språk kan en scen bestå av valfritt antal tillbehör och kommandon till dessa tillbehör.
Du kan namnge en scen vad du vill, och Siri kommer att kunna matcha den även utan att säga “set scen”. Så jag har gjort två scener: en som heter “barnen ligger i sängen”, och en annan “låt oss göra allvar nu”.
Den förstnämnda släcker det ena Hue-ljuset, gör det andra till rosa och sätter sedan på det romantiska spellisttillbehöret och fairy lights. Det senare gör ljuset vitt igen och pausar Sonos (dvs. stänger av det romantiska spellisttillbehöret). Enkelt!
Jag hoppas att du har gillat den här handledningen och verkligen kan se hur vi kan utöka Siri-kontrollen till vad som helst utan alltför mycket problem, tack vare kraften i HAP-NodeJS. Är det något du skulle vilja se några speciella Siri-åtgärder för? Låt oss veta i kommentarerna och berätta hur du har använt Siri för att styra ditt hem.
Om författaren
James Bruce (719 publicerade artiklar)
James har en BSc i artificiell intelligens och är CompTIA A+ och Network+ certifierad. När han inte är upptagen som Hardware Review Editor, gillar han LEGO, VR och brädspel. Innan han började på MakeUseOf var han ljustekniker, engelskalärare och datacenteringenjör.
Mer från James Bruce
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera
