Plusieurs instances de Gladys - Multi RPI


#1

Bonjour à tous,

Je me pose une question après la lecture d’un post sur le forum il y a tout juste un an ([NEWS] Multi-instances & prochaine génération de modules Gladys!)


J’ai en ma possession 2 RPI, 1 avec gladys et l’autre avec… Gladys. Je me dis que la maison étant avec 1 étage, il serait peut être intéressant de connecter les 2 RPI avec Gladys ensemble. L’instance principale tournant par exemple en bas avec ses capteurs zWave et l’instance d’en haut avec d’autres capteurs.
L’instance principale récupérerai donc les infos collectées par la 2nde instance.

Est ce possible aujourd’hui ? Je ne vois pas trop comment faire communiquer les 2 Gladys.
Est ce au niveau du RPI dans la raspiconfig’ ?
Est il besoin d’un broker MQTT dans une seule maison ? Je vois bien l’utilité sur 2 maisons éloignées mais dans un même logement, est ce optimale de sortir sur le broker pour revenir ?

Merci à ceux qui vont prendre le temps de me lire et d’essayer de me comprendre :stuck_out_tongue: Pour les autres, si je suis pas clair, dites le moi :wink:


#2

Bonjour,
désolé pour la fausse joie mais ce n’est pas une réponse à tes questions.
Néanmoins, j’ai des besoins similaires aux tiens et donc si quelqu’un sur le forum peux apporter des réponses, nous serons au moins deux à en profiter.
En ce qui me concerne, les deux RPI seront sur le même réseau wifi et je voudrais piloter un actionneur avec le RPI slave et acquérir un capteur avec le RPI master.
Merci d’avance aux futures réponses.


#3

@camille, tu peux plus détailler ton besoin ?


#4

oui biensur. Je vais utiliser un arduino connecté au RPI master avec des entrées numériques pour acquérir des signaux Tout ou rien.
Le second RPI sera également connecté à un arduino avec des sorties numériques (type relais)

Je souhaite utiliser Gladys pour transmettre un ordre logique d’un arduino à un autre via le réseau wifi.


#5

Alors t’embetes pas, pas sûr un esp32, qui pourra communiquer en http avec Gladys.


#6

excuse moi, c’est quoi un esp 32 ?


#7

https://projetsdiy.fr/quelle-carte-esp32-choisir-developper-projets-diy-objets-connectes/

Pour faire simple, un arduino communicant :slight_smile:
[EDIT] https://fr.m.wikipedia.org/wiki/ESP8266
C’est la version avec wifi.


#8

Bonjour,
merci beaucoup pour ta réponse mais je voudrais utiliser les fonctionnalités de Gladys.
J’ai déjà essayé avec un arduino ça marche très bien. Par contre, j’aimerai maintenant pourvoir commander un autre arduino connecté à un RPI avec une instance gladys slave depuis un RPI gladys master sur le même réseau wifi


#9

Oui, bien sûr, ton Arduino sera piloté par Gladys, sans pb.
Recherche esp8266 sur le forum, tu trouveras ton bonheur je pense.
Tu as aussi ce lien :
https://gladysassistant.com/fr/article/temperature-ethernet


#10

Bonjour, merci pour ta réponse et désolé pour le retard mais j’ai été pas mal pris sur autre chose. Je viens de terminer d’installer la mesure de température et humidité via un Arduino avec liaison Ethernet. ça n’a pas marché du premier coup et donc je vais ici expliquer les problèmes que j’ai rencontré et surtout les solutions que j’ai trouvé pour que cela fonctionne maintenant.

1er problème : j’avais un problème de compilation du programme de l’Arduino au niveau du capteur de température (j’utilise le DHT11)
=> solution : j’ai téléchargé la librairie “dht11.h” qui a l’air de fonctionner avec ce genre de capteur. ici le lien du site : https://letmeknow.fr/blog/2013/11/06/tuto-utiliser-un-capteur-temperature-humidite/

2éme problème : impossible de connecter l’Arduino sur le port 1337
=> solution : utiliser le port 8080 (car mon instance Gladys est en https pour utiliser le module Forecast)

3éme problème : aucune valeur affichée dans Gladys.
=> solution : remplacer " POST /devicestate?" par “GET /devicestate/create?”

Voici le programme de l’Arduino :

                   /*
                   Gladys
                   Web client sending temperature and humidity from DHT11 to Gladys

                    Circuit:
                   * Ethernet shield attached to pins 10, 11, 12, 13
                    */

                  #include <SPI.h>
                  #include <Ethernet.h>
                  #include "WString.h"
                  #include "dht11.h" // charger la librairie

                   dht11 DHT11; // Créer le capteur

                   #define DHT11PIN 2     // what pin we're connected to

                  // Connect pin 1 (on the left) of the sensor to +5V
                  // Connect pin 2 of the sensor to whatever your DHTPIN is
                  // Connect pin 4 (on the right) of the sensor to GROUND
                 // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

                 // Sleep time between requests in seconds
                 // ( here 20 * 60 = 1200 seconds = 20 minutes )
                 #define SLEEP_TIME 1200


                // Your request
               String requestTemperature = "GET /devicestate/create?devicetype=5&value=%VALUE&token=YOURTOKEN HTTP/1.1";
              String requestHumidity = "GET /devicestate/create?devicetype=6&value=%VALUE&token=YOURTOKEN HTTP/1.1";

           // Enter a MAC address for your controller below.
           // Newer Ethernet shields have a MAC address printed on a sticker on the shield
           byte mac[] = {
           0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

           // Host of your Raspberry Pi hosting Gladys
           String host = "Host: 192.168.1.30";
           IPAddress server(192,168,1,30);  // numeric IP

            // Set the static IP address to use if the DHCP fails to assign
            IPAddress ip(192,168,1,177);

            //char server[] = "www.google.fr";    // name address

            // Initialize the Ethernet client library
            // with the IP address and port of the server
            // that you want to connect to (port 80 is default for HTTP):
            EthernetClient client;

            void setup() {

           Ethernet.begin(mac, ip);
          // Open serial communications and wait for port to open:
            Serial.begin(9600);
           while (!Serial) {
            ; // wait for serial port to connect. Needed for native USB port only
            }

  Serial.println(Ethernet.localIP());
  delay(1000);
   }

    void loop() {

    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
   int chk = DHT11.read(DHT11PIN); // Lecture du capteur

  Serial.print("Humidite (%): "); // Humidité
  Serial.println((float)DHT11.humidity, 2);

 Serial.print("Temperature (°C): "); // Température
 Serial.println((float)DHT11.temperature, 2);

 float h = (float)DHT11.humidity;
 float t = (float)DHT11.temperature;

Serial.println("connecting...");
 // if you get a connection, report back via serial:
if (client.connect(server,8080))
  {
  Serial.println("connected");
  // Make a HTTP request:
  
  String temperature = String(t, 0);
  String humidity = String(h, 0);
  
  // replacing URL with the value
  requestTemperature.replace("%VALUE", temperature);
  requestHumidity.replace("%VALUE", humidity);
  
  Serial.println(requestTemperature);
  Serial.println(requestHumidity);
  
  client.println(requestTemperature);
  client.println(host);
  client.println("Connection: close");
  client.println();
  
  client.println(requestHumidity);
  client.println(host);
  client.println("Connection: close");
  client.println();
  Serial.println();
  Serial.println("disconnecting.");
  client.stop();
  }
  else 
  {
  // if you didn't get a connection to the server:
  Serial.println("connection failed");
  }

  delay(SLEEP_TIME*1000);

}