Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

カテゴリー: Bluetooth

Bluetoothデバイスのバッテリー残量を取得 v3

Posted on 3月 18, 2018 by Takaaki Naganoya

Bluetooth経由でMacに接続しているデバイスのうち、バッテリー残量を取得できるものの情報を取得するAppleScriptです。

# as anythingの解釈違いから「as list of string or string」と展開される部分をmacOS 10.13以降のOSでは誤解されなくなったので、v4として追記してあります

現在Bluetooth経由で接続中のデバイス名一覧を取得し、各名称のデバイスのバッテリー残量情報をSystem Profiler経由で取得します。

ただし、バッテリー残量を取得できているのはApple純正のキーボードとマウスだけで、同じく純正品といってもペアリングしているiPhoneのバッテリー残量は取得できませんし、Bluetoothメニューにバッテリー残量が表示されるAirPodsもこの方法では取得できていません。

サードパーティのデバイス(PlayStation 3のゲームコントローラー)についても確認しましたが、メニューにも残量は出ていませんし、同様に本AppleScriptでもバッテリー残量は取得できません。

あと、プログラムはもっと短くできるような気がとてもします。

AppleScript名:Bluetoothデバイスのバッテリー残量を取得 v3
— Created 2018-03-18 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "IOBluetooth"

property NSArray : a reference to current application’s NSArray
property NSString : a reference to current application’s NSString
property NSPredicate : a reference to current application’s NSPredicate
property NSMutableArray : a reference to current application’s NSMutableArray
property NSMutableDictionary : a reference to current application’s NSMutableDictionary
property NSPropertyListFormat : a reference to current application’s NSPropertyListFormat
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding
property NSPropertyListImmutable : a reference to current application’s NSPropertyListImmutable
property NSPropertyListSerialization : a reference to current application’s NSPropertyListSerialization

set devList to getBTBatteryLifeByNameList() of me
return devList
–>  {​​​​​{​​​​​​​devName:"Takaaki Naganoya のマウス", ​​​​​​​battPercentage:79​​​​​}, ​​​​​{​​​​​​​devName:"Takaaki Naganoya のキーボード #1", ​​​​​​​battPercentage:93​​​​​}​​​}

on getBTBatteryLifeByNameList()
  –Get name of connected devices
  
set aDevNameList to getBTPeripheralsConnected() of me
  
  
–Get System Profiler information
  
set sRes to do shell script "/usr/sbin/system_profiler SPBluetoothDataType -detailLevel full -xml"
  
set aSource to (readPlistFromStr(sRes) of me) as list
  
set aaList to contents of first item of aSource
  
  
–Filter System Profiler output
  
set outList to {}
  
  
set aList to _items of aaList
  
  
repeat with aDevName in aDevNameList
    set aName to contents of aDevName
    
    
repeat with i in aList
      set aDict to (NSMutableDictionary’s dictionaryWithDictionary:(contents of i))
      
set aKeyPath to "device_title." & aName
      
set aVal to (aDict’s valueForKeyPath:aKeyPath) as list of string or string
      
      
set tmpOut to filterDevListByName(aVal) of me as list of string or string
      
      
if (tmpOut ≠ missing value) and (tmpOut ≠ "") then
        set the end of outList to {devName:aName, battPercentage:retIntNumFromPercentageString(tmpOut) of me}
        
exit repeat
      end if
      
    end repeat
  end repeat
  
  
return outList
end getBTBatteryLifeByNameList

on retIntNumFromPercentageString(aStr)
  set aStr to current application’s NSString’s stringWithString:aStr
  
set aNum to aStr’s intValue()
  
return aNum
end retIntNumFromPercentageString

on filterDevListByName(aVal)
  set outList to {}
  
  
repeat with ii in aVal
    set jj to contents of ii
    
if jj is not equal to missing value then
      set tmpRec to (current application’s NSDictionary’s dictionaryWithDictionary:jj)
      
set tmpRes to (tmpRec’s valueForKeyPath:"device_batteryPercent")
      
      
if tmpRes ≠ missing value then
        return (tmpRes as list of string or string)
      end if
    end if
  end repeat
  
  
return ""
end filterDevListByName

–Bluetooth経由で接続されているデバイス名をリストで返す
on getBTPeripheralsConnected()
  set pRes to getBluetoothPowerState() of me
  
if pRes = false then return false
  
  
set dArray to current application’s IOBluetoothDevice’s pairedDevices()
  
set aRes to my filterRecListByLabel1(dArray, "mIONotification != 0")
  
set dNames to (aRes’s mName) as list
  
return dNames
end getBTPeripheralsConnected

–stringのplistを読み込んでRecordに
on readPlistFromStr(theString)
  set aSource to NSString’s stringWithString:theString
  
set pListData to aSource’s dataUsingEncoding:(NSUTF8StringEncoding)
  
set aPlist to NSPropertyListSerialization’s propertyListFromData:pListData mutabilityOption:(NSPropertyListImmutable) |format|:(NSPropertyListFormat) errorDescription:(missing value)
  
return aPlist
end readPlistFromStr

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel(aRecList as list, aPredicate as string)
  set aArray to NSArray’s arrayWithArray:aRecList
  
  
set aPredicate to NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
  
set bList to filteredArray as list
  
return bList
end filterRecListByLabel

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel1(aRecList, aPredicate as string)
  set aArray to current application’s NSArray’s arrayWithArray:aRecList
  
set aPredicate to current application’s NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
return filteredArray
end filterRecListByLabel1

–Mac本体のBluetoothのパワー状態を取得
on getBluetoothPowerState()
  set aCon to current application’s IOBluetoothHostController’s alloc()’s init()
  
set pRes to (aCon’s powerState()) as boolean
end getBluetoothPowerState

★Click Here to Open This Script 

「as anything」の部分がmacOS 10.13より前のバージョンでは「as list of string or string」と解釈されてしまいますが、macOS 10.14以降のスクリプトエディタでは「as anyhing」、Script Debuggerでは「as any」と解釈されるため(用語がそれぞれ整備されたため)、「as anything」で書き換えておきました。

「as anything」については、言語仕様の重箱の隅のさらに隅をつついている状態なので、「as {list, string, missing value}」などと、想定できるデータ型を列挙しておいたほうが安全です。でも、このany型のcastはCocoa ObjectからAppleScript Objectの型指定しない変換ができて便利なので、言語仕様上ないと不便です。

AppleScript名:Bluetoothデバイスのバッテリー残量を取得 v4.scpt
— Created 2018-03-18 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "IOBluetooth"

property NSArray : a reference to current application’s NSArray
property NSString : a reference to current application’s NSString
property NSPredicate : a reference to current application’s NSPredicate
property NSMutableArray : a reference to current application’s NSMutableArray
property NSMutableDictionary : a reference to current application’s NSMutableDictionary
property NSPropertyListFormat : a reference to current application’s NSPropertyListFormat
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding
property NSPropertyListImmutable : a reference to current application’s NSPropertyListImmutable
property NSPropertyListSerialization : a reference to current application’s NSPropertyListSerialization

set devList to getBTBatteryLifeByNameList() of me
return devList
–>  {​​​​​{​​​​​​​devName:"Takaaki Naganoya のマウス", ​​​​​​​battPercentage:79​​​​​}, ​​​​​{​​​​​​​devName:"Takaaki Naganoya のキーボード #1", ​​​​​​​battPercentage:93​​​​​}​​​}

on getBTBatteryLifeByNameList()
  –Get name of connected devices
  
set aDevNameList to getBTPeripheralsConnected() of me
  
  
–Get System Profiler information
  
set sRes to do shell script "/usr/sbin/system_profiler SPBluetoothDataType -detailLevel full -xml"
  
set aSource to (readPlistFromStr(sRes) of me) as list
  
set aaList to contents of first item of aSource
  
  
–Filter System Profiler output
  
