En esta entrada os explicare como crear un Docker para tener un escáner que nos indique que dispositivos estan activos en nuestra red local , el docker esta realizado en .NET y subido a docker hub , lo podéis encontrar aqui

Es una maravilla poder trabajar con Visual Studio e integrar las aplicaciones de Windows tan fácilmente en Linux vía docker , pero hay que hay que tener muy en cuenta a la hora de crear el docker el tipo de arquitectura en la que correrá el docker , aquí dejo los dockerfile para x86 y arm
Dockerfile para x86
FROM mcr.microsoft.com/dotnet/runtime:3.1
# Change timezone to local time
ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY bin/Release/netcoreapp3.1/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "MQTT_Scanner.dll"]
Dockerfile para arm
xxxxxxxxxx
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster-arm32v7
# Change timezone to local time
ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY bin/Release/netcoreapp3.1/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "MQTT_Scanner.dll"]
Sin mas añadiremos en docker-compose.yaml el contenedor
xxxxxxxxxx
mqtt_scanner
container_name mqtt_scanner
restart unless-stopped
image antrivas/mqtt_scanner_pi1.4
volumes
$ DOCKERDIR /mqtt_scanner/config:/App/config
$ DOCKERDIR /mqtt_scanner/logs:/App/logs
environment
TZ=$ TZ
networks
traefik
default
Tras arrancarlo veremos como empieza a escanear nuestra red local

Una vez arrancado veremos la carpeta /config , allí nos encontraremos dos archivos de configuración que modificaremos según nuestras necesidades
configuracion.json
xxxxxxxxxx
{
"Intentos": 3,
"Tiempo_Espera": 800,
"IP_Inicial": "192.168.1.1",
"IP_Final": "192.168.1.255",
"Modo": 0,
"Payload": "MQTT_Scanner/IP/",
"Servidor_MQTT": "192.168.1.XXX",
"Puerto_MQTT": "1883",
"Usuario_MQTT": "xxxxxxxxxx",
"Contraseña_MQTT": "yyyyyyyyyyy"
}
En el definiremos los datos de conexión al servidor mqtt y nuestras preferencias a la hora de hacer el escaneo de nuestra red local , existiendo tres modos de funcionamiento :
- Modo 0 : Secuencial de IP_Inicial a IP_Final
- Modo 1 : Cada 32 ip’s interrogara a las definidas en favoritos.json
- Modo 2 : Solamente las que estén definidas en favoritos.json
favoritos.json
xxxxxxxxxx
[
{
"IP": "192.168.1.24",
"Nombre": "Antonio"
},
{
"IP": "192.168.1.28",
"Nombre": "Oriol"
},
{
"IP": "192.168.1.21",
"Nombre": "Tere"
}
]
Aquí definiremos en que direcciones IP queremos hacer mas hincapié y su etiqueta

Para ser un docker corriendo en NET Core la verdad es que me he quedado sorprendido de que solo consuma 8MB de memoria RAM y prácticamente 0% de CPU , una maravilla en cuanto a recursos

Ahora lo integraremos en Home Assistant creando un sensor MQTT para poder usarlo en todas nuestras automatizaciones
xxxxxxxxxx
platform mqtt
state_topic'MQTT_Scanner/IP/192.168.1.24/status'
name'tracker_ip_antonio'
payload_on"1"
payload_off"0"
device_class occupancy
Y con esto y un bizcocho ………….