HowTo: Node Red / Magic Mirror - Afficher les données de Node Red sur le miroir

Pendant longtemps, j'ai cherché un moyen d'afficher facilement les données que je collecte de mon SmartHome avec NodeRed sur le MagicMirror.
Grâce aux nombreux plugins pour MagicMirror et NodeRed, cela a été implémenté plus rapidement que prévu. Son fonctionnement est décrit dans l'article suivant.


Consignes de sécurité

Je sais que les notes suivantes sont toujours un peu ennuyeuses et semblent inutiles. Malheureusement, de nombreuses personnes qui savaient "mieux" ont perdu des yeux, des doigts ou d'autres choses à cause d'une négligence ou se sont blessées. La perte de données est presque négligeable en comparaison, mais même celles-ci peuvent être vraiment ennuyeuses. Par conséquent, veuillez prendre cinq minutes pour lire les consignes de sécurité. Parce que même le projet le plus cool ne vaut pas une blessure ou d'autres problèmes.
https://www.nerdiy.de/sicherheitshinweise/

Liens d'affiliation/publicitaires

Les liens vers des boutiques en ligne répertoriés ici sont des liens dits d'affiliation. Si vous cliquez sur un tel lien d'affiliation et effectuez un achat via ce lien, Nerdiy.de recevra une commission de la boutique en ligne ou du fournisseur concerné. Le prix ne change pas pour vous. Si vous effectuez vos achats via ces liens, vous aidez Nerdiy.de à pouvoir proposer d'autres projets utiles à l'avenir. 🙂 


Conditions préalables

Articles utiles :
Avant de commencer l'installation, vous devez avoir préparé le RaspberryPi pour qu'il soit accessible via le réseau et contrôlé via SSH.

Les trois articles suivants décrivent ce qu'il faut faire pour préparer le RaspberryPi :
RaspberryPi - configuration pour les nerdiys !
RaspberryPi – La première configuration !
RaspberryPi - Contrôlez le RaspberryPi via SSH

MagicMirror - Installation du logiciel requis
MagicMirror - Installer des modules tiers

Matériel requis :

Dans la liste suivante, vous trouverez toutes les pièces dont vous avez besoin pour mettre en œuvre cet article.


Connectez-vous à l'interface de configuration de NodeRed

Avant de pouvoir modifier votre configuration NodeRed, vous devez - si activé - vous connecter d'abord à l'interface de configuration NodeRed.

Vue de la boîte de dialogue de connexion. Ici, vous devez entrer les données de connexion que vous avez spécifiées lors de la configuration de la connexion. Vous trouverez des informations à ce sujet dans l'article NodeRed - configurer la connexion de l'utilisateur.

Créer la source de données dans NodeRed en tant que JSON

Dans cet exemple, les données du RaspberryPI sur lequel NodeRed s'exécute sont affichées sur le MagicMirror.
NodeRed rend ces données disponibles au format JSON, que le MagicMirror collecte à intervalles réguliers et affiche sur son écran. Vous n'avez pas besoin d'installer de nouveaux nœuds pour cela, car la source de données est assemblée à partir des nœuds standard.

Pour ce faire, vous devez configurer le flux suivant.

Il est plus facile d'insérer le code de nœud suivant :

