电脑自动开关机

前言

近期少写技术博文,写篇涉及点技术的,水水文(一般月中再写,没想到年初第一天就写了

个人有个优化思维,会思索有什么事情可以优化
今天思考生活中有什么优化的,想到了电脑开机(也算近期一个想法),每天在固定段使用电脑,那开机的时间是不可以节约?

开机20s左右算20s,一天2-3次(早上有时候不开,中午晚上开),

  • 一天:3*20s= 60 s
  • 一个月:60*30 = 180 s
  • 一年:180 * 12 = 2160 s

2160 s / 60 = 36 min

emmm….,才节约36分钟,节约的时间比预想的少,但蚊子再小也是肉
没办法,只能以体验感来催眠自己(电脑已经时刻准备好了),以证明自己不是在瞎折腾🙃

扯远了,Start - >

目录:

  1. 组网:介绍近期组网的生活随笔
  2. 电脑自动开关机:总结下电脑开关机的方法

组网

电脑近期网络有点小崩,老是莫名奇妙断网,整的有点小怀疑人生
有些Bug就是这样莫名其妙,路由器稳定运行了2年,但因为近期网络升级(300m——>1000m),路由就莫名开始不断抽风
副路由(水星D196G)时不时来下断网,就是很莫名其妙,网速与配置没有直接关联
我修复,重新配置了几次,运行段时间又莫名不行,我tm的…,搞的我在想要不要换路由了

拓扑图如下:

家庭拓扑图

今天又修复了下,搜索了下资料,几个问题

  1. IP冲突:说是DHCP服务器分配IP问题,有一定可能性,但个人是副路由桥接后,主路由自动分配一个ip给副路由,想不明白
  2. 信道问题:两者必须要使用信道
  3. 兼容性:不同品牌可能存在兼容性问题

个人推测是1、3,我现在是光猫、主路由(Redmi AX5)、副路由(水星D196G)都有开启DHCP服务器,可能分配后ip冲突了。
目前先暂时关闭副路由器的DHCP服务器,我又行了,暂时又可以用了,观望一段时间再说。

电脑自动化开关机

完成后示意图:

设备自动运行时间图

网关和路由器的开关没什么好说的,在管理界面里找,一般都可以找到定时开关
主要介绍电脑的定时开关

参考资料

  1. 无线网络唤醒,从入门到放弃:介绍很详细的博文
  2. 微星主板设置定时开机:仅对微星主板有参考价值
  3. 远程唤醒+远程控制——Windows:对操作系统方面的配置讲解比较细致
  4. [主板] 如何通过BIOS设置自动开机:介绍设置BIOS相关

自动开机

个人电脑主板是微星的主板,原本想要使用 (RTC)闹铃唤醒,但发现不符合需求
(RTC)闹铃唤醒仅只能设置1个时间点唤醒,个人需要在3个时间点唤醒

发现有个PCIE唤醒,搜索了相关资料,决定采用这个方案

网络的方案是使用硬件(开机棒)来实现,或者使用路由发送包唤醒,个人看了下自己的路由,没有这个功能

以下方便理解,两部电脑,一部称呼为A,一部称呼为B

决定写个脚本放在电脑B(常年开机,服务器,跑服务使用)到点唤醒电脑A(日常主用机)

原理是发送一个包到电脑,思索脚本该可以,但相关包不熟悉
问了下ChatGpt,给出示例代码,报错几次了,修正调试完成

基础代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import socket
import binascii

def wake_on_lan(mac_address):
# 魔术包由 6 个 0xFF 字节后跟目标 MAC 地址的 16 次重复组成
mac_address_formatted = mac_address.replace('-', '')
data = b'\xFF' * 6 + (binascii.unhexlify(mac_address_formatted)) * 16
# 创建 UDP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置套接字选项,允许广播
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 发送魔术包到局域网广播地址
sock.sendto(data, ('<broadcast>', 9))
print("已发送唤醒包到电脑A")

# 电脑A的 MAC 地址
mac_address = '30-9C-23-B5-F8-F3'
# 调用唤醒函数
wake_on_lan(mac_address)

MAC 地址在路由器中查看即可,不知道的话

  1. 打开运行,输入cmd,打开命令行
  2. 输入:ipconfig/all,拉到下面找到对应的行(物理地址)即可,后面的就是你电脑的MAC地址
    image-20240101224255487

定时运行,使用第三方apscheduler包,需要先安装下:pip install apscheduler
之后设置3个时间段,在这3个时间段发送唤醒的包

完整代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import socket
import binascii
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime

def wake_on_lan(mac_address):
# 魔术包由 6 个 0xFF 字节后跟目标 MAC 地址的 16 次重复组成
mac_address_formatted = mac_address.replace('-', '')
data = b'\xFF' * 6 + (binascii.unhexlify(mac_address_formatted)) * 16
# 创建 UDP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置套接字选项,允许广播
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 发送魔术包到局域网广播地址
sock.sendto(data, ('<broadcast>', 9))


def job():
mac_address = '30-9C-23-B5-F8-F3' # 电脑A的 MAC 地址
wake_on_lan(mac_address) # 调用唤醒函数
print("已发送唤醒包 -", datetime.datetime.now())

if __name__ == '__main__':

# 创建调度器
scheduler = BlockingScheduler()

# 添加定时任务,每天的指定时间运行
scheduler.add_job(job, 'cron', hour=6, minute=50) # 每天6:50运行
scheduler.add_job(job, 'cron', hour=12, minute=0) # 每天12:00运行
scheduler.add_job(job, 'cron', hour=18, minute=0) # 每天18:00运行

# 启动调度器
scheduler.start()

本地电脑主板BIOS要支持网络唤醒
不同主板称呼不同,微星叫做PCIE设备唤醒、有的叫做网络唤醒,或者Wake on Lan

先配置下BIOS,开机不断按DEL(不同主机进入按键不同,自行查阅,一般是DELF8F9
进入后,切换到高级选项卡(一般都在高级选项里面),找到唤醒的选项(有的在电源选项里面),点击进入
IMG_20240101_231204

找到PCIE设备唤醒按钮(有的叫做Wake on Lan),将其打开即可,之后按F10保存退出

IMG_20240101_231249

本地(被唤醒的电脑)要配置下网卡,要不然无法远程唤醒

  1. Win+X,选择「网络链接」

  2. 打开「更改适配器」
    image-20240101225235228

  3. 找到自己在用的网络,右键属性,打开属性面板后, 点击配置
    image-20240101225358252
    image-20240101225423365

  4. 选择「电源管理」,如下图配置(必须选项,否则无法唤醒)

    image-20240101225508572
    image-20240101225632241
    这里个人只要开机,关机自己关,所以「关机 网络唤醒」没用到,其他人根据需要决定是否开启

配置完成后,就可以在局域网其他电脑运行定时脚本,进行定时唤醒了
到达指定的时间时,会向本台电脑发送唤醒指令,本电脑会自动启动

注意事项/说明

  1. 网络唤醒只对休眠或者待机的电脑有效,电脑关机唤醒不了,所以不要关机,而是采用休眠,休眠电脑也完全不耗电,不用担心电费
  2. 电脑处于开机状态下,唤醒脚本发送的唤醒包不会对电脑产生任何影响

睡眠、休眠、关机区别

  • 睡眠:电脑看起来是关的,实则内存在供电,所有数据被写入内存,可以在几秒钟内迅速恢复正常操作,适用于离开一阵子,通过电源按钮、键盘任意按键唤醒电脑
  • 休眠:所有硬件断电,达成和睡眠一样的效果(重启计算机会恢复到休眠之前的状态),但实现原理不同,启动时间更长,因为关机将内存中的数据存储到硬盘中去(硬盘断电数据也不会丢失),开机则将硬盘的数据加载到内存中去,适用于长时间不用电脑,但用的时候可以快速进入状态
  • 关机:所有程序和数据被关闭,无法关闭会强制关闭(数据丢失),电脑完全不通电

参考资料

自动关机(休眠)

使用系统的计划程序,配合系统自带的shutdown命令
两者配合达成指定的时间段电脑自动休眠

  1. Win+ R,输入taskschd.msc,打开计划程序

  2. 选择右侧创建任务
    image-20240101222631576

  3. 名称随意
    image-20240101222708934

  4. 触发器,新建一个设置为每天,设置为你要的时间即可(例如这里设置为22:27:13,那么会在这个时间执行操作)
    image-20240101222811845

  5. 可以一次添加多个触发器,也就是多个时间执行
    image-20240101222940806

  6. 添加执行的命令:shutdown -h
    image-20240101223051579

    会提示是否使用参数,选「是」即可
    image-20240101223133133

  7. 设置完成,记得保存
    image-20240101223235091


电脑自动开关机
https://linguoguang.com/2024/01/01/电脑自动开关机/
作者
linguoguang
发布于
2024年1月1日
许可协议