本帖最后由 neroxps 于 2018-2-23 17:28 编辑
写在最前
这个是 《【docker】【device_tracker】自建蓝牙扫描追踪设备》 脚本的改版,之前的脚本只能用 rest_api 更新,导致覆盖 ios 程序的地理位置更新,这个是参考了《自己寫個藍牙搜尋器檢查是否進入某區域並更新到HA》mqtt方法做的。但是经过测试这方法检测是否在家还是有一些抖动的情况,例如有些时候会检测不到蓝牙。
而且蓝牙网卡覆盖范围有效距离其实不远,如果家大的话可能就不行了,我家100平米左右,一个USB蓝牙适配器勉强覆盖。我尝试使用 USB延长线延长蓝牙适配器的距离,让蓝牙适配器在整个家庭的正中央。最好的方案还是使用 ESP32 来检测扫描蓝牙,但好像暂时没发现可以监测 iPhone 的。
使用之前
运行 hassio 的主机需要将蓝牙设备驱动,运行 hcitool dev 能够得到 hci0 之类的就证明驱动蓝牙了,脚本也会检查是否有蓝牙。
理论上支持树莓派,我也用 hassio-builder 生成了支持树莓派的 docker 镜像,但到底能不能用我手头上没有树莓派测试。
利用 Linux 蓝牙工具 hcitool name $MAC 方法来鉴别设备是否在蓝牙覆盖范围内,此方法能有效监测 Apple iPhone IPAD 设备。(不支持 BLE 设备,例如小米手环)
使用方法
0.添加 Add-On Repositories
Add-On Repositories:https://github.com/neroxps/hassio-addons
1.修改 options
{ "sleep_time":"2",
"mqtt_address":"192.168.1.100",
"mqtt_user":"username",
"mqtt_password":"password",
"mqtt_port":"1883",
"mqtt_topic":"/ble/tracker",
"blue_list":[
{
"name":"tom",
"mac": "01:23:45:67:89:AB"
},
{
"name":"jack",
"mac": "01:23:45:67:89:AB"
},
{
"name":"elspie",
"mac": "01:23:45:67:89:AB"
},
{
"name":"gawain",
"mac": "01:23:45:67:89:AB"
}
]
}
配置列表
- sleep_time[非必须]: 扫描间隔,默认 5 秒。(例子:2)
- mqtt_address[必须]: MQTT 地址 (例子:192.168.1.1)
- mqtt_user[必须]: MQTT 用户名 (例子:username)
- mqtt_password[必须]: MQTT 密码 (例子:password)
- mqtt_port[非必须]: MQTT 服务监听端口默认:1883 (例子:1883)
- mqtt_topic[必须]: MQTT 主题,与 Home Assistant 配置配合使用 (例子: /ble/tracker)
- blue_list[必须]: 设备蓝牙mac列表 (例子:见下方)
- name[必须]: 设备在 Home Assistant 配置使用的名字 (例子:tom)
- mac[必须]: 设备的蓝牙 MAC 地址 (例子:01:23:45:67:89:AB)
2.编写 Home Assistant 传感器配置
binary_sensor: - platform: mqtt
name: "tom"
state_topic: "/ble/tracker/tom"
qos: 0
payload_on: "enter"
payload_off: "leave"
device_class: opening
- platform: mqtt
name: "Jack"
state_topic: "/ble/tracker/jack"
qos: 0
payload_on: "enter"
payload_off: "leave"
device_class: opening
- platform: mqtt
name: "elspie"
state_topic: "/ble/tracker/elspie"
qos: 0
payload_on: "enter"
payload_off: "leave"
device_class: opening
- platform: mqtt
name: "gawain"
state_topic: "/ble/tracker/gawain"
qos: 0
payload_on: "enter"
payload_off: "leave"
device_class: opening
sensor:
- platform: template
sensors:
tom:
value_template: "{% if states.binary_sensor.tom%}
{% if is_state('binary_sensor.tom', 'on') %}
在家
{% else %}
离家
{% endif %}
{% else %}
未知
{% endif %}"
- platform: template
sensors:
jack:
value_template: "{% if states.binary_sensor.jack%}
{% if is_state('binary_sensor.jack', 'on') %}
在家
{% else %}
离家
{% endif %}
{% else %}
未知
{% endif %}"
- platform: template
sensors:
elspie:
value_template: "{% if states.binary_sensor.elspie%}
{% if is_state('binary_sensor.elspie', 'on') %}
在家
{% else %}
离家
{% endif %}
{% else %}
未知
{% endif %}"
- platform: template
sensors:
gawain:
value_template: "{% if states.binary_sensor.gawain%}
{% if is_state('binary_sensor.gawain', 'on') %}
在家
{% else %}
离家
{% endif %}
{% else %}
未知
{% endif %}"
homeassistant:
customize:
sensor.tom:
friendly_name: 'Tom'
homebridge_hidden: true
icon: mdi:account
sensor.jack:
friendly_name: 'Jack'
homebridge_hidden: true
icon: mdi:account
sensor.elspie:
friendly_name: 'Elspie'
homebridge_hidden: true
icon: mdi:account
sensor.gawain:
friendly_name: 'Gawain'
homebridge_hidden: true
icon: mdi:account
group:
family_member:
view: yes
name: "家庭成员"
entities:
- sensor.tom
- sensor.jack
- sensor.elspie
- sensor.gawain
注意事项:
- binary_sensor 里面的 name 必须和 options 里面填写的 blue_list.name 一致。
- state_topic 必须和 options 里面填写的 mqtt_topic 前序一致,并且 mqtt_topic 的结尾不能带 /,正确的写法:/ble/tracker,错误的写法:/ble/tracker/。
Enjoy
|