背景介绍

首先是朋友送了个树莓派,想派点用场,但是又没有什么想做的,就一直闲置起来了。
最近在搞威联通的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部分就简单了,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a style="font-size:200px;">已经发送!</a>
</body>
</html>

直接访问指定的网址即可。

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:转载请注明出处。


阿狸的学习笔记
1 声望0 粉丝

引用和评论

0 条评论