Kontroller nesten alt med Siri - No Jailbreak Required

Siri kan være fantastisk til tider, men hun kan bare gjøre hva Apple lar henne gjøre. Ikke nå lenger.

Siri kan være fantastisk til tider, men hun kan bare gjøre hva Apple lar henne gjøre.  Ikke nå lenger.
Annonse

Siri kan være fantastisk til tider, men hun kan bare gjøre hva Apple lar henne gjøre. Ikke lenger: en ny webtjeneste som heter BetterThanSiri, kaster portene helt åpent, og det krever ikke at enheten blir jailbroken for å gjøre bruk av den. I dag skal jeg forklare litt om tjenesten, og vise deg hvordan du kommer i gang med å kontrollere et sett med RGB-lys. Se videoen først for å se den i aksjon.

Hvordan virker dette mørke magiske arbeidet?

Når du spør Siri til «Google» noe, åpner hun Safari-nettleseren og ruter forespørselen din som du forventer. Det er på dette tidspunktet at en HTTP-forespørsel er laget, så hvis du har konfigurert en HTTP-proxy på Internett-tilkoblingen din - en standardfunksjon som ikke krever jailbreaking - går forespørselen via proxyen først.

Nå er her hvor magien er: ved å prefacing kommandoer med "googolplex" blir søkeordet "plex" pluss hva du sier. Proxy - BetterThanSiri.com - identifiserer tilstedeværelsen av "plex" og avlyser søket ditt. Uansett følger det da den faktiske "kommandoen". BetterThanSiri utfører mønstermatching mot ditt personlige utvalg av konfigurerte kommandoer, og kjører den aktuelle koden. Det er virkelig ganske utrolig, og jeg kan ikke vente på å vise deg hvordan du bruker den.

Kontrollere RGB-lys

For å demonstrere BetterThanSiri, har jeg satt opp en grunnleggende IR send- og mottakskrets - se min forrige veiledning på TV-djevelen. Introduksjon av TV-djevelen, en enkel fjernkontroll Arduino Prank. Introduksjon av TV-djevelen, en enkel fjernkontroll Arduino Prank Les mer til lære mer om interaksjon med IR-koder, eller les videre for den kondenserte versjonen. Her er delene du trenger:

  • Arduino, Ethernet skjerm og Ethernet-kabling
  • IR LED, 220 Ohm motstand (avhenger av din spesielle LED, men dette skal nok i de fleste tilfeller), og IR-mottaker
  • RGB LED strip lys, 12V strømforsyning og eksisterende fjernkontroll

restduino-kretsen

Hver fjernkontroll fungerer ved å kode et nummer i pulser med infrarødt lys - for det første må du lære kontrollnummerene som brukes av din bestemte fjernkontroll. Last ned IRremote-biblioteket og start Arduino IDE på nytt. For de fleste IR-mottakere, med kuppelen på LED-lampen mot deg, er pinnene fra venstre til høyre: signal, GND, + 5V.

IR-Recv

Wire i signalet til pin 11 og de andre to som vanlig, og last inn i IRrecvDemo- eksemplet fra biblioteket. Åpne seriekonsollen og start å trykke på knappene på fjernkontrollen. Du bør få noen HEX-verdier. Vi vil faktisk ha disse Hex-verdiene som et langt heltall, så legg til en ny Serial.println uten HEX-delen:

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

Ta opp alle tallene du trenger. I mitt tilfelle fant jeg:

  • Rød: 16195807
  • Grønn: 16228447
  • Blå: 16212127

Hvis du bruker en annen type fjernkontroll, må du kanskje også laste inn IRrecvDump- eksemplet, som også vil sende typen av signal - i mitt tilfelle sendte fjernkontrollen 32-bits (eller 8-sifret) NEC-koder, som gjenspeiles i min endrede serverkode senere - husk å endre det hvis du trenger det.

irrecvdump eksempel

Før du fortsetter, trå i IR-LED-en for sending (den flate siden av LED-lampen går til GND, den andre siden går via en 220 ohm motstand til pin 3), og laster IRsendDemo . Dupliser hovedstyrekommandoen et par ganger og erstatt dine egne IR-koder for å teste dem - legg til en forsinkelse mellom hver enkelt. Last opp, og hvis alt fungerer bra, bør du se lysdiodene dine sykluser gjennom kommandoene du la til.

irsendtest eksempel

Deretter laster du ned RESTduino-pakken - det er et nytt Ethernet-bibliotek der du må legge til og igjen, start Arduino IDE på nytt. RESTduino er en kraftig RESTful web API - den oppretter en server som lytter til innkommende forespørsler med mulighet til å styre pins eller lese verdier fra dem. Prøv den medfølgende demoen først for å sikre at alt fungerer - du må endre MAC-adressen, gjøre serveren IP-statisk og definere en IP på ditt lokale nettverksområde (sannsynligvis 192.168.0.x eller 10.0.1.x ) .

tilpasset-restduino

Du bør da kunne få tilgang til din Arduino fra hvilken som helst nettleser - bare prøv enkle kommandoer for å lese verdiene på analog inngang 1 - for eksempel:

http://10.0.1.99/a1/

Det spiller ingen rolle om ingenting er tilkoblet, vi kontrollerer bare at serveren fungerer. Last opp min modifiserte versjon av denne demoen. Jeg har fjernet pinkontrollen, og erstattet den med IR-kontroll i stedet. Bruk en URL til skjemaet:

http://10.0.1.99/1/IRCODE

Den viktige linjen i den endrede koden er her:

 irsend.sendNEC (strtoul (verdi, NULL, 10), 32); 

