300元 iRaspberry Pi 树莓派 实现超低功耗远程监控、远程下载和家庭共享
追加修改(2016-07-02 12:59:46):
更正:
安装中文字库和中文输入法命令为:
sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy
sudo apt-get install scim-pinyin
自从知道了什么值得买,就发现什么都值得买了。张大妈的信仰伴随我多年,今天终于鼓起勇气露(pian)露(jin)面(bi),第一次发原创希望给通过啊啊啊…
好了废话不说,进入正题。
本帖需要有DIY精神,计算机及网络基础也是必须的啦,还需要闲置的移动硬盘。
<<<<<<<<<<<<<<<分割线>>>>>>>>>>>>>>
晒一下我的树莓Server,树莓派3B相比前几代配置提升很大,但为何还是百兆网口,这便将有线网络传输速率死死地限制在12.5MB/s的速率以内。
手机控制端截图,已经在用Yeelink的小伙伴们可以看到我,目前只有CPU负载数据不全
迅雷远程下载页面
访问Samba/FTP共享服务(移动硬盘)截图
移动端访问FTP服务(移动硬盘)截图
从电脑拷贝文件到树莓派截图(这是树莓派是有线连接到路由器的,如果用树莓派无线连路由器速度峰值4MB/s,均值估计3MB/s)
从树莓派拷贝文件到电脑截图(树莓派是有线连接路由器)
树莓派稳定运行30天截图
<<<<<<<<<<<<<<<分割线>>>>>>>>>>>>>>
〇、我为什么要这样做?
(1)一块硬盘集中存储数据,让WLAN内电脑或便携设备能随时存取数据,也想过买NAS或者攒NAS,但觉得贵而且估计买来用得少,毕竟我对数据的速率要求不高,毕竟主要用来存取文档;
(2)工作之余,也要看个电影美剧什么的,所以还需要下载,而且必须是远程下载,这样在任何地方发现好资源都可以提前下载(不限于电影);
(3)单位在外地,网速快方便下载电影,如果在单位看不完也可以带回家再看,但总不能抱着NAS来回跑吧,所以需要移动硬盘。还要有权限管理移动硬盘上的数据,比如空间不够删个电影什么的,因为取消挂载和挂载两个步骤比较烦人,建议用Yeelink的开关型数据控制挂载和取消挂载;
(4)远程监测树莓派服务器,查看温度啊负载啊之类的,远程开启或关闭业务,比如下载业务和共享业务,避免敲命令,也可以实现终端APP控制。(基于Yeelink)
<<<<<<<<<<<<<<<分割线>>>>>>>>>>>>>>
一、实现功能
(1)迅雷远程下载到与树莓派相连的移动硬盘;
(2)一个账号实现在移动硬盘上Samba/FTP文件共享及管理权限;
(3)远程监控树莓派,远程开启或关闭树莓派上的服务。
<<<<<<<<<<<<<<<分割线>>>>>>>>>>>>>>
二、所需材料
(1)树莓派3B,电源肯定是需要的,建议再配个外壳加风扇(可以在某宝买,主要是便宜);
2016年新款树莓派3代B型 Raspberry Pi Model 3 B树莓派3B(2)移动硬盘;
(3)网线;
(4)PC/Mac,需安装putty或SecureCRT等SSH软件。
<<<<<<<<<<<<<<<分割线>>>>>>>>>>>>>>
三、文件共享服务部署流程
(1)连接以下设备
树莓派——无线路由器LAN口(RJ45网线)(也可以用无线,但是速度慢);
树莓派——移动硬盘(USB线);
把TF卡插入树莓派卡槽内,需提前在TF卡上写好raspbian镜像(树莓派官网有提供,写入方法自行百度)。
闪迪(SanDisk)至尊高速移动MicroSDHC UHS-I存储卡 TF卡 16GB Class10 读速80Mb/s闪迪TF卡接下来就是给树莓派树上电开机,在无线路由器里查看树莓派获取的IP地址,例如是192.168.1.17。打开PC/Mac的SSH软件,新建连接:
IP地址:192.168.7.17,端口:22
用户名:pi
密码:raspberry
到这里就可以敲命令了。
(2)基本配置(nano编辑器的用法请自行百度)
扩展TF可用空间,执行:sudo raspi-config
选择Expand Filesystem;
修改更新源,执行:sudo nano /etc/apt/sources.list
添加以下代码:
deb https://mirror.sysu.edu.cn/raspbian/raspbian/
jessie main contrib non-free
deb-src
https://mirror.sysu.edu.cn/raspbian/raspbian/ jessie main contrib non-free
保存退出;
升级软件,执行:
sudo apt-get update
sudo apt-get upgrade
花时较长,需耐心等待;
安装中文字库与中文输入法,执行:
deb https://mirror.sysu.edu.cn/raspbian/raspbian/
jessie main contrib non-free
deb-src https://mirror.sysu.edu.cn/raspbian/raspbian/ jessie main contrib non-free
安装exFAT和NTFS支持软件,执行:
sudo apt-get install exfat-fuse
sudo apt-get install fuse-utils ntfs-3g
(3)设置共享用户,挂载硬盘
创建共享用户share,设置它属于users用户组,设置密码为share,创建/home/share文件夹,执行:
useradd share -m -G users
passwd share
尝试挂载移动硬盘到/home/share下,执行:sudo fdisk -l
查看移动硬盘的路径,一般来讲是/dev/sdb1,此时执行:
sudo mount -o uid=1001,gid=1001 /dev/sdb1
/home/share
(添加-o 参数是针对exFAT和NTFS移动硬盘,因为exFAT和NTFS格式的硬盘没有Linux/Unix权限,有条件的话可以把硬盘格式化成ext3或ext4,没条件就算了,我用的exFAT和NTFS也OK。)
(4)部署Samba服务
部署Samba服务,执行:sudo apt-get install samba samba-common-bin
安装完成后进入配置,执行:sudo nano /etc/samba/smb.conf
在smb.conf末尾添加:
[share]
comment
= share
path
= /home/share
valid
users = @users
public
= no
writable
= yes
browseable
= yes
create
mask = 0765
保存退出;
申明family用户为Samba用户,执行:smbpasswd -a share
重启Samba服务,执行:sudo /etc/init.d/samba restart
(5)部署FTP服务
部署FTP服务,执行:sudo apt-get install vsftpd
安装完成后,修改配置文件,执行:sudo nano /etc/vsftpd.conf
修改以下内容:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
保存退出,重启FTP服务,执行:sudo /etc/init.d/vsftpd restart
(6)配置迅雷远程下载
解压迅雷下载对应固件(例:Xware1.0.31_armel_v5te_glibc)放在用户文件夹中(如/home/pi/xunlei)
(下载链接:https://luyou.xunlei.com/forum.php?mod=forumdisplay&fid=51&filter=typeid&typeid=1)
执行:sudo chmod 777 /home/pi/xunlei/* -R
执行:sudo /home/pi/xunlei/portal
THE ACTIVE CODE IS对应处代码为远程下载码,在https://yuancheng.xunlei.com/中绑定账号即可,之后添加下载地址也是在这里;
需停止远程服务时执行:sudo /home/pi/xunlei/portal -s
配置开机自动启动:
执行:sudo nano /etc/init.d/xunlei
添加代码:
#!/bin/sh
#
#
Xunlei initscript
#
###
BEGIN INIT INFO
#
Provides: xunlei
#
Required-Start: $network $local_fs
$remote_fs
#
Required-Stop:: $network $local_fs
$remote_fs
#
Should-Start: $all
#
Should-Stop: $all
#
Default-Start: 2 3 4 5
#
Default-Stop: 0 1 6
#
Short-Description: Start xunlei at boot time
#
Description: A downloader
###
END INIT INFO
do_start()
{
/home/pi/xunlei/portal
}
do_stop()
{
/home/pi/xunlei/portal -s
}
case
"$1" in
start)
do_start
;;
stop)
do_stop
;;
esac
增加权限,执行:sudo chmod 755 /etc/init.d/xunlei
更新开机启动,执行:sudo update-rc.d xunlei defaults
查看状态信息
这部分是非必要的,可以查看一些简单状态信息。
在启动时会有类似一行输出,表示你的控制端口:
your
control port is: 9000.
在浏览器中输入https://IP地址:9000/getsysinfo(IP替换为你路由器的IP,端口换为你的控制端口),会看到类似如下信息:
[ 0,
1, 1, 0, "42SND1",1, "201_2.1.3.121", "", 1 ]
其中有用的几项为:
第一项:0表示返回结果成功
第二项:1表示检测网络正常,0表示检测网络异常
第四项:1表示已绑定成功,0表示未绑定
第五项:未绑定的情况下,为绑定的需要的激活码
第六项:1表示磁盘挂载检测成功,0表示磁盘挂载检测失败
(7)配置移动硬盘自动休眠
安装hdparm实现硬盘自动休眠,执行:sudo apt-get install hdparm
立即休眠sdb1硬盘,执行:sudo hdparm -Y /dev/sdb1
在60/12=5min后休眠硬盘,执行:sudo hdparm -S 60 /dev/sdb1
每次重启后自动执行hdparm程序:
执行:sudo nano /etc/rc.local
在fi后和exit 0前插入一行命令:hdparm -S 60 /dev/sdb1 &
说明:超过休眠时间后再访问,需要2-3s才能加载出来,休眠能一定程度上保护硬盘。
注意:迅雷服务开启时会一直给其他用户提供下载源,所以服务开启时硬盘一直在工作得不到休眠,可采用关闭服务的方式让硬盘一段时间后自动休眠。
(8)配置树莓派重启后自动挂载硬盘
这一部分比较重点,因为挂载不好就没有修改权限,还记得前面“(3)***挂载硬盘”里面对-o参数的描述吧。
但这里不同,执行:sudo nano /etc/fstab
在/etc/fstab最后添加代码:
/dev/sdb1 /home/share/ auto
defaults,noatime,uid=1001,gid=1001
0 0
至此,服务端的Samba/FTP服务端已经做好。可以在电脑、移动终端、电视盒子上使用了,登陆地址为192.168.1.17(对应前文的举例,具体地址具体填写),登陆账号和密码都是share,如果是FTP还需要端口号(默认21),编码方式推荐UTF-8,如果有乱码就换一下其他编码方式吧,用share用户登录后可以拥有读写权限,方便在移动端删除数据或存入数据,而不用拔下移动硬盘。
注意:Linux要先取消挂载才能拔USB存储设备,初期可采用键入命令方式,等Yeelink熟悉后就可以创建开关型数据,在移动端或网页操作挂载和取消挂载了。
<<<<<<<<<<<<<<<分割线>>>>>>>>>>>>>>
四、树莓派的远程监测与控制——Yeelink物联网服务
(1)准备
在yeelink网站申请账号,添加设备,添加传感器(数据型/开关型),并记录下API KEY和APIURL。
(2)上传CPU温度实例
在pi文件夹下编写代码yeelink.py,内容如下:
import os
import
requests
import json
import time
import
commands
def
getCPUtemp():
cpu =
open("/sys/class/thermal/thermal_zone0/temp")
# file.close()
return (float(cpu.read())/1000)
def main():
apiheaders = {'U-ApiKey':'你之前申请的API KEY,是一串数字和字幕的混合','content-type':'application/json'}
cputemp_apiurl = "你增加的数据型传感器的URL"
CPU_temp = getCPUtemp()
cputemp_payload = {'value':CPU_temp}
r=requests.post(cputemp_apiurl, headers=apiheaders,
data=json.dumps(cputemp_payload))
print('CPU Temp = '+str(CPU_temp))
if __name__ == '__main__':
main()
这串代码执行一次后上传一次数据,执行:python yeelink.py就能出现执行结果:CPU Temp = 50.464,如下图:
同时上传该数据至yeelink,也可以在def man()后增加while 1,实现一直执行,这里不做过多描述。
(3)Yeelink控制树莓派的迅雷下载服务实例
在pi文件夹下编写代码xunlei.py,内容如下:
import os
import requests
import json
#import time
import commands
def main():
apiheaders = {'U-ApiKey':'你之前申请的API KEY,是一串数字和字幕的混合'}
xunlei_apiurl = "你增加的开关型传感器的URL"
xunlei
= requests.get(xunlei_apiurl,headers=apiheaders)
xunlei_status = xunlei.json()
if
xunlei_status['value'] == 1:
os.system ('sudo service xunlei start')
print ('Xunlei Service On!')
else:
os.system ('sudo service xunlei stop')
print ('Xunlei Service Off!')
if __name__ == '__main__':
main()
注意:需结合迅雷远程下载的启动服务才可配合执行,前面已附上。
这串代码执行一次后将从设置的开关型数据那取得结果:开或关,执行:python xunlei.py就能执行关闭迅雷服务,并出现执行结果:Xunlei Service Off!,还有个Xunlei Service On!,只是我刚好关闭了迅雷服务,如下图:
也可以在def man()后增加while 1,实现一直执行,这里不做过多描述。
(4)用cron实现Yeelink服务
前两个实例都需要手动执行,可以利用cron计划任务来执行特定的的任务,我在pi的cron里加入了以下代码,执行:nano picron
* * * * * python /home/pi/yeelink.py
* * * * * python /home/pi/xunlei.py
添加完后保存退出,然后执行:crontab picron
上面两行代码分别指每分钟执行上述yeelink.py和xunlei.py,就意味着每分钟树莓派都可以上传CPU数据到Yeelink、获取开关信息到树莓派并执行,这就从某种意义上实现了远程控制。同时Yeelink也有APP,免去了网页版的不方便。
(5)我的Yeelink
分为三个开关:Yeelink服务、Yeelink监测和Yeelink控制;Yeelink服务用来关闭所有Yeelink检测和控制,Yeelink监测用来开关温度及负载数据上传,Yeelink控制用于开关对树莓派的功能控制;
因为我每个python代码都是只执行一次,没有死循环,所以主要借助了cron定时任务,那么对所有的Yeelink服务也采用了更换picron的方式,即创建了:picron_000、picron_001、picron_010、picron_011、picron_100、picron_101、picron_110和picron_111,共八个picron通过Yeelink的开关型数据进行到换,000-111中的三位数字分别代表了Yeelink服务、Yeelink监测和Yeelink控制的关闭(0)和开启(1)。
通过以上一个数据一个开关的例子大家就能实现很多功能了,比如服务的开关,比如挂载与取消挂载,这里有一个原则:先挂载后开迅雷,先关迅雷后取消挂载,不然/home/share文件夹下会生成迅雷的文件,到时候就挂载不上硬盘到/home/share了。网上很多关于树莓派的帖子和教学,不得不感谢开源的力量,才实现了我的需求。
配置都结束后重启一下看看能不能正常启动,能不能正常加载服务,重启命令:sudo reboot
至此,我写完了(还是因为写不下去了)
。总结一下:虽然速度和稳定性比不上专业NAS,但对于想尝鲜的玩家来讲已经能体会到一些了,毕竟平时读取和写入的速度已经满足文档的存取了,并行数据存取性能应该很差(这是事实,必须承认,但只有我一个人用感觉还好);另一方面,NAS动辄上千还要配硬盘让我真的很担忧这笔投资对我是否值得(不要喷我,NAS目标用户除外哈),可能我还是喜欢折腾吧,拿来用Samba/FTP服务看视频真的是爽的不要不要的,试过在iPad Air 2(5G)用AVPlayerHD播放720p视频,缓冲时间4s不到,还可以忍受(路由器是阿苏斯AC68U)。好了,我要继续去看《远古外星人》了:
后记:第一次原创,请大家慢点喷,肯定有值友会更好的方法,我能向你学习吗?!这里顺便提一个问题:CPU负载的py代码我手动输入,在Yeelink可以获取,但通过cron就不能实现了,也试过while 1和time.sleep (5*60)都不行,在VNC下前台用while 1执行倒是可以,不知问题在哪里,有实现成功的吗?















100多块钱搞个hp的瘦客户机 , 内存cpu网卡全有了 而且x86的 ,什么都好搞.
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
迅雷下载介绍的不完全
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
迅雷下载介绍的不完全
校验提示文案
校验提示文案
校验提示文案