Connect to any bluetooth device and change button color when connected.

I was looking for a button to connect to a bluetooth headphone (or any other bluetooth device), which would change color when it was connected, but I could not find it so far.

So I hacked something together based on the work on AirPods of Duck before.

Basically it is a shell script that will return a value when a device with a certain MAC address is connected, changing the button color. Pressing the button connects/disconnects to the device.

Not connected:

Connected:

Instructions:
In the shell script, change “devicemacaddres” to the MAC address of your bluetooth device (opt+click on the bluetooth icon in your status bar to see it).

This line:
MAC_ADDR=devicemacaddress

In the applescript, replace device name with the name of your bluetooth device.
This line:
tell ( menu item “devicename” of menu 1)

Code is below:

[
  {
    "BTTWidgetName" : "Connect to bluetooth device",
    "BTTTriggerType" : 639,
    "BTTTriggerTypeDescription" : "Apple Script Widget",
    "BTTTriggerClass" : "BTTTriggerTypeTouchBar",
    "BTTPredefinedActionType" : 195,
    "BTTPredefinedActionName" : "Run Apple Script (async in background)",
    "BTTInlineAppleScript" : "activate application \"SystemUIServer\"\rtell application \"System Events\"\r\ttell process \"SystemUIServer\"\r\t\tset btMenu to (menu bar item 1 of menu bar 1 whose description contains \"bluetooth\")\r\t\ttell btMenu\r\t\t\tclick\r\t\t\ttell (menu item \"yourdevice\" of menu 1)\r\t\t\t\tclick\r\t\t\t\tif exists menu item \"Connect\" of menu 1 then\r\t\t\t\t\tclick menu item \"Connect\" of menu 1\r\t\t\t\t\treturn\r\t\t\t\telse\r\t\t\t\t\tclick menu item \"Disconnect\" of menu 1\r\t\t\t\tend if\r\t\t\tend tell\r\t\tend tell\r\tend tell\rend tell",
    "BTTEnabled2" : 1,
    "BTTUUID" : "86953DB3-82B2-4BD1-B533-02D135C80E5F",
    "BTTNotesInsteadOfDescription" : 0,
    "BTTEnabled" : 1,
    "BTTModifierMode" : 0,
    "BTTOrder" : 5,
    "BTTDisplayOrder" : 0,
    "BTTMergeIntoTouchBarGroups" : 1,
    "BTTIconData" : "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAABDmlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGCSSCwoyGESYGDIzSspCnJ3UoiIjFJgf8zAziDCwMfAwGCcmFxc4BgQ4ANkM8BoVPDtGgMjiL6sCzILUx4v4EpJLU4G0n+AOCW5oKiEgYExAchWLi8pALFbgGyRpGwwewaIXQR0IJC9BsROh7APgNVA2FfAakKCnIHsF0A2XxKE_QPETgezmThAbKi9YDc4At2dqgD0PYmOJwRKUitKQLRzfkFlUWZ6RokCxCbPvGQ9HQUjA0NLBgZQeENUfw4EhyOj2BmEGAIgxCr3AmMiiIGBZSdCLAzovzX6DAyyzAgxNSUGBqF6BoaNBcmlRWVQYxgZzzIwEOIDAFkoS5AKPVr2AAAACXBIWXMAABYlAAAWJQFJUiTwAAAVuUlEQVR4Ae2dC7QdVXnHRZJADI8YQgxIuOENQbEgqIgUyeIh6FJp1aJ9ULW1y7K0q7Zd7VJbS4uKWrW+Uh5KNUorXfWxVCIgKFAMlkd4KMgjcAPkSUyEAHlB0v5_13su55zMOWfm7D1nZs78v7X+95yZ2fvb3_7v7zuzXzP3ec+zmAEzYAbMgBkwA2bADJgBM2AGzIAZMANmwAyYATNgBsyAGTADZsAMmAEzUDsGdqpdjctZYdrh+U2m_Z++N9B02l8HzYADJD_GJ0n1XsILhb2FfYTZwiyBc3sI04QXCLsIk4VGkGzX963CFmGT8JTwhPC4sEZYLawSfiX8WlgnbBMskRlwgIQTSiDMFA4Zx+H6BPsLnJ8hTBXykI1Sul5YKzwi_FK4V3hAWCo4cERCiDhAsrO3u7IcKhwlHC+8VCA4uCs07gD6WqhwNyFw7hfuFm4WlowfP61PS0oGHCC9iaL7c6BwgnCKcKwwInDnqJI8I2OXCQTLDcJi4T6B85YODDhAkonhLkEgnCacKhwp7CoMk2xWZe4SrhcWCbcKTwkWM5DIAINlgmGBQNekMYtUl0_uJl8U5gtwYTEDYwwwlvio8HOhLsHQq55wcZ7wMsFSQwamq85nC1cLzAT1cpi6Xocbul9vF_YQLEPOwFzV70NCHbtQoUHO9DHczRUsQ8bAEarP5wTWC0Idpe75Waj8vPASwVJxBn5L9l8qsApdd8eOXf8nxenFgscpIqFqwh3jEoFpy9iOYX2tnG4QxxcJ7B6wlJyB2bLvkwJ7luzIg+WAPWEfF_YRLCVjgNXuPxOWCQ6MYjl4RG1wruC1FJFQBmH7x42CA6NcHPxMbULbWApigFs5q95bBQdHOTnYora5UHixUEmp6l6st4ltVr8Prhjr7LJl9ofJg8YnTtTAZn2nTegysveLT7CbwP4wPsHOQpXkIRn7QeHyKhmNrVULEH6JLhD+AONLLGw1f1hgQZI++aiAk6wUCA62nPPJSnUamaZEBAb9egJlP+GAcfDcyWEC3JRpy73MaRHu8gsFAgUeKiFVCpAzxehnhUNLxixOTiDcJtwsPDAOFtSeEQYhU1TITOEgYZ7wKoH1CbgiuMokcPV+4aoyGVVlW_jVPF_YKpRhrIHT3yt8WThboJtHN6hsQtAcIvy+cLGAzc8KZeCQLuV5wlTBEsAAXYefCEU3Kg16k_B3wiuEKjYsPzTHCx8SfipQp6J5vUY2VG0cKZPLIWfIDPrvRTUiA2q6TX8vHCNMFoZFGORTpw8LtwjbhaJ4XqayaWtLSgYYF_21wNs8imi0tSr334WTBbopwy7UkbpeKjwmFME5bU2b0_aWLgzQDaBvX0Qj3aNyPyAwK1RXGVHF_0aAiyLa4BKViw9YEhiYrXNXCINuGPrj7xT2FCy_YYCHo_5QWCwMuj0WqcwXCZYmBo7Q91uFQTYGjX+WMEmwJDPAuOstAj8ig2wbxkX4hEUMvEoYFQbVAEtU1tsFVqot6RhgnMJ0MY47qHZ6SGUxY1hrOUm1XyUMgnRmxFigYkXa0h8D05TtfcKjwiDabKXKwUdqKaer1swY5U00MyRfEOo8+Fb1o8ocafu8sFnIu_1+pTJOE2olr1dtB_FQE4t7tf0FGoBHwS3b2vMOkvUqozZrJfwa5B0cG1QGi2B0CSz5MkCXldV5difnGSg8sXiqMNRyomqX92IUv2i1H9wV4EWvVJncsfMMEnznNQXUbSBFHqdSGHTlReAz0s1uX69niISChPUT2oC2yKudV0j3scJQyWGqzaiQF2nLpft3hoqxaleGtRMcOa_2Zgr40GpT9Jz1s_Q1z0VAFrHmPVecv5WEgSNlx2IhryC5RbrxrUoL+2ry3D7Cvq3plWZouI2nbfLcW_cD6Z9aVQqfL8MvEvL4BXlWepk58e5PkVBywQ94ZGCbkIcvLJBeyqic_IUszoOQp6T3nMqxYYPZEErb5eETrO5XSk6RtU8Lsclgmo8VeEs1GThTZq8VYvsFgXdyVSgZkaHMMsQmgVkR1lEs1Wbgt2V+HtP9S6W39NuJGDBdLcQODjYaevFPJAyJsKiYx4bHK6W31Lu0_1EGxg6OZdJ5tGAZLgaOUXUeFmL7CxMCpZTXyqqNQswKcytmBd4ynAzQK1glxPQZfPC1Qqlkpqy5W4hZUbY5n1SqWtqYPBhgTEJbx_SdX0jfXnkY26_O2ItBzEp4tqrf1qhePrayx571ZA2uFPJ6WcHCXaxfAHS9uxQ1sxGDZOBPVFjMxUT8iGnlQmWGSr9HiBUc6PmnQmvkwotk4J9VeExfoqvFC70Lk0+r5JgV+rr0VXLbQGEtMFwF0_aXCTF96lNFUfRqFczz3rEqw45f7kiWejPA4JpXvsbyK3yUN+cMVKaotOuFWJVgC8lRA62BCyszA_hCzC0pP5Y+fHZgwsazWMHBYOrsgVnugqrCwDtkaMxB+zmDqji3wKVCrABZMCjDXU7lGLgwop89IF0D6cJ_JKLRd0pXobMMKt9SXgZw6LuEWD_GuW9DGZGxjBdiGMzC0GsEixnoxsCJusj2kRg+t0Z65nQrLPTaZyIZSmU_HmqM89eGgU+opjECBB3_khdrB0vxryMZ+nPp8bPkebXU8OnFV1j0ixEk66TnwDwo+tdIBm6VHvbeWMxAFgbYNhLrfVv0hKLKXGkj8mJE8Felx2IG+mHga8oUwwfZPTzSjwGd8pwf0bCDOhXi82agBwN082P9UEfb87e3jHpUiBG5uU+z9SDYl6vPwEci+SI+PTMGHe+LZNB90uOBeYwWqbcO1s3uF2L8YJ8bSuUuUnB7JGPeE2qM85uBcQbeq88YAbJEevDxvoWn+rYJocYwRbd731Y4oxloZWAPHcZ4xBvfPq1Vdbajbyp5aHCQ_13ZinVqM9CTgXcrRQzf5PmTvmSucsVYGOTuMa0vC5zJDHRmYDddinEXwcc7vnCOJ7g6yZt0Icagmofn2XdlMQMxGXhKyi6OoBAff3NWPTsrw2Ih9BbGVBrTxBYzkAcDs6R0uRDqp_yPGXw+tRyjlFuE0II_lrpEJzQD_THAptdQP90sHUcnFd+pi0X3akpShgzn6FYtzJDeSc1APwx8XZnYDh8iTPW+Ma0CAuMWITQqf5C2QKczA4EMLFL+UH+9WTomp7GDW02M7tXb0hTmNGYgAgO80yA0QOhmvazdlqQu1ilKFNq9elA6rmwvzMdmICcGfii9DwXqppuF77dIe4DspKuva0nR38EVyrahv6zOZQYyM_CEctDNChV8nxjoKHN0Zb0Qcrti+X5+xxJ8wQzkwwC__vheiO_ynMh+3cz73cACMO5ewSvn3Vj2tTwYwOdi7PJtWTRs72KdHMHyq6TDK+cRiLSKTAzgc_heqLT0fpoDZJI087_jQsWD81AGnb9fBmL43itUOLGwgxygMwysQ_pwK5V_7x00+4QZGAwDs1TMaiHEhx9X_pGGuc13kKN0MvSZDRYY1zaU+9MMDJgBXmrIgl+I8KwJsTAmzQHy8sbJgM9rAvI6qxmIwcC1gUqY5p2IhZgB8qwUcwexmIEiGcAHme4NkePaM9O1uk8I6buxtZ299RYzUCQDvNRhuRDiyyxV8EDWxL8720ffOz5VRcIUwlu4WdG0mIEiGWCQjS+GCLFATEwEyCH6visnAuQ25SVqLWagSAbwQXwxRKYq88EoaIxBjgjRNp73jgg6rMIMxGDgzghK5qGjESDcQUJkizLzH3wsZqAMDOCLvCQ9RMZiohEgc0M0Ke8agYGRxQyUgQF8EZ8MkREyEyA8+xE6QH9EOnh9isUMlIEBdqQzqxoiBMhkAoSp2RkhmpQ39GGVwOKd3Qy0MMBAfbTlTPYDYmI6AcLeqWnZ87fkeLjlyAdmoHgGlgWawDrILAJkL+EFgcroYlnMQJkYCP3RJiZmECAzBfafhMiKkMzOawZyYCDUJ4mJvQiQsQWRAAPZg+UdvAEEOmsuDOCT+GaIHESAHBCiQXn5x4os71vMQJkYwCdDA2QuAfLiwFptUv4nA3U4uxmIzQA+uTlQ6RwCZGxTVoCiDcrLSrrFDJSJAYIjdPPsPgQI24NDZKMy082ymIEyMUD3ihc5hMgLYwQIwbE9xArnNQM5MMBDU6FjkLEAYWtviDhAQthz3rwY4Ec7tGczlTtI6Ht4idLQRxzzIsl668sAPhkaIFMmSUnoIiGGsPclb9lTBfDGCT7ZHsNWAIIbZPnvQPwo8OxK6FNnUlEbma2anipkaWd+wdlyzgQOA2Ze68kmQv51Ghtb8+6WY2toGTsTIFQi5GlCdOB0Me8iBMKRwksFXuR1kLCf8CKBLiFlhshHldkBkp7BlyjpwvTJE1PiHwTLOoGdtssEfqh4+u8egfdZxRR++PHLENmCo2F0SIBMVv5QQ6gEzn+6cIpwgjAiZLkzKHlqiRnMqQutcMLQX2KqTluyvwnMEV4tvENAHhOWCD8UfiT8UggVfDLUfzYTIJsEui39Cjr6DRAqcKLwToHA2Few1I8B3oj4unEwNfs_wmXC94V+1zLwLf7nR4hswrnpG9LH7Fe4+6Ani3DXOUt4v3C80G+AKatlyBjg0YtGsNyr718Rvirgp1kEnwzpGVHWOhwzdKPh7tKRZSaMOwW30csFulIODpFgSWTgcJ39lHCT8KdCFj_j7sFYNkTW4JyrQzQoLwGSJlIZY1wkLBJOEixmIC0DByvhxQJjlJenzMRYB98MkccIkNEQDcpLcPTarnKy0vxYeI9A98piBvphYL4yXSu8N0Xm6UoT6mujBMiDKQrrlmSFLq7rkoBb4_eEeV3S+JIZSMsAE0oLxtFtFwgPAmbpkiWVfz8BgoP3K6yiM9Be1UHBB3WeW+NuHa77tBnolwHuIl8TOvnWUl1b3q_y8XyrCZD1wjN9KlqofNwdkuSvdPL8pAs+ZwYiMfBW6fmykDSd+4jOfzignK3KS2yMPVHIF5bms4DFnf2FJMFwCsiib5Bpz0sy2uc6MjC_xG2J33y6g+WTdJ4xSz++RUyMcAdhfpn9MVnlEmUgStvlUJ34khA6QGrX62Mz0ImBv9QFfpTbhSHABUI_OwGIibF1kKf1pdMYQpcShdVNFnDahYhl3nrv9gs+NgM5MrCTdHMX2TehjOt07mcJ53udIiY2cgchuh7ulbrt+lU6fqjtHIdnCG9MOO9TZiBvBuaoAMa97cL4+hvtJ1McjyrNdgIEWTb2N_2f7yQk5e7xgYTzPmUGBsXAH6ugkYTCrtS5DQnnu50iQCa2ebDnJa2wl39xQuKjdY6tIxYzUBQDM1TwWxIKp4d0Z8L5bqfu52LjDnK3vjPSTyMPKNHKhIR0rTwwTyDGpwbKwBtUWsOvGwUzjLitcZDik1ggJiYUParv3VbDSdsQIovZgWZhkHRi8wl_NwMFMXCUyk3anf6LDPYws0tMTAQIO3qXcSKFjPXN2tKx72Wk7ZwPzUARDOCLByYUnGUiirQEyUSAMNJPG2EsoLQL+2MwzGIGimaA7hU7x9slbQ+JfHcJxMREgPD9Vv6kEJ5AbBfGHqEbw9p1+tgM9MsAW93bhZ0d29pPdjieiIXmwcztStw+tkjKnzSYZwwCLGagDAwk+SJ+m+S77fYSRBMzXs0BksebJdoL97EZKDsDrKATC2PSHCCP68xE5Ixf94cZqBsDd6jCxMKYNAcIJ278zWn_NQO1ZaBlEbw9QK4TLWkHMrVl0BUfWgbw_euaa9ceIPS9mAO2mIE6MjCqSrcsd7QHCBu63M2qo2u4zjBA9+rJZiraA4RrVzQn8HczUCMGeK1QiyQFyE+VImm1vCWjD8zAkDHA1pIb2uuUFCArlYh3o1rMQJ0YoHvFGkiLJAUIq41JD0S1ZPSBGRgyBvD5HVbakwKEel8jZNncRR6LGagqA3SvfpRkfKcAWaHEBInFDNSBgWtVSXx+B+kUICT8jx1S+4QZGE4G_rNTtboFyHXK9GCnjD5vBoaEgaWqx0861aVbgLBo+F+dMvq8GRgSBr6leuDridItQMjA+4SeTszpk2ag+gzg2_h4R+kVIOzNYgBjMQPDyAATUS17r9or2StASH+hsMP8cLsiH5uBijGAT1_Sy+Y0AcId5OZeinzdDFSMgVtkb+LaR3M90gQID7v_W3MmfzcDQ8DAAtUB3+4qaQIEBd8WJp7T7arRF81A+Rm4Tybi0z0lbYCwR_5LPbU5gRkoNwONt518QWa2PPfRyey0AUL+ywRexziZA4sZqCADO8tmXp3bdWq3uV5ZAuQJZfyMkCVPc1n+bgbKwMBnZQS+nEompUr1XCIi74DnDv3NDFSGgSmydIlATyi1ZA0QtgUDixmoGgPPyuCPCanGHo3KZQ2QRj5_moGqMcDMVZZ_FDVWPwdI1ZrZ9vbLwNjb2rNm9oA7K2NOXysGHCC1am5XNisDDpCsjDl9rRhwgNSquV3ZrAw4QLIy5vS1YsABUqvmdmWzMuAAycqY09eKAQdIrZrblc3KQKwA2a6Ct2Ut3OnNQE4MsK0kisQKkI2yxm8_idIkVhKBgdS7dXuVFStAeI_vY70K83UzMAAGNquMaP8lLVaAbJFRdw2g8i7CDPRiYLkSjPZKlPZ6rAChvKvSFup0ZiBHBm6Q7mjd_ZgBcrUM2+EfkORIhFWbgXYGeNfVN9tPhhzHDJA1MuQbIcY4rxkIZID_EnV9oI6W7DEDBMW8LWJ1Swk+MAODYYClBp4Y7PmuqyzmxA4Q3nryD1kMcFozEIkBnjXf4b_UhuqOHSDYc6lweahhzm8GMjDAo7R_K0R_h3QeAcKK+rnC_woWM5A3A6zBnSPkMkGUR4BACEb_nnAHBxYzkBMDrJj_kZDby9XzChD4YDXzzcJNHFjMQGQGuGO8VVgUWW+LujwDhIIIkjcICzmwmIFIDHDHOEPo+e8LQsvLO0Cwb71AH_HPhbWCxQz0ywC7dPm3BacLd_arJEu+QQRIwx7+x8hJwn8L0WcbGoX4c2gZuE01e5PABNDjQ1vL8YqdqU9ujwRKEThv3A5_pGNgfkHthG8whUvvYzehVsKr6OlHsneG2YhBBooDRIRnkEEHCEsFNwrvEqZnsDN60iJfPQoJrHyCw4SzBO4sxwpTBUu9GMAfeH8uu8K_KzD72dfrQpUvmhQZIM2VgJgLhE8K84RXCicIxwlzhD2FmMLdy5KegTzGqptU_AqBLtQNAhsNbxd4OrU0UpYAaRDChjP+bzX4irCrsK+wv3C4sJ8wW5gpcJfZRSBNFoensdkzZknPAINiBsl0g9MKabcIm8fBbOYaYaXAf3l6UFglbBBKKzuV1rJ0hmE_wcFn2sYjLbdzgtGSjgE448c0LccNrXBsnhts+NMMmAEzYAbMgBkwA2bADJgBM2AGzIAZMANmwAyYATNgBsyAGTADZsAMmIFqMPD_QwMFmnWABvgAAAAASUVORK5CYII=",
    "BTTTriggerConfig" : {
      "BTTTouchBarAppleScriptString" : "do shell script \"SYSTEM_PROFILER=$(system_profiler SPBluetoothDataType); MAC_ADDR=devicemacaddress; CONNECTED=$(grep -ia6 \\\"${MAC_ADDR}\\\"<<<\\\"${SYSTEM_PROFILER}\\\"|awk '\/Connected: Yes\/{print 1}'); if [[ \\\"${CONNECTED}\\\" ]]; then printf 1; else printf 0; fi\"",
      "BTTTouchBarFreeSpaceAfterButton" : 5,
      "BTTTouchBarOnlyShowIcon" : true,
      "BTTTouchBarBringPlayerToFront" : 0,
      "BTTTouchBarButtonColor" : "63.750000, 63.750000, 63.750000, 255.000000",
      "BTTTouchBarApplyCornerRadiusTo" : 2,
      "BTTTouchBarItemPlacement" : 1,
      "BTTTouchBarAppleScriptStringRunOnInit" : false,
      "BTTTouchBarFontColorAlternate" : "255.000000, 255.000000, 255.000000, 255.000000",
      "BTTTouchBarEmojiHideBackButton" : false,
      "BTTTouchBarHideWhenPaused" : 0,
      "BTTTouchBarAlwaysShowButton" : false,
      "BTTScriptType" : 0,
      "BTTTouchBarButtonWidth" : 100,
      "BTTTouchBarScriptUpdateInterval" : 2,
      "BTTTouchBarItemIconHeight" : 22,
      "BTTTouchBarBatteryHideOnCharging" : false,
      "BTTTouchBarButtonTextAlignment" : 0,
      "BTTTouchBarAlternateBackgroundColor" : "73.000003, 155.000006, 201.000003, 255.000000",
      "BTTTouchBarAppleScriptUsePath" : 0,
      "BTTTBWidgetWidth" : 400,
      "BTTTouchBarDefaultPlayer" : 0,
      "BTTTouchBarColorRegex" : "1",
      "BTTTouchBarItemIconWidth" : 22,
      "BTTTouchBarButtonName" : "Connect to bluetooth device",
      "BTTTouchBarHideWhenNoPlayer" : false,
      "BTTTouchBarFontColor" : "255.000000, 255.000000, 255.000000, 255.000000",
      "BTTTouchBarButtonFontSize" : 15,
      "BTTTouchBarHideCover" : 0,
      "BTTTouchBarButtonCornerRadius" : 6,
      "BTTTouchBarItemPadding" : -13
    }
  }
]

Thanks. Works well together with Aquatouch for me.