Instalando Blynk Server localmente

En este tutorial les mostrare de la forma más sencilla y profunda posible como correr un servidor de Blynk localmente en el PC.

¿Pero que es Blynk?

Como lo describen en su web Blynk es una plataforma de IoT independiente del hardware con aplicaciones móviles de marca blanca, nubes privadas, administración de dispositivos, análisis de datos y aprendizaje automático. Blynk es una plataforma con aplicaciones de iOS y Android para controlar Arduino, ESP8266, Raspberry Pi y similares en Internet.
Puede crear fácilmente interfaces gráficas para todos sus proyectos simplemente arrastrando y soltando widgets. La aplicación puede descargarse tanto para Android como para IOS.

Blynk usa una aplicación ya sea en IOS o Android para comunicarse con su servidor (Blynk Server) oficial en internet y así registrar y controlar tus proyectos.

¿Pero que es Blynk Server??

Blynk Server es un servidor Java de código abierto basado en Netty, responsable de reenviar mensajes entre la aplicación móvil Blynk y varias placas de microcontroladores y SBC (es decir, Arduino, Raspberry Pi, etc.). Gracias al uso de Java y a que en su aplicación nos permiten usar un server personalizado, es que podremos montar Blynk Server en modo local. Comencemos:

Requisitos

    • Java 8/11 (OpenJDK, Oracle)
    • Cualquier sistema operativo que pueda ejecutar Java
    • Al menos 30 MB de RAM (podría ser menos con el ajuste)
    • Puertos abiertos 9443 (para aplicaciones y hardware con ssl), 8080 (para hardware sin ssl)

Configuración del servidor local

Instalar java en Ubuntu

sudo add-apt-repository ppa:openjdk-r/ppa \ 
&& sudo apt-get update -q \ 
&& sudo apt install -y openjdk-11-jdk

Si quieren el Java de Oracle:

sudo apt-add-repository ppa:webupd8team/java 
sudo apt-get update 
sudo apt-get install oracle-java8-installer

Para Windows descargue Java aquí e instálelo.

Nota: Se recomienda el uso de Java 11, aunque también pueden usar Java 8.

Descargar el server Blynk

Creamos una carpeta para alojar los ficheros necesarios para nuestro servidor local. En mi caso cree la carpeta BlynkServer en la raiz de C, ustedes pueden crearla donde sea y con el nombre que quieran. Descargamos de su sitio la última versión de Blynk server y lo ubicamos en nuestra carpeta. Al dia de hoy es server-0.41.12.jar (Java 11) y server-0.41.12-java8.jar (Java 8).

Hay 2 cosas muy importante a tener en cuenta:

1-Blynk se desarrolla constantemente. Las aplicaciones móviles y el servidor se actualizan con frecuencia. Para evitar problemas durante las actualizaciones, desactive la actualización automática para la aplicación Blynk en su móvil o actualice el servidor local y la aplicación blynk al mismo tiempo para evitar posibles problemas de migración.

2- El servidor local de Blynk es diferente del servidor de Blynk Cloud. No están relacionados en absoluto. Debe crear una nueva cuenta cuando use el servidor local de Blynk.

Como bien resaltamos debemos crear una cuenta en el server local para nuestros proyectos, por lo que debemos configurar un email en la configuración del servidor local.

Habilitar correo en el servidor local

Para habilitar las notificaciones de correo en el servidor local, debe proporcionar sus propias credenciales de correo. Cree el archivo mail.properties dentro de la misma carpeta donde está server.jar. Propiedades de correo:

    mail.smtp.auth=true
    mail.smtp.starttls.enable=true
    mail.smtp.host=smtp.gmail.com
    mail.smtp.port=587
    mail.smtp.username=YOUR_EMAIL_HERE
    mail.smtp.password=YOUR_EMAIL_PASS_HERE

Generar certificados SSL propios

Este paso es opcional si quieres conexiones ssl para ello generaremos un certificado autofirmado y su clave.

openssl req -x509 -nodes -days 1825 -newkey rsa: 2048 -keyout server.key -out server.crt

Convierta server.key al archivo de clave privada PKCS # 8 en formato PEM

openssl pkcs8 -topk8 -inform PEM -outform PEM -in server.key -out server.pem

Los ficheros generados ubicarlos en la misma carpeta (BlynkServer) donde tenemos nuestro server.jar. En el caso de usar Windows como sistema operativo deberan descargar e instalar openssl. Recomiendo este link. Tambien deberan agregarlo a las variables de entorno de Windows para poder llamarlo desde el CMD.

Sustituir C:\OpenSSL\bin por el camino que les cree su instalación.

Nota: El camino siempre deberá apuntar a la carpeta bin

Configuración avanzada del servidor local

Para obtener más flexibilidad, puede ampliar el servidor con más opciones creando el archivo server.properties en la misma carpeta que server.jar. Opciones del server disponibles:

Aplicación Blynk, https, tomas web, puerto de administración

      https.port=9443

Http, hardware y puerto de sockets web

      http.port=8080

Por simplicidad, Blynk ya proporciona el jar del servidor con certificados SSL
integrados, por lo que tiene un servidor que funciona de inmediato a través de 
sockets SSL/TLS. Pero como el certificado y su clave privada son públicos, 
esto no es totalmente seguro. Entonces, para solucionarlo, debe proporcionar 
sus propios certificados. Y cambie las propiedades a continuación con la ruta
a su certificado. y clave privada y su contraseña. 

      # puntos para cert y clave que se colocaron en la misma carpeta que ejecutando jar.
      
      server.ssl.cert=./server_embedded.crt
      server.ssl.key=./server_embedded.pem
      server.ssl.key.pass=password(si pusieron alguna al certificado)

Carpeta de perfiles de usuario. Carpeta en la que se almacenarán todos los perfiles
de los usuarios. Por defecto se utiliza System.getProperty ("java.io.tmpdir")/blynk. 
Se creará si no existe

      data.folder=/tmp/blynk 
      data.folder=/Path (usa el camino dado en el comando java)

Carpeta para todos los registros de aplicaciones. Se creará si no existe. "." es el directorio
desde el que está ejecutando el script.

      logs.folder=./logs

Nivel de depuración de registro. Valores posibles: rastreo|depuración|información|error. 
Define cuán preciso será el registro. De izquierda a derecha -> registro máximo al mínimo

      log.level=trace

Número máximo permitido de paneles de usuario.

      user.dashboard.max.limit=100

Límite de velocidad de 100 Req/seg por usuario. También es posible que desee ampliar este 
límite en el lado del hardware.

      user.message.quota.limit=100

Esta configuración define con qué frecuencia puede enviar correo/tweet/push o cualquier otra 
notificación. Especificado en segundos

      notifications.frequency.user.quota.limit=60

Tamaño máximo de perfil de usuario permitido. En Kb's.

      user.profile.max.size=128

Número de cadenas para almacenar en el widget de terminal (datos de historial de terminal)

      terminal.strings.pool.size=25

Número máximo permitido de cola de notificaciones. Cola responsable del procesamiento
del correo electrónico, envío, envío de twits. Debido a un problema de rendimiento: 
esas colas se procesan en subprocesos separados, esto es necesario debido a la naturaleza
de bloqueo de todas las operaciones anteriores. Por lo general, no se debe alcanzar el límite

      notificaciones.queue.limit=5000

Número de hilos para realizar operaciones de bloqueo: push, twits, correos electrónicos, 
consultas db. Se recomienda mantener este valor bajo a menos que tenga que realizar muchas
operaciones de bloqueo.

      block.processor.thread.pool.limit=6

Período para vaciar todas las bases de datos de usuario en el disco. En millis

      profile.save.worker.period=60000

Especifica el período máximo de tiempo cuando el socket de hardware podría estar inactivo. 
Después de lo cual el socket se cerrará debido a la falta de actividad. En segundos. 
Déjalo vacío para el tiempo de espera infinito

      hard.socket.idle.timeout=15

Se requiere principalmente para la configuración de servidores locales en caso de que el 
usuario desee registrar datos sin formato en formato CSV. Consulte la sección[datos brutos]
# almacenamiento de datos brutos) para obtener más información.

      enable.raw.data.store=true

Url para abrir la página de administración. Debe comenzar desde "/". 
Para la ruta de URL "/admin" se verá así "https://127.0.0.1:9443/admin".

      admin.rootPath=/admin

Lista separada por comas de IP de administrador. Permita el acceso a la interfaz
de usuario de administrador solo para esas IP. Puede configurarlo para 0.0.0.0/0 para 
permitir el acceso de todos. Puede usar la notación CIDR. Por ejemplo, 192.168.0.53/24.

      allowed.administrator.ips=0.0.0.0 / 0

Nombre de administrador y contraseña predeterminados. Se creará al inicio del servidor inicial

      [email protected]
      admin.pass=admin

Host para restablecer la redirección de contraseña y la generación de certificados. 
Por defecto, el IP actual del servidor se toma de la interfaz de red "eth". 
Podría ser reemplazado por un nombre de host más amigable. Se recomienda anular 
esta propiedad con la IP de su servidor para evitar posibles problemas de resolución del host.

      server.host=blynk-cloud.com

El correo electrónico utilizado para el registro del certificado 
podría omitirse en caso de que ya lo haya especificado en mail.properties.

      [email protected]

Les dejo el link de un fichero server.properties de ejemplo y el fichero mío como quedo.

