En esta entrada os explicare como crear un Docker para tener un escáner Bluetooth aprovechando el Bluetooth clásico de la Raspberry pi Zero 2 , lo primero crear la estructura de carpetas
mkdir /home/antonio/Containers/nuc_bluetooth mkdir /home/antonio/Containers/hassio_bluetooth cd /home/antonio/Containers/nuc_bluetooth
Crearemos el fichero run.sh
sudo nano /home/antonio/Containers/nuc_bluetooth/run.sh
E insertaremos este texto
service dbus start
service bluetooth start
if [ "$(ls -A $DIR)" ]; then
echo "Scripts and settings allready created. Continuing..."
else
echo "Init scripts for the first time, copy scripts and settings..."
cp -R /scripts/* /app
fi
( exec "/app/presence.sh" -d )Crearemos el dockerfile
sudo nano /home/antonio/Containers/nuc_bluetooth/dockerfile
Y le pondremos este texto
#ARG BUILD_FROM=hassioaddons/ubuntu-base-amd64:2.0.0
ARG BUILD_FROM=debian:jessie
# hadolint ignore=DL3006
FROM ${BUILD_FROM}
# Setup base system
ARG BUILD_ARCH=amd64
RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list
#RUN sudo apt-key adv --refresh-keys
RUN echo "deb [check-valid-until=no] http://cdn-fastly.deb.debian.org/debian jessie main" > /etc/apt/sources.list.d/jessie.list
RUN echo "deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list
RUN sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list
RUN apt-get -o Acquire::Check-Valid-Until=false update
RUN echo "Acquire::Check-Valid-Until \"false\";\nAcquire::Check-Date \"false\";" | cat > /etc/apt/apt.conf.d/10no--check-valid-until
RUN \
apt-get update \
&& apt-get install -y \
bluetooth \
bluez \
bluez-tools \
rfkill \
libmosquitto-dev \
mosquitto \
mosquitto-clients
COPY rootfs /scripts
COPY run.sh /
VOLUME /app
WORKDIR /app
CMD ["bash", "/run.sh"]Cambiando la imagen base BUILD_FROM podremos crear un versión para x86 , en este caso usaremos una versión jessie compatible con arm
Acto seguido crearemos el docker-compose
sudo nano /home/antonio/Containers/nuc_bluetooth/docker-compose.yaml
Y le insertaremos este texto , cambiándolo según nuestras necesitadas
version: '3'
services:
hass_bluetooth:
build: .
image: helto/bluetooth
container_name: hass_bluetooth
network_mode: host
restart: always
volumes:
- /home/antonio/Containers/hassio_bluetooth:/app copiar carpeta rootfs a /home/antonio/Containers/nuc_bluetooth , os dejo aquí el enlace del contenido de dicha carpeta y tendréis que ajustarlo a vuestras necesidades
cd /home/antonio/Containers/nuc_bluetooth docker-compose up -d
Y en Portainer deberíais tener activo el docker

Y en el apartado de logs lo veremos escanear buscando dispositivos Bluetooth

Si no tenéis Portaienr activo los pasos para ponerlo en marcha son los siguientes
mkdir /home/antonio/Containers/dockercompose cd /home/antonio/Containers/dockercompose
Crear el fichero docker-compose.yml y el fichero .env
sudo nano /home/antonio/Containers/dockercompose/docker-compose.yaml
Y lo rellenaremos con este texto
version: '3'
services:
portainer:
image: portainer/portainer:alpine
hostname: portainer
container_name: portainer
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ports:
- "9000:9000"
volumes:
- ${DOCKERDIR}/portainer/data:/data
- /var/run/docker.sock:/var/run/docker.sock:ro
stdin_open: true
tty: true
restart: always
networks:
# - traefik
- default
networks:
traefik:
external: true
default:
external: falseY crearemos el Docker
docker-compose up -d
Al acabar nos conectaremos con http://ip_pi2w:9000

Con esto ya tenemos nuestros primeros dos dockers funcionado en la pi
Veremos como ya aparecen datos en el servidor mqtt

Para integrarlo en Home Assistant crearemos un sensor MQTT por cada uno de los dispositivos configurados en owners_devices
- platform: mqtt
name: "tracker_bt_movil_antonio"
state_topic: "tracker_bt/owner/casa/9C:BC:F0:AA:79:FE"
unit_of_measurement: '%'
value_template: "{{ value_json.confidence }}"Y le añadiremos un delay para evitar falsos negativos
- platform: template
sensors:
sensor_presencia_bt_antonio_delay:
friendly_name: 'Sensor presencia BT antonio delay'
delay_off:
minutes: 2
value_template: >-
{{ is_state('sensor.sensor_tracker_bt_movil_antonio', 'on') }} Con esto ya lo tenemos integrado en nuesto Home Assistant
BONUS : He subido la imagen ya preparada para descargar en docker hub , antrivas/bt_scanner:1.0

Añadir al docker-compose.yaml esto para descargarla de docker hub :
hass_bluetooth:
image: antrivas/bt_scanner:1.0
container_name: hass_bluetooth
network_mode: host
restart: always
volumes:
- /home/antonio/Containers/hassio_bluetooth:/app Es una imagen que prácticamente no consume recursos ni memoria

Con esto y un bizcocho …………….