Styr nästan allting med Siri - ingen jailbreak krävs

Siri kan vara fantastisk ibland, men hon kan bara göra vad Apple tillåter henne att göra. Inte längre.

Siri kan vara fantastisk ibland, men hon kan bara göra vad Apple tillåter henne att göra.  Inte längre.
Annons

Siri kan vara fantastisk ibland, men hon kan bara göra vad Apple tillåter henne att göra. Inte längre: en ny webbtjänst som heter BetterThanSiri kastar grindarna vid öppet, och det kräver inte att enheten ska vara jailbroken för att utnyttja den. Idag förklarar jag lite om tjänsten, och visar dig hur du kommer igång med att styra en uppsättning RGB-lampor. Titta på videon först för att se den i aktion.

Hur fungerar denna mörka magi?

När du frågar Siri till "Google" något öppnar hon Safari-webbläsaren och rutter din förfrågan som du förväntar dig. Det är vid denna tidpunkt att en HTTP-förfrågan görs, så om du har ställt in en HTTP-proxy på din Internetanslutning - en standardfunktion som inte kräver jailbreaking - går förfrågan via proxy först.

Nu är här där magiken är: genom att prefacing kommandon med "googolplex" blir sökordet "plex" plus vad du än säger. Proxy - BetterThanSiri.com - identifierar förekomsten av "plex" och avlyssnar din sökfråga. Vad som än följer anses då själva "kommandot". BetterThanSiri utför mönstermatchning mot ditt personliga urval av konfigurerade kommandon och kör den aktuella koden. Det är verkligen helt fantastiskt, och jag kan inte vänta med att visa dig hur du använder den.

Styrning av RGB-lampor

För att demonstrera BetterThanSiri har jag installerat en grundläggande IR-sändnings- och mottagningskrets - se min tidigare handledning på TV-djävulen. Introducera TV-Devil, en enkel fjärrkontroll Arduino Prank Introducera TV-Devil, en enkel fjärrkontroll Arduino Prank Läs mer till lära dig mer om att interagera med IR-koder, eller läs vidare för den kondenserade versionen. Här är de delar du behöver:

  • Arduino, Ethernet-skärm och Ethernet-kabel
  • IR-lampa, 220 ohm motstånd (beror på din speciella LED, men det borde vara tillräckligt i de flesta fall) och IR-mottagare
  • RGB LED stripljus, 12V strömförsörjning och befintlig fjärrkontroll

restduino-krets

Varje fjärrkontroll fungerar genom att koda ett nummer i pulser med infrarött ljus - så först måste du lära dig de kontrollnummer som används av din speciella fjärrkontroll. Ladda ner IRremote-biblioteket och starta om Arduino IDE. För de flesta IR-mottagare, med kupolen på LED-lampan mot dig, är stiften från vänster till höger: signal, GND, + 5V.

IR-recv

Wire i signalen till stift 11 och de andra två som vanligt, och ladda i IRrecvDemo- exemplet som tillhandahålls av biblioteket. Öppna seriekonsolen och börja trycka på knapparna på fjärrkontrollen - du borde få några HEX-värden. Vi vill faktiskt ha dessa Hex-värden som ett långt heltal, så lägg till en ny Serial.println utan HEX-delen:

 Serial.println (results.value, HEX); Serial.println (results.value); 

Spela in alla nummer du behöver. I mitt fall hittade jag:

  • Röd: 16195807
  • Grön: 16228447
  • Blå: 16212127

Om du använder en annan typ av fjärrkontroll måste du kanske ladda IRrecvDump- exemplet, vilket också kommer att mata ut typ av signal - i mitt fall skickade fjärrkontrollen 32-bitars (eller 8-siffriga) NEC-koder, vilket återspeglas i min ändrade servern kod senare - kom ihåg att ändra det om du behöver.

irrecvdump-exempel

Innan du fortsätter, led i din IR-LED för att skicka (den lediga sidan av LED-lampan går till GND, den andra sidan går via ett 220 ohm-motstånd till stift 3) och ladda IRsendDemo . Kopiera huvudskicka kommandot ett par gånger och ersätt dina egna IR-koder för att testa dem - lägg till en fördröjning mellan var och en. Ladda upp, och om allt fungerar bra bör du se dina LED-lampor cykla genom de kommandon du lagt till.

irsendtest-exempel

Hämta sedan RESTduino-paketet - det finns ett ersättnings Ethernet-bibliotek där du måste lägga till och igen, starta om Arduino IDE. RESTduino är ett kraftfullt RESTful web API - det skapar en server som lyssnar på inkommande förfrågningar med förmåga att styra stiften eller läsa värden från dem. Testa den medföljande demo först för att säkerställa att allt fungerar - du måste ändra MAC-adressen, göra serverns IP-statisk och definiera en IP på ditt lokala nätverksområde (förmodligen 192.168.0.x eller 10.0.1.x ) .

anpassat-restduino

Du ska då kunna komma åt din Arduino från vilken webbläsare som helst - bara försök med enkla kommandon att läsa värdena på analog ingång 1 - till exempel:

http://10.0.1.99/a1/

Det spelar ingen roll om ingenting är anslutet, vi kontrollerar bara att servern fungerar. Ladda nu upp min modifierade version av denna demo. Jag har tagit bort stiftkontrollen och ersatt den istället med IR-kontroll. Använd en webbadress av formuläret:

http://10.0.1.99/1/IRCODE

Den viktiga raden i den modifierade koden är här:

 irsend.sendNEC (strtoul (värde, NULL, 10), 32); 

