Préambule
Depuis que j'ai installé Home Assistant dans une machine virtuel avec un dongle Bluetooth attaché en USB Passthrough, j'avais souvent ce genre de messages d'erreurs coté kernel.
Bluetooth: hci0: Opcode 0x200c failed: -16J'ai tout essayé, script de reload, config Bluetooth (/etc/bluetooth/main.conf)... mais rien n'y fait jusqu'à que je découvre ce petit proxy : homeassistant-bt-proxy
Au lieu de monter votre dongle via USB device, ce proxy utilise un port série, monté depuis votre Proxmox.
Ayant encore la version core de Home Assistant, j'ai dû adapter le proxy pour qu'il fonctionne sous ma VM Fedora serveur.
Configuration coté hyperviseur
- Assurez-vous que votre VM Home Assistant est arrêté et que vous avez enlevé le périphérique USB de la VM, si ce n'est pas le cas, on stop la VM (ici 114)
qm stop 114- Attacher un port série à la VM
qm set 114 -serial0 socket- Redémarrer de nouveau le VM
qm start 114- Cloner le repo homeassistant-bt-proxy sur votre hyperviseur Proxmox
git clone https://github.com/nlothian/homeassistant-bt-proxy.git- Copier le script hci-proxy.py
sudo cp hci-proxy.py /usr/local/bin/hci-proxy.py
sudo chmod +x /usr/local/bin/hci-proxy.py- Éditer le fichier hci-proxy.service pour y ajouter le path du socket (/var/run/qemu-server/<VMID>.serial0)
[Unit]
Description=Bluetooth HCI-over-Serial Proxy
After=bluetooth.target
Conflicts=bluetooth.service
[Service]
Type=simple
ExecStartPre=-/usr/bin/systemctl stop bluetooth.service
ExecStart=/usr/bin/python3 /usr/local/bin/hci-proxy.py -s /var/run/qemu-server/114.serial0
Restart=on-failure
RestartSec=5
# Needs raw Bluetooth socket access and connection to QEMU's virtio-serial socket
# Run as root for simplicity (HCI_CHANNEL_USER requires CAP_NET_ADMIN + CAP_NET_RAW)
[Install]
WantedBy=multi-user.target- Copier et activer le service
sudo cp hci-proxy.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now hci-proxy- Vérifier que le service tourne bien tourne
sudo journalctl -xeu hci-proxyCoté VM Fedora
- Vérifier que le module
hci_uarest activé
lsmod | grep hci_uar- Si ce n'est pas le cas, activez le
modprobe hci_uar
echo "hci_uar" | sudo tee /etc/modules-load.d/hci_uart.conf- Il vous faudra créer le service qui va attacher le périphérique Bluetooth
vi /etc/systemd/system/btattach.service[Unit]
Description=Bluetooth HCI-over-Serial attach
After=bluetooth.target
[Service]
Type=simple
ExecStartPre=/bin/sleep 3s
ExecStart=/usr/bin/btattach -B /dev/ttyS0 -P h4
[Install]
WantedBy=multi-user.target- Enfin, nous allons lancer le service puis tester que tout fonctionne
systemctl daemon-reload
systemctl enable --now btattach.servicebluetoothctl show