Kontroller stort set alt sammen med Siri - Ingen jailbreak påkrævet

Siri kan være fantastisk til tider, men hun kan kun gøre hvad Apple tillader hende at gøre. Ikke mere.

Siri kan være fantastisk til tider, men hun kan kun gøre hvad Apple tillader hende at gøre.  Ikke mere.
Reklame

Siri kan være fantastisk til tider, men hun kan kun gøre hvad Apple tillader hende at gøre. Ikke længere: en ny webservice kaldet BetterThanSiri kaster portene helt åbne, og det kræver ikke, at din enhed bliver jailbroken for at gøre brug af den. I dag forklarer jeg lidt om tjenesten, og viser dig hvordan man kommer i gang med at kontrollere et sæt RGB-lys. Se videoen først for at se den i aktion.

Hvordan virker denne mørke magi?

Når du spørger Siri til "Google" noget, åbner hun Safari-browser og ruter din forespørgsel som du ville forvente. Det er på dette tidspunkt, at der er lavet en HTTP-anmodning, så hvis du har oprettet en HTTP-proxy på din internetforbindelse - en standardfunktion, der ikke kræver jailbreaking - går anmodningen først via proxyen .

Nu er her hvor magien er: ved at prefacing kommandoer med "googolplex" bliver søgeordet "plex" plus hvad du siger. Proxy - BetterThanSiri.com - identificerer tilstedeværelsen af ​​"plex" og aflyser dit søgeforespørgsel. Hvad som helst følger, anses da for den faktiske "kommando". BetterThanSiri udfører mønster matching til dit personlige udvalg af konfigurerede kommandoer, og kører den relevante kode. Det er virkelig helt fantastisk, og jeg kan ikke vente med at vise dig, hvordan du bruger det.

Styring af RGB-lys

For at demonstrere BetterThanSiri, har jeg konfigureret et grundlæggende IR send og modtag kredsløb - se min tidligere vejledning om tv-djævelen. Introduktion til tv-djævelen, en nem fjernbetjening Arduino Prank Introduktion til tv-djævelen, en nem fjernbetjening Arduino Prank Læs mere til lære mere om interaktion med IR-koder, eller læs videre til den kondenserede version. Her er de dele, du har brug for:

  • Arduino, Ethernet-skærm og Ethernet-kabling
  • IR LED, 220 Ohm modstand (afhænger af din særlige LED, men dette skal nok være i de fleste tilfælde), og IR-modtager
  • RGB LED strip lys, 12V strømforsyning og eksisterende fjernbetjening

restduino-kredsløb

Hver fjernbetjening virker ved at kode et nummer i pulser af infrarødt lys - så først skal du lære de kontrolnumre, der bruges af din fjernbetjening. Download IRremote-biblioteket og genstart Arduino IDE. For de fleste IR-modtagere, med LED'en på LED'en, står stifterne fra venstre mod højre: signal, GND, + 5V.

IR-recv

Tråd i signalet til pin 11 og de andre to som sædvanligt, og indlæs i IRrecvDemo- eksemplet fra biblioteket. Åbn seriekonsollen og start tryk på knapperne på din fjernbetjening - du skal få nogle HEX værdier. Vi ønsker faktisk disse Hex-værdier som et langt heltal, så tilføj en ny Serial.println uden HEX-delen:

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

Optag alle de numre, du har brug for. I mit tilfælde fandt jeg:

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

Hvis du bruger en anden slags fjernbetjening, skal du muligvis også indlæse IRrecvDump- eksemplet, som også udsender typen af signal - i mit tilfælde sendte fjernbetjeningen 32-bit (eller 8-cifret) NEC-koder, som afspejles i min ændrede serverkode senere - husk at ændre det, hvis du har brug for det.

irrecvdump-eksempel