set outList to {}
  
  
set aList to _items of aaList
  
  
repeat with aDevName in aDevNameList
    set aName to contents of aDevName
    
    
repeat with i in aList
      set aDict to (NSMutableDictionary’s dictionaryWithDictionary:(contents of i))
      
set aKeyPath to "device_title." & aName
      
set aVal to (aDict’s valueForKeyPath:aKeyPath) as anything
      
      
set tmpOut to filterDevListByName(aVal) of me as anything
      
      
if (tmpOut ≠ missing value) and (tmpOut ≠ "") then
        set the end of outList to {devName:aName, battPercentage:retIntNumFromPercentageString(tmpOut) of me}
        
exit repeat
      end if
      
    end repeat
  end repeat
  
  
return outList
end getBTBatteryLifeByNameList

on retIntNumFromPercentageString(aStr)
  set aStr to current application’s NSString’s stringWithString:aStr
  
set aNum to aStr’s intValue()
  
return aNum
end retIntNumFromPercentageString

on filterDevListByName(aVal)
  set outList to {}
  
  
repeat with ii in aVal
    set jj to contents of ii
    
if jj is not equal to missing value then
      set tmpRec to (current application’s NSDictionary’s dictionaryWithDictionary:jj)
      
set tmpRes to (tmpRec’s valueForKeyPath:"device_batteryPercent")
      
      
if tmpRes ≠ missing value then
        return (tmpRes as anything)
      end if
    end if
  end repeat
  
  
return ""
end filterDevListByName

–Bluetooth経由で接続されているデバイス名をリストで返す
on getBTPeripheralsConnected()
  set pRes to getBluetoothPowerState() of me
  
if pRes = false then return false
  
  
set dArray to current application’s IOBluetoothDevice’s pairedDevices()
  
set aRes to my filterRecListByLabel1(dArray, "mIONotification != 0")
  
set dNames to (aRes’s mName) as list
  
return dNames
end getBTPeripheralsConnected

–stringのplistを読み込んでRecordに
on readPlistFromStr(theString)
  set aSource to NSString’s stringWithString:theString
  
set pListData to aSource’s dataUsingEncoding:(NSUTF8StringEncoding)
  
set aPlist to NSPropertyListSerialization’s propertyListFromData:pListData mutabilityOption:(NSPropertyListImmutable) format:(NSPropertyListFormat) errorDescription:(missing value)
  
return aPlist
end readPlistFromStr

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel(aRecList as list, aPredicate as string)
  set aArray to NSArray’s arrayWithArray:aRecList
  
  
set aPredicate to NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
  
set bList to filteredArray as list
  
return bList
end filterRecListByLabel

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel1(aRecList, aPredicate as string)
  set aArray to current application’s NSArray’s arrayWithArray:aRecList
  
set aPredicate to current application’s NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
return filteredArray
end filterRecListByLabel1

–Mac本体のBluetoothのパワー状態を取得
on getBluetoothPowerState()
  set aCon to current application’s IOBluetoothHostController’s alloc()’s init()
  
set pRes to (aCon’s powerState()) as boolean
end getBluetoothPowerState

★Click Here to Open This Script 

(Visited 422 times, 3 visits today)
Posted in Bluetooth System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Bluetoothに接続中のデバイス名を取得するv4

Posted on 2月 18, 2018 by Takaaki Naganoya
AppleScript名:Bluetoothに接続中のデバイス名を取得するv4
— Created 2017-07-24 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "IOBluetooth"

set pRes to getBluetoothPowerState() of me
if pRes = false then return

set dArray to current application’s IOBluetoothDevice’s pairedDevices()
set aRes to my filterRecListByLabel1(dArray, "mIONotification != 0")
set dNames to (aRes’s mName) as list
–>  {​​​​​"Piyomaru AirPods", ​​​​​"Takaaki Naganoya のマウス"​​​}

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel1(aRecList, aPredicate as string)
  set aArray to current application’s NSArray’s arrayWithArray:aRecList
  
