カテゴリー: WiFi

WiFiデバイスのパワーを操作

Macに内蔵/接続されている無線LAN(WiFi)デバイスのパワー(電源)をオン/オフ操作するAppleScriptです。

AppleScript名:WiFiデバイスのパワーを操作
— Created 2015年08月18日 by Shane Stanley
— Modified 2019年03月06日 by Takaaki Naganoya
use AppleScript version "2.4" –macOS 10.10 or later
use scripting additions
use framework "Foundation"
use framework "CoreWLAN"

property CWInterface : a reference to current application’s CWInterface

–Power On WiFi
set w1Res to powerControlEveryWiFiDevices(true) of me

delay 5

–Power Off WiFi
set w2Res to powerControlEveryWiFiDevices(false) of me

on powerControlEveryWiFiDevices(aFlag as boolean)
set allNames to CWInterface’s interfaceNames()’s allObjects() as list
if allNames = {} then return false

set powerList to {}
repeat with i in allNames
set j to contents of i
set aInterface to (CWInterface’s interfaceWithName:j)
set wRes to (aInterface’s setPower:aFlag |error|:(missing value))

–Get Power state and check it
set aPower to (aInterface’s powerOn()) as boolean
if aPower = (not aFlag) then
if aFlag = true then
set aStat to " on "
else
set aStat to " off "
end if
display notification "Error occured in power" & aStat & "an Wifi deviece ( " & j & " )…."
end if
set the end of powerList to aPower
end repeat

return ({aFlag} is in powerList) –return whether some WiFi interface is on/off
end powerControlEveryWiFiDevices

現在地点の緯度経度情報を取得する v2

WiFiの情報を元に現在地点の緯度経度情報を取得するAppleScriptです。

実行前にWiFiがオンになっている必要があるので、WiFiの状態を確認して、WiFiがオフだったらオンにする処理が必要になります。

AppleScript名:現在地点の緯度経度情報を取得する v2
— Created 2015年03月04日 by Takaaki Naganoya, Shane Stanley
— Modified 2015年12月06日 by Takaaki Naganoya
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "CoreLocation"

property locationManager : missing value
property curLatitude : 0
property curLongitude : 0

–Get Current Geo Location
set {aLat, aLong} to getCurrentGeoLocation() of me

on getCurrentGeoLocation()
set locationManager to current application’s CLLocationManager’s alloc()’s init()

set locE to locationManager’s locationServicesEnabled()
if (locE as boolean) = true then
locationManager’s setDelegate:me
locationManager’s setDesiredAccuracy:(current application’s kCLLocationAccuracyNearestTenMeters)
locationManager’s setDistanceFilter:500
locationManager’s startUpdatingLocation()
else
return false –error in init
end if

set hitF to false
repeat 3000 times
if {curLatitude, curLongitude} is not equal to {0, 0} then
set hitF to true
exit repeat
end if
delay ("0.0001" as real)
end repeat

if hitF = false then return {false, false}
return {curLatitude, curLongitude}
end getCurrentGeoLocation

on locationManager:manager didUpdateLocations:locations
set location to (locations’s lastObject())
set eventDate to (location’s timestamp())
set howRecent to (eventDate’s timeIntervalSinceNow())
set howRecent to howRecent as real
set howRecent to absNum(howRecent)

if howRecent < 15.0 then
set alt to location’s altitude –>(NSNumber) 46.356517791748
set aSpeed to location’s speed –>(NSNumber) -1.0
set aCourse to location’s course –North:0, East:90, South:180, West:270
–> (NSNumber) -1.0
set theDescription to location’s |description|()
–> (NSString) "<+35.xxxxx,+139.xxxxxx> +/- 65.00m (speed -1.00 mps / course -1.00) @ 2015年03月04日 8時56分41秒 日本標準時"
set anNSScanner to current application’s NSScanner’s scannerWithString:theDescription
anNSScanner’s setCharactersToBeSkipped:(current application’s NSCharacterSet’s characterSetWithCharactersInString:"<,")
set {theResult, aLat} to anNSScanner’s scanDouble:(reference)
set {theResult, aLng} to anNSScanner’s scanDouble:(reference)
copy {aLat, aLng} to {my curLatitude, my curLongitude}
else
locationManager’s stopUpdatingLocation()
end if

end locationManager:didUpdateLocations:

on locationManager:anCLLocationManager didFailWithError:anNSError
display dialog (anNSError’s localizedDescription() as text)
end locationManager:didFailWithError:

on absNum(aNum)
if aNum > 0 then
return aNum
else
return (aNum * -1)
end if
end absNum

無線LANデバイスのMACアドレスを取得する

AppleScript名:無線LANデバイスのMACアドレスを取得する
— Created 2015年08月18日 by Takaaki Naganoya
— Created 2015年08月18日 by Shane Stanley
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "CoreWLAN"

set aRes to retWiFiMACaddress()
–> "XX:XX:XX:XX:XX:XX"

–WiFi DeviceのMAC ADDRESSを返す
on retWiFiMACaddress()

–Get WLAN Device Name
set allNames to current application’s CWInterface’s interfaceNames()’s allObjects()
–> (NSArray) {​​​​​"en0"​​​} –@MacBook Pro Retina 2012

