通过手机来控制家电

心血来潮想通过树莓派对家里的电器进行控制,网上查了不少资料,决定动手一试。首先决定对电暖器开刀,这个电脑有一个红外的遥控器,可以开关、定时、设定高低档功能,我要做的就是模拟遥控器对其发出指令。初级篇,通过电脑命令行进行控制,高级篇使用手机进行控制。

参照baoxiaozhong的红外接收http://www.shumeipai.net/thread-12265-1-1.html 设置好了红外接收器,然后尝试用相似的方法实现了红外发射器,成功控制电暖器,后续将考虑控制电视,空调等 设备。

初级篇:用电脑来控制电暖器

原理:

先通过红外接收模块,采集遥控器的指令,然后通过红外发射器模块模拟遥控器发送红外指令控制。

环境:xbian 1.0 alpha4

硬件:taobao上淘的10多块一个的红外接收模块及红外接收模块,此处不发地址,免得广告嫌疑。

连接方式:

红外接收器
vcc 连 pin1 (3.3v)
gnd 连 pin6(ground)
data连 pin12(gpio18)
红外发射器
vcc 连pin2(5v)
gnd连pin6(ground)
data连pin11(gpio17)

为什么这么连,我查了很久资料,后来在lirc_rpi原作者网站看到了,大概固定在程序里面了。
地址:http://aron.ws/projects/lirc_rpi/

步骤:
先通过红外接收器接收遥控器的编码,请参照http://www.shumeipai.net/thread-12265-1-1.html.
在用户目录生成了lircd.conf文件

我生成了KEY_UP,KEY_DOWN,KEY_0,KEY_1等分别代替开启、定时、低、高四个按钮

然后将它拷贝到/etc/lirc/remotes下,
sudo cp /home/xbian/lircd.conf /etc/lirc/remotes/xxx.conf (xxx随便你起名字,但是要和后面统一)
sudo vi xxx.conf
修改 name /home/xbian/lircd.conf 为 name xxx

sudo /etc/lirc/lircd.conf
增加一行

include “/etc/lirc/remotes/xxx.conf”

保存退出
现在可以测试了
sudo irsend SEND_ONCE xxx KEY_ON
sudo irsend SEND_ONCE xxx KEY_TIMER
sudo irsend SEND_ONCE xxx KEY_LOW
sudo irsend SEND_ONCE xxx KEY_HIGH

开始享受电暖器滴滴接收命令的的声音吧。

高级篇:通过手机来控制电暖器

安装LNMP
参照http://geekpi.cn/blog/2012/10/1908

apt-get install mysql-server mysql-client nginx php5 php5-fpm php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps
php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

mysql我没有做优化

配置nginx
先配置/etc/nginx/nginx.conf,需要做的就是限定线程数和开启gzip支持,gzip开启后将大幅降低传输html的流量占用。

worker_processes 1; #只有一个CPU,单进程即可

worker_connections 256; #一般支持100在线连接就达到raspberry pi的极限了

gzip on; #gzip开启取消前面的#让默认设置生效即可
gzip_disable “msie6”;

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

接下来设置/etc/nginx/sites-avaliable/default ,配置站点属性

root /var/www ; #站点存储位置

index index.php index.html index.htm; #加入index.php为默认页面

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

#开启php解析,使用php-fpm作为Fastcgi通信模块

然后配置php sudo权限,这样php执行命令的时候不需要输入自己的密码
为 nginx,而想透过 PHP 发送irsend,用 root 输入指令 vi /etc/sudoers,
在档案最底加上以下一行:

www-data ALL=NOPASSWD: /usr/local/bin/irsend

在/usr/share/nginx/www/下 编写cmd.php

<?php
$cmd = $_POST[‘cmd’];
if(!$cmd){
$cmd = $_GET[‘cmd’];
}
$device = $_POST[‘device’];
if(!$device){
$device = $_GET[‘device’];
}
if($cmd&$device){
$cmdline = “/usr/bin/sudo /usr/local/bin/irsend SEND_ONCE “.$device.” “.$cmd ;
echo($cmdline);
$output = shell_exec($cmdline);
echo($output);
}
?>

然后就可以通过http://ip地址/cmd.php?cmd=KEY_UP&device=xxx控制你的设备了。
这里的xxx是可以不同设备的哦。看你前面irrecord里面配置的

