HowTo: Node Red / Magic Mirror: muestra datos de Node Red en el espejo

Durante mucho tiempo estuve buscando una manera de mostrar convenientemente los datos que recopilo de mi SmartHome con NodeRed en el MagicMirror.
Gracias a los muchos complementos para MagicMirror y NodeRed, esto se implementó más rápido de lo esperado. Cómo funciona se describe en el siguiente artículo.


Instrucciones de seguridad

Sé que las siguientes notas siempre son un poco molestas y parecen innecesarias. Desafortunadamente, muchas personas que sabían "mejor" han perdido ojos, dedos u otras cosas debido a un descuido o se lesionaron. La pérdida de datos es casi insignificante en comparación, pero incluso estos pueden ser realmente molestos. Por lo tanto, tómese cinco minutos para leer las instrucciones de seguridad. Porque incluso el proyecto más genial no vale la pena lesionarse u otros problemas.
https://www.nerdiy.de/sicherheitshinweise/

Enlaces afiliados / enlaces publicitarios

Los enlaces a las tiendas en línea enumerados aquí son los llamados enlaces de afiliados. Si hace clic en dicho enlace de afiliado y realiza una compra a través de este enlace, Nerdiy.de recibirá una comisión de la tienda en línea o el proveedor correspondiente. El precio no cambia para usted. Si realiza sus compras a través de estos enlaces, ayuda a Nerdiy.de a poder ofrecer otros proyectos útiles en el futuro. 🙂 


Requisitos

Artículos útiles:
Antes de comenzar la instalación, debe haber preparado la RaspberryPi para que se pueda acceder a ella a través de la red y controlarla a través de SSH.

Los siguientes tres artículos describen lo que se debe hacer para preparar la RaspberryPi:
RaspberryPi: ¡configuración para nerdiys!
RaspberryPi – ¡La primera configuración!
RaspberryPi: controle el RaspberryPi a través de SSH

MagicMirror - Instalación del software necesario
MagicMirror - Instalar módulos de terceros

Material requerido:

En la siguiente lista encontrará todas las piezas que necesita para implementar este artículo.


Inicie sesión en la interfaz de configuración de NodeRed

Antes de que pueda editar su configuración de NodeRed, debe, si está activado, primero iniciar sesión en la interfaz de configuración de NodeRed.

Vista del cuadro de diálogo de inicio de sesión. Aquí debe ingresar los datos de inicio de sesión que especificó durante la configuración del inicio de sesión. Puedes encontrar información al respecto en el artículo NodeRed: configurar el inicio de sesión del usuario.

Crea la fuente de datos en NodeRed como JSON

En este ejemplo, los datos de la RaspberryPI en la que se ejecuta NodeRed se muestran en el MagicMirror.
NodeRed hace que estos datos estén disponibles como JSON, que MagicMirror recopila a intervalos regulares y muestra en su pantalla. No necesita instalar ningún nodo nuevo para esto, ya que la fuente de datos se ensambla a partir de los nodos estándar.

Para ello, debe configurar el siguiente flujo.

Es más fácil insertar el siguiente código de nodo:

[{"id":"cc7a1b10.a7c038","type":"http in","z":"8c9f8f17.13eb78","name":"","url":"/daten.json"," método":"get","upload":false,"swaggerDoc":"","x":320,"y":460,"wires":[["61e489ce.08eb68"]]},{"id ":"89f4552e.8cc4f8","type":"respuesta http","z":"8c9f8f17.13eb78","name":"","x":1040,"y":460,"wires": []},{"id":"ced95c01.75153","type":"change","z":"8c9f8f17.13eb78","name":"Establecer encabezados","rules":[{"t ":"set","p":"headers","pt":"msg","to":"{}","tot":"json"},{"t":"set"," p":"headers.content-type","pt":"msg","to":"application/json","tot":"str"}],"action":"","property": "","from":"","to":"","reg":false,"x":880,"y":460,"wires":[["89f4552e.8cc4f8"]]}, {"id":"a5b108a6.e68c88","type":"template","z":"8c9f8f17.13eb78","name":"page","field":"carga útil","fieldType":" msg","format":"handlebars","syntax":"bigote","template":"{ "Datos": [ { "nombre": "RPi Temp", "valor": "{{temp}} °C", "lastUpdate": "{{temp-timestamp}}" }, { "name": "CPU Load", "value": "{{load}}%", "lastUpdate": "{{load -timestamp}}" }, { "name": "Memoria libre", "value": "{{free}}MB", "lastUpdate": "{{free-timestamp}}" } ] }","salida ":"str","x":720,"y":460,"wires":[["ced95c01.75153"]]},{"id":"c088c2a8.b53bc","type":"comentario ","z":"8c9f8f17.13eb78","name":"Feed Json para alimentar el MagicMirror","info":"","x":240,"y":80,"wires":[] },{"id":"61e489ce.08eb68","type":"change","z":"8c9f8f17.13eb78","name":"Tiempo de copia","rules":[{"t": "set","p":"temp","pt":"msg","to":"temp","tot":"flujo"},{"t":"set","p": "temp-timestamp","pt":"msg","to":"temp-timestamp","tot":"flujo"},{"t":"set","p":"cargar", "pt":"msg","to":"load","tot":"flow"},{"t":"set","p":"load-timestamp","pt":"msg ","to":"load-timestamp","tot":"flujo"},{"t":"set","p":"free","pt":"msg","to": "free","tot":"flow"},{"t":"set","p":"free-timestamp","pt":"msg","to":"free-timestamp", "tot":"flujo"}],"acción":"","propiedad":"","desde":"","hasta":"","reg":false,"x":560, "y":460,"wires":[["a5b108a6.e68c88"]]},{"id":"b64f17d1.b71778","type":"comment","z":"8c9f8f17.13eb78", "name":"Los datos entrantes se almacenan temporalmente aquí para su posterior envío","info":"","x":480,"y":140,"wires":[]},{"id":"9eede084 .b713a","type":"comment","z":"8c9f8f17.13eb78","name":"Aquí los datos guardados se entregan como Json","info":"","x":410, "y":420,"wires":[]},{"id":"877b026b.7bbd9","type":"exec","z":"8c9f8f17.13eb78","command":"vcgencmd Measure_temp ","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":510,"y":220 ,"wires":[["c71030c9.e8723"],[],[]]},{"id":"e2c23c0f.e6896","type":"inject","z":"8c9f8f17.13eb78" ,"nombre":"","topic":"","payload":"","payloadType":"fecha","repeat":"10","crontab":"","once":false ,"onceDelay":"","x":310,"y":220,"wires":[["877b026b.7bbd9","bd2a3aa8.b05be8","f6021bf6.b47108"]]},{"id ":"c71030c9.e8723","type":"function","z":"8c9f8f17.13eb78","name":"cutString","func":"str = msg.payload msg.payload = str. subcadena(5,9); return msg;","outputs":1,"noerr":0,"x":700,"y":220,"wires":[["38abd283.af271e"]]},{"id":" bd2a3aa8.b05be8","type":"exec","z":"8c9f8f17.13eb78","command":"top -d 1 -b -n2 | grep "Cpu(s)"|cola -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","oldrc":false,"name":"CPU Carga","x":510,"y":280,"wires":[["966babc4.47d538"],[],[]]},{"id":"f6021bf6.b47108","type" :"exec","z":"8c9f8f17.13eb78","command":"gratis | meme grep | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name": "Memoria libre","x":510,"y":340,"wires":[["350be0e6.dc723"],[],[]]},{"id":"ff73e7b0.560078"," type":"change","z":"8c9f8f17.13eb78","name":"Tiempo de almacenamiento","rules":[{"t":"set","p":"temp","pt ":"flujo","to":"carga útil","tot":"msg"},{"t":"set","p":"temp-timestamp","pt":"flujo", "to":"marca de tiempo","tot":"msg"}],"action":"","property":"","from":"","to":"","reg": false,"x":1170,"y":220,"wires":[[]]},{"id":"ec6a82fb.238ff","type":"change","z":"8c9f8f17. 13eb78","name":"Tiempo de almacenamiento","rules":[{"t":"set","p":"load","pt":"flow","to":"payload", "tot":"msg"},{"t":"set","p":"load-timestamp","pt":"flujo","to":"timestamp","tot":"msg "}],"acción":"","propiedad":"","desde":"","hasta":"","reg":false,"x":1170,"y":280, "wires":[[]]},{"id":"bd9b96f7.e4c268","type":"change","z":"8c9f8f17.13eb78","name":"Store time","reglas ":[{"t":"set","p":"gratis","pt":"flujo","to":"carga útil","tot":"msg"},{"t": "set","p":"free-timestamp","pt":"flow","to":"timestamp","tot":"msg"}],"action":"","property" :"","from":"","to":"","reg":false,"x":1170,"y":340,"wires":[[]]},{"id" :"38abd283.af271e","type":"function","z":"8c9f8f17.13eb78","name":"addTimestamp","func":"msg.payload = msg.payload; var ahora = nueva fecha(); var Horas=now.getHours(); var Minutos=now.getMinutes(); var Segundos=now.getSeconds(); if (Segundos<10) Segundos="0"+Segundos; if (Minutos<10) Minutos="0"+Minutos; if (Horas<10) Horas="0"+Horas; msg.timestamp=Horas+":"+Minutos+":"+Segundos; return msg;","outputs":1,"noerr":0,"x":960,"y":220,"wires":[["ff73e7b0.560078"]]},{"id":" 9a625c6e.b43da","type":"function","z":"8c9f8f17.13eb78","name":"addTimestamp","func":"msg.payload = msg.payload; var ahora = nueva fecha(); var Horas=now.getHours(); var Minutos=now.getMinutes(); var Segundos=now.getSeconds(); if (Segundos<10) Segundos="0"+Segundos; if (Minutos<10) Minutos="0"+Minutos; if (Horas<10) Horas="0"+Horas; msg.timestamp=Horas+":"+Minutos+":"+Segundos; return msg;","outputs":1,"noerr":0,"x":960,"y":280,"wires":[["ec6a82fb.238ff"]]},{"id":" a85eaa63.cad4a8","type":"function","z":"8c9f8f17.13eb78","name":"addTimestamp","func":"msg.payload = msg.payload; var ahora = nueva fecha(); var Horas=now.getHours(); var Minutos=now.getMinutes(); var Segundos=now.getSeconds(); if (Segundos<10) Segundos="0"+Segundos; if (Minutos<10) Minutos="0"+Minutos; if (Horas<10) Horas="0"+Horas; msg.timestamp=Horas+":"+Minutos+":"+Segundos; return msg;","outputs":1,"noerr":0,"x":960,"y":340,"wires":[["bd9b96f7.e4c268"]]},{"id":" 350be0e6.dc723","type":"function","z":"8c9f8f17.13eb78","name":"deleteWhitespace","func":"str = msg.payload msg.payload = str.trim() ; return msg;","outputs":1,"noerr":0,"x":730,"y":340,"wires":[["a85eaa63.cad4a8"]]},{"id":" 966babc4.47d538","type":"function","z":"8c9f8f17.13eb78","name":"deleteWhitespace","func":"str = msg.payload msg.payload = str.trim() ; return msg;","outputs":1,"noerr":0,"x":730,"y":280,"wires":[["9a625c6e.b43da"]]}]