set aPredicate to current application’s NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
return filteredArray
end filterRecListByLabel1

–Mac本体のBluetoothのパワー状態を取得
on getBluetoothPowerState()
  set aCon to current application’s IOBluetoothHostController’s alloc()’s init()
  
set pRes to (aCon’s powerState()) as boolean
end getBluetoothPowerState

★Click Here to Open This Script 

(Visited 50 times, 1 visits today)
Posted in Bluetooth System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Bluetoothのオン、オフ状態を取得する

Posted on 2月 18, 2018 by Takaaki Naganoya
AppleScript名:Bluetoothのオン、オフ状態を取得する
— Created 2017-07-25 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "IOBluetooth"

set pRes to getBluetoothPowerState() of me

on getBluetoothPowerState()
  set aCon to current application’s IOBluetoothHostController’s alloc()’s init()
  
set pRes to (aCon’s powerState()) as boolean
end getBluetoothPowerState

★Click Here to Open This Script 

(Visited 51 times, 1 visits today)
Posted in Bluetooth System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Bluetoothに接続中のデバイス名を取得、AirPodsを切断する

Posted on 2月 18, 2018 by Takaaki Naganoya
AppleScript名:Bluetoothに接続中のデバイス名を取得、AirPodsを切断する
— Created 2017-08-05 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"
use framework "IOBluetooth"
–参照 https://github.com/lapfelix/BluetoothConnector

property IOBluetoothHostController : a reference to current application’s IOBluetoothHostController
property IOBluetoothDevice : a reference to current application’s IOBluetoothDevice

set dList to getActiveBluetoothDevices() of me
–>  {{deviceName:"Piyomaru AirPods", deviceAddress:"Xx-XX-xX-Xx-xx-xx"}, {deviceName:"Takaaki Naganoya のマウス", deviceAddress:"xx-xx-XX-xx-XX-Xx"}, {deviceName:"Takaaki Naganoya のキーボード #1", deviceAddress:"XX-XX-xX-xx-Xx-xX"}}

set dRes to filterRecListByLabel(dList, "deviceName contains ’AirPods’") of me
if dRes = {} then return false –Case: No match
set dAddr to dRes’s first item’s deviceAddress

set cnRes1 to disconnectBluetoothDeviceByAddress(dAddr) of me
–>  true (Successfully Disconnected)

delay 10

set cnRes2 to connectBluetoothDeviceByAddress(dAddr) of me
–>  true (Successfully Connected)

–指定アドレスのBluetooth Deviceを接続する
on connectBluetoothDeviceByAddress(addressStr as string)
  if getBluetoothPowerState() = false then error "Bluetooth Power is not active with your Mac"
  
set aBTList to IOBluetoothDevice’s pairedDevices() as list
  
  
repeat with i in aBTList
    set aClass to (current application’s NSStringFromClass(i’s |class|())) as string
    
if aClass is equal to "IOBluetoothDevice" then
      set anAddress to i’s addressString() as string
      
      
if anAddress = addressStr then
        i’s openConnection()
        
return true
      end if
    end if
  end repeat
  
return false
end connectBluetoothDeviceByAddress

–指定アドレスのBluetooth Deviceの接続を切る
on disconnectBluetoothDeviceByAddress(addressStr as string)
  if getBluetoothPowerState() = false then error "Bluetooth Power is not active with your Mac"
  
set aBTList to IOBluetoothDevice’s pairedDevices() as list
  
  
repeat with i in aBTList
    set aClass to (current application’s NSStringFromClass(i’s |class|())) as string
    
if aClass is equal to "IOBluetoothDevice" then
      set anAddress to i’s addressString() as string
      
      
if anAddress = addressStr then
        i’s closeConnection()
        
return true
      end if
    end if
  end repeat
  
return false
end disconnectBluetoothDeviceByAddress

–ペアリング済みのBluetooth Deviceの情報を取得
on getActiveBluetoothDevices()
  if getBluetoothPowerState() = false then error "Bluetooth Power is not active with your Mac"
  
