Problème de "Text request"

Forum dédie aux capteurs et gateway mysensors.org
ziurg
Messages : 1
Inscription : 25 juin 2017, 13:00

Problème de "Text request"

Message par ziurg »

Bonjour à tous,

J'aurai besoin d'aide afin de mieux comprendre comment fonctionnent les requêtes texte d'un noeud Arduino vers Domoticz.
Je ne sais pas si le comportement que j'observe relève d'un bug ou d'une subtilité que je n'arrive pas à saisir.

Dans l'exemple ci-dessous, je crée un noeud avec 2 enfants : un contenant du texte, et un interrupteur.
Une requête a ensuite lieu si je change dans Domoticz l'état de l'interrupteur (donc à la réception d'un message de type V_LIGHT).
Tout se passe bien, et j'ai vérifié que la demande était correctement reçue par la GW, par contre il n'y a aucun retour :?
En revanche, la même requête, présente également dans la fonction loop, provoque une réponse de Domoticz...

Quelqu'un serait il m'expliquer pourquoi, le request fonctionne dans un cas, mais pas dans l'autre (celui dont j'ai besoin évidemment) ?

Pour info, certain reconnaîtront peut être qu'il s'agit de la méthode utilisée pour échanger un code IR à l'arduino.
J'ai en effet passé plusieurs semaines à isoler ce problème :roll:

Code : Tout sélectionner

#define SKETCH_NAME "Text request"
#define SKETCH_VERSION "1.0"
#define MY_NODE_ID 106

#define MY_DEBUG
#define MY_RADIO_NRF24
#define MY_BAUD_RATE 9600 // Safe baud rate for a 3.3V device

// MySensors libraries
#include <SPI.h>
#include <MySensors.h>

#define CHILD_TEXT 1
#define CHILD_SWITCH 3
MyMessage textMsg(CHILD_TEXT, V_TEXT);
MyMessage sendMsg(CHILD_SWITCH, V_LIGHT);
unsigned long WAIT_TIME = 5000; // Wait time between requests (in milliseconds)
bool WaitingData = false;

void presentation()
{
  sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
  present(CHILD_TEXT, S_INFO, "SomeText");
  present(CHILD_SWITCH, S_LIGHT, "SwitchT" );
  wait(2000);
}


void loop()
{
  if (WaitingData==true) {
    Serial.println(F("Loop request"));
    request(CHILD_TEXT, V_TEXT, 0);
  }
  wait(WAIT_TIME);
}


// Handle incoming messages from the MySensors Gateway
void receive(const MyMessage &message) {
  const char *msgData;
  if (message.type==V_TEXT) {
    // TEXT sensor value is received as a result of the previous step
    Serial.println(F("Receiving data"));
    msgData = message.getString();
    Serial.println(msgData); 
    WaitingData = false;
  }
  else if (message.type==V_LIGHT) {
    // Commande exterieur
    Serial.println(F("Switch request"));
    WaitingData = true;
    request(CHILD_TEXT, V_TEXT, 0);
    wait(2000);
  }
}
alpin38
Messages : 64
Inscription : 02 juil. 2015, 11:14

Re: Problème de "Text request"

Message par alpin38 »

bsr

pour envoyer une message texte a un sensor depuis la gateway , il faut utiliser une requete du noeud vers la gateway .....

en gros tu peux changer autant de fois que tu veux la valeur de ton text au niveau de domoticz , ton noeud le vera jamais

pour cela il faut faire un requete "request" dans le loop de ton code du noeud toutes les x secondes ou lorsque tu veux l'interroger

exemple :

// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable and select radio type attached
#define MY_RADIO_NRF24

// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE

#include <MySensors.h>

void presentation()
{
// Send the sketch version information to the gateway and Controller
present(1, S_INFO);
}


void loop()
{
request(1,V_TEXT); // je demande a la gateway de m'envoyer la valeur de la variable text toutes les secondes
wait(1000);
}

void receive(const MyMessage &message)
{

if (message.type == V_TEXT) {
String msgrecu = message.getString();
Serial.print("message recu: ");
Serial.println(msgrecu);
}
}


et coté domoticz pour changer ta valeur de ton text tu peux passer soit par script soit par json
https://ip:port/json.htm?type=command&param=udevice&idx=175&nvalue=4&svalue="la valeur a envoyer"

@+
Répondre