当然这种方式操作不方便,和shell操作差不多,所以可以自己做一个html页面,放上若干按钮,每个按钮分别调用cmd.php上面的指令。

这是个简单的例子

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<meta name=”apple-mobile-web-app-capable” content=”yes”>
<title>智能家庭控制台</title>
<script type=”text/javascript” src=”js/jquary-1.7.1.js”></script>
<script type=”text/javascript”>
var xmlHttp;
//创建XMLHttpRequest对象
function createXMLHttpRequest(){
if (window.ActiveXObject){
xmlHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}else if (window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
function checkMe(url){
createXMLHttpRequest();
xmlHttp.open(“post”,url,true);
xmlHttp.onreadystatechange=send; //用send函数进行发数
xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded;”);
xmlHttp.send(null);
}
function send(){
//alert(“指令成功发送!”);
}
</script>
</head>

<body>

<div id=”content”>
<div id=”menu_mode”>
<ul>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_ON&device=heater’)” value=”开/关”/></li>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_LOW&device=heater’)” value=”低档”/></li>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_HIGH&device=heater’)” value=”高档”/></li>
<li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_HIGH&device=heater’)” value=”定时”/></li>
</ul>
</div>
</div>
</body>
</html>

然后通过http://ip地址/index.html访问

对于使用iphone或者ipad的用户,还可以把网页快捷方式放到主屏幕,打开就是一个操作界面,是不是很来福啊?

安装Siri Proxy

本文为本站首发,树莓派论坛转载,如果需要转载请注明作者及出处。

原文地址:

How to Install Siri Proxy Tutorial [Video]

安装之前,需要下面几个先决条件:
1.最好安装一个ubuntu.可以实际安装一台机器,也可以装在虚拟机上
2.只能安装在4s上,我未测试其他设备,可能不能工作,而且不合法
3.只有连上wifi的时候才可用,并且iphone和siri proxy在一个局域网内。虽然可以通过vpn远程,但是我尽量保持简单和直接
4.本文只覆盖初始化安装,以后我告诉你们如何增加一些插件来增加体验
5.任何人都可以做到,包括你,不要害怕
6.最后,感谢Pete创建了SiriProxy,并提供基础

如何安装:
预备步骤:
1.如果已经有了ubuntu,直接下一步。没有的话,可以在windows或者mac上装一个,mac上可以装Parallels或者vmware fusion运行ubuntu虚拟机,我用的是parallels
2.安装ubuntu的最新更新,参看视频1:00时刻(视频需要翻墙)
3.如果你用paralles或者其他虚拟机,需要设置虚拟机实通过bridge模式,这样可以联上互联网,参看视频4:00
4.设置dropbox,这是个可选步骤,我觉得这样方便一些。你需要有地方传输你iphone上生成的证书,你可以用邮箱,我用的是dropbox

命令行步骤:

这些步骤都可以参考视频,每个都有时间戳作为参考。简单的在终端复制粘贴这些命令,然后按照指令执行。

命令1:时间:5:44(此处安装必要的库)
sudo apt-get install dnsmasq ruby build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
选择y继续,

命令2:时间6:13
sudo nano /etc/dnsmasq.conf
找到62行: #address=/double-click.net/127.0.0.1
在他下面增加:address=/guzzoni.apple.com/(你机器的ip地址)
按ctrl+o,回车保存,按ctrl+x退出

命令03: Time 7:42
sudo /etc/init.d/dnsmasq restart

命令 04: Time 7:55
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
命令 05: Time 8:20
[[ -s “$HOME/.rvm/scripts/rvm” ]] && . “$HOME/.rvm/scripts/rvm”
命令 06: Time 8:33
echo ‘[[ -s “$HOME/.rvm/scripts/rvm” ]] && . “$HOME/.rvm/scripts/rvm” # Load RVM function’ >> ~/.bash_profile
命令 07: Time 8:47
rvm install 1.9.3

这条命令需要执行一段时间,尤其编译阶段

命令 08: Time 9:22
rvm use 1.9.3 –default
命令 09: Time 9:32
git clone git://github.com/plamoni/SiriProxy.git
命令 10: Time 9:49
cd SiriProxy
选择y继续(我感觉不对,没有去验证)

