[Blog書いた]OSXからiPhoneでBluetoothテザリングする時に便利そうなAppleScript[OSX][iPhone]

bluetooth_icon
iPhoneでテザリングするのが普通になったらしい、数年前だと考えられなかったよね?
OSXからはWiFi、USB、Bluetoothの3種類の接続方法があって、それぞれに違いがあるようだ.

ある日ある場所でOSXからテザリングして簡単にスピードを比べてみた結果が以下、

テザリング(LTE-WiFi)
Ping: 69 ms
Download speed: 9.22 Mbps
Upload speed: 5.34 Mbps

テザリング(LTE-USB)
Ping: 77 ms
Download speed: 10.03 Mbps
Upload speed: 5.25 Mbps

テザリング(LTE-Bluetooth)
Ping: 81 ms
Download speed: 1.52 Mbps
Upload speed: 390.55 Kbps

まあ接続方法が違うから乱暴に言うと、

WiFi – それなりの速度で何もしなくていい、けどバッテリ食う
(訂正 → 何もしなくていいは嘘、接続時にiPhone側でも操作が必要)
USB – 一番早い、けどケーブルでつなぐ必要がある
Bluetooth – 何もしなくていいしバッテリ食わない、けど一番遅い

って感じ?(パスワードとかペアリングしたりの初期設定は必要)
まあたしかにそんな感じだ.

いつ使う可能性があるのか?と考えてみたけど自分の場合常時使う可能性は無いのかもしれない、だってさ、

1. 3GだけどWiFiルータあるじゃん
2. PCつないで使うとすぐに7GB制限突破じゃね?
3. 便利になったとは思うけど、接続できるまでが面倒じゃね?
4. iPhoneのバッテリ食いすぎじゃね?

といった、なんか全体的に微妙なイマイチ感がある.

そう考えてみたら緊急時?に簡単にバッテリとかに優しく最低限使えるBluetooth PANが使えればいいのかな?でもBluetoothで接続するのメンドクサくてすぐ忘れそうだし使う時はWiFi切っておきたいしなんかいいコマンドとかないの?とググってみると、
(訂正 → Bluetoothで接続するのが一番手順が簡単.Personal HotspotさえONになっていればiPhoneが鞄の中に入っているだけで一切iPhoneを操作せずこのスクリプト(後述)を走らせるだけで接続できる)

BluetoothのON/OFFは、

% brew install blueutil

でできそう.

WiFiのON/OFFは、

% networksetup -setairportpower en1 on

でできそう.

という感じだったけどBluetooth PANをConnectする方法がわからなかった.が、以下のAppleScriptも発見した、

MacScripter / Connect iPhone to Bluetooth

このAppleScriptは、

1. WiFiをOFFにして
2. BluetoothをONにして
3. Bluetooth PAN をConnectしてくれる

というもの、いいね!と思ったんだけど、これ使い終ったら設定を元に戻して欲しい.
でも作るの嫌だしメンドくさいからとりあえずそれぞれの動作をトグルするように今超手抜きな修正を加えたのが以下、

--  from http://macscripter.net/viewtopic.php?id=38559
--  Created by Chad Carney on 3/8/12.
--  iPhone Connect
--
--  Added toggle on/off by saka on 18/12/12.
--

TurnBluetoothOn()
TurnWifiOff()
Bluetooth()
CleanUp()

on Bluetooth()
	set AppleScript's text item delimiters to "."
	set btooth to "Bluetooth"
	set netWorkPane to "com.apple.preference.network"
	set winNetwork to "Network"
	
	tell application "System Preferences"
		set current pane to pane netWorkPane
	end tell
	
	tell application "System Events" to tell process "System Preferences"
		set theRow to row 1 of table 1 of scroll area 1 of window winNetwork whose value of static text 1 contains btooth
		select theRow --clicks the bluetooth row
		--If Bluetooth is already connected, the button will say Disconnect, so we don't want to turn it off:
		try
			click (button 1 of group 1 of window winNetwork whose title is "Connect")
		on error
			click (button 1 of group 1 of window winNetwork whose title is "Disonnect")
		end try
	end tell
end Bluetooth

on TurnWifiOff()
	set AppleScript's text item delimiters to "."
	set wifi to "Wi-Fi"
	set winNetwork to "Network"
	set netWorkPane to "com.apple.preference.network"
	
	tell application "System Preferences"
		set current pane to pane netWorkPane
	end tell
	
	tell application "System Events" to tell process "System Preferences"
		--Click on Network in the left scroll area:
		set theRow to row 1 of table 1 of scroll area 1 of window winNetwork whose value of static text 1 contains wifi
		select theRow
		-- use the try block in case wi-fi is already off, then it moves on w/ no error message:
		try
			click button "Turn Wi-Fi Off" of group 1 of window winNetwork
		on error
			click button "Turn Wi-Fi ON" of group 1 of window winNetwork
		end try
	end tell
end TurnWifiOff

on TurnBluetoothOn()
	set AppleScript's text item delimiters to "."
	set btooth to "Bluetooth"
	set winBtooth to "Bluetooth"
	--NOTE:  Notice that there is an "s" in preference for Bluetooth.  That will mess you up!:
	set bToothPane to "com.apple.preferences.Bluetooth"
	
	tell application "System Preferences"
		set current pane to pane bToothPane
	end tell
	
	--See if Bluetooth is off.  If it is turn it on:          
	tell application "System Events" to tell process "System Preferences"
		set chkBoxState to value of checkbox "On" of window winBtooth
		if chkBoxState = 0 then
			click checkbox "On" of window winBtooth
		else if chkBoxState = 1 then
			click checkbox "On" of window winBtooth
		end if
	end tell
end TurnBluetoothOn

on CleanUp()
	tell application "System Preferences"
		quit
	end tell
end CleanUp
 

ただトグルしてるだけだから前提が崩れてると期待通りの動作にはならない、そこらへんを考慮してちゃんと正しく動くものに誰か修正しておいてね、というかAppleScriptとかまったく知らないし、ここにコード載せてちゃんと表示されるのかもわからない.
(訂正 → で表示できる事を知った)

まあ、そんな感じで.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中