======== Tp ESP32 Tasmota MQTT Node red ========

[[http://chanterie37.fr/fablab37110/lib/exe/fetch.php?media=faire_preparation:presentation_iot_v03.pdf|presentation_iot_v03.pdf]]

===== Materiels utilisés =====

    * 1 ESP32 avec son cordon 
    * 1 PC Fixe ou portable
    * 1 Led 
    * 1 Bredboard
    * Des cables Dupont
    * 1 Bouton poussoir ou interrupteur 
    * 1 DHT11
    * 1 serveur MQTT fonctionnel --  Serveur MQTT  de test ==> [[http://fablab37110.ddns.net:1883|fablab37110.ddns.net:1883]]

[[start:raspberry:mqtt|installer un serveur MQTT sur un RaspberryPI]]

[[start:raspberry:accesexterne|acceder à votre raspberry depuis internet ]]

[[http://chanterie37.fr/fablab37110/doku.php?id=start:rasberry:nodered&s[]=node&s[]=red#installation_node-red_sur_raspberry|installer un serveur Node-Red sur un Raspberry]]

<note> ATTENTION inserer dans le champ MQTT de tasmota et node-red : **fablab37110.ddns.net**  et ensuite dans le champ "port" mettre **1883** ne pas mettre http:<nowiki>//</nowiki> </note>
    * Plusieurs  serveurs Node Red fonctionnel 

Nouveau serveur de test NodeRed pour l année 2023-2024 :

    * [[http://fablab37110.ddns.net:1881|fablab37110.ddns.net:1881]] Pour .....
    * [[http://fablab37110.ddns.net:1884|fablab37110.ddns.net:1884]] Pour .....
    * [[http://fablab37110.ddns.net:1885|fablab37110.ddns.net:1885]] Pour .....
    * [[http://fablab37110.ddns.net:1886|fablab37110.ddns.net:1886]] Pour .....
    * [[http://fablab37110.ddns.net:1887|fablab37110.ddns.net:1887]] Pour .....
    * [[http://fablab37110.ddns.net:1888|fablab37110.ddns.net:1888]] Pour .....
    * [[http://fablab37110.ddns.net:1889|fablab37110.ddns.net:1889]] Pour .....
    * [[http://fablab37110.ddns.net:1890|fablab37110.ddns.net:1890]] Pour .....
    * [[http://fablab37110.ddns.net:1891|fablab37110.ddns.net:1891]] Pour .....
    * [[http://fablab37110.ddns.net:1892|fablab37110.ddns.net:1892]] Pour .....
  
----------------------------------------------------------------------------------------------------------------

Ancien serveurs NodeRed utilisé en 2022/2023  (faite une copie sur les nouveaux serveurs 2023/2024 et prevoir la reinstallation des noeuds supplementaires utilises... ) 
    * 
    * [[http://castellab.ddnsfree.com:1880|castellab.ddnsfree.com:1880]] Pour Gerard
    * [[http://castellab.ddnsfree.com:1881|castellab.ddnsfree.com:1881]] Pour Xavier
    * [[http://castellab.ddnsfree.com:1882|castellab.ddnsfree.com:1882]] Pour Serge
    * [[http://castellab.ddnsfree.com:1884|castellab.ddnsfree.com:1884]]<del> Pour Patrick</del>
    * [[http://castellab.ddnsfree.com:1885|castellab.ddnsfree.com:1885]] Pour Christian
    * [[http://castellab.ddnsfree.com:1886|castellab.ddnsfree.com:1886]] <del>Pour Fernand</del>
    * [[http://castellab.ddnsfree.com:1887|castellab.ddnsfree.com:1887]] Pour Fernand
    * [[http://castellab.ddnsfree.com:1888|castellab.ddnsfree.com:1888]] Pour Patrick
    * [[http://castellab.ddnsfree.com:1889|castellab.ddnsfree.com:1889]] Pour Jean-Luc
    * [[http://castellab.ddnsfree.com:1890|castellab.ddnsfree.com:1890]] Pour ......
    * [[http://castellab.ddnsfree.com:1891|castellab.ddnsfree.com:1891]] Pour ......
    * [[http://castellab.ddnsfree.com:1892|castellab.ddnsfree.com:1892]] Pour ......
    * [[http://castellab.ddnsfree.com:1893|castellab.ddnsfree.com:1893]] Pour ......
    * [[http://castellab.ddnsfree.com:1894|castellab.ddnsfree.com:1894]] Pour ......
    * [[http://castellab.ddnsfree.com:1895|castellab.ddnsfree.com:1895]] Pour ......
    * Si mot de passe demandé =>  le meme mdp que pc fablab et utilisateur = "admin" 


<note> 
Il est tres fortement recommandé d '**utiliser un serveur node-red par utilisateur et un seul** ...
</note>

<note> 
Il est tres fortement conseillé de **sauvegarder sa configuration Node-red** dans un fichier sur son PC au cas ou ....
</note>

===== Sauvegarde configuration Node-red =====

[[faire_preparation:soireeinfo:tp:sauveconfignodered|sauvegarde configuration Node-red]]

===== Supprimer un Flow dans node-red =====

[[faire_preparation:soireeinfo:tp:supflow|Supprimer un flow dans node red]]

===== Schema de raccordement =====

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-25_19-57-28.png?direct&600 |}}

====== Exercise 1 : ======
===== Etapes =====
    
-- Raccorder  l ESP32 au PC sur un port USB

-- Telecharger le binaire Tasmota avec [[https://tasmota.github.io/install/|Web Installer]] en utilisant Chrome ou Chromium
           
{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_16-04-28.png?direct&400 |}}
           
-- Configurer le wifi , Indiquer le SSID et le mot de passe de votre box

<note> Si vous etes au FABLAB et si nous n'avez  pas de connexion wifi (castellab), taper dans la console  :  
 **Backlog SSID1 Livebox-5200; Password1 Castel37110$** </note>

-- Connecter vous via le navigateur web **Chrome ou Chromium**,  à l'adresse @192.168.xxx.xxx de votre tasmota

(si vous ne connaissez pas @IP de votre tasmota :  Vous pouvez  utiliser l' [[faire_preparation:soireeinfo:tp:interfbox|interface  de votre box]] ou  le logiciel [[faire_preparation:soireeinfo:tp:nmap|nmap]])

-- Une fenetre comme ci-dessous s'ouvrira 

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_16-55-02.png?direct&400 |}}

-- Menu Configuration

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_16-56-06.png?direct&400 |}}

-- Configurer le serveur MQTT , Exemple : "fablab37110.ddns.net" le port par defaut est 1883

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-06_14-48-16.png?direct&400 |}}

-- configurer les modules : 

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_16-57-52.png?direct&400 |}}

    -- GPIO39 ==> bouton ==> index 1 ( ceci est un  exemple on peut configurer d'autres GPIO conrespondant à votre ESP32 )
    -- GPIO21 ==> relais ==> index 1 ( ceci est un  exemple on peut configurer d'autres GPIO conrespondant à votre ESP32 )

-- **Ouvrir la console de tasmota ** ( revenir au premier ecran)  est entrer les commandes "SetOption146 1" + Entrée( validation de l'envoi de la temperature de l'ESP32) et "teleperiod 5" + Entrée ( definit la periode d'envoi des informations vers MQTT ici tous les 5 s)

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-06_17-48-19.png?direct&600 |}}

--revenir au premier ecran

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-06-13.png?direct&400 |}}

-- Copier les topic de l'esp32 "**stat/tasmota_6B2128/POWER**" ( A partir de la console) pour l'etat ON/OFF du bouton ( à sauvegarder dans un fichier texte provisoire)  Le code 6B2128 depend de l'ESP32,  il est différent à chaque ESP32 , reprend une partie de l'adresse MAC de l'ESP32

-- Et copier le topic "**tele/tasmota_6B2128/SENSOR**" pour recuperer la temperature de l'ESP32  Idem le sauvegarder

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-06_17-48-19.png?direct&600 |}}

-- Vous pouvez copier d'autres topic pour les inserer dans Node red si besoin 


-- Vous connecter au serveur Node red ( Au serveur qui vous est destiné pour les tests : fablab37110.ddns.net:18XX ) 

<note>
Attention si vous vous connnecter à plusieurs sur le meme serveur Node red , vous allez vous melanger les flux et cela risque de creer des soucis , donc prenez chacun un Node red voir avec Thierry ou Gerard... (Voir le  debut du tuto pour les @IP des serveurs node-red)
</note> 

-- allez ouvrir une page web comme celle-ci :

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-08-33.png?direct&800 |}}

-- Vous inserer un noeud en le faisant glisser sur la partie centrale. le premier noeud est MQTT IN dans la colonne de gauche section "Network"

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-13-09.png?direct&400 |}}

-- Inserer le noeud "Debug" section "Common" pour visualiser les informations venant de votre ESP32 via MQTT

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-15-08.png?direct&600 |}}


-- Il vous faut parametrer le noeud MQTT IN avec l'adresse du serveur MQTT utilisé par votre Tasmota de l'ESP32  et le topic ( sujet) que vous voulez utiliser
     *serveur MQTT ==> "fablab37110.ddns.net port par defaut 1883  ( Le crayon pour changer @MQTT)
     *Topic à inserer pour le bouton "stat/tasmota_6B2128/POWER" 

Cliquer sur le bouton "Update"  et ensuite bouton  "Done" et ensuite le bouton "Deploy" pour valider ( en haut à droite )



{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-21-13.png?direct&400 |}}

Cliquez sur le petit crayon pour avoir cette fenettre et inserer uniquement l'URL de MQTT , le port etant par defaut 1883 

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-06_14-31-03.png?direct&400 |}}

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-23-44.png?direct&400 |}}

Si les ronds bleu on disparu et aucun triangle orange , c'est qu'il n'y pas  d'erreurs et si vous avez l'info " Connected " en dessous du noeud MQTT IN , indique que Node red à bien trouver le serveur MQTT

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-26-37.png?direct&400 |}}


Si vous voulez utiliser un autre topic par exemple la temperature , il faut utiliser un autre noeud MQTT IN 


Si vous appuyer 1 fois sur le bouton , vous devez voir l'information "ON" dans la fenetre "Debug"

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-32-47.png?direct&400 |}}

Si vous appuyer 1 autre  fois sur le bouton , vous devez voir l'information "OFF" dans la fenetre "Debug"

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-03-28_17-35-08.png?direct&400 |}}


==== Visualiser  la Led de lESP32  sur Node Red ==== 


    * 1-Inserer 2 nodes supplementaires : 
**node-red-dashboard** , il permet d'avoir un tableau de bord pour visualiser et piloter notre ESP32

et **node-red-contrib-ui-led** , permet d'afficher la valeur de la LED Eteinte = <color #22b14c>vert</color>, Allumée = <color #ed1c24>Rouge</color>

   * 2- Configurer le node de la Led pour l'affichage

   * 3- Configurer le node MQTT out et un node switch pour piloter la LED via Node Red
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    *1- Inserer les nodes supplementaires ( Cliquez sur le menu en haut à droite à coté de l'icone "Deploy" )

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_15-47-00.png?direct&400 |}}

    *2- Cliquez sur "**Manage Palette**" et ensuite l'onglet "**Install**" taper dans la zone de recherche "**dashboard**" et cliquez sur "**install**" à la ligne "**node-red-dashboard** "

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-05-38.png?direct&400 |}}

   *3- Faire la même chose avec le node " **node-red-contrib-ui-led** " 


   *4 - Vous devriez avoir dans la colonne de gauche un menu supplementaire avec le dashboard avec ses nodes correspondants ainsi que le node "LED"

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-11-10.png?direct&200 |}}


   *5- Inserez le node "LED" et relié le au node "MQTT in" parametré précédement 


{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-20-46.png?direct&400 |}}

   *6- On paramettre le node "LED" : Le groupe ( petit crayon) , Le Label ( Nom),  La position , La forme(Cercle ou carré), le msg.payload mode String ( ON / OFF), la couleur ( Rouge = Allumée , Blanc = Eteinte ) 

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-24-22.png?direct&400 |}} 


   *7- On paramettre le groupe ( Name)  et le nom du dashboard ( Tab) en cliquant sur le petit crayon  et ensuite on clique sur "Update" et ensuite "Done" et on n'oublie pas de faire "Deploy" ( Enregistrer)

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-24-41.png?direct&400 |}}

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-44-14.png?direct&400 |}}


   *8- En ouvrant une nouvelle fenetre pour afficher le Dashboard @iPNodered/ui ( exemple : http://192.168.1.44:1880/ui/) on affiche le tableau de bord avec la LED qui s'allume ou s'eteint suivant l'etat du bouton de l'ESP32

**Allumé**

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-37-09.png?direct&800 |}}

**Eteint**

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-41-00.png?direct&800 |}}


==== Piloter la LED de ESP32 et du Dasboard  via Node Red ====


   *1- Inserez 2 nodes : "MQTT out" ( Network ) et "Switch" ( Dashboard) et relié les ensembles ( Sortie Switch sur entree MQTTout)

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-49-10.png?direct&+600 |}}

   *2- Parametrer le node "MQTT out" :  **server** (exemple) = fablab37110.ddns.net:1883 ; **Topic** = cmnd/tasmota_6B2128/POWER1 (cmnd = abreviation pour envoyer des infos à tasmota; tasmota_6B2128 = reference materiel du tasmota esp32 utilisé; /POWER = Bouton ou switch de tasmota;  1 = index 1 de Tasmota )

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-54-40.png?direct&400 |}}

Cliquez sur le petit crayon ( ligne server) pour avoir cette fenettre et inserer uniquement l'URL de MQTT (pour exemple fablab37110.ddns.net)  , le port etant par defaut 1883 

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-06_14-31-03.png?direct&400 |}}

   *3- Parametrer le node "Switch" : le groupe ( ICI test001) , la taille ( Size), Le label( Nom) , On Payload = ON , Off Payload = OFF, Topic = msg.topic ) Cliquer sur  "Done"  et "Deploy"

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_16-55-22.png?direct&400 |}}

   *4- On devrait visualiser "connected" sous le node MQTT out

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_17-08-36.png?direct&800 |}}

   *5- On affiche le dashboard ( voir rubrique précedente); En actionnant le "Switch" sur NodeRed on eteint ou allume la LED , et de même avec le bouton de l'ESP32

**Allumé**

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_17-15-23.png?direct&400 |}}

**Eteinte**

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_17-15-36.png?direct&400 |}}


====== Exercice 2 : ======

    * Essayer de parametrer le Dashboard avec la temperature de l'ESP32 qui s'affiche sur  une Gauge et ensuite sur un graphique ( Il faudra utiliser un node "Function" pour obtenir la valeur de la temperature 
 
<code json exemple.json>
var  Temp = msg.payload.ESP32.Temperature;
msg.payload = Temp;
return msg;
</code>

Pour avoir cela  :

{{ :faire_preparation:soireeinfo:tp:capture_d_ecran_du_2023-04-03_17-35-15.png?direct&400 |}}


===== La correction =====

[[faire_preparation:soireeinfo:tp:corex2|Correction exercice 2]]



    





