Hi,
Can some help me modify the following code to just show the percentage of the battery (ie. 100%)? Much appreciated.
--Original script by Noon Chen, modified by yuuiko to support any bluetooth device and list UI setup.
use framework "IOBluetooth"
use scripting additions
set deviceList to current application's IOBluetoothDevice's pairedDevices()
set devNames to (deviceList's valueForKey:"name") as list
set devStatus to (deviceList's valueForKey:"connected") as list
set devAddress to (deviceList's valueForKey:"addressString") as list
set currentModel to "Generic" --default widget icon
tell application "BetterTouchTool" to set AirPodsName to get_string_variable "BluetoothWg_2_Device"
if AirPodsName is "" then
return jsonData(currentModel, "Tap to Setup", 0, 14)
else if AirPodsName is missing value then
return jsonData(currentModel, "Tap to Setup", 0, 14)
end if
if devNames contains AirPodsName then
repeat with i from 1 to count devNames
if (item i of devNames) = AirPodsName then
--Get index of AirPods in the list and save connection status and MAC address value
set connectValue to item i of devStatus
set MAC_addr to item i of devAddress
------SPECIAL PRODUCT BEHAVIOUR------
try
set ProductID to do shell script "/usr/libexec/PlistBuddy -c \"print :DeviceCache:" & MAC_addr & ":ProductID\" /Library/Preferences/com.apple.Bluetooth.plist"
on error
set ProductID to "ERROR"
set currentModel to "Not Airpods"
end try
--set icons
if ProductID = "8206" then
--AirPods Pro
set currentModel to "AirPods Pro"
else if ProductID = "8207" or ProductID = "8194" then --AirPods 1 & 2, ProductID = 8207/8194
set currentModel to "AirPods"
else
set currentModel to "Not Airpods"
end if
------SPECIAL PRODUCT BEHAVIOUR------
------SET TEXT TO RETURN------
if connectValue = 1 then
try --scan for "BatteryPercentLeft" and "BatteryPercentRight", used in AirPods and probably beats true wireless.
set BatteryLeft to do shell script "/usr/libexec/PlistBuddy -c \"print :DeviceCache:" & MAC_addr & ":BatteryPercentLeft\" /Library/Preferences/com.apple.Bluetooth.plist"
set BatteryRight to do shell script "/usr/libexec/PlistBuddy -c \"print :DeviceCache:" & MAC_addr & ":BatteryPercentRight\" /Library/Preferences/com.apple.Bluetooth.plist"
if BatteryLeft = "0" and BatteryRight = "0" then
return jsonData(currentModel, "Not Connected", 0, 15)
else
set batteryText to formatValue(BatteryLeft, "🅛") & "\\n" & formatValue(BatteryRight, "🅡") -- Connected Output
end if
on error --scan for "BatteryPercent", used in probably apple magic mice, trackpad and keyboards.
try
set BatteryLeft to do shell script "/usr/libexec/PlistBuddy -c \"print :DeviceCache:" & MAC_addr & ":BatteryPercent\" /Library/Preferences/com.apple.Bluetooth.plist"
log BatteryLeft
if BatteryLeft = "0" then
return jsonData(currentModel, AirPodsName & "\\n" & "Not Connected", 0, 11) --SET OUTPUT probably apple magic mice, trackpad and keyboards not connected
else
set batteryText to AirPodsName & "\\n" & "Battery: " & (round BatteryLeft * 100 rounding down) & "%" --SET OUTPUT probably apple magic mice, trackpad and keyboards connected
end if
on error --scan for "BatteryPercentSingle", used in probably beats.
try
set BatteryLeft to do shell script "/usr/libexec/PlistBuddy -c \"print :DeviceCache:" & MAC_addr & ":BatteryPercentSingle\" /Library/Preferences/com.apple.Bluetooth.plist"
log BatteryLeft
if BatteryLeft = "0" then
return jsonData(currentModel, AirPodsName & "\\n" & "Not Connected", 0, 11) --SET OUTPUT probably beats not connected
else if BatteryLeft is greater than 1 then
set batteryText to AirPodsName & "\\n" & "Battery: " & BatteryLeft & "%" --SET OUTPUT probably beats connected
else
set batteryText to AirPodsName & "\\n" & "Battery: " & (round BatteryLeft * 100 rounding down) & "%" --SET OUTPUT probably beats connected
end if
on error --handle any other generic bluetooth device with no battery report
log "these aren't airpods"
set currentModel to "Not Airpods"
set batteryText to AirPodsName & "\\n" & "Connected" --SET OUTPUT generic device connected
end try
end try
end try
else
return jsonData(currentModel, AirPodsName & "\\n" & "Not Connected", 0, 11) --OUTPUT display device but not connected
end if
------SET TEXT TO RETURN------
log "break loop"
return jsonData(currentModel, batteryText, connectValue, 11) --OUTPUT
end if
end repeat
else
log "widget not setup"
return jsonData(currentModel, "Tap to Setup", 0, 14)
end if
--style battery display
on formatValue(batteryLevel, prefix)
if batteryLevel = "0" then
return prefix & " --"
else
return prefix & batteryLevel & "%"
end if
end formatValue
--Format into json data to output to BTT
on jsonData(currentModel, batteryText, connectValue, fontSize)
set airpods_iconData to "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAABxklEQVRoge2ZwUoCURSGfwuiZavW+RBugp4jkraCrxG9RgX5BrVo76Lc1NK1uhe0hYZKTtw4Fw6Dd/TM6IwO/wcHx5lzz/n/Ye5hRBBCCCGEEEJInpwDuAcwADBU0QJwadDhcp9jNVzNO+mxF7wAWACIEqK9gdD2mhoL6VUYJwC+14jUMU4QOjbUcT1PizA9MYj08bWizmeKOpO8zX5I4zcAM6PYqqpTNa6dSU93/J6nYb+nYHwcIxlknpZxrd8WfmaYOcpg2jdfyueVBNT3ioQ+fxE4DuXrur5X0jxIJIthv1bf6dBd1+d/1PHUuNYfHxt0boVfdbdHxseyrgRcG9eOZN1SNOTGqwjoAJgbh04cy9CbS89INOSKdVi5aK4Q2ExRJ/UezsKRvPptKvIxodeDoc4w4+zJzJMMn5BAN6QaGzRpSG6ozlTes/eGG9lfPYkugFoKcTVZ6+t0pPZB4B+9MzERois5B09dXgH9YxnCX3e5t7s0Xdlh7VUGQ/0suZkodNoVAQ2XHRouOzRcdmi47NBw2aHhskPDZWfrhqMo+g/5X1czUNfiub11uXuJF6nE9uXHfT9+zZJLCCGEEEIIIfkC4A9P0HeTJCMKAwAAAABJRU5ErkJggg=="
set airpods_dark_iconData to "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAACT0lEQVRoge2Yz0sWQRjHP5tvaZhRULwGmgcjiLKTf0CdOmkieOkQdfGP6hQG3jpUh+jWoW6JCFZkdSgPJh5VDHnzlZFnZZx8Z2dmt5dcng8sszvzzDzPd37sziyKoiiKoiiKoighZBX10lngJnAdaFj5q8AnYD2wnSZwA7hq5bWAFeAjsFM20CoE3wOGgVMemzXgVUE7E8AVT/medOCbxDgPKCPYCHwInAm03wWedih7FNnOM+BPoP0RelIqCY+B05G+RoDPTv40MBDZzm1gMaLOIb5p6OO+rNVVmWqhXHLEDUheKPm0bkgMXRPcFOev5aUSw7hlOx5ZtyU+9ySGaBoplYRdSduSvpR00nr+JfeDVr47whTY2+3mvozvvpSgU0eYEi+8Vof7bvhOHmHT072O80nHxn3OWbHuvwBDBfZ2fu6r1xrtKFJH+KekU5GdZtbeN+v5e+RLryE+7RiiSP0smUDHgPOR0+s9sOHk/XZ2Vj6Mr35Zw8+7KdiwJNvJ0BE20/fDMfkbIiL082Q6aC4iziOUEYyIPgdc8CwPsyN6Byx42vkBbMt67tROS5bDizIBV3V4MFwDbslBAgnw7TFTuIjLwB1r5pgDw7Kz9v9b8g41++QZT5AzEXvpUpTZeIQwKuu8aFd0UQ4Q63Kc/HoSBc8m1GnKdRd48g9iKrXTOpGo4LqjguuOCq47KrjuqOC6o4LrjgquO5ULbrfbBxew5RRtWWWu7WaRbVVU+U/rrwCzLHsgP/mMgHlfXZ9tllUapqIoiqIoiqIoSgHAPvjRfRDZ2peqAAAAAElFTkSuQmCC"
set airpods_pro_iconData to "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAADI0lEQVRoge2YTUgVURiGH+2HMIOCfqwgF20ikwgCwaSiXWUELcJw0SYosBZBRATRIqIIMSgsahX0Y0XYQkjctAskyn6IMoM0gsoyIvshozQm3kvDZc7MeE8z3qvngeHeO2fmzPfOOec733txOBwOh8PhcDgcecVkoA5oAXqAQWAIeAt0AieB6kIdsvnAfuAMcA7YB8wCGoGRiOMxUJUHGmJzAHgWcHTpRbTEEP0LqE8r4CKLezcDx0Pan+qF9MTo6yewQvckSrFF5zuArzqCWAq8AN7H6GsqcChpsSi55Eq5EtMwcNPQx2ygF5jrO9cO3PP9XgWsA9YmJ/MfNoKLY0zBKZqufjZk/S4FvgDTLWKJjY3gAU3bMD4qefm5FTDCHg8TU+nDRrAX+MWQ9g8a4cVZ59fryOaURSyxsUlaJ4DXQImh/TCwN+ZOcAm4YRFLbCZZ3n8V+K3kNE176ittR9758xplE94+fAzYnYbY/02p1nQtcEHZ21Rs9Km8XFSIQj3KgH6DuFZgK1CjF2JaAgVDkUrLILG7Cl1cEB0GsU35F6o9zSHTeNzRYBD7IMZWVK2k1SmPPCTP3COHVWdZIyTCYIBYL/iZIQ+rkgeOsoyN8tTePn4WOC2fXTaWgtuzgvwGVIZcX699Okpsi8rR+wavfdAmaJvC47KmXYUqrm3AXcO1FUpucZ63RQlvgaF9uZ73PJegbf4AGA2ZdRmF553naSSDyHjvd8CmXAJJKzGs0edt4I7v/MosI9GrMtXEdlVw13MNJC3Bpfr0RuV7VtuI7/uPiGmf8d85m560BD9SadkWMMJ+FgKfQvrJ+O+BXANJaw1n/qOOwhvtGdoB5gRcm5kd12RPR42tPYzLE2AJsCziem8APgNXgI0B7Z7VfAnsSSlua45G2MYRjaKX5FZrCXRpT24rVDNSrn22L0T0sDx1rdZtaYx+C4ISCaqRZ241vID+sS4rk2SnQXR3ikk2dZoMojvGq2BCpndzHsSWCEXy1kGiG8ah3r943vpNgODBPIgtMSrltSfMWkaFSLdq6CN5EI/D4XA4HA6HwzGxAP4Ac0sF5kts7O4AAAAASUVORK5CYII="
set airpods_pro_dark_iconData to "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAADe0lEQVRoge2aa0sUURzGf3kpS9PMTJMuVhZWFOWLILpQENHtXZ+gN327XgklhXShKwhSZlBqlkV0MzErN1OLA8/EMJzZnebMjkudHyy7e2bmzP85c87/cnbxeDwej8fj8Xg8qVhWpmGrArYCncA6YBVQDRSAr8B74IXecyULwUbMDmC1+psGngEHgH0lrv0M3AY+5CXaVfB+YKelfR7oAw4B20v08Qu4AYw62pKIKodrO2PEGmqAw8BAgn7MoB8Hmh1sSYyL4G7gp142mjW9ZxP0ZezoyU5WPDUO1zYA/ZqSp2LOqQNmgJWhttfAx9D3dqAD2OAiJCkugs1UnCpxjnlyi5G2q5HvtcBFvZcdF8GFBOuuIC8e5ozlCRsmK13wBHCiyPGCnnBjpH2TXlGeONiSGBen9UhJRNygDSSIwwEjSkTKTrXjDcbktOrU16IG4aHajyYY1EHgbh5iyTi1rJXnNhnXtiIxGg3KODCkz7mRlWDjmC5Ewk/AS2VR34EfClPzeYoM4+K0wpyPEXsHeJrRPTLBxWkFnAXWWNqHKk0sGQg+Amy0tJtpfN+x77LgMqX3ALst7SaBuFbi2jY5tjY5OuPlF7TOP2nAxi1ZmjMugg9a2ozBvUWuWQ8cA9ZajpnZ1qTXN+CNPH2TQtxMyPmlxkXwu0jGZDzvFWAu5vwuZWalIoOJ7Y+Bcxb7upWkDKY12iXxGJXxzYql/ZEcOUyzBCQJg9e1cVAfc7xF95tOY7RrWBpIWOT3JBQ7KyFxRUlQe+8CXv2FnX/IKg6XIqh132opBLRGlsWMHFgcN7WeT6Y1JC/BQa3bZ8myLoU+L5SYCUH9nTpDzEvwpOre05YnHKZe6WccwVQvpDUkL8HDoa2cjiLnNSo8FWKmdlB/j6U1xLU8TMqU0k9b/I0ypwiw2XLMDMYX4F5aQ/ISjDKnqgSbde2KtROawuE627Q/cDGiXD+1FMOkknv1U0xDkfOeaxdkRmLjtoP/iqUQHKZGGwYrVFN3aYM/ionPl13TSnKe0jYWQz+wTckZGVFbIufWak0Pu95wqQXbMNXSclVSYerUNuLSeSUKRpVSi2VjoVE7KxNpO65UwWh6d1o28lu1DOIKlaJkscVTTnpjHJWtFv8nBM+pxo7m36n/OVDJUzpgVvl34MTM5sCtpTfL4/F4PB6Px+P5jwB+A9f8oHKNqBsZAAAAAElFTkSuQmCC"
set not_airpods_icon to "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAACXUlEQVRoge2ZT4hNURjAf0kWsra1sJEslIWyVbNQSsrC1CRqslCy1igTO4VYmJUshEZho4jFZDmjLJQipSkroRih+ePp03k5fb5z5129e51zfb86vde79773/d499/vOdy+O4ziO4ziOUy5bgXngAzD2P5zHXjSWgPEMYmqUnhorwESHff8QlrEMTGYQWyNYwv0zfbWDvr8lez154YcS75y0Fh4LySuWvvPvwxweWlg4G67jWPpuKUL7gZGK7ZawcAJYVNIPgfXNh/z3XAtBfwMuJL4lJSwcAt4r6dlMXX/xNQpUktEVY58qYUJ50hk8W06rrCvvp2sITxjT+l7OwsKpUFPjoG8Da8P2lPBlo0TdiI7LmmNGqZmpEJ4yZsZUCaIx48b0vGUITxqy57KxqMkRlcj0WFKyyyEPFM3eUKZS0v0h8sdLl+2zOzT8KVn5Qw7nEerw2AK8NWS/AHvaCmJNWz8UZD8an8s1/rLFOFphM/CqYkrLdN/VFdltwLsBktZCSHBFs8NoBuKhV1aSvEZLFd4HfFJCc8bC46baZzG0ikUhZeizEnkNbEgsLWeMmny0FOEDxkLjadTIW8LrgAfqmJUSFiIi+92QjalqD6dVpyXX+JnWLWqwoGQfG4eudgPgkpHYsuVRFGSqca8S3hmeO8XC8zkLy8rt5CrXXkp4xJghb4BNzYfdLJbwQaONfA5sLF0WQ3h7aCBi2We5356tgxbWJexJMSYDUrWevl+EQU1Sa+pOPU+KsYSv5xPe8HmhzuzFrglqRkMXJcnqfF6hOY7jOI7jOM5gAD8BzMiTwf2AeoEAAAAASUVORK5CYII="
set not_airpods_dark_icon to "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAC+klEQVRoge2a2WpUQRCGv8lo8EIEVxBFTVSCS0CjIK4xuOKG+ABe+lB5BhHcgkhUEFFBo0SjgkaJoihR4xK3oM5IQY00zSw5SVefuejv6pye01P191KnqmdIJBKJRCKRSCTCUMxhHOcCJ4Au4AcwFtN4HoJPAq3ADGC5iv4Qy3gegjc51wVgmV6/jWG8JYaRBhR0EDbHMNYMglHRG4Fua0O5Ci6Xy73OrYjusBbdDDN8DSg59yJ6v5WxZhD8DBiUCXfaVliJthDcBizN2OcOcNubaRF9SF9fwQgteDewBzgAbM3Y9yFwHfjltMnAHQ3pYGjB7fqd8n7vBHZk7P8UeOy1LQzoX3DBg979WmBvhv6Sbm7w2kYC+PWf0IIHgLteAGpX0Y1sbdfkw31uGOgP6aBF0LoH3PQCkIg+XKfPTmCd1/YEuOp9z7QJGgEdHgF/dQ9XBnWxBjQfmdU1XtsDjdrBKRgJrtChS7XWwJa8VVbWFTJg5ZB1tfRR6922GtvHHfCSzqof+IISozz8Aoxq7VtrpmX539B9a0qsengceKnZU6v32R+NxC9iOBIzl/4OTFRpF8GfYzkRa4bnAMf0PMtHlvlq4J0OiikxBM9TsbPrPCOiVwKfdM+bYS14gSYcsybxbFGj+bjlSablHpYAdcQT+959QE88njtNRa24Oq2cshK8BOjxIvJX4EKVZ694J5bi05Yq2VcQLARL3nwQmOm0ybnzaeB3jT4XgdfOfYumpetDO2dRD/d4sUHEntHXTy0ky+rTd3Gl0pIsbFvo49vQgrs9sW9U7GTp18LDpSukg6EFjzrXI7pUs7BIg53Lt5AOhi4P+/TEQvbqUMa+cn61z9v78oo6H9LB0IJl/92fQr9VwC7PnzFdIT8D+md2AJCF+VXESll5tkGgmxLNIPi4F+gkpz5nZcz6xKMap+p89gq4ZGm8GWa4gkT1y9ZGmkXwsJ5QmpPHj2l+sT8USyw5/eVhQosLNKu6lYMPiUQikUgkEonEtAD+AYohf02fXGWtAAAAAElFTkSuQmCC"
if currentModel = "AirPods Pro" then
if connectValue = 1 then
set icon to airpods_pro_iconData
else
set icon to airpods_pro_dark_iconData
end if
else if currentModel = "AirPods" then
if connectValue = 1 then
set icon to airpods_iconData
else
set icon to airpods_dark_iconData
end if
else --if not airpods
if connectValue = 1 then
set icon to not_airpods_icon
else
set icon to not_airpods_dark_icon
end if
end if
return "{\"text\":\"" & batteryText & "\", \"icon_data\": \"" & icon & "\", \"font_size\": \"" & fontSize & "\"}"
end jsonData
Thanks.