Bedien vrijwel alles met Siri - Geen Jailbreak vereist
Siri kan soms verbazingwekkend zijn, maar ze kan alleen doen wat Apple haar toestaat. Niet meer: een nieuwe webservice genaamd BetterThanSiri gooit de poorten wijd open, en het vereist niet dat uw apparaat gejailbreakt wordt om er gebruik van te maken. Vandaag zal ik een beetje uitleggen over de service en laten zien hoe u aan de slag kunt met het besturen van een reeks RGB-lampen. Bekijk eerst de video om deze in actie te zien.
Hoe werkt deze donkere magie?
Wanneer je Siri ernaar vraagt “Google” iets, ze opent Safari-browser en routeert uw verzoek zoals u zou verwachten. Het is op dit moment dat er een HTTP-verzoek wordt gedaan, dus als u een HTTP-proxy heeft ingesteld voor uw internetverbinding, een standaardfunctie die geen jailbreak vereist, gaat het verzoek via de proxy eerste.
Hier is waar de magie is: door opdrachten vooraf te geven met “googolplex”, de zoekterm wordt “plex” plus wat je ook zegt. De proxy - BetterThanSiri.com - identificeert de aanwezigheid van “plex” en onderschept uw zoekopdracht. Wat hierna volgt, wordt dan als het werkelijke beschouwd “commando”. BetterThanSiri voert patroonafstemming uit tegen uw persoonlijke selectie van geconfigureerde opdrachten en voert de relevante code uit. Het is echt ongelooflijk, en ik kan niet wachten om je te laten zien hoe je het moet gebruiken.
RGB-licht regelen
Om BetterThanSiri te demonstreren, heb ik een basis IR-verzend- en -ontvangstcircuit ingesteld - zie mijn vorige tutorial over de duivelse grap van tv Introductie van de TV Devil, een gemakkelijke afstandsbediening Arduino Prank Introductie van de TV Devil, een gemakkelijke afstandsbediening Arduino Prank Lees meer leer meer over de interactie met IR-codes, of lees verder voor de verkorte versie. Dit zijn de onderdelen die je nodig hebt:
- Arduino, Ethernet-shield en Ethernet-bekabeling
- IR-LED, 220 Ohm weerstand (afhankelijk van uw specifieke LED, maar dit zou in de meeste gevallen voldoende moeten zijn) en IR-ontvanger
- RGB LED-stripverlichting, 12V-voeding en bestaande afstandsbediening
Elke afstandsbediening werkt door een nummer te coderen in impulsen van infraroodlicht - dus eerst moet u de controlenummers leren kennen die door uw specifieke afstandsbediening worden gebruikt. Download de IRremote-bibliotheek en start de Arduino IDE opnieuw. Voor de meeste IR-ontvangers, met de koepel van de LED naar u toe gericht, zijn de pinnen van links naar rechts: signaal, GND, + 5 V.
Bedraad het signaal naar pin 11 en de andere twee zoals gebruikelijk, en laad de IRrecvDemo voorbeeld geleverd door de bibliotheek. Open de seriële console en druk op de knoppen op uw afstandsbediening - u zou enkele HEX-waarden moeten krijgen. We willen die Hex-waarden eigenlijk als een lang geheel getal, dus voeg een nieuw toe Serial.println zonder het HEX-onderdeel:
Serial.println (results.value, HEX); Serial.println (results.value);
Noteer alle nummers die u nodig hebt. In mijn geval vond ik:
- Rood: 16195807
- Groen: 16228447
- Blauw: 16212127
Als u een ander soort afstandsbediening gebruikt, moet u mogelijk ook de IRrecvDump bijvoorbeeld, die ook de type van het signaal - in mijn geval stuurde de afstandsbediening 32-bits (of 8-cijferige) NEC-codes, wat later in mijn gewijzigde servercode wordt weergegeven - vergeet niet om dat te veranderen als je dat nodig hebt.
Voordat u doorgaat, sluit u uw IR-LED aan voor verzending (de platte kant van de LED gaat naar GND, de andere kant gaat via een weerstand van 220 Ohm naar pin 3) en laadt de IRsendDemo. Dupliceer de hoofdopdracht voor verzenden een paar keer en vervang uw eigen IR-codes om ze te testen - voeg een vertraging toe tussen elke code. Upload, en als alles goed werkt, zouden uw LED's door de commando's moeten bladeren die u hebt toegevoegd.
Download vervolgens het RESTduino-pakket - er is een vervangende Ethernet-bibliotheek die u moet toevoegen en opnieuw, herstart de Arduino IDE. RESTduino is een krachtige RESTful web-API - het maakt een server, die luistert naar binnenkomende verzoeken met de mogelijkheid om pinnen te besturen of er waarden uit te lezen. Probeer de meegeleverde demo eerst uit om te controleren of alles werkt: u moet het MAC-adres wijzigen, de server-IP statisch maken en een IP-adres definiëren in uw lokale netwerkbereik (waarschijnlijk 192.168.0.x of 10.0.1.x).
Je zou dan vanuit elke browser toegang moeten kunnen krijgen tot je Arduino - probeer eenvoudig simpele commando's om de waarden op analoge ingang 1 te lezen - bijvoorbeeld:
http://10.0.1.99/a1/
Het maakt niet uit of er niets is verbonden, we controleren alleen of de server werkt. Upload nu mijn gewijzigde versie van deze demo. Ik heb de pinbesturing eruit gehaald en heb deze in plaats daarvan vervangen door IR-bediening. Gebruik een URL van het formulier:
http://10.0.1.99/1/IRCODE
De belangrijke regel in de gewijzigde code is hier:
irsend.sendNEC (strtoul (waarde, NULL, 10), 32);
U moet dit wijzigen als uw afstandsbediening niet van het NEC-type is of niet uit 32 bits bestaat. Ik heb ook een vertraging toegevoegd en het commando een paar keer herhaald, omdat IR soms een beetje onbetrouwbaar kan zijn. Tot slot, stel poort doorsturen in. Wat is poort doorsturen en hoe kan het mij helpen? [MakeUseOf Explains] Wat is Port Forwarding en hoe kan het mij helpen? [MakeUseOf Explains] Huil je een beetje naar binnen als iemand je vertelt dat er een probleem is met de poortdoorsturing en daarom zal je glanzende nieuwe app niet werken? Je Xbox laat je geen games spelen, je torrent-downloads weigeren ... Lees meer op je router zodat je IR-opdrachten kunt verzenden van overal ter wereld. Stuur alles door op poort 80 naar de interne IP van je Arduino. U zou nu het interne IP-adres moeten kunnen vervangen door uw openbare IP en het besturingselement zou nog steeds moeten werken. We kunnen nu overgaan naar het instellen van onze aangepaste opdrachten op BetterThanSiri.com.
Begin met het aanmelden en meld je aan om je persoonlijke opdrachtenlijst te beheren.
Bekijk de bestaande opdrachten als je nieuwsgierig bent naar hoe ze werken, of ga gewoon door en maak een nieuwe aan. Geef de opdracht een naam en voeg de woordgroep-matcher toe:
lichten ~
Wat betekent “deze opdracht komt overeen met lichten + alles”. Plak vervolgens de onderstaande code in: pas deze aan om uw openbare IP-adres (of een dynamische DNS-code) op te nemen, evenals de frases die u wilt laten matchen en de relevante IR-codes. De eerste variabele in de functie is slechts een kleine tekst teruggestuurd naar de browser. U kunt meer van de kopiëren en plakken anders als bits om zoveel opdrachten te maken als u wilt.
if (zin == "licht op") respondWithTextAndURL ('Lichten aan', 'http: // YOURIP / 1/16236607'); else if (phrase == "brandt rood") respondWithTextAndURL ('Klaar voor sexy tijd', 'http: // YOURIP / 1/16195807'); else if (phrase == "light blue") respondWithTextAndURL ('Werkmodus actief', 'http: // YOURIP / 1/16212127'); else if (phrase == "lights green") respondWithTextAndURL ('Je bent raar', 'http: // YOURIP / 1/16228447');
Volg de instructies om de proxy op uw apparaat in te stellen. In feite hoeft u alleen maar een automatische HTTP-proxy toe te voegen (URL: http://totally.betterthansiri.com) naar uw internetverbinding. De eerste keer dat u de service gebruikt, moet u inloggen vanaf uw mobiele apparaat, zodat het weet wat uw persoonlijke opdrachten zijn, maar u hoeft dit slechts een keer te doen.
beperkingen
Zoals je kunt zien, is BetterThanSiri op dit moment een vrij complex systeem - er is geen interface met slepen en neerzetten, dus je moet de basisprincipes van Javascript begrijpen om je eigen commandoset te maken. Dat gezegd hebbende, ze hebben ontzettend veel macht blootgelegd met de mogelijkheid om gegevens op willekeurige URL's te plaatsen, hetzij op de achtergrond of alleen maar een omleiding, dus we konden echt niet om meer vragen. U kunt altijd bladeren door bestaande recepten als u niet klaar bent om uw eigen recepten te programmeren.
Het spreekt ook niet tegen jou zoals Siri dat doet. Alle accounts bevatten een “vertel me een grap” functie vergelijkbaar met Siri, maar de grappen worden uitgevoerd op het scherm, in uw webbrowser. Het is mogelijk dat ze dit later zouden kunnen toevoegen met behulp van een JavaScript-plug-in van een derde partij, maar dit kan betekenen dat er meer bandbreedte wordt gebruikt of dat er sneller op wordt gereageerd.
Ten slotte is er natuurlijk ook de vertraging. Uw toespraak wordt naar Apple gestuurd voor verwerking in een tekstcommando, teruggestuurd, verzonden naar de proxy, verwerkt door BetterThanSiri en vervolgens via internet teruggestuurd naar onze lokale Arduino. In de demo nam elk commando ongeveer 5-10 seconden in totaal, en het is onwaarschijnlijk dat dit ooit kan worden verbeterd. Voor domotica is dit volkomen acceptabel, maar als u probeert tijdig informatie aan de gebruiker te bezorgen, is dat een beetje frustrerend.
Beveiligingsproblemen
Het gebruik van een HTTP-proxy als deze betekent elke HTTP-aanvraag je maakt wordt gerouteerd via hun servers: in theorie kunnen ze alles waar je naar zoekt, elke site die je bezoekt, onderzoeken. Ik vroeg de ontwikkelaars hierover, en dit was hun antwoord:
Zeker een goede zorg, maar we kijken NIET naar elk HTTP-verzoek. Onze proxy-autoconfig heeft een beslissingsengine die alleen kijkt naar de HTTP-verzoeken die relevant zijn voor GoogolPlex (met “plex” in hen).
Je kunt dat op zijn kop nemen; het zou onmogelijk zijn om het tegendeel te bewijzen, maar als de serversoftware open source was (wat het niet is), zou je dat op zijn minst kunnen verifiëren en een eigen server kunnen draaien. Gezien het potentieel voor commerciële toepassingen lijkt het onwaarschijnlijk dat ze het opensource openen, dus als privacy en beveiliging in je mobiele browser bijzonder belangrijk is, is het begrijpelijk dat dit geen service is die je wilt gebruiken.
Persoonlijk vind ik het geen understatement om deze service echt geweldig te noemen. Ik hoorde er aanvankelijk een paar maanden geleden over, maar in die tijd was het beperkt tot het feitelijk regelen van Spotify - een proof of concept. Nu ze de mogelijkheid hebben toegevoegd om persoonlijke commando's te maken en met wat dan ook te kunnen communiceren, is het een ongelooflijk krachtig systeem dat ik in de toekomst opnieuw zal bekijken en de basis zal vormen voor een compleet Arduino-domoticasysteem. Welk gebruik kun je bedenken voor BetterThanSiri?
Ontdek meer over: Siri.