Raspberry Pi Zero 2 W – Creación de un Docker en .NET para detección en la red local

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

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

  mqtt_scanner:
    container_name: mqtt_scanner
    restart: unless-stopped
    image: antrivas/mqtt_scanner_pi:1.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

{
  "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

[
  {
    "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

  - 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 ………….