set aBTList to IOBluetoothDevice’s pairedDevices() as list
  
set devList to {}
  
  
repeat with i in aBTList
    set aClass to (current application’s NSStringFromClass(i’s |class|())) as string
    
if aClass = "IOBluetoothDevice" then
      set aName to i’s |name|() as string
      
set anAddress to i’s addressString() as string
      
set aPaired to i’s isPaired() as boolean
      
–set aConnect to i’s isConnected() as boolean
      
if aPaired = true then
        set the end of devList to {deviceName:aName, deviceAddress:anAddress}
      end if
    end if
  end repeat
  
  
return devList
end getActiveBluetoothDevices

–Mac本体のBluetoothのパワー状態を取得
on getBluetoothPowerState()
  set aCon to IOBluetoothHostController’s alloc()’s init()
  
set pRes to (aCon’s powerState()) as boolean
end getBluetoothPowerState

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel(aRecList as list, aPredicate as string)
  set aArray to current application’s NSArray’s arrayWithArray:aRecList
  
  
set aPredicate to current application’s NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
  
set bList to filteredArray as list
  
return bList
end filterRecListByLabel

★Click Here to Open This Script 

(Visited 83 times, 1 visits today)
Posted in Bluetooth System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Bluetoothに接続中のデバイスをメーカー名とマイナー種別で抽出

Posted on 2月 18, 2018 by Takaaki Naganoya
AppleScript名:Bluetoothに接続中のデバイスをメーカー名とマイナー種別で抽出
— Created 2017-08-06 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSArray : a reference to current application’s NSArray
property NSString : a reference to current application’s NSString
property NSPredicate : a reference to current application’s NSPredicate
property NSMutableArray : a reference to current application’s NSMutableArray
property NSMutableDictionary : a reference to current application’s NSMutableDictionary
property NSPropertyListFormat : a reference to current application’s NSPropertyListFormat
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding
property NSPropertyListImmutable : a reference to current application’s NSPropertyListImmutable
property NSPropertyListSerialization : a reference to current application’s NSPropertyListSerialization

–製造者が"Apple"のBluetoothデバイスをリストアップ
set qRes to returnBTPeripheral from "Apple"
–>  {​​​​​{​​​​​​​device_supportsESCO:"attrib_Yes", ​​​​​​​device_role:"attrib_master", ​​​​​​​device_manufacturer:"Apple (0x6, 0x03)", ​​​​​​​device_services:"Handsfree, Wireless iAP, AVRCP Controller, Audio Sink, AVRCP Target, AAP Server", ​​​​​​​device_isconnected:"attrib_Yes", ​​​​​​​device_RSSI:-51, ​​​​​​​device_majorClassOfDevice_string:"Audio", ​​​​​​​device_isconfigured:"attrib_Yes", ​​​​​​​device_minorClassOfDevice_string:"Headphones", ​​​​​​​device_interval:"441.25 ms", ​​​​​​​device_addr:"XX-XX-XX-XX-XX-XX", ​​​​​​​device_ConnectionMode:"attrib_sniff_mode", ​​​​​​​device_productID:"0x2002", ​​​​​​​device_supportsSSP:"attrib_Yes", ​​​​​​​device_classOfDevice:"0x04 0x06 0x240418", ​​​​​​​device_vendorID:"0x004C", ​​​​​​​device_fw_version:"0x0372", ​​​​​​​device_ispaired:"attrib_Yes", ​​​​​​​device_supportsEDR:"attrib_Yes"​​​​​}, ​​​​​{​​​​​​​device_supportsESCO:"attrib_No", ​​​​​​​device_manufacturer:"Apple (0x3, 0x31C)", ​​​​​​​device_ispaired:"attrib_Yes", ​​​​​​​device_services:"Apple Wireless Mouse", ​​​​​​​device_isconnected:"attrib_No", ​​​​​​​device_majorClassOfDevice_string:"Peripheral", ​​​​​​​device_isNormallyConnectable:"attrib_Yes", ​​​​​​​device_isconfigured:"attrib_Yes", ​​​​​​​device_addr:"XX-XX-XX-XX-XX-XX", ​​​​​​​device_productID:"0x030D", ​​​​​​​device_supportsSSP:"attrib_No", ​​​​​​​device_vendorID:"0x05AC", ​​​​​​​device_classOfDevice:"0x05 0x20 0x2580", ​​​​​​​device_minorClassOfDevice_string:"Mouse", ​​​​​​​device_fw_version:"0x0084", ​​​​​​​device_supportsEDR:"attrib_No"​​​​​}​​​}
–Appleのデバイスでも製造者がAppleになっていないものもある。Magic Keyboard 2とか

