Battery + System Stats widgets development thread

Alright, the first version of the battery widget is out now with 2.850 :slight_smile:

Still a bunch more work to do on the system stats modal.

Hey @GoldenChaos, I really like your battery widget, but I wanted to also show the remaining time in there, ideally in two lines like this:

29%
3:33

Getting it to show the remaining time was easy:
26

But I can't get it to show the information in two lines.
if I insert an enter press oder \n in the return value between the percent value and the time remaining value, the output, if you click on Run Script, looks good, but on the Touch Bar it only shows a series of letters, which are the code for the current battery image, but I really don't know why...

return "{\"text\":\"" & percentage & "% 
" & timeremaining & "\", \"icon_data\":\"" & batteryIcon & "\"}"

Maybe you or someone else knows the reason for this?

set batteryStatus to do shell script "pmset -g batt"

set powerSource to word 4 of batteryStatus

set percentage to word 11 of batteryStatus as integer

set charging to word 12 of batteryStatus

set timehour to word 13 of batteryStatus

set timeminutes to word 14 of batteryStatus

set timeremaining to timehour & ":" & timeminutes

if charging is "discharging" then

if percentage is greater than or equal to 96 and percentage is less than or equal to 100 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAs0lEQVR42u2WQQrDIBBFh3iP0hRK7MHjLoucIT1LXCZt1uZ1FaglOx2o4NsIs3jgCP8rUqlU/hosPZ5ACoGZHvurblnJxcotljtgpMUk3d7QMgIuHnvgmmW9F2CORwEwIkxJC5lEMECI5cBxpvDtKlfOi4G7lhxgodOTw6Ap3zTlFCvfCn3QBasjfzPQlZ0teSL3eR65qmVx1FyTJG7Oa06zoEWwODx7knbH43jUj1qlUg4fxZ8lasabhQ4AAAAASUVORK5CYII="

else if percentage is greater than or equal to 86 and percentage is less than or equal to 95 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAtklEQVR42u2WQQqDMBBFg96jNIVienCzy8Iz2LOYpbau4+tKaGzpwjjQQN4mMItHMgPzo1ShUPhrMLR4AikEBlrMVq2ZOIqJSyy3QIemTnp9jaYDbFz2wPmQ9p6AIS4FoFaKfmcr+rfbQ4jlwHru49OVr5wHjquUHGCkkZODk5TPknKylc+ZDnTEyMifOJq8d0vqyr3/WrmiYbHGXJUkrr7HnGRAK4XB4lmStAsey6181AqFfHgB7SnFu8OCs/4AAAAASUVORK5CYII="

else if percentage is greater than or equal to 76 and percentage is less than or equal to 85 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAuElEQVR42u2WQQqDMBBFg96jNIVienCzc+EZ7FnMUlvX8XXlIioUGwcayNsEZvGYTGB+lMpkMn8NhhqHJwZPT41ZqzUjZzFyC+UWaNGUUbcv0bSADcsOuJ4y3gvQhyUPlErRHR5Ct+kefFgClvMom97XteTkvGi4S8kBBio5OTSS8klSTrLyKdEHHTAy8jcNVdq75feV+/y+ckXDYom5Ikpc7MecZEArhcHimKO0Mw7LI3/UMpl0+ADW1WYbk5lWXgAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 66 and percentage is less than or equal to 75 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAuElEQVR42u2WQQrDIBBFJblHqYUSe/C4yyJnSM8Sl0mbtXldZWFowGIGKvg2wgiPUWG+ShUKhb8GQ4vDk4JnpMXs1ZqZs5i5hXIL9GjqpNPXaHrAhmUHXE+53gswhiUP1EoxRB9+OOwefFgCtjWWw973e9nJedFxl5IDTDRycugk5YuknGzlS6YPOmFk5G86mrxny+8j9xk/ckXDYou5KklcfY85yYBWCoPFsSZpVxyWR/moFQr58AGRs+aMzl3kdAAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 56 and percentage is less than or equal to 65 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAuElEQVR42u2WQQrDIBBFJd6j1EKJPXjcZZEzpGeJy6TN2ryusjAU0mAGKvg2wiCPUWG+ShUKhb8GS4MnkEJgoMFu1YaJs5i4xXIHdBh00uk1hg5wcdkD11Ou9wIMcSkAWin6H47d73QPIS4B67rPTu/bHdnJedFyl5IDjNRycmgl5bOknGzlc6YPOmJl5G9a6rxny5GR+zw6ckXDYo25KklcfY85yYBWCovDsyRpFzyOR/moFQr58AFAVIbsiXp9RAAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 46 and percentage is less than or equal to 55 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAtklEQVR42u2VQQqDMBBFB71HqYVienCzc+EZ7FnMUlvX8XXlIlJEGgcayNsEhvCYSWC+SCaT+WswNDg8MXgGGsxWXTFxFhO3UG6BjooyavqSig6wYdkB11Oe9wIMYckDpQj97sD9oe7BhyVgPfc41Pv2XnJyXrTcteQAI7WeHFpN+awpJ1n5nOiHjhgd+ZuWOu3dcmzlPn9buaphscZcESUuvsecZkCLYLA4lijtgsPykEwmkwwfsQgnTIxdnPMAAAAASUVORK5CYII="

