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执行倒是可以,不知问题在哪里,有实现成功的吗?















horsewd
100多块钱搞个hp的瘦客户机 , 内存cpu网卡全有了 而且x86的 ,什么都好搞.
校验提示文案
kukusw
校验提示文案
姓余的小伙子
校验提示文案
无趣
校验提示文案
我不是张大爷
校验提示文案
退伍少先队员
校验提示文案
米修优
校验提示文案
Gravityman
校验提示文案
ayamaya
校验提示文案
Jwuun
校验提示文案
edaooo
校验提示文案
呆呆的小薇
校验提示文案
我是_无赖
校验提示文案
薯泥儿
校验提示文案
永安桥北张老汉
校验提示文案
di1988
校验提示文案
carmen81
迅雷下载介绍的不完全
校验提示文案
carmen81
校验提示文案
carmen81
校验提示文案
stone3
校验提示文案
bingowen
校验提示文案
Winsert
校验提示文案
Xavier_yang
校验提示文案
mxfly
校验提示文案
他习惯盲狙
校验提示文案
stone3
校验提示文案
cxfwzh
校验提示文案
孖宝特供
校验提示文案
静若瘫痪
校验提示文案
carmen81
校验提示文案
carmen81
校验提示文案
八千里路云和月_
校验提示文案
carmen81
校验提示文案
x9mars
校验提示文案
QCf4n
校验提示文案
gaibianluan
校验提示文案
奥利奥麦旋冯
校验提示文案
carmen81
迅雷下载介绍的不完全
校验提示文案
vasto
校验提示文案
kidolphin
校验提示文案