Servidor IoT local usando router ADSL

editado 20 de marzo en Prototipos
Se propone usar un router ADSL para usarlo como servidor IoT de los respiradores y pulsioximetros.
Como hardware será mucho mas robusto que un servidor basado en PCs.
Mucho más económico y puede sufrir sucesivos cortes repentinos de corriente sin desconfigurarse.

Routers ADSL preseleccionados con 64MB RAM y 16MB flash y que puedan actualizar su firmware sin necesidad de estar abriendolos.

CPU Broadcom BCM63xx:
  1. AR-5387un
  2. AR-5381u
  3. NuCom R5010UNv2
  4. VR-3025u (con SMP si se quiere habilitar)
  5. VR-3025un (con SMP si se quiere habilitar)
  6. ADB P.DG A4001N1
  7. Sercomm AD1018
Mas routers con CPUs cuyos paquetes de repositorio son los mismos (sin SMP o con SMP en las CPU dual core):
https://openwrt.org/docs/techref/hardware/soc/soc.broadcom.bcm63xx

Y alguno de ellos tiene SMP (un dual core):
https://openwrt.org/docs/techref/hardware/soc/soc.broadcom.bcm63xx/smp

Se deja el wifi como Acces Point (AP):
https://openwrt.org/docs/guide-quick-start/basic_wifi

Aunque se permite conectar un router como el TP-Link TL-WR841N a cualquier puerto ethernet y sea este router el que gestione las conexiones wifi.
Este router es muy económico (menos de 20 euros) y es bastante bueno.

Hay más routers que también podrían funcionar, como los ASL-2555, pero tienen que tenerse en cuenta ciertos aspectos:
- Pueden necesitar pasos de actualizaciones de firmware mas complicados (ajustando versiones previas de firmware del propio router).
- Pueden tener menos memoria RAM (32MB en vez de 64MB), con lo que no se pueden poner demasiados "programillas" a funcionar.
- Utilizan una arquitectura diferente de CPU, necesitando otros paquetes de repositorios diferentes.
Aun así el ASL-26555 en principio también serviría para el servidor IoT.
https://openwrt.org/toh/alpha/asl26555

Se propone como servidor MQTT uno que esta en los repositorios, mosquitto.
Las librerías pubsubclient de los programas funcionaran perfectamente con este servidor.

Los principales canales interesantes de monitorizar, a mi entender, serían:
- Nivel de oxigeno en sangre.
- Frecuencia cardíaca.
- Frecuencia respiratoria.

Este router servirá para centralizar las conexiones wifi de los respiradores de un conjunto de habitaciones.
Los respiradores van a utilizar el módulo ESP8266 y funcionarán como clientes MQTT.
El router OpenWrt sera también el servidor MQTT, usando para ello un "mosquitto server" como broker.
Los PCs o móviles con pantalla serán los que muestren los datos en una pantalla, y tendrán que conectarse por wifi o por cable ethernet al router OpenWrt y utilizar un "mosquitto client".

El ESP8266 tiene Wifi n de 65M y se pueden distribuir los canales del router para optimizar las comunicaciones inalambricas.
Desafortunadamente el soporte del wifi Broadcom en cuanto a los drivers de OpenWrt no permite aprovechar todas las funcionalidades del modo n, trabajando en modo g 54M.
El router TL-WR841N sí que admite perfectamente el modo n de 65M de los ESP8266.
Usad 20 Mhz por canal en modo n, no serviría de nada el configurar el router en modo 40 Mhz.

Creo que se ha entendido todo.

He trabajado con OpenWrt y varios de los routers de la lista.

En el desarrollo de la aplicación, como router de referencia se tomará siempre el AR-5387un.

Imagen OpenWrt a cargar:
http://downloads.openwrt.org/releases/19.07.2/targets/brcm63xx/generic/openwrt-19.07.2-brcm63xx-generic-AR5387un-squashfs-cfe.bin

Repositorio de paquetes:
http://downloads.openwrt.org/releases/19.07.2/packages/mips_mips32/packages/