命令 11: Time 10:06
rake install
命令 12: Time 10:21
mkdir ~/.siriproxy
命令 13: Time 10:31
cp ./config.example.yml ~/.siriproxy/config.yml
命令 14: Time 10:43
siriproxy gencerts
命令 15: Time 11:04
siriproxy bundle
命令 16: Time 11:23
rvmsudo siriproxy server
这条命令启动Siri Proxy,成功的话,会提示”Starting SiriProxy on port 443..”

在iphone 4s上设置

1.首先你要取得我们在上面第14步生成的证书,在4s上安装。你可以使用dropbox或者邮件传输到iphone,看视频的11:40
这个证书在 ~/.siriproxy/ca.pem,你需要查看隐藏文件,一旦证书到你的iphone,选择安装,参照视频12:44

2.进入iphone wifi设置,选择wifi连接左边蓝色简单按钮,记住,你的手机需要和你的siriproxy在一个局域网。在dns那里,把dns修改为siriproxy的ip地址,参看视频12:59

3.测试siri,按住home键,说“test siri proxy”,siri会回复你,“siri proxy is up and running”,在你的终端上面会显示你的语音包。

虽然看起来很复杂,你大概需要不到一个小时。

通过树莓派从近太空发回实时图像 [翻译]

原文地址:

http://www.daveakerman.com/?p=592

越来越多的人喜欢访HAB(放高空气球),爱好者使用标准气象气球将小设备(一般100克到1公斤)发送到近太空(大概距地面30公里),一般会携带跟踪设备(这样可以在飞行过程中知道气球的位置),并且通常会带一些传感器(比如温度、压力等),有的还携带摄像机或照相机,将照片保存在SD卡中,方便之后取回。 跟踪器的作用是从GPS接收器读取作为,可能的话,读取传感器的内容,按照一定的格式通过低功率无线设备发回地面。飞行必须通过预定的路线,保证安全的情况下飞行,比如说避开机场和人口密集地区,并申请许可,比如在英国需要的到CAA的许可。我们使用70厘米无线频率(大概是434MHz),使用RTTY(无线电报)发送遥感信息到一些地面由其他爱好者建的接收站。从接收器接收到的遥感信号都会发送到中央服务器,并画出实时的地图,只要连上英特网大家都能看到。这个系统运行的非常好,已经被用来跟踪800公里距离的小设备,但是发射器必须低于英国法律规定的10mW。

五月初我接收到我第一个树莓派计算机,在我准备利用飞行计算机之前,已经放飞了好几次高空气球。前几次基本都是用Arduino迷你板,因为它很小,轻到几乎没有,简单,并且很省电。对比Pi,感觉它没有任何优势。当我看到它的usb口可以提供快速、简单、廉价网络摄像头,也就是说我可以提供实时地照片(SSDV),这个大概尝试的人不多。

近太空是个比较恶劣的环境 – 不到1%的空气,温度低至零下50度,任何一个东西出问题,他就会一直出问题。无线链接是单向的,也就是说没有机会远程做类似”sudo reboot”的操作,让它关机并重新启动!下降过程非常暴力,所以即使是SD卡插座也是一个潜在的失败因素。PI比我们通常的主板复杂,没有SD卡,没有USB,甚至没有操作系统,所以额外的电力和功能都是由代价的,第一个是增加大约60-500毫安的电流,意味着更高的功耗。人们一直都担心近太空的低温,如果你的设备只靠几瓦的电力驱动,这也许就不再是个问题。我反而更担心设备中间变得太热,所以我在PI上加了散热片。

我用特殊的热粘合胶把散热片粘在USB/以太网芯片上以及3.3v稳压器上。他们通常都会变暖但是不会太热,我担心在1%稀薄空气中(对流太少)他们会变得太热。你还可以看到有两条线直接连接5V,比使用一个连接器,焊接更可靠一些。另外一个修改是拆除了S2的视频接口,可以增加空间容纳我的扩展板。最后的修改是降低USB保险,因为我的摄像头电流需求超过其额定值。然后我增加了一块板来安装Radiometrix NTX2无线发射器来发送遥测及图像到地面,并连接到一个简单的GPS接收器上的线尾,这样他可以远离我的发射器。

