很多时候,我坐在电脑桌前玩电脑,偶尔会遇到需要关闭家中的某盏灯,就需要选择下面的方法: 1, 去86开关或中控pad上关灯。(需要移动) 2, 喊小爱。(偶尔说不清楚,家里好多灯,而且晚上打扰家人睡觉) 3, 用手机进入app或电脑浏览器进入hass关闭。(手机操作需要在旁边解锁才行,电脑上打游戏的时候不方便,比如在打dota2,需要退出全屏去开浏览器关灯)
于是我琢磨咋才能,不论电脑在干什么,只要按一下键盘上某个键就关闭指定的灯。
----------------------------------------------------
原理:按下键盘按键后,自动发送post到nodered,nodered根据收到的json内容触发不同的效果。
下面是实现的步骤:
1,下载并安装AutoHotkey v2.0,这个软件就是监听鼠标键盘按键,然后做出一系列的操作。 2,用nodered创建 http in节点 监听post请求,根据不同的请求执行不同的命令。
3,新建一个.ahk文件编辑: # 代码开始
#Requires AutoHotkey v2.0
ScrollLock:: {
Url := "http://192.168.31.196:1880/webhook"
data := '{"activeTabClass": "tab1-tab", "buttonClicked": "客厅南灯"}'
HttpRequest(Url, data)
}
Pause:: {
Url := "http://192.168.31.196:1880/webhook"
data := '{"activeTabClass": "tab1-tab", "buttonClicked": "客厅北灯"}'
HttpRequest(Url, data)
}
HttpRequest(url, data) {
global req ; 声明 req 为全局变量,以便在定时器中访问
req := ComObject("WinHttp.WinHttpRequest.5.1")
req.Open("POST", url, true) ; 设置为异步请求
req.SetRequestHeader("Content-Type", "application/json")
; 发送请求
req.Send(data)
; 启动一个定时器,每100毫秒检查请求状态
SetTimer(CheckRequestStatus, 100)
}
CheckRequestStatus() {
global req
try {
if (req.Status != 0) { ; 请求已完成
SetTimer(CheckRequestStatus, "Off") ; 停止定时器
if (req.Status == 200) {
; 请求成功
; 你可以在这里处理成功的响应
; 例如,Debug输出
; MsgBox("请求成功!")
} else {
; 请求失败
; 你可以在这里处理失败的响应
; 例如,Debug输出
; MsgBox("请求失败!状态码:" req.Status)
}
}
} catch {
; 捕获错误,但不做任何处理
}
}
# 代码结束 PS:我设置了2个按键,ScrollLock和Pause,(尽量找这种人畜无害,没有副作用的按键)按下键盘上指定的按键就发送指定的post请求。 代码是问的ai,应该还可以精简。
下面是nodered参考图片:
4,设置开机启动,按 Win + R 打开运行对话框。 输入 shell:startup 并按回车。这将.ahk的快捷方式搞进去。
你也可以设置一键开启客厅音乐、投影系统、关闭电视等等。
想想你坐在电脑桌前经常需要起身去搞什么电器,弄个快捷键吧!
|