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