最后的一项是合适的电源。劲量锂AA电池是显而易见的选择,因为它们可以在零下40摄氏度条件下工作到,而且适合大电流(500mA以上的PI加上网络摄像头)。在30公里上空,通常会降到零下50度,即使只有最少绝缘,电池自身发热也能保证其在可控范围。PI需要5V电压,所以我用6个AA电池加一个外部的低压降线形稳压器给它提供足够的电压,直到没电为止。稳压器大概有3瓦,所以需要一个散热片。对于小负载来说,这个热量太高,因为这是绝缘体。当然你也不想它变得太冷,因为这样也会影响其它部件。我订购了一些开关稳压器,但是在我放飞之前还没到货,我只好用线性稳压器。

通常,NTX2通过GPIO口发送1或者0,以一定的速率发送无线电报(RTTY),比如每隔20ms,按照50波特率。如果是在AVR或者PIC单片机上,这个非常容易,只需要设置延时或者时间中断。但是Pi运行的不

是实时操作系统,我无法控制一个正确的时序,特别是当系统正在忙于拍照。还有其它的方式,但我选择了最简单的方式,通过串口来控制NTX2。RTTY使用正常的RS232串行标志和占空以及停止位,所以

为什么不用硬件的UART来做计时呢?没有花太多时间写了一小段C程序来以4800bps打开串口,读取GPS数据来获取经纬度及海拔,然后关闭端口,并重新以300bps发送电报(我发现如果不先关闭再重新打

开串口,经常不太稳定)。当然,做这个的时候,需要关闭串口的登陆提示以及内核消息,但总之还是比较简单。我将一个标准的Debian镜像写在一个4G的SD卡上。

为了获取实时的图像,我只能给debian打了一个补丁,终于能够将摄像头识别为/dev/video0.我尝试了好几种摄像头,最后选择了罗技德C270,他能够提供比较合理的质量、亮度,并且不贵(如果所有

设备都找不回来的话)。我尝试了好几种图片获取程序,最后觉得fswebcam最好。别忘了,无线系统带宽很低,通常要飞2个小时,所以我们没有时间发送大图片,所以没有必要选择非常好的摄像头和高

解析度。我权衡了质量和传输速度,觉得432×240的分辨率,50%压缩率比较适合。 我测量了摄像头电流,空闲时50mA,拍照时大概是250mA,所以需要缩减USB保险(最大140mA).写了一个脚本每30秒拍

张照,保存在SD卡上,跟踪程序会选择最好的照片(最大的文件)进行传输。每个选中的文件会转化成适合下载的格式(分成块,每块都带FEC校验),每次发送一块。我把图片数据分散在无线电报中-每

个电报中包含四个图像数据包。这是PI的自拍照:

经过完整的试验和测试,取得CAA的许可,我作了一个盒子,里面装了Pi、摄像头、GPS、电池和稳压器。我不想使用太多绝缘体,这样才不会使里面太热,所以我用了10mm的EPX材料。低于这个厚度的话

,可能会变形。

升空那天,根据风向,预计会按照S型轨迹飞行,从我家(West Berkshire)附近的升空地点,先向南,再向东,然后一直向北,直到在高海拔的地方转向西面。下降的时候,会按照相反的顺序改变方向

,最后降落在Chilterns附近。当天天气不错,应该不会出现意外,我开始给气球充气。我申请了可以飞两次,所以我的朋友兼爱好者Anthony Stirk可以放飞他做的跟踪器。因为有3个跟踪器以及两次飞

行许可,我们选择了升空一个带小光线跟踪的大气球,另外一个气球带上了Anthony的大跟踪器和一个GoPro高清摄像机,然后把Pi放里面。经过一番思考,我们决定把第三个跟踪器作为备份,确保GoPro

能够找回来。

放飞的那天终于来了,同时也等来了雨,因为天气预报是阵雨,我们就到升空地等到变成了毛毛雨。我们先放飞了带着小负载的大气球,这样Anthony可以尝试记录坐标。然后我们放飞了后面这个复杂的

东东,我的Pi在最上面,然后是GoPro,最后下面是备用的Buzz跟踪器。这张是飞行前的Pi:

和即将升空的气球:

整个一串东西,包括降落伞和3个设备大概1kg左右(何我最初试验相同),从气球到最低的设备大概有60米长。升空非常有趣,最开始风很小,几乎是垂直升空。后来风稳定了,气球按照一个角度升空

,它可以顺利的按照我能达到的最快速度升上去。直到顺利升空我才放松下来。这巨大一串东西冲入云中,让人印象非常深刻。