else if percentage is greater than or equal to 36 and percentage is less than or equal to 45 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAtklEQVR42u2VQQqDMBBFB71HqYVienCzc+EZ7FnMUlvX8XXlImIpEgcayNsEhvCYSWC+SCaT+WswNDg8MXgGGsxWXTFxFhO3UG6BjooyavqSig6wYdkB11Oe9wIMYckDpQj9l1H7A92DD0vAeu5zoPft7eTkvGi5a8kBRmo9ObSa8llTTrLyOdEPHTE68jctddq75dfKfcasXNWwWGOuiBIX+zGnGdAiGCyOJUq74LA8JJPJJMMH497HnQsmWpMAAAAASUVORK5CYII="

else if percentage is greater than or equal to 26 and percentage is less than or equal to 35 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAtklEQVR42u2VQQqDMBBFB71HqYVienCzc+EZ7FnMUlvX8XXlItouJA40kLcJDOQxk8B8kUwm89dgaHB4YvAMNJitumLiLCZuodwCHRVl1PQlFR1gw7IDrqc87wUYwpIHShH63ZD94e7BhyVgPbcc7n17Jzk5L1ruWnKAkVpPDq2mfNaUk6x8TvRDR4yO/E1LnfZu+b1yn/ErVzUs1pgrosTF95jTDGgRDBbHEqVdcFgekslkkuED2NZn/WdIKR8AAAAASUVORK5CYII="

else if percentage is greater than or equal to 16 and percentage is less than or equal to 25 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAtUlEQVR42u2VQQqDMBBFB71HqYVienCzc+EZ7FnMUlvX8XVlIdqVcaCBvE1gII+ZBOaLZDKZvwZDg8MTg2egwWzVFRNnMXEL5RboqCijpi+p6AAblh1wPeV5L8AQljxQitB/h+sPdw8+LAHruXK49+3d5OS8aLlryQFGaj05tJryWVNOsvI50Q8dMTryNy112rtlv3Kf561c1bBYY66IEhe/Y04zoEUwWBxLlHbBYXlIJpNJhg+ixOhuQfsw9wAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 10 and percentage is less than or equal to 15 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAAtElEQVR42u2VvQqDMBRGL/oepSkU0wc3m4PPYJ/FjNo6x9OhCI24xQsN5CwJ33DID9xPpFAo/DVYWjyBFAIjLXavNsycxcwtljugx1An3b7G0AMujj1wPeV5L8AYRwGoRRiAIfH0EOII2NbvLkG/N2Qn50XHXUsOMNHoyaHTlC+acrKVL5l+6ITVkb/paPKeLb8j93n2yFUti63mqiRxdVxzmgUtgsXhWZO0Kx7HQwqFQjZ8AFyxiM55BDSUAAAAAElFTkSuQmCC"

else if percentage is less than 10 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAA10lEQVR4Ae3YMQ6CQBCFYQL3MGpiWE9g6WndjoLjWNpAiWq9jFM82rGcHfMm+RMLik8zBpZGREJGOOGEu0Y44YQn7abNWhG/KdoES/oFP2hPqWxgOlrwjAtHfInOcQU6GEaYsgWfcdG+oh3ewTQZcOw0fun79fKoAN7BVCz4Ng3g+OwehnA3+EsbtFM0+DaL1oeDY4ao8E9UuPwxnKvCP+eipUjwN25APW/5XvCwj7WBDhL20a11BLf20S3iYdl4PZGxNqsjdoUha2e+ySKc8AARTjjhQfoCLEebqfw1Zu4AAAAASUVORK5CYII="

end if

else if charging is "charging" or charging is "AC" then

set timeremaining to ""

