6

定期的にチェックを行い、接続されていない場合は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()

ここで、ユーザーがすでに LAN 経由で接続されている場合のような問題に直面しています。現時点では、このウォッチャーを有効にする必要はありません (wifi のオンとオフの切り替えを停止するため)。だから私が必要なのは、ユーザーがすでにLAN経由で接続されているか、少なくともインターネットに接続されているかを教えてくれるAPIはありますか?

私の言いたいことが分かりますか?

4

3 に答える 3

2

基本的には、Google に ping を実行するだけです。出力が得られ、wifi ネットワークに接続されていない場合は、wifi をオフにすることができます。それが私の考えです

于 2016-09-13T16:22:22.513 に答える
2

0.9.47 には、ここで役立つ hs.network の新機能がいくつかあります。

hs.network.primaryInterfaces() は、ipv4 および ipv6 トラフィックのデフォルト インターフェイスを示す 2 つの値を返します。

v4、v6 = hs.network.primaryInterfaces()

次に、v4 に最も関心があると仮定すると、hs.network.interfaceDetails(v4)["AirPort"] が nil かどうかを確認できます。nil の場合、WiFi インターフェースを使用していません。wifi 値でいっぱいのテーブルの場合、wifi を使用しています。

于 2016-09-16T11:28:06.013 に答える