[RÉSOLU] - Gérer les lumières via Gladys


#1

Bonjour à tous,

Avant de commencer, je tiens à vous tirer mon chapeau pour tout ce que vous avez effectué. C’est incroyable !

Je vous explique mon problème, j’ai commencé il y a quelques semaines désormais à me faire, ou du moins essayer de faire, une box domotique via Gladys. Pour l’instant tout est très basique, commande 433MHz avec des prises chacon et un capteur DHT22.
Actuellement je souhaiterai commander mes 4 néons (local de travail) via Gladys. Et pour cela j’ai une carte relais, arduino uno et/ou nano, un shield ethernet, le rpi bien sur et quelques bricoles en plus.
Cependant je ne trouve pas de sujet qui pourrai m’aider, ni de module existant sous Gladys. En gros, je souhaiterai juste 4 interrupteurs ON/OFF dans les Devices Gladys. Mais comme je suis une quiche en programmation, je bloque sur mon éclairage.
Alors je viens vous demander conseil :slight_smile:

Merci par avance,
Axel


#2

Salut @ForzAguanno :slight_smile:

As tu lu cet article sur le blog ?


#3

Merci pour ta réponse @Jean34

Effectivement j’ai lu cet article pour contrôler mes prises chacon et ça marche super !
Mais je voudrai commander des lampes 220V via des relais.
Je voudrai, avoir un interrupteur allumer/éteindre comme pour les prises 433MHz sur l’interface de Gladys, mais qui commande mes lumières et non pas les prises.
Gladys --> Arduino (connecté en usb au rpi) --> Carte Relais --> Lumières.

Je ne sais absolument pas comment faire.


#4

Salut, tu trouveras un tuto que j’ai écrit sur le sujet dans la catégorie « tutoriel ».
Bonne lecture !


#5

Bonsoir @piznel

Merci pour ta réponse,
J’ai également lu ton tutoriel qui m’a beaucoup aidé, notamment pour configurer mon DHT22.
Malheureusement, étant vraiment novice en programmation, la seule chose que j’arrive à faire est de faire clignoter mes lumières dans mon local avec une tempo de 10s. :joy:
C’est sympa le temps des fêtes mais pas très agréable sur le long termes.
Aurais tu un lien vers un code .ino qui les ferait juste allumer et éteindre mais sans tempo ?

Merci par avance


#6

OEn fait tu as plusieurs possibilités, selon ton matos dispo.
Après, il va te falloir un minimum de compréhension du code info, pour l’adapter à ton usage :slight_smile:
Je n’ai pas souvenir d’avoir mis une tempo dans un ion du tuto, par exemple. Tu as dû mixer plusieurs info pêché, non ?


#7

J’ai utilisé le code du tuto 26 en début de ta présentation https://openclassrooms.com/fr/courses/3290206-perfectionnez-vous-dans-la-programmation-arduino/3388191-domotique-pilotez-une-lampe-grace-aux-relais, histoire de vérifier que ce que je faisais était correct.
J’ai bien un clignotement, donc je sais que ma communication raspberry-arduino-relais-lampe fonctionne c’est déja ça.

Mais après ça je suis beaucoup trop limité par mes connaissances en programmation pour comprendre ce que je dois faire.
Je voudrais avoir un bouton pour contrôler mes lampes sur gladys comme ce que j’ai ici

Mais du coup je ne comprend pas quoi mettre comme code sur mon arduino…
La réponse doit être sous mon nez mais j’avoue que la je ne comprend pas


#8

Mets nous déjà ton code :slight_smile:


#9

Bonjour @piznel

Voici le code

#include <ArduinoJson.h>

struct actionneurData {
int id;
int valeur;
};

actionneurData cde;

void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
}

void loop() {
}

void serialEvent() {
if (deserialize(cde)) {
String tmpCde = “”;
tmpCde = “{“deviceType”:”";
tmpCde += cde.id;
tmpCde += “”,“value”:"";
tmpCde += cde.valeur;
tmpCde += “”}";
Serial.println(tmpCde);
}
}

bool deserialize(actionneurData &data) {
StaticJsonBuffer<55> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(Serial);
if (root == JsonObject::invalid()) {
Serial.println(“JSON invalid”);
delay(1000);
return false;
}
else {
Serial.println(“JSON received”);
data.id = root[“deviceType”];
data.valeur = root[“value”];

if(data.valeur == 1){
      digitalWrite(7, HIGH); 
} else {
      digitalWrite(7, LOW); 
}

delay(1000);   
return true;

}
}

Code que j’ai honteusement copié par ailleurs.
J’ai bien mon bouton mais je ne peut pas basculer d’un état à un autre.

Capture

Je pense avoir pourtant configuré correctement

Merci pour toutes tes infos


#10

Si ça peut t’aider lorsque j’appui sur ce fameux bouton voilà ce que les logs de Gladys me disent