if percentage is greater than or equal to 96 and percentage is less than or equal to 100 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAACNUlEQVR4Ae2YA8xdQRBGa7dRbTOorbA24tq2jahRjai2bds2gtq2Jsn5k6m22btb/jvJedz57nm6u/vifPr06Z8kiAfxIP5HCeJBPIjnF+YIt4QPgkudVAcoLqTi9mPBWBz7Ji75fyaeg1AfdUooQnh7YYIQj/vvbYJwymkSn8vAFbyI+DzpQmkyi1r2xcdhBf1zTeK3GJTdVRiSkHfEISMrGTcN4nyneadrXmi1S/hkyTgVeoS84uR1scjZRUZ8Mj4YxCkeiCC9XgUuIOsyWTlt81QW9WvETwmJ6R2pstqT1fRvFD8nFKKvhaArJVknPYo/EZYIeVzEHwiV6ako6JpEThoNj5UX1kUUj6lHQr6o4o0Zn0N4pzI+ciqMYwL5SOLUkijiPdVp74ZOQ/yqcFu4o+H5URxjoKP4M1vx4Spof4RZNbHzO07ZiG9XIRstpS8KcclvQd5vEx/FmIGMfyE8VzzjK/HxkyoeT0d2c53p/6tifsdNlNDiX82gVYXXFuJef5zbhfKMSyoki4H+oYKuBowtIVzTWY6nw/w+pvwb9CYQXqq8vuSlFU55mICeMgHl87VW6UZvY5U1TeXt/uvWKlCM3kPkbFFZM/xM+f6XtaMJykXGNSU9xEYYdpuXtf43EmvJSK8f97+RMG/d4lkeJCf9dTwIxzNv3fxslpsSMkYYzO2Mwilzm6fNMjfy8+pu6QnEUM/pSyaUU4FbHWU/CrdwKRD+yQriQTyIB/EgHsR98RnUoDZULQx7fQAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 86 and percentage is less than or equal to 95 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAACNUlEQVR4Ae2YA8xdQRBGa7dRbTOorbA24tq2jahRjai2bds2gtp2eztJzkumutzy30nOj/d2vj3XiOc4zj+JFbfiVvyPYsWtuBUvKMwT7gifhCh1Wk1QUkjD30+9Gpn7Ni4FvcRzEWqizgjFCO8oTBIS8P/HIEE45XYTn8/AVSxEQgObsiyZxQP2JcRhFf3z3cTvMChnVGFIRt6xCBnZybjtIs4+zZqufanNHsEJyAQVeoy8kuR18+jd85M1zz7/U3GKD0JIb1SBi8i6SlZuPxk/kaN+jfgZISm9o1VWR7Ka/43iF4Qi9LUSdKUm67RB8WfCMiFfFPFHQlV6Kgu6ppCTTsNnFYUNIcVj9UQoEFa8KeNzCR9UxmdOhfHcQD6UOLUsjHhvddq7pdMQvy7cFe5p+H4McwyOKP4iqPhIFXQwxFU1qaE17gQR36lCNgeUvizEJ78Veb9NfAxjBjP+lfBS8YJd4rOjis8zkN1S5f2uXYU17k6pH4iXJLe68Fbl/daDc6dQkXHJhRQx6B8u6GrE2FLCDZUT9XRY0MQl/xa9iYTXKq8/eemFMwYuQM+5ABUwda/Sg96mKmuGytv7192rQAl6j5CzTWXNMnPJN39bO5agPGTcUNLDfGbsDXBba/xBYj0ZGfXn5h8k3B/dEgScJDf99QwIJ3B5dDP2sNyckHHCUP7OzKU9cuGU28/rifnsNp99hL6kL4VQQQVujyj7GYf5QiH7JssUVtyKW3ErbsWt+Bcm6kxE9j1EfAAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 76 and percentage is less than or equal to 85 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAACOElEQVR4Ae2YA8xcQRSFa7dRbTOorbA24tq2jahRjai2bds2gtq2ziZnk1u9ybw7bX/MTb4fu3PPfM9I8O3bt1iJF/fiXvy/4sW9uBcvDBaAe+AL0NRZMUFpkI5/Pzc1cu67dClsEs/DUBd1DpRgeGcwBSTi/59tguiUN0h8IQeu4UIk5pcayjOzpGVfYjqsYf/CIPF7HJRbK0xSMO+EIiMnM+4GiHOf5pque6XdPvDNkkki9ATzSjOvB8dI9hnXPPf5AHEWPwghvVkELmHWdWbl/VOfea2z/pL4OZCcvWNFVmdmtYyJ4pdAMfa1AbLSMuusQ/EXYAUooBF/AqqzpyqQNY05GST8rDLYFFI8Ws9AobDizTk+D/gkMr6C8iapiHxYcdaKMOJ9xWnvjkyj+E1wHzyQ8PtxnGOoUvyVrfhoEXQ4xFU1uXqNs2zEd4uQrZbSV0FC5rcB3/6l+DiOGcrxb8BrwSvuEl+BrFcgE7NbM0sr/sp6jRso8xvx0sytCd4rxFUH525QmeNSglRR2D8SyGrCsWXALZGjPR0WdnHJv8PeJOCtyBvIvIzgnIML0EtegAq5ulfpxd7mImuWyNsf4+5VSCn2HmPODpE1x80l3/1t7XgG5WPGLSE9IqBvv+K21umDxEZmZFZkGB4kzI9uiSwnycv+Bg6EE5kf3fQPyy0ZMgEM599ZwTmLDNXDcoTCYCF3m6/AVK/ZlwpUEoE7lbJf6bAQFPFvsry4F/fiXtyLe3FXfAeAdGI06MOmAgAAAABJRU5ErkJggg=="