Ahora verás la dirección (pero presta atención a si tienes que anteponerle “https://” o “http://”.

https://IP_EURER_NODE_RED_INSTALLATION:1880/daten.json

se muestra un JSON con los datos que ingresaste. Esto ahora, a su vez, puede mostrarse en este mediante un complemento MagicMirror.

Datos JSON como se muestran en el navegador Firefox. Esto es bueno para la depuración porque también muestra errores en la estructura JSON.

Instalación del módulo

Para que pueda mostrar los datos proporcionados por NodeRed como JSON en MagicMirror, debe instalar el módulo “MMM-JsonTable”. Puedes encontrarlo debajo https://github.com/timdows/MMM-JsonTable.

Instale esto en su RaspberryPi. Cómo instalar sus módulos se describe en el siguiente artículo:
MagicMirror - Instalar módulos de terceros


Configuración del módulo

La configuración del módulo se mantiene simple, ya que la estructura de los datos mostrados está especificada por el JSON.

sudo nano ~/MagicMirror/config/config.js
Así que abra el archivo de configuración de su MagicMirror e inserte la configuración del módulo.
{ módulo: 'MMM-JsonTable', posición: 'superior_derecha', encabezado: 'Raspi-Status', configuración: { url: 'https://IP_EURER_NODE_RED_INSTALLATION:1880/daten.json', // Requerido arrayName: 'Data' , // opcional tryFormatDate: false } }
Por supuesto, primero reemplace "IP_EURER_NODE_RED_INSTALLATION" con la dirección IP de la RaspberryPi# en la que se ejecuta su MagicMirror.

Modificación del módulo para certificados SSL autofirmados

Desafortunadamente, hay un problema con el complemento MagicMirror (actual: noviembre de 2018). Esto no permite conexiones HTTPS si el certificado SSL en cuestión está autofirmado.
Es decir, si actualiza su instalación de NodeRed como en la publicación NodeRed – Cifrar conexión protegido con un certificado SSL autofirmado, el complemento MagicMirror no podrá cargar ni mostrar los datos del JSON.

Para resolver este problema, existe una pequeña solución que desactiva esta función de seguridad. Esto significa que el complemento MagicMirror también puede aceptar certificados SSL autofirmados y muestra los datos de su JSON.

Para hacer esto, cambie a la carpeta del módulo del módulo MagicMirror que acaba de instalar.

cd MagicMirror/modules/MMM-JsonTable/

Allí abres el archivo “node_helper.js” con el siguiente comando:

sudo nano node_helper.js

En el archivo abierto tienes que encontrar la línea con el siguiente contenido:

solicitud ({ url: url, método: 'GET'}, función (error, respuesta, cuerpo) {
En el archivo aún sin corregir, debe encontrar la línea con "request({url: url, método: 'GET'}, función (error, respuesta, cuerpo) {".

En esta línea ahora tienes que insertar el comando “rejectUnauthorized: false” después del “…método: 'GET'”.
Así que la línea debería verse así:

 solicitud ({url: url, método: 'GET', rechazo no autorizado: falso}, función (error, respuesta, cuerpo){
Así que la línea corregida se ve así.
Luego guarde el archivo nuevamente presionando “CTRL+X” y luego confirmando con “Y”…
...y dejar el archivo con “Enter”.

Por último, pero no menos importante, debe reiniciar la instalación de MagicMirror ingresando el siguiente comando:

pm2 reiniciar mm

Después de reiniciar y recargar la vista MagicMirror, se mostrarán los datos del JSON. 🙂


Más información

https://github.com/MichMich/MagicMirror
https://github.com/timdows/MMM-JsonTable


Diviértete con el proyecto.

Espero que todo te haya funcionado como se describe. Si no es así, o si tiene alguna pregunta o sugerencia, hágamelo saber en los comentarios. Si es necesario, lo añadiré al artículo.
Las ideas para nuevos proyectos siempre son bienvenidas. 🙂

PS Muchos de estos proyectos, especialmente los proyectos de hardware, cuestan mucho tiempo y dinero. Por supuesto que hago esto porque lo disfruto, pero si crees que es genial que comparta la información contigo, me encantaría hacer una pequeña donación al fondo del café. 🙂

Cómprame un café en ko-fi.com       

9s comentarios

  1. ¡Hola, gran sitio! Estoy empezando con RedNote y me topé con su sitio. ¡Arriba!
    He estado usando Magicmirror por un tiempo y mi pregunta es, ¿puedo mostrar también otros datos JSON?

    Saludos Stefan

    1. Hola Stefan, gracias, me alegro. 🙂
      Por supuesto, también puedes cambiar los datos que se muestran. Básicamente, sólo necesita cambiar los datos que se pasan a los nodos "cutString" o "deleteWhitespace".
      Atentamente
      Fabian

  2. Súper gracias. Probaré eso entonces...
    Pero todavía estoy luchando con Weatherground. No hagas que se muestre correctamente.

    Saludos Stefan

      1. Hola, lo siento, quise decir tu openweathermap.org… 😉
        De alguna manera no lo entiendo uno debajo del otro y no se muestra todo.
        Pero eso estará bien, tendré que jugar un poco con eso.

        ¿Realmente tienes un foro aquí o algo donde podamos intercambiar ideas?

        1. ey,
          ningún problema. 🙂 ¿Qué no se consigue entre unos y otros? ¿La vista del tablero?
          Sí, he creado un foro. Pero eso hay que ampliarlo un poco. Me encargaré de eso mañana. 🙂
          Atentamente
          Fab

  3. ¡Gracias por el tutorial!
    Tuve el error de que el módulo solo mostraba "Esperando datos json..." al principio.
    Un reinicio solucionó eso.

Kommentar hinterlassen

Tu dirección de correo electrónico no será publicada. Erforderliche Felder sind mit * markiert

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.