升空地在我住的村庄,之后我们开车回到家中,在“任务监控中心”看它传回来的照片。预计的落地点不远,我没不需要急急忙忙的去追赶,我们有足够的时间回来看照片并吃点东西。

第一架飞行器是海拔高度尝试,根据经使用的制造商和大小,要不在27公里之前就爆炸了,要不超过预计范围,跑到了40公里之外。实际上,前几个地方的海拔高度纪录表都是用这个牌子和尺寸。Anthony一直就在看紧紧盯住屏幕看遥感数据。

那个时候,我当然更关心树莓派到底运行得怎么样。GPS位置还显示在发射场地,这是个明确的干扰GPS信号。我还没确定是不是,但GPS接收器和天线非常靠近Pi和摄像头。下次我会增加一些距离。然而图像很好的传输过来了,不仅通过我家的天线和接收器,也可以通过全国各地的其他接收机接收。气球升的越高,图像的质量更好,越来越多的接收器接收到了更好的图像,甚至远在北爱尔兰(远在500公里之外,对于10mW已经很不错了)。现在饼型飞行还没完全出来。下图是一个饼图显示了不同的监听器接收到的图片数量。

第一架飞行器还在不断的攀升,最终达到了第4区,只比世界纪录低了300多米。一方面我希望它飞得更高些,一方面我很高兴它没有在第二区就挂掉。然后,气球爆炸了,最初下降还算正常。但是多数气球还挂在上面,成功地变成了一个降落伞的形状,速度减到大概2米每秒的速度,在这个高度,正常速度应该是这个的5倍以上。谈到主要的飞行,它一张一张发回的图像,没有出现任何错误,而且一张比一张更好,直到飞到最后越来越高。

 


我们预期它在34公里处爆炸,但很明显气球不完全符合我们的计算。它经历了34公里,35公里,最终在40公里处爆炸(准确的说是39994米,在海拔记录里面排12位)。对于一个中等大小带着1公斤负重的气球来说,已经非常惊人了。气球爆炸了,也就是该我们取出追车了,两辆车都配备了天线、无线电接收器、解码和底土,还有3G网络。预计降落点靠近Didcot,所以我们前往那里,然后停车确认最新的预测降落点。设备最终降落在密尔顿高地,我们离它不远,离发射场只有几英里。令我们惊讶的是,有一个接收器离它非常近,接收到了实时的图像。过了一段时间,大家都能看到设备落到了长长的草丛里面。


Anthony最先从他的车里看到设备,在球场边上的草丛里。得到俱乐部的允许,我们拿回了所有3个设备和降落伞。

同时,前一个飞行物还在下降,但非常慢。只有我们预期的1/5.我们不知道具体的时间,但是我们知道已经被降落伞接管。然后在最后的几公里,它急剧下降(可能是乳胶撕毁了),最后降落在牛津北边的一块地上。这里的海拔不太常见:

花了我们不断地时间来找到它的位置,但它似乎在一个比较难靠近的地方。随着雨越来越大,Anthony 决定收工,而不是找一个只值50镑的跟踪器。然后他开走了。我上网告诉其他在UKHAS聊天室的爱好者我也要回家了,“它就在A34附近的停车场”,有人告诉我,“很容易就拿到”,“雨5分钟就停了”。嗯,好象没有那么糟,我往北开到A34,然后回到南边的停车处。

嗯,上面的三句话,只有第1条是正确的,只离停车处155米。但是暴雨一直在下,我只能在车里等。最后,我决定出去了,爬过树木和灌木丛去找,前面有片五尺高的玉米地。已知没找到那个设备。失败后,我走到车边,用我的anroid手机打开HamGPS软件来确定设备的位置。花了很多时间才到哪里,我感觉我在演“疯狂的戴夫”,当我到达目的地,我钻进了设备和气球中间的尼龙线。这的确看不到,直到我爬到最顶上,最终成功拿到。

所以,一切的一切,伟大的一天。所有的4个跟踪器全部回收,并且我们得到了令人惊叹的图像。如果有兴趣,可以访问UKHAS网站。更多的图像和视频,请访问:

All SSDV images

Photos from the day

pAVA Inflation Time-Lapse

Burst video from the GoPro

Launch video of PIE1, uAVA and BUZZ8

Landing video from the GoPro

Recovery of PIE1, uAVA and BUZZ8