else if percentage is greater than or equal to 66 and percentage is less than or equal to 75 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAACGElEQVR4Ae2YA4xeURCFa7dRbTOorRg149q2jahRjai2bds2gnpt42xy/mSiu7nvzfpO8i1nzv89o1BaWlqexIk7cSeeozhxJ+7Em4J94A9IAX7qtfiAtqACfw4HxuJn/6ZL08zE6zFUo96AVgyfCDaBIvw92SaITvVN4vvZeIoLUZT/9ENHZra2nCtKh1Oc328S/8Omukr7XynmPfORUZsZvw3i3Ke5pnt/GnMHpFmyQYQ+Y15b5k0Dd6zXPPd5gziLf/AgfVEEHmLWV2bVZw/zrWApi5M3oCRnV4usicwanhvFP4AWnBsFZJVn1mtF8QhwDDTyIx4CenKmO5C1hTmVJArigQoDTbyKD2V/PZAkMlJBR7OQP3HWMS/is8Vp7xdnpfh38Bf8k/D/a5TEo2zFV4qghx6uqiWVxNNsxG+KkMuW0p9BYc5mu/ga9ixmfwyIFkRxl0gFsqJAFeV9PMp+jZtpJ8VZbXPDwXkTdGVfaVAmAOeXA1mD2NtO+XTYVOOS/4uzxUCsyJvPvMrgjYJ4JC9ATbTuVWZwdqjI2iHy7ua6exXShrNPmHNNZO3SueTr39auZVADZvwQ0stE313921qdB4nzzKhq6FF4kDA/uhWx/JD6nO+nIFzE/Oim87A8nCHrwFL+XB28MY/pPSxn0JRL90deQAwVzbkyoIsIvO5TNhX8oUsz9ybLiTtxJ+7EnbgT1yId5lN9u+XAf4cAAAAASUVORK5CYII="

else if percentage is greater than or equal to 56 and percentage is less than or equal to 65 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAB/klEQVR4Ae2YA4xdURRFa7dRbTOorRg145pRbStqVCNOatu2bQY1xvaeZP/kjO5/OON7kvV5z37rGSVSU1MLJVbcilvxfMWKW3Er3hrsBj9BMvBTL8QEOoNq/BwWrJHT/kGX1sHEmzBUo16CDgyfDjaDUvye5CaITk1N4ns48DhnorTCquzOzI4u+0rT4Tj795jEf3JQY6XtrwLzHvvIaMiMHwZxbtNc0gPfT7oJUl2yUYQ+Zl5nH+KlmZFsEGfxBw/S50TgfmZ9UlhzrNwRfwnKs3eNyJpekMXfgnbsmwBkVc0F8XBwGLTwI/4f9GdPXyBrK3NqKIsHKhS08io+muObgESRkQK6SwFtcdZhL+JzxGHvu0yj+BfwC/yW8P+1SuKRbsVXiaB7Hs6q5ZXEU92IXxMhF1xKfwAl2Zvn4oHVvITjo0GUIJKbRErm1QpqKW/jke6XuJku2Yh3Lgg75zXQm+MqgkoB2L8CyBqRS4fD1hqn/O/sLQNiRN4C5cNhBE9ArbSuVWayd7TI2lmgr1VIJ/Y+ZM5l/ROQ/mXtOgY1Y8ZXsQDG61/W6t9InGFGbfm7/o2E+datlMuJNGX/EAXhUuZbN52b5bEMWQ+W8XNd8NLcpneznE5rsIebTYqD0Cj2VQK9ROAVn7IpdNgD2tgnWVbciltxK27FrbgWafY8kPNLpbfPAAAAAElFTkSuQmCC"