initial.energy=1000000
allow.reading.widget.without.active.app=false
user.message.quota.limit=100
logs.folder=./logs
user.dashboard.max.limit=100
lcd.strings.pool.size=6
server.ssl.key=./server_embedded.key
webhooks.response.size.limit=96
hardware.mqtt.port=8440
table.rows.pool.size=100
terminal.strings.pool.size=25
[email protected]
admin.rootPath=/admin
user.widget.max.size.limit=20
listen.address=
blocking.processor.thread.pool.limit=6
stats.print.worker.period=60000
enable.db=false
force.port.80.for.csv=false
enable.raw.db.data.store=false
restore.host=blynk-cloud.com
csv.export.data.points.max=43200
restore=false
user.profile.max.size=256
allow.store.ip=true
allowed.administrator.ips=0.0.0.0/0,::/0
net.interface=eth
webhooks.frequency.user.quota.limit=1000
http.port=8080
web.request.max.size=524288
user.devices.limit=50
async.logger.ring.buffer.size=2048
user.tags.limit=100
server.ssl.key.pass=
admin.pass=admin
hard.socket.idle.timeout=10
product.name=Blynk
data.folder=/Path
map.strings.pool.size=25
profile.save.worker.period=60000
https.port=9443
log.level=info
server.ssl.cert=./server_embedded.crt
force.port.80.for.redirect=true
notifications.queue.limit=2000
notifications.frequency.user.quota.limit=5
server.host=192.168.137.1
app.ssl.port=8443
hardware.default.port=8442
hardware.ssl.port=8441
hardware.mqtt.port=8440

Ahora vamos a correr nuestro server ya que tenemos todas las configuraciones creadas. Les mostrare varias formas de correrlo.

Ejecute el servidor en el 'puerto de hardware 8080' predeterminado y el 'puerto de aplicación 9443' 
predeterminado (puerto SSL)

  java -jar server-0.41.12.jar -dataFolder /path

Ejecutando el server con java 8 y la configuración del mismo en otra ruta

java -jar server-0.41.12-java8.jar -dataFolder /home/Blynk -serverConfig /home/someFolder/server.properties

En nuestro caso como tenemos todas las configuraciones y el server.jar en una misma carpeta correremos el server desde ahi.

Como resultado, debería ver algo así:

Habilitar el inico automático del servidor en Windows

Crear un fichero bat con el nombre que querramos y agregar el siguiente comando:

Crear el fichero runblynk.bat o start-blynk.bat o como desee y 
dentro agregar lo siguiente:

java -jar server-0.41.12.jar -dataFolder /Path

Copiar el archivo bat a la carpeta de inicio de Windows para que asi se incie con el arranque del mismo. Si desean un scripts más complejo y completo les dejo este.

Accediendo a la WEB UI de administración

Abrir su navegador y escribir la dirección y el puerto de su servidor Blynk

https://your_ip:9443/admin
o también
https://localhost:9443/admin

Por defecto el usuario es [email protected] y la clave es admin

Configurando nuestra aplicación Blynk en el teléfono

Abrir nuestra aplicación Blynk en el teléfono y configurar la ubicación del servidor.

En la opción de configurar el server elegir CUSTOM y agregar la IP de nuestro servidor. Una vez configurada la IP ya podemos logearnos usando el correo y la clave que definimos en mail.properties

No es objetivo de este tutorial mostrarles el uso de blynk lo dejare para un próximo tutorial donde les mostrare un ejemplo sencillo.

Ventaja de usar el servidor localmente

Las ventajas son:

  • No necesitaremos de una conexión activa a internet.
  • No tendremos que pagar por los widget que usemos cuando agotemos la energía inicial.

Esta última es muy importante y les mostrare como lograrlo. Blynk usa un sistema de puntos (energía) para el uso de los widgets. Todo funciona en ️»Energy». Cuando creas una nueva cuenta, obtiene ⚡️2,000 para comenzar a experimentar. Cada widget necesita algo de energía para funcionar. Por ejemplo, Button Widget requiere ⚡️200 Energy. Abra Widget Box en la aplicación Blynk para ver los precios completos. Cuando elimina un widget, la energía siempre se devuelve por completo. Hay algunas características, como Compartir, cuando no se devuelve Energía. Siempre se le advertirá en estos casos. Conociendo esto podemos entonces ajustar la energía inicial conque contaremos para la creación de nuestros proyectos. En la web administrativa accedemos al menu users(usuarios) donde ahora veremos logueado el usuario que definimos en mail.properties. Damos click sobre él y nos aparecerá estas opciones.

Ahora podemos gastar tanta energía como queramos y recargarla siempre. Finalmente, a modo de información.

¿Cómo funciona Blynk?

