当前位置: 首页 > news >正文

AirBattery - 在Mac上实时监控所有苹果设备电量

项目简介

AirBattery 是一款功能强大的 macOS 应用程序,专门设计用于监控和显示您所有苹果设备的电池使用情况。通过创新的"Nearbility Engine"技术,它能够自动搜索并显示周边支持设备的电量信息,无需复杂的配置过程。无论是 iPhone、iPad、Apple Watch 还是其他蓝牙设备,AirBattery 都能在 Dock 栏、状态栏或小组件中实时展示它们的电池状态。

功能特性

  • 多设备电池监控:自动检测并显示 iPhone、iPad、Apple Watch 等苹果设备的电池电量
  • 多种显示方式:支持在 Dock 栏、状态栏和小组件中显示电池信息
  • 智能设备发现:基于"Nearbility Engine"自动搜索周边设备,无需手动配置
  • Nearcast 功能:支持在局域网内查看其他 Mac 及其外设的电量信息
  • 实时状态栏图标:可配置为实时显示电量图标,类似系统原生风格
  • 设备隐藏管理:可根据需要隐藏特定设备,随时恢复显示
  • 蓝牙设备支持:通过蓝牙权限获取周边设备数据包并解析电池信息

安装指南

系统要求

  • macOS 11.0 及更高版本

安装方法

方法一:直接下载
前往 发布页面 下载最新版安装文件。

方法二:Homebrew 安装

brew install lihaoyun6/tap/airbattery

使用说明

基础使用

  1. 启动 AirBattery 后,默认会同时显示在 Dock 栏和状态栏上
  2. 应用程序会自动搜索所有支持隔空电量获取的设备
  3. 点击 Dock 图标、状态栏图标或添加小组件即可查看设备电量

高级功能

  • 在偏好设置中可切换状态栏图标为实时电量显示
  • 使用 Dock 栏菜单或状态栏菜单隐藏/显示特定设备
  • 利用 Nearcast 功能查看局域网内其他设备的电量状态

核心代码解析

蓝牙设备电池数据解析

# 从系统日志中提取蓝牙设备的电池信息
PRED='subsystem == "com.apple.bluetooth" AND (category == "CBStackDeviceMonitor" OR category == "Server.GATT") AND (eventMessage CONTAINS "Battery" OR eventMessage CONTAINS "statedump: 0x001A" OR eventMessage CONTAINS "statedump: 0x001D")'# 查询系统日志获取蓝牙设备数据
data=$(/usr/bin/nice -n 19 /usr/bin/log show $STYLE $LVL --predicate "$PRED" --last "$WINDOW")# 解析电池信息并生成JSON格式输出
for i in `echo "$data"|grep "Battery"|grep -v "VID 0x004C"`
dotime=`echo $i|awk '{print $1"T"$2}'`name=`echo $i|grep -o ", Nm '.*', PID"|sed "s/, Nm '//g;s/', PID//g"`type=`echo $i|grep -o ", DvT [A-z]*"|sed "s/, DvT //g"`batt=`echo $i|grep -o ", Battery M [+-]*[0-9]*%"|grep -o "\d*"`stat=`echo $i|grep -o ", Battery M [+-]*[0-9]*%"|grep -Eo "\+|\-"`mac=`echo $i|grep -o ", BDA [A-z0-9:]*"|sed "s/, BDA //g"`# 输出格式化JSON数据echo "{\"time\": \"$time\", \"vid\": \"$vid\", \"pid\": \"$pid\", \"type\": \"$type\", \"mac\": \"$mac\", \"name\": \"$name\", \"level\": $batt, \"status\": \"$stat\"}"
done

Apple Pencil 电池监控

# 查询Apple Pencil的电池信息
data=`$syslog $type -u $id --process SpringBoard -m '"Accessory Category" = Pencil;' -T SpringBoard`# 解析电池容量和充电状态
batt=`echo "$data"|grep "Current Capacity"|grep -o "[0-9]*"|sed -n '$p'`
stat=`echo "$data"|grep "Is Charging"|grep -o "[0-9]*"|sed -n '$p'`
model=`echo "$data"|grep "Product ID"|grep -o "[0-9]*"|sed -n '$p'`
vendor=`echo "$data"|grep "Vendor ID"|grep -v Source|grep -o "[0-9]*"|sed -n '$p'`# 输出Pencil设备信息
echo "{\"level\": $batt, \"status\": $stat, \"model\": \"$model\", \"vendor\": \"$vendor\"}"

设备特征值数据解析

# 解析GATT特征值数据获取设备信息
devData=`echo "$data"|grep -E "statedump: 0x001A Characteristic Value|statedump: 0x001D Characteristic Value"|grep -o "\[[A-z0-9 ]*\]"|sed 's/\[ //g;s/ \]//g'|awk '{if (NR%2==1) {line=$0} else {print line, $0}}'|awk 'length($0) == 23'`# 结合系统蓝牙配置信息完善设备数据
btData=`/usr/sbin/system_profiler SPBluetoothDataType`
for i in `paste -d ' ' <(echo "$times") <(echo "$devData")`
do# 提取设备VID、PID并匹配设备名称vid=`echo $i|awk '{print "0x"$4$3}'`pid=`echo $i|awk '{print "0x"$6$5}'`name=`echo "$btData"|grep -B3 $pid|sed -n '1p'|sed 's/^ *//g;s/:$//g'`type=`echo "$btData"|grep -A5 $pid|grep "Minor Type: "|sed 's/^ *Minor Type: //g'`
done

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.hskmm.com/?act=detail&tid=28281

相关文章:

  • HTML学习日记
  • 10.10每日总结
  • 二分图与网络流 Trick
  • 10月10号
  • win11 系统如何进行硬盘分区?固态硬盘怎么分区?SSD 固态硬盘分区教程
  • 10/10
  • 数论(未完)
  • 没做完的题
  • 第十一天
  • JavaScriptDay1
  • 淘宝NPM镜像地址https://registry.npm.taobao.org不可用
  • 星星充电一面
  • 6 CF1034 div3 题解
  • 5 ABC413 题解
  • 4 CF 1032 div3 题解
  • 3 ABC411 C ~ E题解
  • 9 ABC408 D~F 题解
  • 8 ABC425 G 题解
  • 智能防御,安全赋能:AI-FOCUS 滤海AI DLP 化解外部 AI 风险
  • IDEA快捷键
  • VS code 中代码补全 自动补全函数括号
  • 优先队列
  • 学习ReAct并使用langgraph实现一个简单的ReAct AI Agent!!
  • abc 408 d~f
  • RMQ与LCA学习笔记
  • mamba-硬件感知算法
  • Java1
  • 完整教程:lua代码解析1
  • 二维数点
  • gitee和github如何修改仓库名并且保持与原远程仓库的连接?(手把手教学) - 实践