else if percentage is greater than or equal to 46 and percentage is less than or equal to 55 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAB+0lEQVR4Ae2YA6wdURRFa7dxbSOorRg145pRbStqVCNOatu2bQblt639k/2S8zUvd+bM5z3JerxnzxqjXGZmZonEiltxK16kWHErbsXbg/3gL0gHXuqNmEB3UIefo4I1ctp/6NI+mHgLhmrUW9CF4bPBdlCB39NMgujU0kn8AAee5kxUVFiVvZnZ1bCvIh1Os/+Ak/hfDmqutP1VY95zDxlNmfHHQZzbNJf00M/T7oJMQ7aK0OfM6+5BvCIz0h3EWfzBhfQlEXiYWd8U1hzLH/G3oCp7N4is2cVZ/CPoxL4pQFZtH8SjwXHQxot4OBjMnoFA1k7+ri0eqEjQzq34eI5vAVJFRgbo7ac467gb8QXisPebvVL8B/gH/kv4/0Yl8VhT8XUi6JGLs2pVJfFME/FbIuSKofQXUJ69hS4eWM0rOD4exAliuUlkAFmxoJ7yNh5rvsSd6ZGPePfisHPeAv05rjqoEYD9a4CsMT4dDttrnPJ/s7cSSBB5S5QPhzE8AbXTulaZy97xImtvsb5WId3Y+5Q51/VPQPqXtZsY1IoZP2W4/mWt/o3EBWbUVxEXNxImt24VDCfSkv0jFIQrON+66dwsT2TIZrCKnxuCt85tejfL2bQHB7jZZIBgFce+GqCfCLzhUTaDDgdAB/sky4pbcStuxa24FdciC4Vak2WaD0PuAAAAAElFTkSuQmCC"

else if percentage is greater than or equal to 36 and percentage is less than or equal to 45 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAB/UlEQVR4Ae2YA6wcURSGa7dxbSOorRg145pRbStqXDdOatu2bQbFs+1/k3+T8zT77s6Zx3uSb3nPP98YlbKzs8skVtyKW/ESxYpbcSveGRwE/0EmcFPvxAR6gwb8HBOokdP+R5fOgcTbMFSj3oMeDJ8PdoIq/J5hEkSntk7ihzjwLGeiqsKq7M/MnoZ9Velwlv2HnMT/c1Brpe2vFvNeushoyYx/DuLcprmkR36ddR9kG3A/T+hL5vV2IV6VGZkO4iz+YCJNrojAo8z6obDmWN6Ivwc12btFZM0vzeKfQTf2zQCy6nsgHgtOgg5uxCPBcPYMBbJ2SwFFcX9Fg07Bik/m+DYgXWRkgf5eirNOBiO+RBz2/so0iv8CISBUwv+3KonHm4pvEkFPgjir1lQSzzYRvyNCrhlKfwOV2Vvs4v7VvIbjE0GCIJ6bRFbe1QoaKW/j8eZL3Jk+BYj3Lg075x0wmONqgzo+RPgGIGuCR4fDzhqn/L/srQaSRN4K5cNhHE9AnbSuVRayd7LI2l+qr1VIL/Y+Z85N/ROQ/mXtNga1Y8ZvGa5/Wat/I3GJGY1VxOWNhMGtWxXDibRl/xgF4SrOt246N8tTGbIdrOPnpuC9c5vezbKPzuAQN5usIoQmsK8OGCQCb7mUzaLDIdDFPsmy4lbciltxK27FtcgBcRuVdY4fggcAAAAASUVORK5CYII="

else if percentage is greater than or equal to 26 and percentage is less than or equal to 35 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAB6ElEQVR4Ae2YAURDQRjHa4sSBVBC2pK9AGUxSgAgQgwgEgxACElSQAAJAdAjDIMQZSxEBgVKCrQVUrUV1N71xX98pu65ve+pcR8/XnX3v1/vbu/erU0p1ZJYcStuxf8UK27FrbhD7BFloqaC1TkbIEn04vqZ0BbGLsHF8ROPIVSiLogxhGeIbSKCnz9NguAU14m7aJjDPxEVmMoUMscN+0XhkEN/VydeRqMhofXXhbxigIxBZJQ04ljTuNMzl4sFQvlQ0AxaRF4ygHgUGTWNOAq/gJgvvwTuI+taYOZQ4YtvsKxMq4gvELx6QhB/IbLESBDxRxY4TfDa4QKC4vV6IhLNiqfRPkZ8sAyPSIUpjso2I77EHnt3PA3iN8Q98cDB3zeFxCum4uss6LSJXbVTSFyZiOdZyKGh9BXRbiAtKl6f5hW0fyOqjAqWhNc4rUSf8BqvmN9xPRM/iCf/w4czT0xpBlsjeM2F9Dh0JHfODuKd5S0LPw5fsQElpLf8NMvabaV3lTPkHMlvQHKvtScNQcPIuNXLyL7WShwkDpDRLyHODxImR7eI4SBx9J8VEI7oj24yh+V5hGwRq7gewNauL6HD8jcO4WLZeMq/qujXTUyywOOAsh4cXGLUfpNlxa24FbfiVtyKS/EFcCypERicPW8AAAAASUVORK5CYII="