Anthony’s Write-Up

感谢Anthony Stirk开车从阳光明媚的约克郡到最严峻最黑暗的Berkshire,并且提供GoPro HD相机, 感谢Phip Heron提供我们摄像头成像和编码软件,感谢Nick提供帮助,当然还要感谢我的妻子Julie让我们吃饱喝足,而且帮我开车,而我只需要做技术方面的东西。

 

 

用Siri来控制车库门[翻译]

本文为本站首发,在树莓派论坛转载,其他网站转载需要指明出处及作者信息。

原文:
https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=25118&hilit=siriproxy&sid=aa0660b88dd63482d287d7fb089e0d60

hi,这是我第一个树莓派的项目,SiriProxy。它运行在树莓派上,使用wiringPi访问派的GPIO口,并发一个延时的on/off信号。这个延时信号用来控制我车库门。所以我可以在iphone上用siri来控制我的车库门。

可能有其它的方式来做同样的事情,比如在Pi上跑一个web服务器来访问Pi的GPIO端口,但是我只是简单的做了一个,符合我自己的需求,并且运行的一切正常。

我的派在整个安装过程中都用root用户运行,这样可以比较简单一些(原文粗制滥造)。我用wheezy版本。

下面这个链接 http://www.idownloadblog.com/201 … oxy-tutorial-video/ 告诉你怎么安装和运行siriproxy。如果你按照这些步骤,并且把11,12,13步的顺序更换为12,13,11。顺便说一下,命令7大概需要在PI上编译90分钟。

然后开始安装wiringPi,可以从 https://projects.drogon.net/rasp … wnload-and-install/ 获得。

一旦这些都安装好了,我们只需要更改一下siriproy里面自带的ruby脚本的例子。
编辑/root/SiriProxy/plugins/siriproxy-example/lib/siriproxy-example.rb 文件

找到这几行:

listen_for /test siri proxy/i do
say “Siriproxy is up and running!” #say something to the user!

request_completed #always complete your request! Otherwise the phone will “spin” at the user!
end

在它后面追加这几行

listen_for /open the garage door/i do
say “Opening the garage door..”
request_completed
system(“gpio mode 1 out”)
system(“gpio write 1 1”)
system(“sleep 0.5”)
system(“gpio write 1 0”)
end

listen_for /close the garage door/i do
say “Closing the garage door..”
request_completed
system(“gpio mode 1 out”)
system(“gpio write 1 1”)
system(“sleep 0.5”)
system(“gpio write 1 0”)
end

你可以看到,ruby脚本简单的用system命令来访问wiringPi,设置GPIO针脚作为输出端口,设置它半秒高电平,半秒低电平。

你可以让siri调用任何你在命令行终端能用的命令,比如说通过无密码的SSH登录到远程的电脑让它关机或重起。

listen_for /turn off my laptop/i do
response = ask “Are you sure you want me to shut down your laptop?”

if(response =~ /yes/i)
say “OK, I’ll shut it down now..”
system(“ssh root@192.168.1.74 shutdown -h now”)
else
say “OK, I wont!”
end

request_completed
end

你可以把树莓派放在不同房间使用不同的命令控制,但只使用一个siriproxy服务器。注意:每次你修改完配置后,你需要在重起服务器之前运行”siriproxy bundle”命令。

这里还有一个我安装过程的演示视频。

http://youtu.be/NUJ5z76Xv5o

墙内的朋友安了吧,墙了。

通过Raspberry Pi实现无障碍上网

最近貌似google的服务实在不给力,搜索一直都无法打开。正好发挥手头树莓派的功能,来实现家庭无障碍上网。

网络环境:树莓派通过无线连接路由器,其他电脑通过树莓派中转,国内网址直接走路由器,被墙网址通过VPN出去。

首先设置树莓派,通过无线上网:

1.无线配置,修改/etc/network/interfaces,下面的SSID,PASSWORD换成你自己的

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.88.10
netmask 255.255.255.0
gateway 192.168.88.1
wpa-ssid "SSID"
wpa-psk "PASSWORD"
wireless-power off

2.安装ppp客户端

sudo apt-get install pptp-linux

3.Next, Create a file in /etc/ppp/peers with arbitrary name and the following contents:
在/etc/ppp/peers目录创建一个文件,其中VPNHOSTNAME,$USERNAME,$PASSWORD换成你自己的帐号密码