Før du fortsætter, træk i din IR LED til afsendelse (den flade side af LED'en går til GND, den anden side går via en 220 ohm modstand til pin 3), og indlæser IRsendDemo . Dupliker hovedstartkommandoen et par gange og erstat dine egne IR-koder for at teste dem - tilføj en forsinkelse mellem hver enkelt. Upload, og hvis alt fungerer godt, skal du se dine LED'er cykle gennem de kommandoer, du tilføjede.

irsendtest-eksempel

Dernæst download RESTduino-pakken - der er et udskiftet Ethernet-bibliotek der skal du tilføje og igen, genstart Arduino IDE. RESTduino er en kraftfuld RESTful web API - den opretter en server, der lytter til indgående forespørgsler med mulighed for at styre pins eller læse værdier fra dem. Prøv den medfølgende demo først for at sikre, at alt fungerer - du skal ændre MAC-adressen, gøre serveren IP-statisk og definere en IP på dit lokale netværkskort (sandsynligvis 192.168.0.x eller 10.0.1.x ) .

tilpassede-restduino

Du skal derefter kunne få adgang til din Arduino fra enhver browser - prøv bare enkle kommandoer til at læse værdierne på analog input 1 - for eksempel:

http://10.0.1.99/a1/

Det betyder ikke noget, om intet er forbundet, vi kontrollerer bare, at serveren fungerer. Upload nu min ændrede version af denne demo. Jeg har fjernet pin-styringen, og erstattet det med IR-kontrol i stedet. Brug en URL til formularen:

http://10.0.1.99/1/IRCODE

Den vigtige linje i den ændrede kode er her:

 irsend.sendNEC (strtoul (værdi, NULL, 10), 32); 

Du skal ændre det, hvis din fjernbetjening ikke er af NEC-typen eller ikke er 32 bit lang. Jeg har også tilføjet en forsinkelse og gentaget kommandoen et par gange, da IR kan være lidt upålitelig nogle gange. Endelig indstiller port forwarding Hvad er port videresending og hvordan kan det hjælpe mig? [MakeUseOf Forklarer] Hvad er port videresending & Hvordan kan det hjælpe mig? [MakeUseOf Forklarer] græder du lidt inde, når nogen fortæller dig, at der er et port forwarding problem, og derfor vil din skinnende nye app ikke virke? Din Xbox vil ikke lade dig spille spil, dine torrent downloads nægter ... Læs mere på din router, så du kan sende IR-kommandoer fra hvor som helst i verden. Videresend alt på port 80 til den interne IP af din Arduino. Du skal nu kunne erstatte den interne IP med din offentlige IP, og kontrollen skal stadig fungere. Vi kan nu gå over til at oprette vores brugerdefinerede kommandoer på BetterThanSiri.com.

Start med at tilmelde dig, og log ind for at administrere din personlige kommandoliste.

betterthansiri-web-grænseflade

Tag et kig på de eksisterende kommandoer, hvis du er nysgerrig efter, hvordan de virker, eller bare gå videre og opret en ny. Navngiv kommandoen, og tilføj sætningen matcher:

 lys ~ 

setup-ny-kommando

Hvilket betyder "denne kommando vil matche lys + noget" . Indsæt derefter i koden nedenfor - ændre dette for at inkludere din offentlige IP-adresse (eller en dynamisk DNS, hvis du har en), samt de sætninger, du vil have matchet, og de relevante IR-koder. Den første variabel i funktionen er bare en lille tekst, der sendes tilbage til browseren. Du kan kopiere / indsætte flere af de andre, hvis der er bits til at oprette så mange kommandoer, som du vil have.

 hvis (sætning == "lyser på") {respondWithTextAndURL ('Tænd lyser', 'http: // YOURIP / 1/16236607'); } ellers hvis (sætning == "lyser rødt") {respondWithTextAndURL ('Gør dig klar til sexetid', 'http: // YOURIP / 1/16195807'); } ellers hvis (sætning == "lyser blå") {respondWithTextAndURL ('Arbejdsmodus aktiv', 'http: // YOURIP / 1/16212127'); } ellers hvis (sætning == "lyser grønt") {respondWithTextAndURL ('Du er rar', 'http: // YOURIP / 1/16228447'); } 

Følg vejledningen for at indstille proxyen på din enhed. I det væsentlige skal du blot tilføje en automatisk HTTP-proxy (URL: http://totally.betterthansiri.com ) til din internetforbindelse. Første gang du bruger tjenesten, skal du logge ind fra din mobilenhed, så den ved, hvad dine personlige kommandoer er, men det skal du kun gøre én gang.

Begrænsninger

Som du kan se, er BetterThanSiri et ganske komplekst system i øjeblikket - der er ingen træk og slip interface, så du skal forstå det grundlæggende i Javascript for at oprette dit eget kommandosæt. Når det er sagt, har de udsat en forfærdelig masse strøm med evnen til at sende data til tilfældige webadresser enten i baggrunden eller bare en omdirigering, så vi kunne virkelig ikke spørge om mere. Du kan altid gennemse eksisterende opskrifter, hvis du ikke er klar til at programmere dine egne.

Det taler heller ikke tilbage til dig som Siri gør. Alle konti indeholder en "fortæl mig en joke" -funktion svarende til Siri, men vittighederne bliver udgivet på skærmen, i din webbrowser. Det er muligt, de kunne tilføje dette senere ved hjælp af et tredjeparts JavaScript-plugin, men det kan betyde øget brug af båndbredde eller lydhørhed.

Endelig er der selvfølgelig forsinkelsen involveret. Din tale sendes til Apple til behandling i en tekstkommando, sendt tilbage til dig, sendt til proxyen, behandlet af BetterThanSiri og derefter sendt tilbage via internettet til vores lokale Arduino. I demoen tog hver kommando omkring 5-10 sekunder i alt, og det er usandsynligt, at det nogensinde kan forbedres. For hjemmeautomatisering er dette helt acceptabelt, men hvis du forsøger at levere information tilbage til brugeren rettidigt, er det lidt frustrerende.

Sikkerhedsmæssige bekymringer

Ved hjælp af en HTTP-proxy, betyder det, at hver HTTP-anmodning du foretager, bliver sendt via deres servere. I teorien kan de undersøge alt, hvad du søger efter, hvert websted, du besøger. Jeg spurgte udviklerne om dette, og det var deres svar:

Absolut en gyldig bekymring, men vi ser ikke på hver HTTP-anmodning. Vores proxy autoconfig har en beslutningsmotor, der kun ser på HTTP-anmodningerne, der er relevante for GoogolPlex (med "plex" i dem).

Du kan tage det til pålydende værdi; Det ville være umuligt at bevise andet, men hvis serversoftwaren var åben kilde (som det ikke er), kunne du i det mindste kontrollere det og køre din egen private server. I betragtning af potentialet for kommercielle applikationer forekommer det usandsynligt, at de vil åbne det, så hvis privatlivets fred og sikkerhed på din mobilbrowser er særlig vigtig, er det forståeligt, at dette ikke er en tjeneste, du vil bruge.

Personligt tror jeg ikke, det er underdrivelse at kalde denne service virkelig fantastisk. Jeg hørte om det oprindeligt et par måneder tilbage, men på det tidspunkt var det begrænset til at kun kontrollere Spotify - et bevis på konceptet. Nu hvor de har tilføjet evnen til at oprette personlige kommandoer og interface med noget, er det et utroligt stærkt system, jeg vil i fremtiden revidere for at danne grundlag for et komplet Arduino hjemmeautomatiseringssystem. Hvilke anvendelser kan du tænke på til BetterThanSiri?

In this article