Cuando el hardware se conecta a la nube de Blynk, abre una conexión ssl/tls en el puerto 443 (9443 para servidores locales) o la conexión tcp/ip en el puerto 8080. La aplicación Blynk(en el teleffono) abre la conexión ssl/tls contra Blynk Cloud en puerto 443 (9443 para servidores locales). Blynk Cloud es responsable de reenviar mensajes entre el hardware y la aplicación.

Como seria en nuestro caso local.

Para lograrlo nuestro servidor Blynk local debe de tener activo un hotspot wifi y tanto nuestro dispositivo Arduino como nuestro teléfono conectados a él. En Linux es muy simple de hacer pues en las opciones de redes de cualquier distro esta para configurarlo. En Windows podemos usar la aplicación connectify. Como extra les muestro como correrlo en Docker.

Corriendo Blynk Server en Docker

docker run -p 8080:8080 -p 9443:9443 mpherg/blynk-server

Si desea usar Docker compose. Cree el fichero docker-compose.yml con el siguiente contenido

version: '2'

services:
  portainer:
    image: mpherg/blynk-server:latest
    restart: always
    ports:
      - 8080:8080
      - 8441:8441
      - 9443:9443
    volumes:
      - ./data:/data
      #-$(PWD)/server.properties:/config/server.properties

Luego ejecute el siguiente comando:

docker-compose up -d

Espero que les sirva a muchos arduineros ya que es una opción para aquellos que no se les da bien la programación.

alex out

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.9 / 5. Recuento de votos: 14

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes EMPRESTUR Cienfuegos

8 comentarios

  1. Firefox 87.0 Firefox 87.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0

    Muy buen tutorial. Talvez me puedas ayudar, tengo problemas para realizar la conexion en local de la aplicacion. La aplicacion no encuentra el server, tampoco lo puedo ver desde otra computadora que se encuentra en la misma red.
    Lo estoy corriendo en raspbian y desde el navegador de la raspberry si puede acceder por el puerto a la interfas de administracion..Agradezco la ayuda
    saludos

    • Firefox 87.0 Firefox 87.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0

      Cuando te refieres a la aplicacion es a la apk del telf?? Solo te dire esto. Blynk server y la apk deben ser iguales mismas versiones
      Cada ves q sale una version de la apk, sale una del server. Sinousas la misma no funcionara.
      alex out

  2. Google Chrome 85.0.4183.102 Google Chrome 85.0.4183.102 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36

    Excelente artículo, muy didáctico y provechoso. Ya lo implementé con excelente resultado. Gracias.

  3. Google Chrome 84.0.4147.125 Google Chrome 84.0.4147.125 Android 9 Android 9
    Mozilla/5.0 (Linux; Android 9; VTR-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36

    Tengo la misma pregunta, si quisiera tener un sevidor propio pero que pueda acceder remotamente por Internet, podría hacerlo con blynk?

    • Firefox 79.0 Firefox 79.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

      Tendrias que hacer otras cosas. Primero necesitarias una conexion a internet con ip real, luego publicar tu server local a internet. Por lo que accederias usando la ip real de tu internet desde otro dispositivo que se conecte a internet.Pero ya eso tendrias que poseer un poco mas de conocimientos de informatica de como crearte un server web.
      alex out
      PD: les doy la forma de no usar internet y solo preguntan como seria usandola. Muy sencillo pagan la apk y usan la internet y suben sus proyectos y datos a la nube de blynk

      • Google Chrome 85.0.4183.121 Google Chrome 85.0.4183.121 Windows 10 x64 Edition Windows 10 x64 Edition
        Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36

        una forma sencilla de lograr esto es creando una ip fija con algun servicio de dns tipo no-ip, y cambiando la IP por el dominio. Así, y direccionado el puerto desde el router, pueden acceder desde afuera

  4. Firefox 68.0 Firefox 68.0 Android 8.0.0 Android 8.0.0
    Mozilla/5.0 (Android 8.0.0; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0

    Quiero felicitarte por el turorial, pero si no me equivoco este servidor no lo podría usar desde la calle con mi móvil y tampoco podría crear aplicaciones finales instalables en Android. Corrígeme si estoy equivocado. Un saludo.

    • Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

      Como bien aclare en el articulo, la ventaja es precisamente tenerlo local. No se de que pais eres, pero en cuba no podemos darnos el lujo de tener internet las 24 horas del dia. Ni mucho menos pagar una app. Por lo que esto es una solucion viable para una domotica casera.En cuanto a cear app instalable en android no entendi esa parte. Blynk es ya la app instalable y trae todo lo necesario para monitoreo y control de tu proyecto. Como ya dije de esta forma es gratis y no necesitas conexion a internet, solo conectarte al servidor de blynk local que tengas.
      alex out

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*