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
xxxxxxxxxx
sudo nano /home/antonio/Containers/nuc_bluetooth/run.sh
E insertaremos este texto
xxxxxxxxxx
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
xxxxxxxxxx
sudo nano /home/antonio/Containers/nuc_bluetooth/dockerfile
Y le pondremos este texto
xxxxxxxxxx
#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
xxxxxxxxxx
sudo nano /home/antonio/Containers/nuc_bluetooth/docker-compose.yaml
Y le insertaremos este texto , cambiándolo según nuestras necesitadas
xxxxxxxxxx
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
xxxxxxxxxx
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
xxxxxxxxxx
mkdir /home/antonio/Containers/dockercompose
cd /home/antonio/Containers/dockercompose
Crear el fichero docker-compose.yml y el fichero .env
xxxxxxxxxx
sudo nano /home/antonio/Containers/dockercompose/docker-compose.yaml
Y lo rellenaremos con este texto
xxxxxxxxxx
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
xxxxxxxxxx
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
xxxxxxxxxx
- 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
xxxxxxxxxx
- 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 :
xxxxxxxxxx
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 …………….