Du måste ändra det om fjärrkontrollen inte är av typen NEC eller inte har 32 bitars längd. Jag har också lagt till en fördröjning och upprepade kommandot några gånger, eftersom IR kan vara lite opålitligt ibland. Slutligen ställa in port vidarebefordran Vad är port vidarebefordran och hur kan det hjälpa mig? [MakeUseOf Explains] Vad är port vidarebefordran och hur kan det hjälpa mig? [MakeUseOf Explains] Skriker du lite inuti när någon säger att det finns ett portproblem och det är därför att din glänsande nya app inte fungerar? Din Xbox låter dig inte spela spel, dina torrentladdningar vägrar ... Läs mer på din router så att du kan skicka IR-kommandon från var som helst i världen. Vidarebefordra allt på port 80 till den interna IP-adressen till din Arduino. Du ska nu kunna ersätta den interna IP med din offentliga IP, och kontrollen ska fortfarande fungera. Vi kan nu gå över till att konfigurera våra anpassade kommandon på BetterThanSiri.com.

Börja med att logga in och logga in för att hantera din personliga kommandolista.

betterthansiri-web-interface

Ta en titt på befintliga kommandon om du är nyfiken på hur de fungerar, eller bara fortsätt och skapa en ny. Namn på kommandot, och lägg till frasen matcher:

 ljus ~ 

Setup-new-kommandot

Vilket betyder "detta kommando kommer att matcha ljus + något" . Klistra sedan in koden nedan - ändra det här för att inkludera din offentliga IP-adress (eller en dynamisk DNS om du har en), samt de fraser du vill matcha, och relevanta IR-koder. Den första variabeln i funktionen är bara en liten text som skickas tillbaka till webbläsaren. Du kan kopiera / klistra in mer av det andra om bitar för att skapa så många kommandon som du vill.

 om (fras == "tänds") {respondWithTextAndURL ('Tänds på', 'http: // YOURIP / 1/16236607'); } annars om (fras == "lyser rött") {respondWithTextAndURL ('Klara sig för sexig tid', 'http: // YOURIP / 1/16195807'); } annars om (fras == "lyser blått") {respondWithTextAndURL ('Arbetsläge aktiv', 'http: // YOURIP / 1/16212127'); } annars om (fras == "lyser grönt") {respondWithTextAndURL ('Du är konstig', 'http: // YOURIP / 1/16228447'); } 

Följ anvisningarna för att ställa in proxyn på enheten. I grund och botten behöver du bara lägga till en automatisk HTTP-proxy (URL: http://totally.betterthansiri.com ) till din internetanslutning. Första gången du använder tjänsten måste du logga in från din mobila enhet så att den vet vad dina personliga kommandon är, men du behöver bara göra det här en gång.

begränsningar

Som du kan se är BetterThanSiri ett komplicerat system för tillfället - det finns inget dra och släpp gränssnitt så du måste förstå grunden för Javascript för att skapa din egen kommandosats. Med detta sagt har de utsatt en hel del makt med möjligheten att skicka data till slumpmässiga webbadresser, antingen i bakgrunden eller bara en omdirigering, så vi kunde verkligen inte begära mer. Du kan alltid bläddra i befintliga recept om du inte är redo att programmera din egen.

Det talar inte heller till dig som Siri gör. Alla konton innehåller en "berätta för mig en skämt" -funktion som liknar Siri, men skämtna visas på skärmen, i din webbläsare. Det är möjligt att de kunde lägga till det senare med hjälp av ett tredjeparts JavaScript-plugin, men det kan innebära ökad bandbreddsanvändning eller lyhördhet.

Slutligen finns det givetvis förseningen. Ditt tal skickas till Apple för behandling i ett textkommando, skickat tillbaka dig, skickat till proxy, behandlad av BetterThanSiri, sedan skickas tillbaka via Internet till vår lokala Arduino. I demo tog varje kommando cirka 5-10 sekunder totalt, och det är osannolikt att det någonsin kan förbättras. För hemautomatisering är detta helt acceptabelt, men om du försöker skicka information till användaren i tid, är det lite frustrerande.

Säkerhetshinder

Med hjälp av en HTTP-proxy så betyder det att varje HTTP-förfrågan du gör är dirigerad via sina servrar: i teorin kan de undersöka allt du söker efter, varje webbplats du besöker. Jag frågade utvecklarna om detta, och det var deras svar:

Definitivt en giltig fråga, men vi tittar inte på varje HTTP-begäran. Vår proxy autoconfig har en beslutsmotor som bara tittar på de HTTP-förfrågningar som är relevanta för GoogolPlex (med "plex" i dem).

Du kan ta det till nominellt värde; Det skulle vara omöjligt att bevisa något annat, men om serverns programvara var öppen källkod (vilken det inte är) kan du åtminstone verifiera det och köra din egen privata server. Med tanke på potentialen för kommersiella applikationer verkar det osannolikt att de skulle öppna källan, så om privatliv och säkerhet på din mobila webbläsare är särskilt viktigt är det förståeligt att det här inte är en tjänst som du vill använda.

Personligen tycker jag inte att det är underdrivet att kalla denna tjänst verkligen fantastiskt. Jag hörde om det ursprungligen några månader tillbaka, men vid den tiden var det begränsat till att i grund och botten bara kontrollera Spotify - ett bevis på konceptet. Nu när de har lagt till förmågan att skapa personliga kommandon och gränssnitt med någonting, är det ett otroligt kraftfullt system som jag kommer att se framöver för att utgöra grunden för ett komplett Arduino hemautomatiseringssystem. Vilka användningar kan du tänka på för BetterThanSiri?

In this article