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: false
Y 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 …………….