Du må endre det hvis fjernkontrollen ikke er av NEC-typen, eller ikke har 32 bits i lengden. Jeg har også lagt til en forsinkelse og gjentatt kommandoen et par ganger, da IR kan være litt upålitelig noen ganger. Endelig sett opp port videresending Hva er port videresending og hvordan kan det hjelpe meg? [MakeUseOf Forklarer] Hva er port videresending og hvordan kan det hjelpe meg? [MakeUseOf Forklarer] Skriker du litt innvendig når noen forteller deg at det er et problem med portoverføring, og derfor vil din skinnende nye app ikke fungere? Din Xbox vil ikke la deg spille spill, dine torrentnedlastinger nekte ... Les mer på ruteren din slik at du kan sende IR-kommandoer fra hvor som helst i verden. Videresend alt på port 80 til den interne IP-adressen til din Arduino. Du bør nå kunne erstatte den interne IP med din offentlige IP, og kontrollen skal fortsatt fungere. Vi kan nå gå over til å sette opp våre egendefinerte kommandoer på BetterThanSiri.com.

Begynn med å registrere deg, og logg inn for å administrere din personlige kommandoliste.

betterthansiri-web-grensesnitt

Ta en titt på de eksisterende kommandoene hvis du er nysgjerrig på hvordan de fungerer, eller bare gå videre og opprett en ny. Navngi kommandoen, og legg til uttrykksmatcheren:

 lys ~ 

setup-new-kommando

Hvilket betyr "denne kommandoen vil samsvare med lys + noe" . Deretter limer du inn koden under - endre dette for å inkludere din offentlige IP-adresse (eller en dynamisk DNS hvis du har en), så vel som setningene du vil ha, og de relevante IR-kodene. Den første variabelen i funksjonen er bare en liten tekst sendt tilbake til nettleseren. Du kan kopiere / lime inn flere av ellers hvis biter for å lage så mange kommandoer som du vil.

 hvis (setning == "lyser på") {respondWithTextAndURL ('Slå på lys', 'http: // YOURIP / 1/16236607'); } ellers hvis (setning == "lyser rødt") {respondWithTextAndURL ('Gjør deg klar for sexy tid', 'http: // YOURIP / 1/16195807'); } annet hvis (setning == "lyser blå") {respondWithTextAndURL ('Arbeidsmodus aktiv', 'http: // YOURIP / 1/16212127'); } annet hvis (setning == "lyser grønt") {respondWithTextAndURL ('Du er merkelig', 'http: // YOURIP / 1/16228447'); } 

Følg instruksjonene for å konfigurere proxyen på enheten. I hovedsak må du bare legge til en automatisk HTTP-proxy (URL: http://totally.betterthansiri.com ) til Internett-tilkoblingen din. Første gang du bruker tjenesten, må du logge på fra mobilenheten din slik at den vet hva dine personlige kommandoer er, men du trenger bare å gjøre dette en gang.

begrensninger

Som du kan se, er BetterThanSiri ganske komplisert system for øyeblikket - det er ingen dra og slipp-grensesnitt, slik at du må forstå grunnleggende om Javascript for å lage ditt eget kommandosett. Når det er sagt, har de utsatt en forferdelig masse makt med muligheten til å legge inn data til tilfeldige nettadresser, enten i bakgrunnen eller bare en omdirigering, slik at vi virkelig ikke kunne be om mer. Du kan alltid bla gjennom eksisterende oppskrifter hvis du ikke er opptatt av å programmere din egen.

Det snakker heller ikke tilbake til deg som Siri gjør. Alle kontoer inkluderer en "fortell meg en vits" -funksjon som ligner på Siri, men vitsene blir utført på skjermen, i nettleseren din. Det er mulig at de kan legge til dette senere ved hjelp av et tredjeparts JavaScript-plugin, men det kan bety økt bruk av båndbredde eller respons.

Endelig er det selvsagt forsinkelsen involvert. Talen din sendes til Apple for behandling i en tekstkommando, sendt tilbake, sendt ut til proxyen, behandlet av BetterThanSiri, og sendt tilbake via Internett til vår lokale Arduino. I demoen tok hver kommando omtrent 5-10 sekunder totalt, og det er usannsynlig at dette noen gang kan forbedres. For hjemmeautomatisering er dette helt akseptabelt, men hvis du prøver å levere informasjon tilbake til brukeren i tide, er det litt frustrerende.

Sikkerhetsproblemer

Ved hjelp av en HTTP-proxy som dette betyr at hver HTTP-forespørsel du lager, blir rutet gjennom deres servere: i teorien kan de undersøke alt du søker etter, hvert nettsted du besøker. Jeg spurte utviklerne om dette, og dette var deres svar:

Definitivt en gyldig bekymring, men vi ser ikke på hver HTTP-forespørsel. Vår proxy autoconfig har en beslutningsmotor som bare ser på HTTP-forespørgene som er relevante for GoogolPlex (med "plex" i dem).

Du kan ta det til pålydende; Det ville være umulig å bevise noe annet, men hvis serverprogramvaren var åpen kildekode (som det ikke er), kan du i det minste kontrollere det og kjøre din egen private server. Gitt potensialet for kommersielle applikasjoner virker det usannsynlig at de vil åpne den, så hvis personvern og sikkerhet på mobilbrowseren din er spesielt viktig, er det forståelig at dette ikke er en tjeneste du vil bruke.

Personlig tror jeg ikke det er underdrivelse å kalle denne tjenesten virkelig fantastisk. Jeg hørte om det først et par måneder tilbake, men da var det begrenset til å bare kontrollere Spotify - et bevis på konsept. Nå som de har lagt til evnen til å lage personlige kommandoer og grensesnitt med noe, er det et utrolig kraftig system som jeg skal se på i fremtiden for å danne grunnlag for et komplett Arduino hjemmeautomatiseringssystem. Hvilke bruksområder kan du tenke på for BetterThanSiri?

In this article