else if percentage is greater than or equal to 16 and percentage is less than or equal to 25 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAB0ElEQVR4Ae2YAUQDURjHa4smCqCEtCVbgLIYEQCIEAFEggGAkIQCAkgIgI4wDEIULEQGBUoKtBWo2gpq9/rwxyd51+195xzfx4/rde//ftu93bt3PcaYRKLiKq7isaLiKq7iBeKQaBId41ZXbIAiMYTj16COGLsBl0KQeBahEnVNTCO8TOwRKfz9HSYITjmbuIcTq/gQaYFLWULmTMh+aThU0d+ziTdx0rjQ/Msgr+6QMYaMhkUccxrf9MLNWo0wv6iFGLSOvKKDeBoZHYs4Cg1cmPPPAY+QdSdw5VDRi2+zrHJSxFcJXoMRiL8RFWJSSnye4LWPdmlxg3oh8q7iWeKLZfhEKUpxVMVFPEM88jSI3xNPxDMH/98REm+5iF90sar2C4mbbsVPQkrfEr3oG5v4Bs7/INqMFqaEb1ihfZhLxTZVLMz+IV6M/8cZzBbBaymi22FBUryP+GR568K3w3csQHnpJX+ZZR0k6VnlEjmn4guQw2PtecAgE8h44O3yj7XyG4ljZIzwdvmNhH3rlgo5SA79FwWEU5atm9hmeQUhu8QmjkextEsUNsvBryc8TBvfBFcb/QaIORZ45ijrw8EjpvRNloqruIqruIqruBQ/L0HEIEhS4cAAAAAASUVORK5CYII="

else if percentage is greater than or equal to 10 and percentage is less than or equal to 15 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAB0ElEQVR4Ae2YAUR7QRzH//8tmiiAEtKW7AUoixEBgAgRQCQYAAhJKCCAhABohGEQomAhMihQUqCtQNVWUHvXV7445Obe/Z5n3JcP29u7733KtXvXP6VUT+LFvbgXTxQv7sW9eAAOQRN0lFuutAkKYIivX4ExnLtBl6CbeJalErkG0ywvgT2Q4vtvZRE65UziZd5Y5Q+R5ocuFNk5YzkuTYcqx5dN4k3eNO4qTDLsqzt0jLGjYRDnmuZveuFmrQYUqEWctM6+goN4mh0dgzjDC7/SJMKER+y643sXmPjFt7WuUq+IrwI9gzGIv4EKmJQSnwd69nldWlwxLyDvKp4FX1pHCIpxijMVF/EMeFSMJn4PnsCzDj/fERJvuYhfRNhV+4XEVVTxE2WXW/CfYxMT3+D9H6Ct0eKSCJUWXh/WOxJbKgZm/xAvJPLHackW0LMU09dhICneBz61vnXhr8N3bkB56S1/Wes66KVnlUv2nMpuQPaPtecWk0yw48Fd2PxYK32QOGbHiLu0+SBhOrqlLCfJcfyigHDKfHSTOSyvsGQXbPL1KLd2c4QOy0AFoMxlE6ruaXPcAJjTCs+UW0LQpMuU/0+WFF7ci3txL+7FvfgPa4PaELnaZzsAAAAASUVORK5CYII="

else if percentage is less than 10 then

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAByElEQVR4Ae2YAUQDURjH1xZNFEAJaUu2AGUxIgAQIQKIBAMAIQkFBJAQAB1hGIQoAJFBgZIS2gpUbQW1u/74j09y5/a+Z8b7+HHb7v3vt93bvfsuEQRBT+LEnbgT7ypO3Ik78Tw4AnXQAiZ1JQ5QAMPcfosayGPX6JKPEs8wVKOuwQzDS2AfJPn6J04QnbJh4h53rPBLpBROZZGZszHHpehQ4XgvTLzOnSZMhUmaeVWDjHFm1ELEOaf5Sy/erD8aileZVzDISDGjFSbergTFud0Rx8y6UzhzLPviOyKr1Cvia0DWkAXxd1AGU1riC0DWAd/XFm/XK8iZimfAt8jwQdGmOKtsIp4GTzKN4vfgGbxI+PmuknjDRPyig1V1QEk86FT8NKb0Lejj2K6Jb3L/T9AUNDgl/L+nFYzIDPtTJT5z/4gXuvDnjM02kLVs6XKY1xTvB18ib0P5cvjBBSinveSviKzDXrpXuWTOmeYCZPu2dpIZDxrS8rbWdiNxwoxRDXHZSMRp3ZIxD5Ll+CUF4WRI66bWLK8yZA9scXuMS7tGsVmOfjzhcdr4IKqaHDcI5kXguaGsTwcPTLsnWVo4cSfuxJ24E3fiv3yS6WMKPcrpAAAAAElFTkSuQmCC"

