安装好USB的wifi模块,自动获取IP地址。获取到IP后邮件通知。这样每次重启就不用再连显示器了。
以下几个的安装是为了方便使用与本次无关。
安装vim
$ sudo apt-get install vim
将时区改为上海
$ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
安装校时工具
$ sudo apt-get install ntpdate
通过网络同步时间
$ /usr/sbin/ntpdate stdtime.gov.hk
把USB的wifi接口接好。
我接了一个腾达W311M的wifi无线,用命令看到无线网卡已经加载。如下:
$ lsusb
Bus 001 Device 004: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
然后可以在图形化界面中wpa_gui配置。如果使用命令行可以用wpa_cli。我是直接修改配置文件。我的配置文件如下:
无线配置文件位置/etc/wpa_supplicant/wpa_supplicant.conf
文件内容如下:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=0
network={
ssid=”simonzhang”
psk=”xxxxxxx”
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
网络部分配置/etc/network/interface
文件内容如下:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
配置完毕,将启动后发送邮件的脚本放到家目录中,脚本如下,如果邮件服务器认证不严的话用sendmail会更简单:
#!/bin/env python # -*- coding:utf-8 -*- # ------------------------------- # Filename: # Revision: # Date: 2012-12-5 # Author: simonzhang # Email: simon-zzm@163.com # Web: www.simonzhang.net # ------------------------------- import os import time import socket import fcntl import struct import smtplib from email.mime.text import MIMEText mail_host = 'smtp.exmail.qq.com' mail_user = 'xxxxxxx' mail_pwd = 'xxxxxxx' def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) except IOError, e: return e def mail_send(content, mailto, get_sub): msg = MIMEText(content.encode('utf8'), _subtype='html', _charset='utf8') msg['From'] = mail_user msg['Subject'] = u'%s' % get_sub msg['To'] = mailto try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pwd) s.sendmail(mail_user,[mailto],msg.as_string()) s.close() send = "OK" except Exception ,e: send = "ERROR! %s" % e return send def main(): _count_loop = 0 while 1: ip_list = [] if _count_loop == 0: os.system('sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf') time.sleep(0.5) os.system('sudo dhclient wlan0') try: ip_list.append(get_ip_address('eth0')) except: pass try: ip_list.append(get_ip_address('wlan0')) except Except,e: pass _get_send_status = mail_send('my pi ip', 'simon-zzm@163.com', '%s' % ip_list) _count_loop +=1 if (_get_send_status == "OK") or (_count_loop == 3): break time.sleep(3) if __name__ == "__main__": main()
脚本测试通过,配置开机启动。
$ sudo vim /etc/rc.local
# Print the IP address
_IP=$(hostname -I) || true
if [ “$_IP” ]; then
printf “My IP address is %s\n” “$_IP”
fi
# start wifi
echo “Starting WiFi…”
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sleep .5s
dhclient wlan0
echo “WiFi should be started”
# notification my ip
python /home/pi/script/NotificationIP.py
exit 0
失败经验总结:
1)之前是用的下面代码,但是在除掉网线后路由里的默认网关没有,用“sudo route add default gw 192.168.1.1”添加,如果有网线只是报有一个ip。
def get_local_ip_address():
ipaddr = ”
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((‘1.1.1.1’, 8000))
ipaddr = s.getsockname()[0]
s.close()
except:
ipaddr = “ERROR”
return ipaddr
2)系统应该不支持热插拔,每次查usb wifi时都会重启。
3)不知道是电力原因,还是USB wifi原因,连接质量很不好,容易断开。
参考文档:
http://stinebaugh.info/auto-start-your-wifi-on-raspberry-pi/
今天刚试了sendemail,会有问题。
Raspberry pi使用sendemail发送email(如使用gmail账户),若使用ssl加密(参数-o tls=yes)时,即使安装了ssl等相关加密包(libio-socket-ssl-perl libnet-ssleay-perl),也会有错误,提示如下错误
“invalid SSL_version specified at /usr/local/share/perl/5.14.2/IO/Socket/SSL.pm line 332”
方法如下:
修改usr/share/perl5/IO/Socket/SSL.pm
change:
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
to:
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
参考:
感谢提供,我没有gmail,也有测试。qq的邮件服务器测试通过。
##【热插拔问题】
我测试发现,可以热插拔wifi(我是用的也是 腾达W311M,京东上买的30元)。
是不是可以在/etc/network/interfaces中加一行
allow-hotplug wlan0
试试?
是这样配置的,也可以连接无线使用,但是效果不好,干扰大了总是掉。插拔重启可能是电压问题,现在一直用有线,没有测试这个。
直接登录路由器查看最简单了
当然可以,但是没有管理员权限登录DHCP设备比较麻烦。发邮件后邮箱有短信功能,这样能知道什么时候被重启过,也方便查看。