0|gladys | Sending 500 (“Server Error”) response:
0|gladys | TypeError: Cannot read property ‘exec’ of undefined
0|gladys | at /home/pi/gladys/api/core/devicetype/deviceType.exec.js:26:57
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys | at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys | at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys | at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys | at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys | at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys | at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys | at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys | at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys | at Socket. (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)
0|gladys | at addChunk (_stream_readable.js:263:12)
0|gladys | at readableAddChunk (_stream_readable.js:250:11)
0|gladys | Server Error:
0|gladys | TypeError: Cannot read property ‘exec’ of undefined
0|gladys | at /home/pi/gladys/api/core/devicetype/deviceType.exec.js:26:57
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys | at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys | at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys | at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys | at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys | at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys | at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys | at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys | at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys | at Socket. (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)
0|gladys | at addChunk (_stream_readable.js:263:12)
0|gladys | at readableAddChunk (_stream_readable.js:250:11)


#11

Alors dans tes logs Gladys, il y a un problème avec l’exec.
Tu as bien installé le module https://github.com/MathieuAndrade/Gladys-To-Arduino ?
Souvent, c’est un problème de « slug », c’est à dire le nom du module en interne pour Gladys, qui doit correspondre au service du périphérique.
Tu as bien installé le module « serial », qui sert à communiquer avec Gladys par le port USB ?
Avant de s’occuper du code de l’arduino, il faut déjà être nickel dans Gladys.


#12

J’ai bien installé le module gladys to arduino et mes slugs sont corrects.
En revanche j’ai désinstallé le module Serial “Officiel” et j’ai réinstaller le module Serial de ta deuxième partie de tuto pour installer mon dht22.
En principe ça devrait fonctionner avec lui non @piznel ?


#13

Alors, voilà … Effectivement, dans ton cas, tu as besoin des 2 modules “Serial” du tuto simultanément :

  1. Celui de la première partie pour envoyer les commandes
  2. Celui de la 2ième partie pour recevoir les infos du DHT22

Je ne sais pas si en installant les 2 modules (avec donc des slugs différents) ça marchera. Si c’est aps le cas, il te faudra un 3ième module “Serial” faisant les 2, qui n’existe pas à l’heure actuelle, mais pas compliqué à développer.


#14

Merci beaucoup pour tes infos @piznel
J’essaierai de faire ça se soir en rentrant.
Plus qu’à croiser les doigts pour que les deux modules serial fonctionnent ensemble.

Sinon je suis dans le pétrin lol
Je posterai ici ce soir pour te dire si ça fonctionne :slight_smile:


#15

Bonsoir @piznel

Il y a du mieux… un peu
J’entends mon relais claqué avec ce programme :

 #include <ArduinoJson.h>      // Inclure la librairie ArduinoJson          

struct actionneurData {       // Déclaration d'une structure "actionneurData"
  int id;                     
  int valeur;
};

actionneurData cde;           // Création d'une variable "cde" de type "actionneurData"

void setup() {
  Serial.begin(9600);         
  pinMode(13, OUTPUT);        // Déclaration de la pin 13 en sortie
}

void loop() {
}

void serialEvent() {          
  if (deserialize(cde)) {               // Appel de la fonction qui va décoder le JSON et enregistrer ses données dans notre variable "cde". cette fonction retourne "true" si elle a réussi, "false" si échec
    String tmpCde = "";
    tmpCde = "{\"deviceType\":\"";
    tmpCde += cde.id;
    tmpCde += "\",\"value\":\"";
    tmpCde += cde.valeur;
    tmpCde += "\"}";
    Serial.println(tmpCde);
  }
}
bool deserialize(actionneurData &data) {
  StaticJsonBuffer<55> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject(Serial);
  if (root == JsonObject::invalid()) {
    Serial.println("JSON invalid");
    delay(1000);  
    return false;
  }
  else {
    Serial.println("JSON received");
    data.id = root["deviceType"];
    data.valeur = root["value"];

    if(data.valeur == 1){
          digitalWrite(13, HIGH); 
    } else {
          digitalWrite(13, LOW); 
    }

    delay(1000);   
    return true;
  }

Cependant je n’ai pas le contrôle de ce que je fais mon relais claque et change d’état à 3 reprises (et donc, allume, éteint, puis rallume ma lampe).
Tu aurais une idée du pourquoi du comment ?

Merci


#16

Salut,

Tu pourrais donner les logs de Gladys au moment où tu cliques sur le bouton ?
Merci.

PS : merci @VonOx pour la mise-en-page :slight_smile:


#17

Voila ce que les logs me disent @piznel
Pardon pour la mise en page je ne sais pas comment faire, merci a @VonOx

0|gladys   | Event : create : new Event with code : devicetype-new-value
0|gladys   | Scenario : Trigger : New event : devicetype-new-value
0|gladys   | Scenario : Trigger : Found 0 launchers with code devicetype-new-val

#18

Il n’en manque pas un peu avant/après ?
Pour faire la mise-en-page de type “code”, tu sélectionnes ton texte, et tu cliques sur le bouton image de la barre d’outil.


#19

Non malheureusement je n’ai que ça qui apparait


#20

Tu peux me remettre la page de tes devices, ainsi que celle des deviceTypes du coup ?