pty "pptp $VPNHOSTNAME --nolaunchpppd --debug"
name $USERNAME
password $PASSWORD
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
debug
persist
maxfail 0
defaultroute
replacedefaultroute
usepeerdns

3.测试vpn拨号是否成功

sudo pon 配置文件名

然后ping www.facebook.com看是否通过。

4. 启动内核的IPv4转发

sudo sysctl -w net.ipv4.ip_forward=1
记得同时修改/etc/sysctl.conf保证重启也有效。

5.下载chnroutrs.py,用 chnroutes 生成路由脚本(google chnroutes.py,头条就是)

python chnroutes.py -p linux

会生成ip-down,ip-pre-on等文件。

执行ip-pre-on,会把所有的国内的ip地址段加入路由表。

6.在RPi中启动iptables的NAT转换

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

 

后来验证似乎还需要这几条指令:

iptables -A INPUT -i ppp0 -j ACCEPT
iptables -A OUTPUT -o ppp0 -j ACCEPT
iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
iptables -A POSTROUTING -t nat -o wlan0 -j MASQUERADE

其中wlan0是你的无线网卡的id,如果只有一块网卡,就直接用这个,不需要改了。

 

在你的客户端电脑上把网关改成PI的ip地址,dns改成8.8.8.8或者8.8.4.4,防止国内dns污染。看看是不是可以打开facebook之类的网站了?

不确定的话,你可以ipconfig /flushdns后,tracert不同域名,看看是不是走不同路由出去的。

tracert www.china.com 这个应该是走路由器出去的

tracert www.facebook.com这个应该是走VPN的。

所有网站畅通无阻的出去了,包括google随便什么关键字都不会重置了。

 

后记:俺VPN流量有限制,所以都没有加到自动启动里面,每次登录上去手动启动一下就可以了。如果需要自动启动,可以参考其他文章。如果不想每次都要修改dns和网关,在pi上建一个dhcp服务器,网关,dns都配在里面,自动获得就可以了。

比如下面的方法,让系统自动启动VPN

To start your VPN client on boot, you can follow the instructions onhttp://pptpclient.sourceforge.net/howto-debian.phtml (point 8 or 9, Hand configuration section)

An alternate method to make your VPN client run on boot is to make a script in /etc/init.dcontaining these contents:

#! /bin/sh

case "$1" in
  start)
    pon $/etc/ppp/peers/FILENAME
    echo "PPTP Started"
    ;;
  stop)
    poff $/etc/ppp/peers/FILENAME
    echo "PPTP Stopped."
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Then run:

update-rc.d [filename of script] defaults

To make it run at startup.

Raspberry Pi跑起来了

Raspberry Pi是什么?
引用维基百科的一句话:

The Raspberry Pi is a credit card sized single-board computer developed in the UK by the Raspberry Pi Foundation with the intention of stimulating the teaching of basic computer science in schools.

Pi 已经流行了一段时间了,找到一个开始测试。

入手第一件事,就是刷SD卡。从各个官网下载固件,然后烧到SD卡上。花了两天,把所有的固件都刷了一遍,总算把基本功能跑起来。

Raspberry PI官网固件,直接进桌面,体现了它的原始想法–教育,但是没有媒体功能,所有的东西都需要自己折腾,UI方面的折腾实在不想花太多时间,放弃。

Raspbmc,功能比较齐全,直接进入XBMC,Airplay只有声音没有图像,无线网卡无法启动,总不能从客厅拖一根网线到房间吧,只能放弃。

Openelec,直接进入XBMC,但是功能是在太精简,完全没办法在上面开发定制自己的功能,放弃。

Xbian,很精简,直接进入XBMC,无线网卡功能能用,但是Airplay直接无线。配置好了XBMC,加入中国视频网站的支持,至少摆在房间可以用来做播放器,后台可以用来做智能控制,就选这个了。

今天试了红外接收板接收遥控器信号,信号能够接收到,但是还没办法解码。或者不解码了,直接通过发射板发射出去好了,改天再研究。

实现目标,通过Pi能够通过红外来控制各种家电,比如电视、机顶盒、空调、dvd、取暖器;控制摄像头,可以实现监控;通过温度感应器,读取温度,然后启动取暖器或者空调;无障碍翻墙;做个定时撞钟发微博的机器人…