背景介绍
首先是朋友送了个树莓派,想派点用场,但是又没有什么想做的,就一直闲置起来了。
最近在搞威联通的nas,用来当数据中心的,但是不经常使用,一直开着机,看着20W的功耗怎么看怎么不爽,于是就买了智能插座,远程开机。但是问题又来了,威联通开机要十几分钟,太长了,这就有点难受了。于是考虑到用休眠+唤醒的方式来实现这个操作。正好手里有个树莓派,来放代码解决这个事情。
远程唤醒
型号是3b+好像,安装系统啥的就不说了,直接放代码:# -*- coding: utf-8 -*-
from flask import Flask
from flask import render_template
import socket
import binascii
import re
app = Flask(__name__)
@app.route('/wol/')
def wol(name=None):
print("start...")
woke_on_lan()
return render_template('woke_on_lan.html', name=name)
def woke_on_lan():
#Moving forward code
MAC = "98-90-96-C1-FE-CB"
def format_mac(mac):
mac_re = re.compile(r'''
(^([0-9A-F]{1,2}[-]){5}([0-9A-F]{1,2})$ |^([0-9A-F]{1,2}[:]){5}([0-9A-F]{1,2})$ |^([0-9A-F]{1,2}[.]){5}([0-9A-F]{1,2})$ )''', re.VERBOSE | re.IGNORECASE)
if re.match(mac_re, mac):
if mac.count(':') == 5 or mac.count('-') == 5 or mac.count('.'):
sep = mac[2]
mac_fm = mac.replace(sep, '')
return mac_fm
else:
raise ValueError('Incorrect MAC format')
def create_magic_packet(mac):
data = 'https://www.it610.com/article/FF' * 6 + str(mac) * 16
send_data = https://www.it610.com/article/binascii.unhexlify(data)
return send_data
def send_magic_packet(send_data):
broadcast_address = '255.255.255.255'
port = 9
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(send_data, (broadcast_address, port))
mac = format_mac(MAC)
send_data = https://www.it610.com/article/create_magic_packet(mac)
send_magic_packet(send_data)
print("send sucessful")
woke_on_lan部分代码是网上抄的,找不到出处就不贴了。
html部分就简单了,代码如下:
Title 已经发送!
直接访问指定的网址即可。
flask部署
部署没什么好说的,主要是需要把flask的程序加入到环境变量里面,代码如下:export FLASK_APP=/home/pi/flask_dir/hello.py
export FLASK_ENV=development
flask run --host=0.0.0.0
我比较懒,直接保存成1.sh
开机自启动
首先树莓派执行如下命令:
sudo nano /etc/rc.local
把
sudo nohup sh /home/pi/flask_dir/1.sh > /home/pi/flask_dir/log 2>&1 &
加入到exit 0前面,保存即可
这样就可以在树莓派每次开机的时候,自动启动我的flask程序。
至于树莓派为啥关机,2w功耗不是电嘛~
远程解决方案
由于是家里是非公网,在办公室或户外没办法访问nas和树莓派,所以我用frp解决。端口映射树莓派的22端口,直接xshell远程访问树莓派后台还是很爽的。
【flask|flask mysql 树莓派_树莓派搭建flask,实现远程唤醒nas】ps:转载请注明出处。
推荐阅读
- MySQL触发器
- MySQL与SQL的区别比较
- PostgreSQL与MySQL的区别和对比
- MySQL regexp_replace函数
- MariaDB与MySQL的对比
- MySQL regexp_substr()函数
- MySQL not like运算符
- MySQL regexp_like()函数
- MySQL Regexp运算符