set hitF to false
repeat with i from 1 to allNames’s |count|()
set aInterface to (current application’s CWInterface’s interfaceWithName:(allNames’s objectAtIndex:(i – 1)))
if aInterface’s serviceActive() as boolean then
set hitF to true
exit repeat
end if
end repeat
if hitF = false then return false –There is No WiFi Device (Broken or illigal configuration or Hackintosh)

set aHWAddress to aInterface’s hardwareAddress() as text
–> "b8:xx:xx:xx:xx:xx"–MAC Address

return aHWAddress

end retWiFiMACaddress

無線LANの各種情報を取得する v2.2

AppleScript名:無線LANの各種情報を取得する v2.2
— Created 2015年08月18日 by Shane Stanley
— Modified 2015年08月18日 by Takaaki Naganoya
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "CoreWLAN"

–Get WLAN Device Name
set allNames to current application’s CWInterface’s interfaceNames()’s allObjects()
log allNames as list of string or string
–> (NSArray) {​​​​​"en0"​​​} –@MacBook Pro Retina 2012

set hitF to false
repeat with i from 1 to allNames’s |count|()
set aInterface to (current application’s CWInterface’s interfaceWithName:(allNames’s objectAtIndex:(i – 1)))
if aInterface’s serviceActive() as boolean then
set hitF to true
exit repeat
end if
end repeat
if hitF = false then return false –There is No WiFi Device

–WiFi device is Power On ?
repeat 10 times

set aPower to (aInterface’s powerOn()) as boolean

if aPower = false then
–ActiveなWLANがない場合(WiFiをオフにしている)にはWiFiパワーオン
set wRes to aInterface’s setPower:true |error|:(missing value)
delay 1
else
exit repeat
end if
end repeat

if aPower = false then return false –I could not power on WiFi deveice

set aChan to aInterface’s wlanChannel()
–> (CWChannel) <CWChannel: 0x60000040cdd0> [channelNumber=1(2GHz), channelWidth={20MHz}]

set chanNumber to aChan’s channelNumber()
log chanNumber
–> 52
set chanBand to aChan’s channelBand() — 0 = unknown, 1 = 2GHz, 2 = 5GHz
log chanBand
–> 2
set chanWidth to aChan’s channelWidth() — 0 = unknown, 1 = 20MHz, 2 = 40MHz
log chanWidth
–> 2
set aTransRate to aInterface’s transmitRate()
log aTransRate
–> 162.0

set aChannnels to aInterface’s supportedWLANChannels()
–> (NSSet) {​​​​​(CWChannel) <CWChannel: 0x60800020fad0> [channelNumber=1(2GHz), channelWidth={20MHz}, active], ​​​​​(CWChannel) <CWChannel: 0x60800020fb90> [channelNumber=2(2GHz), channelWidth={20MHz}, active], ​​​​​……………​​​​​(CWChannel) <CWChannel: 0x608000208410> [channelNumber=64(5GHz), channelWidth={20MHz}, DFS], ​​​​​(CWChannel) <CWChannel: 0x60800020f9e0> [channelNumber=136(5GHz), channelWidth={20MHz}, DFS]​​​}

set aSSIDdata to aInterface’s ssidData()
–> (NSData) <45787472 xxxxxxxx xxxxxxxx xxxx>

set aSSID to aInterface’s ssid() as text
–> "Extreme net_5G"

set aActive to aInterface’s serviceActive()
–> true

set aSecurity to aInterface’s security()
–> 4

set aRSSIval to aInterface’s rssiValue()
–> -72

set aPower to aInterface’s powerOn()
–> true

set aNoise to aInterface’s noiseMeasurement()
–> -91

set aIFname to aInterface’s interfaceName() as text
–> "en0"

set aMode to aInterface’s interfaceMode()
–> 1

set aHWAddress to aInterface’s hardwareAddress() as text
–> "b8:xx:xx:xx:xx:xx"–MAC Address

set aCountry to aInterface’s countryCode() as text
–> "JP"

set aConfig to aInterface’s configuration()
–> (CWConfiguration) <CWConfiguration: 0x6100002348e0>

set aCacheRes to aInterface’s cachedScanResults()
–> (NSSet) {​​​​​(CWNetwork) <CWNetwork: 0x618000402740> ……………… [channelNumber=11(2GHz), channelWidth={20MHz}], ibss=0]​​​}

set aBSSID to aInterface’s bssid() as text
–> "10:XX:XX:XX:XX:XX"

set aPhyMode to aInterface’s activePHYMode()
–> 4

WiFiデバイスのパワーをオンに

AppleScript名:WiFiデバイスのパワーをオンに
— Created 2015年08月18日 by Shane Stanley
— Modified 2015年08月18日 by Takaaki Naganoya
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "CoreWLAN"

set wRes to powerOnEveryWiFiDevices() of me

on powerOnEveryWiFiDevices()
set allNames to current application’s CWInterface’s interfaceNames()’s allObjects() as list
if allNames = {} then return false

set powerList to {}
repeat with i in allNames
set j to contents of i
set aInterface to (current application’s CWInterface’s interfaceWithName:j)
set wRes to (aInterface’s setPower:true |error|:(missing value))
set aPower to (aInterface’s powerOn()) as boolean
if aPower = false then
display notification "Error occured in enabling an Wifi deviece ( " & j & " )…."
end if
set the end of powerList to aPower
end repeat

return ({true} is in powerList) –return whether some WiFi interface is on
end powerOnEveryWiFiDevices