–種類(マイナー)が "Headphones"のBluetoothデバイスをリストアップ
set qRes to returnBTPeripheral about "Headphones"
–>  {​​​​​{​​​​​​​device_supportsESCO:"attrib_Yes", ​​​​​​​device_role:"attrib_master", ​​​​​​​device_manufacturer:"Apple (0x6, 0x03)", ​​​​​​​device_services:"Handsfree, Wireless iAP, AVRCP Controller, Audio Sink, AVRCP Target, AAP Server", ​​​​​​​device_isconnected:"attrib_Yes", ​​​​​​​device_RSSI:-51, ​​​​​​​device_majorClassOfDevice_string:"Audio", ​​​​​​​device_isconfigured:"attrib_Yes", ​​​​​​​device_minorClassOfDevice_string:"Headphones", ​​​​​​​device_interval:"441.25 ms", ​​​​​​​device_addr:"XX-XX-XX-XX-XX-XX", ​​​​​​​device_ConnectionMode:"attrib_sniff_mode", ​​​​​​​device_productID:"0x2002", ​​​​​​​device_supportsSSP:"attrib_Yes", ​​​​​​​device_classOfDevice:"0x04 0x06 0x240418", ​​​​​​​device_vendorID:"0x004C", ​​​​​​​device_fw_version:"0x0372", ​​​​​​​device_ispaired:"attrib_Yes", ​​​​​​​device_supportsEDR:"attrib_Yes"​​​​​}​​​}

–製造者が"Apple"で、種類(マイナー)が "Headphones"のBluetoothデバイスをリストアップ
set qRes to returnBTPeripheral from "Apple" about "Headphones"
–> {{device_supportsESCO:"attrib_Yes", device_role:"attrib_master", device_manufacturer:"Apple (0x6, 0x03)", device_services:"Handsfree, Wireless iAP, AVRCP Controller, Audio Sink, AVRCP Target, AAP Server", device_isconnected:"attrib_Yes", device_RSSI:-52, device_majorClassOfDevice_string:"Audio", device_isconfigured:"attrib_Yes", device_minorClassOfDevice_string:"Headphones", device_interval:"441.25 ms", device_addr:"XX-XX-XX-XX-XX-XX", device_ConnectionMode:"attrib_sniff_mode", device_productID:"0x2002", device_supportsSSP:"attrib_Yes", device_classOfDevice:"0x04 0x06 0x240418", device_vendorID:"0x004C", device_fw_version:"0x0372", device_ispaired:"attrib_Yes", device_supportsEDR:"attrib_Yes"}}

on returnBTPeripheral from devMaker as string : "" about kindName as string : ""
  set sRes to do shell script "/usr/sbin/system_profiler SPBluetoothDataType -detailLevel full -xml"
  
set aSource to (readPlistFromStr(sRes) of me) as list
  
set aaList to contents of first item of aSource
  
  
set resArray to NSMutableArray’s new()
  
  
set aList to _items of aaList
  
repeat with i in aList
    set aDict to (NSMutableDictionary’s dictionaryWithDictionary:(contents of i))
    
set aKeyList to (aDict’s allKeys()) as list
    
    
set dResList to (aDict’s valueForKeyPath:"device_title")
    
