flask mysql 树莓派_树莓派搭建flask,实现远程唤醒nas

背景介绍

首先是朋友送了个树莓派,想派点用场,但是又没有什么想做的,就一直闲置起来了。

最近在搞威联通的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 = 'FF' * 6 + str(mac) * 16

send_data = 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 = 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远程访问树莓派后台还是很爽的。

ps:转载请注明出处。

你可能感兴趣的:(flask,mysql,树莓派)