end if

else if charging is "charged" then

set timeremaining to ""

set batteryIcon to "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAQAAACweEK3AAAB8UlEQVR42u2WP2hTURSHP5JBzVBcFHUQE5BGdPEfCBapm5ubWymKi4MiOIqCoFMHQZwFh8YpQ5dWEGqgWV0awVEQbBb/VFtRWl8+h6QxMe++94QOCu93h8e577yPe88995wHuXLl+qdl1VnbRiZrGcBTjoGrI28jV5y1+ie6HOM6qpbHwWs+tgD+DHitWhmG19Q5yxZTd3hGPRF4V7TsnFobnm6rhzIEb6f6KtHjoLoyPBWpRXApGJJHAH5Tp8AbsT5LYFGNhuHq1jNWzwF8p26AlZDbICsrvOWO/q6egdPbB3/jUfBJz9oPLmeB+8W6h5PhH50Er/es1+Ce7gAnXEiAq352PAl+CTzXt66OZMdCIlzrYfgtcPfAddk06g9tgrdT4Gsh+D0A1wIB/u5YhpUbD28A+CGA3rAAXkmJeRB+H3wxYHcGylrHY+DlxGxJDEtj5PB+5/cUeMEfGeDBA204Ae6yZMkS+LI3PwOe9m1KnndTsZp+/d/3ipbqPLjXVuol+mrd8Sy15Sb4sHtfAWxuX23Rk+C6+gnAp39XW5JL7gPwvLoJ4N3gEprxJTe1WTiv7svQTmKaxVabKwQ+qagXU8GF+DaX1KCnwRnvgAficySlQYNVa7btjLiugyXPAriYgu3YtuaR/EctV67/R78ArOuEoxggnn4AAAAASUVORK5CYII="

set percentage to 100

end if

return "{\"text\":\"" & percentage & "%

" & timeremaining & "\", \"icon_data\":\"" & batteryIcon & "\"}"

UPDATE:
I found the solution, you have to input the following return statement to display the info on two lines:

return "{\"text\":\"" & percentage & "%" & "\\n" & timeremaining & "\", \"icon_data\":\"" & batteryIcon & "\"}"
1 Like

:information_source: We will collect all the research information required to widgets development/improvement

Sub-topics

Utils: Getting temperature, usage, battery data without installing istats with powermetrics

Problem: Current btt widget Touch Bar iStats needs istats ruby gem. Use macOS native util, no 3rd party installation.

Solution: powermetrics

sudo powermetrics --show-all

All sensors data, natively

  • Running tasks
  • Battery and backlight usage
  • Network activity
  • Disk activity
  • Interrupt Sources
  • Device Power States
  • Interrupt distribution
  • Processor usage
  • GPU usage
  • SMC sensors
  • Thermal pressure
  • Selective Forced Idle
  • I/O Throttling
Gaming Widget: Show Counter-Strike: Global Offensive HUD in Touch Bar

WIP v0.0.1: https://github.com/marekkaczkowski/Touch-Bar-CSGO-HUD

Problem: Proxy data to BetterTouchTool and update widget without Node.js

Solution:

Connected feature request: 9676

Diffrent ways of integration:

That terminal command is an amazing find. Will report back this evening after I’ve had the chance to take a deep dive :smile:

1 Like

Hey guys here is first version of Counter-Strike: Global Offensive HUD.
It requires to run Node.js proxy,
we're looking for the solution to get rid of 3rd party dependencies.

Turns out power metrics needs to be invoked as sudo, which means I can't use it for the widget. Gonna do some more research...

from your last update I presume that Battery stats are high on your list?

Use the following command:

ioreg -w 0 -f -r -c AppleSmartBattery

Result:

