Siri有时会很棒,但她只能做苹果公司允许她做的事情。现在不再是这样:一种名为BetterThanSiri的新Web服务正在向人们敞开大门,并且不需要越狱设备就可以使用它。今天,我将对服务进行一些说明,并向您展示如何开始控制一组RGB灯。首先观看视频以观看视频。
“黑魔法"如何工作?
当您要求Siri使用“ Google"功能时,她会打开Safari浏览器并路由您的请求如您所愿。此时发出了HTTP请求,因此,如果您已经在Internet连接上设置了HTTP代理-不需要越狱的标准功能-请求首先通过代理通过
Now here’s where the magic is: by prefacing commands with “googolplex”, the search term becomes “plex” plus whatever you say. The proxy – BetterThanSiri.com – identifies the presence of “plex” and intercepts your search query. Whatever follows is then considered the actual “command”. BetterThanSiri performs pattern matching against your personal selection of configured commands, and runs the relevant code. It really is quite amazing, and I can’t wait to show you how to use it.
控制RGB灯光
为演示BetterThanSiri,我设置了一个基本的IR发送和接收电路–请参阅我之前在电视恶魔上的教程,以了解有关与之交互的更多信息。 IR代码,或精简版本请继续阅读。这是您需要的部件:
每个遥控器都通过对红外光脉冲中的数字进行编码来工作-因此首先,您需要了解特定遥控器使用的控制编号。下载IRremote库并重新启动Arduino IDE。对于大多数红外接收器,LED圆顶朝向您时,从左到右的针脚分别是:信号,GND,+ 5V。
将信号线正常连接到针脚11和另外两个,然后加载库提供的 IRrecvDemo 示例。打开串行控制台并开始按遥控器上的按钮-您应该获得一些十六进制值。我们实际上希望这些十六进制值是一个长整数,所以添加一个新的 Serial.println 而没有十六进制部分:
Serial.println(results.value, HEX);Serial.println(results.value);
记录所有需要的数字。就我而言,我发现:
如果您使用的是不同种类的遥控器,您可能还需要加载 IRrecvDump 示例,该示例还将输出信号的 type 类型。在我的情况下,遥控器发送的是32位(或8位数字)NEC代码,稍后会在我修改后的服务器代码中反映出来–请记住,如有需要,请进行更改。
在继续操作之前,请连接IR LED进行发送( LED转到GND,另一端通过220欧姆电阻连接到引脚3),并加载 IRsendDemo 。复制主发送命令几次,并替换您自己的IR代码以对其进行测试-在每个命令之间添加一个延迟。上传,如果一切正常,您应该会看到LED循环显示您添加的命令。
下一步,下载RESTduino软件包-有一个替代以太网库,您需要在其中添加并再次添加,重新启动Arduino IDE。 RESTduino是功能强大的RESTful Web API,它创建了一个服务器,该服务器侦听传入的请求,并具有控制引脚或从中读取值的能力。首先尝试尝试包含的演示以确保一切正常-您需要修改MAC地址,使服务器IP保持静态并在本地网络范围(可能是192.168.0.x或10.0)上定义一个IP。 1.x)。
然后您应该可以从任何浏览器访问Arduino了-只需尝试简单的命令来读取模拟输入1上的值即可,例如:
http://10.0.1.99/a1/
是否没有连接都没有关系,我们只是检查服务器是否正常工作。现在,上传此演示的修改后的版本。我剥去了pin控件,只是将其替换为IR控件。使用以下格式的URL:
http://10.0.1.99/1/IRCODE
修改后的代码中的重要行在此处:<
irsend.sendNEC(strtoul( value, NULL, 10 ), 32);
如果您的遥控器不是NEC类型或者不是32位长度,则需要更改它。我还添加了一个延迟,并重复了几次该命令,因为有时IR可能有点不可靠。最后,在路由器上设置端口转发,以便您可以从世界任何地方发送IR命令。将端口80上的所有内容转发到Arduino的内部IP。现在,您应该能够用您的公共IP替换内部IP,并且控件应该仍然起作用。现在,我们可以继续在BetterThanSiri.com上设置我们的自定义命令。
首先注册,然后登录以管理您的个人命令列表。
看看如果您对现有命令的工作方式感到好奇,或者只是继续创建一个新命令。命名命令,并添加短语matcher:
lights ~
这表示“此命令将匹配灯光+任何东西" 。然后粘贴下面的代码–修改它以包括您的公共IP地址(或动态DNS,如果有的话),以及您要匹配的词组和相关的IR代码。函数中的第一个变量只是发送回浏览器的少量文本。您可以复制/粘贴更多的 else 位以创建所需的命令。
if(phrase == "lights on"){ respondWithTextAndURL('Turning lights on','http://YOURIP/1/16236607'); }else if (phrase=="lights red"){ respondWithTextAndURL('Getting ready for sexy time','http://YOURIP/1/16195807');}else if (phrase=="lights blue"){ respondWithTextAndURL('Work mode active','http://YOURIP/1/16212127');}else if (phrase=="lights green"){ respondWithTextAndURL('You\'re weird','http://YOURIP/1/16228447');}
按照说明在设备上设置代理。本质上,您只需要向Internet连接添加自动HTTP代理(URL: http://totally.betterthansiri.com )。第一次使用该服务时,您需要从移动设备登录,以便它知道您的个人命令是什么,但您只需要执行一次。
限制
如您所见,BetterThanSiri目前是一个非常复杂的系统-没有拖放界面,因此您需要了解Javascript的基础知识才能创建自己的命令集。也就是说,他们拥有强大的功能,可以在后台或重定向中将数据发布到随机网址,因此我们真的无所求。如果您不愿意自己编写程序,则可以始终浏览现有的食谱。
它也不会像Siri那样对您说。所有帐户都具有类似于Siri的“讲个笑话"功能,但笑话会在您的Web浏览器中显示在屏幕上。他们有可能稍后会使用第三方JavaScript插件添加此功能,但这可能意味着带宽使用率或响应速度会提高。
最后,当然会涉及延迟。您的语音将发送到Apple,以处理为文本命令,再发送回您,发送到代理,由BetterThanSiri处理,然后通过Internet发送回我们的本地Arduino。在演示中,每个命令总共花费了5到10秒钟左右,而且改进的可能性很小。对于家庭自动化,这是完全可以接受的,但是如果您试图及时地将信息传递回用户,那会有些令人沮丧。
安全问题
这样的HTTP代理意味着您发出的每个HTTP请求均通过其服务器进行路由:理论上,他们可以检查您搜索的所有内容,访问的每个站点。我问了一下开发人员,这是他们的回应:
绝对是一个有效的问题,但是我们不会查看每个HTTP请求。我们的代理服务器自动配置具有一个决策引擎,该决策引擎仅查看与GoogolPlex相关的HTTP请求(其中包含“ plex")。
您可以从容面对;否则不可能证明,但是如果服务器软件是开源的(不是),则至少可以验证并运行自己的私有服务器。鉴于商业应用程序的潜力,他们似乎不太可能将其开源。因此,如果您的移动浏览器上的隐私和安全性特别重要,则可以理解,这不是您要使用的服务。
标签: