我正在考虑有一个锤击匙wifi观察者,它做一个定期检查,并将禁用wifi,如果它没有连接。
下面的脚本可以这样做,
function checkAndDisableWifi()
hs.timer.doAfter(45, function()
local current_network = hs.wifi.currentNetwork()
if current_network == nil then
hs.wifi.setPower(false)
hs.notify.new({title="Hammerspoon",informativeText="Disabling wifi due to inactivity"}):send()
end
end)
end
function wifi_timer_callback()
local wifi_state = hs.wifi.interfaceDetails().power
if wifi_state then
local current_network = hs.wifi.currentNetwork()
if current_network == nil then
hs.wifi.setPower(false)
hs.notify.new({title="Hammerspoon",informativeText="Disabling wifi due to inactivity"}):send()
end
else
hs.wifi.setPower(true)
checkAndDisableWifi()
end
end
local wifi_timer = hs.timer.doEvery((10*60), wifi_timer_callback)
wifi_timer:start()在这里,我面临着一个问题,如果用户已经通过局域网连接了,该怎么办?在这个时候,我不需要启用这个观察器(以便停止切换wifi的开关)。因此,我需要的是,是否有API可以告诉我,用户是否已经通过局域网连接,或至少连接到互联网?
我说清楚了吗?
发布于 2016-09-13 16:26:49
在发布了这个问题后,我就有了一个类似@TheFrenchPlays的想法。这是我目前通过锤击勺来扩展这个想法的方法,
status, data, headers = hs.http.get("http://google.com")因此,当您检查status变量时,如果它是在线的,它将给出200,如果它是脱机的,它将给出0。因此,通过检查这个变量,我可以解决这个问题。
如果我没有错,如果锤子公开了一个API,如果它连接与否,是否返回一个BOOL,那就太好了。也可以通过WiFi或局域网。
更新:现在这个围绕的工作并不能完全解决系统通过局域网连接时的问题。由于我不知道它是通过局域网连接还是通过WiFi连接,所以不能直接关闭WiFi 。因此,目前的解决办法似乎很乏味。
function checkAndDisableWifi()
hs.timer.doAfter(45, function()
local current_network = hs.wifi.currentNetwork()
if current_network == nil then
disableWifi()
end
end)
end
function disableWifi()
hs.wifi.setPower(false)
hs.notify.new({title="Hammerspoon",informativeText="Disabling wifi due to inactivity"}):send()
end
function wifi_timer_callback()
local status, data, headers = hs.http.get("http://google.com")
local wifi_state = hs.wifi.interfaceDetails().power
local current_network = hs.wifi.currentNetwork()
if not status == 200 then -- user is offline mean not connected to LAN. So do WiFi check
if wifi_state and current_network == nil then
disableWifi()
else
hs.wifi.setPower(true)
checkAndDisableWifi()
end
else
--[[
since user is connected to online, check whether user is connected through wifi or not. If wifi is on and not connected to any network then disable wifi
--]]
if wifi_state and current_network == nil then
disableWifi()
end
end
end
local wifi_timer = hs.timer.doEvery((10*60), wifi_timer_callback)
wifi_timer:start()更新2:
看起来哈默斯彭(0.9.47)已经有了这个的解决方案。使用Chris给出的解决方案更新代码,
if hs.network.interfaceDetails(v4) then
if hs.network.interfaceDetails(v4)["AirPort"] then
print("on wifi")
else
print("on Lan")
end
else
print("not connected to internet")
end发布于 2016-09-13 16:22:22
基本上你只需要点击谷歌。如果你得到一个输出,并且没有通过无线网络连接,你就可以启动无线网络。那是我的主意
发布于 2016-09-16 11:28:06
0.9.47在hs.network中有一些新特性,在这里应该会有所帮助。
hs.network.primaryInterfaces()返回两个值,显示ipv4和ipv6通信量的默认接口,因此如果要执行以下操作:
v4,v6 = hs.network.primaryInterfaces()
然后,假设您最关心v4,则可以检查hs.network.interfaceDetails(v4)"AirPort“是否为零。如果它是零,你不是在一个wifi接口,如果它是一个充满WiFi值的表,你在wifi上。
https://stackoverflow.com/questions/39474726
复制相似问题