+-o AppleSmartBattery  <class AppleSmartBattery, id 0x1000002cd, registered, matched, active, busy 0 (0 ms), retain 6>
    {
      "TimeRemaining" = 138
      "ExternalConnected" = No
      "AvgTimeToEmpty" = 138
      "AppleRawCurrentCapacity" = 5944
      "InstantTimeToEmpty" = 65535
      "AppleRawMaxCapacity" = 6113
      "ExternalChargeCapable" = No
      "FullPathUpdated" = 1564428995
      "CellVoltage" = (4305,4306,4305,0)
      "Voltage" = 12253
      "BatteryInvalidWakeSeconds" = 30
      "AdapterInfo" = 0
      "MaxCapacity" = 6113
      "PermanentFailureStatus" = 0
      "DesignCycleCount70" = 0
      "Manufacturer" = "SMP"
      "AppleRawAdapterDetails" = ()
      "Location" = 0
      "CurrentCapacity" = 5944
      "LegacyBatteryInfo" = {"Amperage"=18446744073709549023,"Flags"=4,"Capacity"=6113,"Current"=5944,"Voltage"=12253,"Cycle Count"=251}
      "BatteryFCCData" = {"ResScale"=200}
      "BatteryInstalled" = Yes
      "FirmwareSerialNumber" = 1
      "CycleCount" = 251
      "PackReserve" = 200
      "DesignCapacity" = 6669
      "OperationStatus" = 58435
      "ManufactureDate" = 19050
      "BestAdapterIndex" = 254
      "AvgTimeToFull" = 65535
      "BatterySerialNumber" = "D867105E2ZBHDWCAN"
      "BootPathUpdated" = 1564177670
      "ChargerData" = {"ChargingVoltage"=13048,"ChargingCurrent"=0,"NotChargingReason"=1}
      "PostDischargeWaitSeconds" = 120
      "Temperature" = 3011
      "BatteryData" = {"StateOfCharge"=98,"PMUConfigured"=0,"Voltage"=12691,"QmaxCell1"=6778,"AdapterPower"=0,"SystemPower"=4425,"ResScale"=200,"QmaxCell2"=6769,"QmaxCell0"=6768,"CycleCount"=251,"DesignCapacity"=6669}
      "UserVisiblePathUpdated" = 1564429355
      "IOReportLegendPublic" = Yes
      "InstantAmperage" = 18446744073709548794
      "FullyCharged" = Yes
      "ManufacturerData" =
        00000000: 00 00 00 00 07 02 00 01 39 25 00 00 03 35 38 30 03 30 30 32 03 41 54 4C 01 3C 00                ........9%...580.002.ATL.<.
      "DeviceName" = "bq20z451"
      "MaxErr" = 1
      "IOGeneralInterest" = "IOCommand is not serializable"
      "IOReportLegend" = ({"IOReportChannels"=((7167869599145487988,6460407809,"BatteryCycleCount")),"IOReportGroupName"="Battery","IOReportChannelInfo"={"IOReportChannelUnit"=0}})
      "Amperage" = 18446744073709549023
      "IsCharging" = No
      "DesignCycleCount9C" = 1000
      "PostChargeWaitSeconds" = 120
      "AdapterDetails" = {"FamilyCode"=0}
    }

I'm not aware of any way to get temperature or fan speed without sudo or a 3rd party tool in terminal, but maybe @Andreas_Hegenberg could add smc-command capabilities and provide the information in some builtin variables?

2 Likes

A way to get current battery percentage: pmset -g batt | grep -m 1 - | cut -d ' ' -f 3 | cut -d$'\t' -f 2 | sed 's/.$//'

1 Like

Does anyone know how to get CPU usage percent (out of 100%), total memory, and available memory? I'm having a hard time finding a preexisting top command for these outputs.

EDIT: Making progress by learning how to use grep lol

CPU (due to multicore not quite straight forward):
ncpu=$(sysctl -n hw.logicalcpu)
total=$(ps -Ao %cpu= | paste -sd+ - | bc)
usage=$(echo "scale = 2; $total / $ncpu" | bc)
printf "%0.1f%%\n" "$usage"

Total Memory: sysctl hw.memsize
Used: top -l 1 -s 0 | grep PhysMem

1 Like

Got things looking not totally broken!

Cleaned up a bit more!

The battery information could also be retrieved using Objective-C methods.

@GoldenChaos - could you make it so that clicking the memory button will clean the memory? Just like 3rd party apps can?

I don't think those "free up memory" tools are doing something I can invoke with a simple terminal command - but I can look into it!

Thanks for responding! I appreciate it!

Free up memory tools just fill up the memory until the system cleans it. There is no use in them (just placebo). The system will automatically free up memory if necessary.

2 Likes

ahhh... thanks for informing me!

Also, @Andreas_Hegenburg, could you check my bug report? Sadly no one has actually responded to my bug report :frowning:

To add to the responses above. The following available in the link below:

  • Battery Percent Left
  • Battery Time Left
  • Battery Temperature
  • CPU Percentage
  • Memory Free/Inactive/Active/etc.
  • Network Download & Upload Throughput
1 Like