repeat with ii in dResList
      set dKeyList to ii’s allKeys()
      
set dKey to first item of dKeyList
      
set dDic to (ii’s valueForKeyPath:dKey)
      
      
if devMaker is not equal to "" and kindName is not equal to "" then
        set qText to "device_manufacturer contains ’" & devMaker & "’ && device_minorClassOfDevice_string ==’" & kindName & "’"
      else if devMaker is not equal to "" then
        set qText to "device_manufacturer contains ’" & devMaker & "’"
      else if kindName is not equal to "" then
        set qText to "device_minorClassOfDevice_string ==’" & kindName & "’"
      end if
      
      
set dRes to filterRecListByLabel(dDic, qText) of me
      
if (dRes as list) is not equal to {} then
        (resArray’s addObject:(first item of dRes))
      end if
    end repeat
  end repeat
  
  
return resArray as list
end returnBTPeripheral

–stringのplistを読み込んでRecordに
on readPlistFromStr(theString)
  set aSource to NSString’s stringWithString:theString
  
set pListData to aSource’s dataUsingEncoding:(NSUTF8StringEncoding)
  
set aPlist to NSPropertyListSerialization’s propertyListFromData:pListData mutabilityOption:(NSPropertyListImmutable) |format|:(NSPropertyListFormat) errorDescription:(missing value)
  
return aPlist
end readPlistFromStr

–リストに入れたレコードを、指定の属性ラベルの値で抽出
on filterRecListByLabel(aRecList as list, aPredicate as string)
  set aArray to NSArray’s arrayWithArray:aRecList
  
  
set aPredicate to NSPredicate’s predicateWithFormat:aPredicate
  
set filteredArray to aArray’s filteredArrayUsingPredicate:aPredicate
  
  
set bList to filteredArray as list
  
return bList
end filterRecListByLabel

★Click Here to Open This Script 

(Visited 48 times, 1 visits today)
Posted in Bluetooth System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • AppleScriptによるWebブラウザ自動操縦ガイド
  • macOS 13, Ventura(継続更新)
  • ドラッグ&ドロップ機能の未来?
  • macOS 12.x上のAppleScriptのトラブルまとめ
  • PFiddlesoft UI Browserが製品終了に
  • macOS 12.3 beta 5、ASの障害が解消される(?)
  • SF Symbolsを名称で指定してPNG画像化
  • 新刊発売:AppleScriptによるWebブラウザ自動操縦ガイド
  • macOS 12.3 beta4、まだ直らないASまわりの障害
  • macOS 12.3上でFinder上で選択中のファイルをそのままオープンできない件
  • Safariで表示中のYouTubeムービーのサムネイル画像を取得
  • macOS 12のスクリプトエディタで、Context Menu機能にバグ
  • Pixelmator Pro v2.4.1で新機能追加+AppleScriptコマンド追加
  • 人類史上初、魔導書の観点から書かれたAppleScript入門書「7つの宝珠」シリーズ開始?!
  • CotEditor v4.1.2でAppleScript系の機能を追加
  • macOS 12.5(21G72)がリリースされた!
  • UI Browserがgithub上でソース公開され、オープンソースに
  • Pages v12に謎のバグ。書類上に11枚しか画像を配置できない→解決
  • 新発売:AppleScriptからSiriを呼び出そう!
  • iWork 12.2がリリースされた

Tags

10.11savvy (1102) 10.12savvy (1243) 10.13savvy (1391) 10.14savvy (586) 10.15savvy (434) 11.0savvy (274) 12.0savvy (174) 13.0savvy (34) CotEditor (60) Finder (47) iTunes (19) Keynote (97) NSAlert (60) NSArray (51) NSBezierPath (18) NSBitmapImageRep (21) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (18) NSImage (42) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (118) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSUUID (18) NSView (33) NSWorkspace (20) Numbers (55) Pages (36) Safari (41) Script Editor (20) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • drive
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • 登録
  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • 登録
  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC