- High cpu usage due to underlying library to work with bluetooth
Use this software at your own risk.
Default config should be located in /etc/ble2mqtt.json
or
can be overridden with BLE2MQTT_CONFIG
environment variable.
Example run command:
BLE2MQTT_CONFIG=./ble2mqtt.json ble2mqtt
The configuration file is a JSON with the following content:
{
"mqtt_host": "localhost",
"mqtt_port": 1883,
"mqtt_user": "",
"mqtt_password": "",
"log_level": "INFO",
"devices": [
{
"address": "11:22:33:aa:cc:aa",
"type": "presence"
},
{
"address": "11:22:33:aa:bb:cc",
"type": "redmond200",
"key": "ffffffffffffffff"
},
{
"address": "11:22:33:aa:bb:cd",
"type": "mikettle",
"product_id": 275
},
{
"address": "11:22:33:aa:bb:de",
"type": "am43"
},
{
"address": "11:22:33:aa:bb:dd",
"type": "xiaomihtv1"
},
{
"address": "11:22:34:aa:bb:dd",
"type": "xiaomihtv1",
"passive": false
},
{
"address": "11:22:33:aa:bb:ee",
"type": "xiaomilywsd"
},
{
"address": "11:22:33:aa:bb:ff",
"type": "xiaomilywsd_atc"
},
{
"address": "11:22:33:aa:aa:aa",
"type": "atomfast"
}
]
}
You can omit a line, then default value will be used.
Extra configuration parameters:
"base_topic"
- the default value is 'ble2mqtt'"mqtt_prefix"
- a prefix to distinguish ble devices from other instances and programs. The default value is 'b2m_'.
Devices accept friendly_name
parameter to replace mac address in device
names for Home Assistant.
Supported devices:
Any device
- Any bluetooth device can work as a presence tracker
Kettles:
- Redmond G2xx series (redmond200)
The default key that is used is
"ffffffffffffffff"
and can be omitted in the config. In some cases kettles don't accept it. Just use another key in the config file for the device:"key": "16 random hex numbers"
- Mi Kettle (mikettle)
Use correct
product_id
for your kettle:- yunmi.kettle.v1:
131
- yunmi.kettle.v2:
275
(default) - yunmi.kettle.v7:
1116
- yunmi.kettle.v1:
Humidity sensors:
- Xiaomi MJ_HT_V1 (xiaomihtv1)
- Xiaomi LYWSD03MMC (xiaomilywsd) (due to the connection to the device on every data fetch, it consumes more battery power. Flashing to the custom firmware is recommended)
- Xiaomi LYWSD03MMC with custom ATC firmware (xiaomilywsd_atc)
- supported both atc1441 and pvvx formats
Blinds:
- Generic AM43 (am43) Manufacturer can be A-OK, Zemismart, etc.
Dosimeters
- Atom Fast (atomfast)
By default, a device works in the passive mode without connection by
listening to advertisement packets from a device.
To use connection to the device provide "passive": false
parameter.
Supported devices in passive mode:
- Xiaomi MJ_HT_V1 (xiaomihtv1)
- Xiaomi LYWSD03MMC with custom ATC firmware (xiaomilywsd_atc)
Execute the following commands in the terminal:
opkg update
opkg install python3-pip python3-asyncio
pip3 install "bleak>=0.11.0"
pip3 install -U ble2mqtt
Create the configuration file in /etc/ble2mqtt.json and append your devices.
Bluetooth must be turned on.
hciconfig hci0 up
Run the service in background
ble2mqtt 2> /tmp/ble2mqtt.log &
Add a service script to start:
cat <<EOF > /etc/init.d/ble2mqtt
#!/bin/sh /etc/rc.common
START=98
USE_PROCD=1
start_service()
{
procd_open_instance
procd_set_param env BLE2MQTT_CONFIG=/etc/ble2mqtt.json
procd_set_param command /usr/bin/ble2mqtt
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
EOF
chmod +x /etc/init.d/ble2mqtt
/etc/init.d/ble2mqtt enable
/etc/init.d/ble2mqtt start
Due to small CPU power and increasing number of messages from bluetoothd it is recommended to do several workarounds:
- Use passive mode for those sensors for which this is possible. E.g. use custom ATC firmware for lywsd03mmc sensors
- Restart
bluetoothd
daily and restart ble2mqtt several times a day to reduce increasing CPU usage. Put the following lines to the/etc/crontabs/root
10 0,7,17 * * * /etc/init.d/ble2mqtt restart
1 4,14 * * * /etc/init.d/bluetoothd restart
Build the image as:
podman build -t ble2mqtt:dev .
Start the container and share the config file and DBus for Bluetooth connectivity:
podman run \
-d \
--net=host \
-v $PWD/ble2mqtt.json.sample:/etc/ble2mqtt.json:z \
-v /var/run/dbus:/var/run/dbus:z \
ble2mqtt:dev
Instead of sharing /var/run/dbus
, you can export DBUS_SYSTEM_BUS_ADDRESS
.
NOTE: --net=host
is required as it needs to use the bluetooth interface