[{"id": "cc7a1b10.a7c038", "type": "http in", "z": "8c9f8f17.13eb78", "name": ", " url "/daten.json " method":"get","upload":false,"swaggerDoc":"","x":320,"y":460,"wires":[["61e489ce.08eb68"]]},{"id ":"89f4552e.8cc4f8","type":"réponse http","z":"8c9f8f17.13eb78","name":"","x":1040,"y":460,"wires": []},{"id": ced95c01.75153, "type": change, "z": "8c9f8f17.13eb78", "name": "Définir les en-têtes", "rules": [{"t ": "set", "p": en-têtes, "pt": "msg", "to": {}, "tot": "json"}, {"t": "set", p": "headers.content-type", "pt": "msg", "to": "application/json", "tot": "str"}], "action": ", "propriété": "","from":"","to":"","reg":false,"x":880,"y":460,"wires":[["89f4552e.8cc4f8"]]}, {"id": "a5b108a6.e68c88", "type": "template", "z": "8c9f8f17.13eb78", "name": "page", "field": "charge utile", "fieldType": msg","format":"guidons","syntax":"moustache","template":"{ "Données": [ { "name": "RPi Temp", "value": "{{temp}} °C", "lastUpdate": "{{temp-timestamp}}" }, { "name": "CPU Load", "value": "{{load}}%", "lastUpdate": "{{load -timestamp}}" }, { "name": "Mémoire libre", "value": "{{free}}Mo", "lastUpdate": "{{free-timestamp}}" } ] }","output ":"str","x":720,"y":460,"wires":[["ced95c01.75153"]]},{"id":"c088c2a8.b53bc","type":"commentaire ","z":"8c9f8f17.13eb78","name":"Flux Json pour alimenter le MagicMirror","info":"","x":240,"y":80,"wires":[] },{"id": "61e489ce.08eb68", "type": "change", "z": "8c9f8f17.13eb78", "name": "Heure de copie", "rules": [{" t": "set", "p": "temp", "pt": "msg", "to": "temp", "tot": "flow"}, {"t": "set", "p": "temp-timestamp", "pt": "msg", "to": "temp-timestamp", "tot": "flow"}, {"t": "set", "p": "load", "pt": "msg", "to": "load", "tot": "flow"}, {"t": "set", "p": "load-timestamp", "pt": "msg ","to":"load-timestamp", "tot": "flow"}, {"t": "set", "p": "free", "pt": "msg", "to": "free", "tot": "flow"}, {"t": "set", "p": "free-timestamp", "pt": "msg", "to": "free-timestamp", "tot": "flux"}], "action": ", "property": ", " from ", " à ", " " reg " : faux, " x " : 560, "y":460,"wires":[["a5b108a6.e68c88"]]},{"id":"b64f17d1.b71778","type":"comment","z":"8c9f8f17.13eb78", "name": "Les données entrantes sont temporairement stockées ici pour un envoi ultérieur." .b713a","type":"comment","z":"8c9f8f17.13eb78","name":"Ici, les données enregistrées sont livrées au format Json","info":"","x":410, "y":420,"wires":[]},{"id":"877b026b.7bbd9","type":"exec","z":"8c9f8f17.13eb78","command":"vcgencmd mesure_temp ","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":510,"y":220 ,"wires":[["c71030c9.e8723"],[],[]]},{"id":"e2c23c0f.e6896","type":"inject","z":"8c9f8f17.13eb78" ,"name":"","topic":"","payload":"","payloadType":"date","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. sous-chaîne(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)"|tail -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","oldrc":false,"name":"CPU Charge","x":510,"y":280,"wires":[["966babc4.47d538"],[],[]]},{"id":"f6021bf6.b47108","type" :"exec", "z": "8c9f8f17.13eb78", "command": "gratuit | grep meme | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name": "Mémoire libre","x":510,"y":340,"wires":[["350be0e6.dc723"],[],[]]},{"id":"ff73e7b0.560078"," type": "change", "z": "8c9f8f17.13eb78", "name": "Heure de stockage", "rules": [{"t": "set", "p": "temp", "pt " : " flow "," to                                                                 » "to": "horodatage", "tot": "msg"}], "action": ", "property": ", " from ", " à ", " " reg " : false,"x":1170,"y":220,"wires":[[]]},{"id":ec6a82fb.238ff","type":"change","z":"8c9f8f17. 13eb78","name":"Heure de stockage","rules":[{"t":"set","p":"load","pt":"flow","to":"payload", "tot": "msg"},{"t": "set", "p": "load-timestamp", "pt": "flow", "to": "timestamp", "tot": "msg" "}],"action":"","property":"","from":"","to":"","reg":false,"x":1170,"y":280, "wires":[[]]},{"id":"bd9b96f7.e4c268","type":"change","z":"8c9f8f17.13eb78","name":"Heure de stockage","rules ":[{"t": "set", "p": "gratuit", "pt": "flow", "to": "payload", "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 maintenant = new Date(); var Hours=maintenant.getHours(); var Minutes=maintenant.getMinutes(); var Secondes=maintenant.getSeconds(); si (secondes <10) secondes = "0" + secondes ; si (Minutes<10) Minutes="0"+Minutes ; si (Heures<10) Heures="0"+Heures ; msg.timestamp=Heures+":"+Minutes+":"+Secondes ; 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 maintenant = new Date(); var Hours=maintenant.getHours(); var Minutes=maintenant.getMinutes(); var Secondes=maintenant.getSeconds(); si (secondes <10) secondes = "0" + secondes ; si (Minutes<10) Minutes="0"+Minutes ; si (Heures<10) Heures="0"+Heures ; msg.timestamp=Heures+":"+Minutes+":"+Secondes ; 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 maintenant = new Date(); var Hours=maintenant.getHours(); var Minutes=maintenant.getMinutes(); var Secondes=maintenant.getSeconds(); si (secondes <10) secondes = "0" + secondes ; si (Minutes<10) Minutes="0"+Minutes ; si (Heures<10) Heures="0"+Heures ; msg.timestamp=Heures+":"+Minutes+":"+Secondes ; 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"]]}]

Vous verrez maintenant l’adresse (mais faites attention si vous devez la préfixer avec « https:// » ou « http:// ».

https://IP_EURER_NODE_RED_INSTALLATION:1880/daten.json

un JSON avec les données que vous avez saisies s'affiche. Cela peut maintenant à son tour être affiché dessus par un plugin MagicMirror.

Données JSON telles qu'elles sont affichées dans le navigateur Firefox. C'est bon pour le débogage car cela montre également des erreurs dans la structure JSON.

Installation du module

Afin que vous puissiez afficher les données qui vous sont fournies par NodeRed au format JSON sur le MagicMirror, vous devez alors installer le module « MMM-JsonTable ». Vous pouvez le trouver sous https://github.com/timdows/MMM-JsonTable.

Installez-le sur votre RaspberryPi. L'installation de vos modules est décrite dans l'article suivant :
MagicMirror - Installer des modules tiers


Paramétrage du module

La configuration du module reste simple, puisque la structure des données affichées est spécifiée par le JSON.

sudo nano ~/MagicMirror/config/config.js
Ouvrez donc le fichier de configuration de votre MagicMirror et insérez la configuration du module.
{ module : 'MMM-JsonTable', position : 'top_right', header : 'Raspi-Status', config : { url : 'https://IP_EURER_NODE_RED_INSTALLATION:1880/daten.json', // Requis arrayName : 'Data' , // tryFormatDate facultatif : faux } }
Bien entendu, remplacez d'abord « IP_EURER_NODE_RED_INSTALLATION » par l'adresse IP du RaspberryPi# sur lequel fonctionne votre MagicMirror.

Modification du module pour les certificats SSL auto-signés

Malheureusement, il y a un problème avec le plugin MagicMirror (actuel : novembre 2018). Cela n'autorise pas les connexions HTTPS si le certificat SSL en question est auto-signé.
Autrement dit, si vous mettez à jour votre installation NodeRed comme dans le post NodeRed – Crypter la connexion sécurisé avec un certificat SSL auto-signé, le plugin MagicMirror ne pourra pas charger ou afficher les données du JSON.

Pour résoudre ce problème, il existe une petite solution de contournement qui désactive cette fonctionnalité de sécurité. Cela signifie que le plug-in MagicMirror peut également accepter les certificats SSL auto-signés et afficher les données de votre JSON.

Pour ce faire, basculez vers le dossier module du module MagicMirror que vous venez d'installer.

cd MagicMirror/modules/MMM-JsonTable/

Là, vous ouvrez le fichier « node_helper.js » avec la commande suivante :

sudo nano node_helper.js

Dans le fichier ouvert, vous devez trouver la ligne avec le contenu suivant :

request({ url: url, method: 'GET'}, function (error, response, body) {
Dans le fichier encore non corrigé, vous devez trouver la ligne avec « request({ url: url, method: 'GET'}, function (error, response, body) { ».

Dans cette ligne, vous devez maintenant insérer la commande « rejectUnauthorized : false » après le « … méthode : 'GET' ».
La ligne devrait donc ressembler à ceci :

 request({ url: url, method: 'GET', rejetUnauthorized: false}, function (error, response, body){
La ligne corrigée ressemble donc à ceci.
Enregistrez ensuite à nouveau le fichier en appuyant sur « CTRL+X » puis en confirmant par « Y »…
...et quittez le fichier avec « Entrée ».

Enfin, vous devez redémarrer votre installation MagicMirror en saisissant la commande suivante :

pm2 redémarrage mm

Après avoir redémarré et rechargé la vue MagicMirror, les données du JSON seront affichées. 🙂


Plus d'informations

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


Amusez-vous avec le projet

J'espère que tout a fonctionné comme décrit. Si ce n'est pas le cas ou si vous avez des questions ou des suggestions, faites-le moi savoir dans les commentaires. Je les ajouterai à l'article si nécessaire.
Les idées de nouveaux projets sont toujours les bienvenues. 🙂

PS Beaucoup de ces projets - en particulier les projets matériels - coûtent beaucoup de temps et d'argent. Bien sûr, je le fais parce que j'aime ça, mais si vous pensez que c'est cool que je partage l'information avec vous, je serais heureux d'un petit don au fonds du café. 🙂

Achetez-moi un café sur ko-fi.com       

9 commentaires

  1. Salut, super site ! Je débute avec RedNote et je suis tombé sur votre site. Haut!
    J'utilise Magicmirror depuis un certain temps et ma question est la suivante : puis-je également afficher d'autres données JSON ?

    Salutations Stefan

    1. Salut Stefan, merci, je suis content. 🙂
      Bien entendu, vous pouvez également modifier les données affichées. Fondamentalement, il vous suffit de modifier les données transmises aux nœuds « cutString » ou « deleteWhitespace ».
      Cordialement
      Fabien

  2. Super merci. Je vais essayer ça alors...
    Mais j'ai toujours du mal avec le Weatherground. Ne l'affichez pas correctement.

    Salutations Stefan

      1. Salut, désolé je voulais dire votre openweathermap.org… 😉
        Je ne comprends pas en quelque sorte les uns sous les autres et tout ne s'affiche pas.
        Mais ça ira, je vais devoir bidouiller un peu.

        Avez-vous réellement un forum ici ou quelque chose où nous pouvons échanger des idées ?

        1. Hé,
          aucun problème. 🙂 Qu'est-ce que vous n'obtenez pas entre vous ? La vue du tableau de bord ?
          Oui, j'ai créé un forum. Mais cela doit être un peu élargi. Je m'en occupe demain. 🙂
          Cordialement
          Fab

        2. Salut Stefan,
          J'ai maintenant rendu le forum un peu plus « joli ». Vous pouvez trouver le lien vers celui-ci dans la barre de navigation supérieure. 🙂

  3. Merci pour le tutoriel !
    J'ai eu le bug que le module affichait uniquement « En attente de données json… » au début.
    Un redémarrage a corrigé cela.

Kommentar hinterlassen

Votre adresse e-mail ne sera pas publiée. Erforderliche Felder sind mit * markiert

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.