Librerias de mosquitto con SSL y sin SSL:

Recomendaría instalar los paquetes de forma manual, con "opkg install .." aunque haya que ir:
- Añadiendo los paquetes 1 por 1 y por orden debido a las dependencias.
- Ir copiándolos a la carpeta /tmp/ con WinSCP o cualquier otro programa SFTP.
E ir almacenando el listado y el orden de los programas instalados.

Digo esto porque la instalación automática a través de LuCi no permitirá saber lo que se está instalando, y habrá menos control a la hora de la portabilidad a otros routers.

Con el listado de paquetes y la imagen binaria se puede crear un solo archivo zip por router con todo lo necesario para cargarle el firmware necesario, sin necesidad de estar conectando el router a internet.

En cuanto al CFE, se mantendría en principio el que llevara cada router que se programara.
Alguna vez he actualizado el CFE en estos routers, pero en principio no hace falta.

Comentarios

  • editado 26 de marzo
    Funcionando, ambos.



    Probada la publicación y la subscripción tanto en SSL como en no-SSL con mosquitto_pub y mosquitto_sub desde linux.



    Puertos 1883 (nossl) y 8883 (ssl) conectados a internet, para el testeo del resto de desarrolladores software de las aplicaciones.

    Esto avanza.

    Se dejan en espera las optimizaciones para reducir el tiempo de configuración individual.

    Los desarrolladores de Apps ya están informados de la dirección de internet donde están colocados ambos routers.

  • Buenas, y desde mosquitto que haces con los datos? los almacenas en alguna TSDB o similar para luego hacer la visualización?

    Creo que un stack muy extendido y bastante agnóstico a los dispositivos de entrada puede ser algo así:

    respirador/oxipulsometro/loquesea --- Wifi/Lora/nrf2401 --> mosquitto --> influxdb (tags con id_dispositivo, tipo,etc) --> grafana dashboards --> grafana alerting --> notificación en caso de alerta por email, gchat, telegram, etc

    Creo que tener todos esos datos en una TSDB puede ser una información muy útil para luego minarla y anticiparse a cambios. Yo tengo mucha experiencia con sistemas de monitorización y te puedo echar una mano en lo que necesites.
  • editado 28 de marzo
    fgonzalez dijo:
    Buenas, y desde mosquitto que haces con los datos? los almacenas en alguna TSDB o similar para luego hacer la visualización?
    ..
    Buenos dias fgonzalez

    El principal objetivo es que desde el puesto de enfermería se puedan monitorizar en una pantalla 30 camas, por ejemplo.
    Con una pantalla de PC, una tablet y/o un móvil.

    Incluso los sanitarios pudieran llevar en el móvil una App para ver el estado de los pacientes.

    Lo bueno del broker MQTT mosquitto, al igual que otros, con un único publisher puede haber multitud de subscriptores en el mismo topic.


    https://www.muutech.com/comparativa-entre-mqtt-y-opc-ua/

    Puede haber un servidor que este subscrito a los topics de broker MQTT mosquitto que hayan abierto los respiradores, almacenando datos en una base de datos, pero la visualización del estado de los respiradores no va a depender de esa base de datos.
    Esa base de datos y ese servidor no son necesarios para cumplir el primer objetivo, además de que harían depender todo el sistema de un servidor que pudiera fallar, pero pudiera ser un complemento.

    En cuanto a Lora, no veo que sea de utilidad, la cantidad de datos que puede transmitir es mínima, y está pensado para otras cosas.
    Este sistema se basa en módulos wifi n y routers, con la posibilidad de ampliar y cablear todas las estancias y plantas donde estén situados los pacientes.

    Hay mucha gente con experiencia en configurar routers y redes, desde técnicos instaladores de internet hasta informáticos e ingenieros.

    El servidor que contiene el broker MQTT es un router que por diseño está preparado para funcionar años 24/7 sin romperse y sin colgarse.
    Los routers pueden llevar golpes, sufrir cortes de luz, y descargas y seguirán funcionando, y arrancan en muy pocos segundos.

    Un PC es mas delicado, un corte de luz puede ralentizar su arranque posterior, por ejemplo, son ruidosos y su instalación es mas compleja.

    Y poner servidores online no sería adecuado, si hay cortes en las líneas de comunicaciones todo el sistema fallaría si se basara en esto.

    En este sitio hay muchisíma información en español de MQTT:
    https://aprendiendoarduino.wordpress.com/tag/mqtt-qos/
    Incluso cómo usar un Arduino con la librería "pubsubclient", que es una de las más utilizada.

    Lo que comentas se puede desarrollar como complemento, no sería malo tenerlo, ya que en determinados casos permitiría ver la evolución de los pacientes y que el personal de enfermería no tuviera que estar memorizando estados previos, o comunicándoselos a la siguiente persona en los cambios de turnos.

    Si lo ves viable y piensas que es lo que mejor se te da, adelante, lo veo bien.

    Si te vas a poner con esto ponte en contacto conmigo para indicarme tu email y así debatir puntos y otros detalles a tener en cuenta.

    Hay más programadores usando el broker MQTT, hay que consensuar lo que se va a monitorizar, no puede cada uno ir definiendo topics.

    El problema actualmente es que no hay personal sanitario, sobre todo de enfermería, que nos indiquen las necesidades principales de monitorización.

    No se han definido a nivel de programación que variables, parámetros, bloques de datos o información hay que monitorizar, ni tampoco los topics.
  • Buenos días.
    Los administradores de este foro no han cumplido con su cometido.
    Con lo fácil que hubiera sido poner algo de orden.
    Debido al completo desorden del foro, la descoordinación y la falta de control de los administradores de este foro he decidido no aportar nada mas al mismo.
    - He tenido que dedicarle tiempo a corregir a otros colaboradores comentarios inciertos para que los lectores no se basaran en ellos.
    - He duplicado hilos por haberlos ensuciado otros miembros con comentarios no relacionados con estos hilos.
    - He reportado a los administradores comentarios que debieran de eliminarse de hilos y éstos no han hecho nada, dejando el hilo inservible, al dejar éste "sucio", lleno de tanta "basura".
    El estar haciendo el doble o el triple de trabajo para mantener la información en este foro me ha estado quitando el tiempo necesario para el desarrollo de un respirador viable.
    Este foro ha sido una carga, en el que aportaba, aportaba y aportaba, y nadie me ha echado una mano.
    31 hilos abiertos y más de 160 comentarios en estos días, mientras que otros se dedicaban a sus montajes (y utilizaban el foro cuando se encontraban con algún problema), yo tenía que estar redactando y documentando todo muy clarito para que los lectores lo entendieran.
    La colaboración de los demás ha sido casi nula, sólo ha servido para dedicarle mi tiempo a otros, y no para avanzar en un desarrollo factible.
    Las pocas cosas que solicitaba en las colaboraciones, que hasta estudiantes de instituto pudieran haber realizado, no la ha realizado nadie, como por ejemplo, las búsquedas en sitios específicos y la realización de listados.
    Todo el mundo se ha centrado en sus intereses, en sus desarrollos propios y no en ver todo esto desde una perspectiva mas amplia.
    Como suelo decir "el que no aporte, que se aparte", veo que para las personas de este foro no "aporto", si no hubieran permitido por ejemplo que administrara mis propios hilos o hubieran hecho relevantes estos hilos.
    Debido a que lo que estoy haciendo no le interesa a nadie, por la nula colaboración que estoy recibiendo de este foro, me aparto.
    Como siempre han decidido centrarse en otros desarrollos, se que la decisión que he tomado es la mejor decisión, por muy dura que sea.
    Después de tantos días, al igual que en un trabajo, sólo queda despedirme de mis compañeros.
    "Ánimo compañeros".
    Atentamente
    Jose_Pizarro

Accede o Regístrate para comentar.