question Mysensors

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
mickaelr30
Messages : 169
Enregistré le : 29 août 2015, 15:57

question Mysensors

Message par mickaelr30 »

petite question pour les utilisateurs de mysensors :
avez-vous des problèmes de transmission de commande vers un modules mysensors, je m'explique :
j'ai une gateway connectée en rj45 avec des modules dessus et des interrupteurs virtuels qui commande des bouts de scripts dans l'arduino. Par le biais d'un interrupteur dans domoticz j'active un de ces interrupteurs virtuel.
j'ai l'impression que si j'active l'interrupteur virtuel en local dans domoticz l'action se fait bien, par contre quand l'interrupteur de domoticz active cet interrupteur virtuel la commande passe très rarement, que je fasse l'activation via un blockly ou via du lua.
avez-vous eu déjà ce problème ?
Domoticz + Imperihome + Mydomoathome
1-wire : 12 DS18b20 + 3 DS2413
Z-Wave : 8 FGR221 + 3 FGS222 + 3 FGSD002
téléinfo : 2 modules ( consommation + production)
Mysensors+ 1 arduino éclairage LED neopixels
2 caméra IP + 2 raspberry (XBMC,piscine)

domdom
Messages : 70
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: question Mysensors

Message par domdom »

Bonjour,
J'ai une installation mysensors / domoticz à base de module rfm69hw et électronique maison, je n'ai aucun souci de transmission, la portée est gigantesque.
Le seul souci que j'ai rencontré est un lot de rfm69 défectueux (perte totale de la transmission radio au bout de qq jours).
Quels modules radio utilises-tu ? Es-tu sûr de la puissance de l'étage d'alimentation de tes modules mysensors ?
As-tu regardé les logs domoticz pour voir si qqch cloche ?

mickaelr30
Messages : 169
Enregistré le : 29 août 2015, 15:57

Re: question Mysensors

Message par mickaelr30 »

bonjour, en fait je n'utilise pas de modules radio, tout est raccroché directement sur la gateway w5100
dans domoticz je n'ai aucune erreur, c'est comme si la gateway ne recevait pas l'ordre quand c'est domoticz qui l'envoi
Domoticz + Imperihome + Mydomoathome
1-wire : 12 DS18b20 + 3 DS2413
Z-Wave : 8 FGR221 + 3 FGS222 + 3 FGSD002
téléinfo : 2 modules ( consommation + production)
Mysensors+ 1 arduino éclairage LED neopixels
2 caméra IP + 2 raspberry (XBMC,piscine)

maticz
Messages : 24
Enregistré le : 14 juil. 2019, 11:18

Re: question Mysensors

Message par maticz »

Bonjour

j'ai poster une demande d'aide sur le site MySensors, mais peut être plus de chance sur EasyDomoticz :roll:

une demande de vérification d'un croquis pour la gestion de Télérupteur, un problème de retour d'état.


la maquette en court
Image

un schema de principe
Image

le croquis

Code : Tout sélectionner

*
*  Alco_TL_Impuls_Light.ino
*
* https://forum.mysensors.org/topic/11263/domoticz-mysensors
*
*
* REVISION HISTORY
* Version 1.0 - Gateway Serial par Alco 
* Version 0.0 - Node en RS485 par JeeLet
* 
*LA DESCRIPTION 
  * TL :Commande Impulsionnelle de TeLerupteur d'Eclairage 
  * TS :Retour d'Etat par un contact auxilaire du TL. 
  * 
  * L'installation Electrique n'est pas modifier, 
  * les bouton poussoir de l'habitat Cmd aussi le TL. 
  *  
  *  
  */ 

//#define MY_DEBUG
#define MY_NODE_ID 24           /*pour Node ID static*/

/* ----- Module RS485 ----*/
 #define MY_RS485
 #define MY_RS485_DE_PIN 2
 #define MY_RS485_BAUD_RATE 9600
// #define MY_RS485_HWSERIAL Serial1 /* Mega2560, port Serial X? */

#include <MySensors.h>
#include <Bounce2.h>

#define CHILD_ID 3   /*Id du capteur (enfant)*/

#define RELAY_PIN  4   // pin Cmd Telerupteur     "TL"
#define BUTTON_PIN  3  // pin Contact Auxiliaire  "TS"

#define RELAY_ON 1 
#define RELAY_OFF 0

Bounce debouncer = Bounce();  // initialize debouncer

MyMessage msg(CHILD_ID,V_STATUS);

void setup()
  {
  pinMode(BUTTON_PIN,INPUT_PULLUP);
  pinMode(RELAY_PIN , OUTPUT);
  digitalWrite(RELAY_PIN, RELAY_OFF);
  
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(20); // minimum ?
  }

  bool state;
  boolean inputState;

void presentation()
  {
  sendSketchInfo("Cmd TL", "1.a");
  present(BUTTON_PIN, S_LIGHT);
  }

void loop()
  {
  if (debouncer.update()) 
   {
   inputState =! digitalRead(BUTTON_PIN);
   send(msg.set(inputState));
   }
  }

void receive(const MyMessage &message)
  {
  if (message.isAck())
    {
     Serial.println("Ceci est un accusé de réception de la passerelle");
     Serial.println("Cmd TL 1.a");
    }
  if (message.type==V_STATUS) // V_STATUS pour MyS v2.0, annulé V_LIGHT. 
    {    
      //if (state = message.getBool () == true) {          
        //  state = message.getBool();
     
     digitalWrite(RELAY_PIN, RELAY_ON);
     wait(200);                          //delai On-Off Impuls
     digitalWrite(RELAY_PIN, RELAY_OFF);
    }
    
// Write some debug info
   Serial.print("Changement entrant pour le capteur:");
   Serial.print(message.sensor);
   Serial.print(", New status: ");
   Serial.println(message.getBool());
   // }
  }
// ------------ fin Pgm -----------



message d'erreur et log sur Domoticz

Code : Tout sélectionner

error on domoticz
Error sending switch command, check device/hardware (idx=8) !

Log:
Error: MySensors: Repeating previous command (2/2)
Error: MySensors: Command not received by Node !! (node_id: 24, child_id: 3)
message d'erreur sur le terminal Arduino

Code : Tout sélectionner

..set to OFF
Changement entrant pour le capteur:3, New status: 0
36376 TSF:MSG:SEND,24-24-0-0,s=3,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0
44859 TSF:MSG:READ,0-0-24,s=3,c=1,t=2,pt=0,l=1,sg=0:1
44864 TSF:MSG:ECHO REQ
44883 TSF:MSG:SEND,24-24-0-0,s=3,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=OK:1
44890 !MCO:PRO:RC=1
5080 !MCO:PRO:RC=1

....set to ON
5080 !MCO:PRO:RC=1
45082 !MCO:PRO:RC=1
45084 !MCO:PRO:RC=1
45086 !MCO:PRO:RC=1
45088 !MCO:PRO:RC=1
Changement entrant pour le capteur:3, New status: 1
45127 TSF:MSG:SEND,24-24-0-0,s=3,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1

mon croquis Arduino et mal bâti, mais ou ?? :roll:


le lien sur MYSensors https://forum.mysensors.org/topic/11263 ... ysensors/8

Merci

mickaelr30
Messages : 169
Enregistré le : 29 août 2015, 15:57

Re: question Mysensors

Message par mickaelr30 »

Bonjour,
Quand je connecte mes gateways directement sur un port USB, je me sert du sketch GatewaySerial en supprimant les lignes correspond aux lignes des modules rf et pas le sketch GateWaySerialRS485.
Domoticz + Imperihome + Mydomoathome
1-wire : 12 DS18b20 + 3 DS2413
Z-Wave : 8 FGR221 + 3 FGS222 + 3 FGSD002
téléinfo : 2 modules ( consommation + production)
Mysensors+ 1 arduino éclairage LED neopixels
2 caméra IP + 2 raspberry (XBMC,piscine)

boum
Messages : 110
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: question Mysensors

Message par boum »

Une première indication : pour décoder les messages série de MySensors, il suffit de les copier sur https://www.mysensors.org/build/parser

Dans ce cas :
5080 !MCO:PRO:RC=1 Recursive call detected in _process(), call level=1
Après je ne connais pas assez bien le système pour savoir d'où ça vient. Une histoire de récursion on dirait.

Quelques remarques ceci dit :

Code : Tout sélectionner

#define CHILD_ID 3   /*Id du capteur (enfant)*/
#define BUTTON_PIN  3  // pin Contact Auxiliaire  "TS"

[...]

MyMessage msg(CHILD_ID,V_STATUS);

[...]
  present(BUTTON_PIN, S_LIGHT);
Est-ce intentionnel ce mélange de valeurs ?

Code : Tout sélectionner

void receive(const MyMessage &message)
  {
  if (message.isAck())
    {
     Serial.println("Ceci est un accusé de réception de la passerelle");
     Serial.println("Cmd TL 1.a");
    }
  if (message.type==V_STATUS) // V_STATUS pour MyS v2.0, annulé V_LIGHT. 
    {    
     [...]
    }

  }
A priori, aucun écho n'est demandé lors de l'envoi de message, mais s'il y en avait un, la partie V_STATUS serait ré-exécutée. Il vaut mieux ajouter un return; à la fin du bloc isAck(). (renommé isEcho() récemment)

EDIT: J'ai regardé plus en détail et répondu sur le forum de MySensors. Globablement, il faut éviter d'appeler send() et wait() dans receive().
Pendant le wait(), un message peut arriver et rappeler receive() récursivement.

Il faut donc déplacer le plus possible la logique et surtout les commandes du contacteur dans loop().
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

maticz
Messages : 24
Enregistré le : 14 juil. 2019, 11:18

Re: question Mysensors

Message par maticz »

... j'ai vraiment un problème de remonter des réponse poster sur les forum :mrgreen:


Bonsoir Boum ( ta un clone au USA ??? :D )
bon va falloir faire un choix géographique :roll: ( a toi l'honneur)

@ mickaelr30 ma config est
Uno-MySensor <-- rs485-->Mega2560-GWSerial<-- Usb-->-Odroid-Domoticz

cella me donne 3 points pour les Log/Debug (terminal)
ArduinoUNO - Mega2560 - Domoticz


@Boummmm j'ai poster une réponse sur le forum MySensors, mais j'peux pas la recopier (message en attente d’approbation)
mais ta modif fonctionne ... presque (tu lira ma réponse) .... p'tain le dialogue de tordue que je te fabrique .... au secours.

tu dit (le post au dessus :D )
"Est-ce intentionnel ce mélange de valeurs ?"
le V_STATUS et le S_LIGHT ???


bipbip
fin de la com, en attente d'une resynchronisation des serveurs de la planète.

maticz
Messages : 24
Enregistré le : 14 juil. 2019, 11:18

Re: question Mysensors

Message par maticz »

j'ai retrouver mon post

Bonjour

je reprend la copie du sketch/modif donner par Boum sur MyS

Code : Tout sélectionner

/*
 *  Alco_TL_Impuls_Light.ino
 *
 * https://forum.mysensors.org/topic/11263/domoticz-mysensors
 *
 *
 * REVISION HISTORY
 * Version 1.0 - Gateway Serial par Alco 
 * Version 0.0 - Node en RS485 par JeeLet
 * 
 *LA DESCRIPTION 
 * TL :Commande Impulsionnelle de TeLerupteur d'Eclairage 
 * TS :Retour d'Etat par un contact auxiliaire du TL. 
 * 
 * L'installation Electrique n'est pas modifiee, 
 * les boutons poussoir de l'habitat Cmd aussi le TL. 
 *  
 *  
 */ 

//#define MY_DEBUG
#define MY_NODE_ID 24           /*pour Node ID static*/

/* ----- Module RS485 ----*/
#define MY_RS485
#define MY_RS485_DE_PIN 2
#define MY_RS485_BAUD_RATE 9600
// #define MY_RS485_HWSERIAL Serial1 /* Mega2560, port Serial X? */

#include <MySensors.h>
#include <Bounce2.h>

#define STATE_CHILD_ID 0   /*Id du capteur (enfant)*/

#define RELAY_PIN  4   // pin Cmd Telerupteur     "TL"
#define CONTROL_INPUT_PIN  3  // pin Contact Auxiliaire  "TS"

#define RELAY_ON 1 
#define RELAY_OFF 0

Bounce debouncer = Bounce();  // initialize debouncer

MyMessage msg(STATE_CHILD_ID,V_STATUS);

void setup()
{
    pinMode(CONTROL_INPUT_PIN, INPUT_PULLUP);
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, RELAY_OFF);

    debouncer.attach(CONTROL_INPUT_PIN);
    debouncer.interval(20); // minimum ?
}

bool currentState;
bool controllerState;

void presentation()
{
    sendSketchInfo("Cmd TL", "1.a");
    present(STATE_CHILD_ID, S_LIGHT);
}

void loop()
{
    // Send impulse if controller changed state
    if (controllerState != currentState)
    {
        currentState = controllerState;
        digitalWrite(RELAY_PIN, RELAY_ON);
        wait(200);                          //delai On-Off Impuls
        digitalWrite(RELAY_PIN, RELAY_OFF);
    }

    // Inform controller if state change from input
    if (debouncer.update()) 
    {
        bool newState = !digitalRead(CONTROL_INPUT_PIN);
        if (newState != currentState)
        {
            currentState = newState;
            if (currentState != controllerState)
            {
                send(msg.set(currentState));
            }
        }
    }
}

void receive(const MyMessage &message)
{
    if (message.isEcho()) // keep message.isAck() for older MySensors version
    {
        Serial.println("Ceci est un accusé de réception de la passerelle");
        Serial.println("Cmd TL 1.a");
        return;
    }

    if (message.type==V_STATUS) // V_STATUS pour MyS v2.0, annulé V_LIGHT. 
    {    
        controllerState = message.getBool();
    }

    // Write some debug info
    Serial.print("Changement entrant pour le capteur:");
    Serial.print(message.sensor);
    Serial.print(", New status: ");
    Serial.println(message.getBool());
}
// ------------ fin Pgm -----------


Impecable, les erreurs "MCO: PRO: RC" son absente, merci Boum.


mais maintenant des erreurs sur les commandes données via domoticz

Commande seulement un sur trois est pris en compte

la une recopie du terminal série:

Code : Tout sélectionner

Changement entrant pour le capteur:3, New status: 0
Changement entrant pour le capteur:3, New status: 1
Changement entrant pour le capteur:3, New status: 0
Changement entrant pour le capteur:3, New status: 0
Changement entrant pour le capteur:3, New status: 0
Changement entrant pour le capteur:3, New status: 1
Changement entrant pour le capteur:3, New status: 0
Changement entrant pour le capteur:3, New status: 0
mais aussi les commandes/direct en local (les bouton poussoirs)
ne sont pas plus signaler a domoticz (le changement d’état du TL)

la partie du code qui pose problème

Code : Tout sélectionner

// Inform controller if state change from input
    if (debouncer.update()) 
    {
        bool newState = !digitalRead(CONTROL_INPUT_PIN);
        if (newState != currentState)
        {
            currentState = newState;
            if (currentState != controllerState)
            {
                send(msg.set(currentState));
            }
        }
    }
bon voila ou j'en suis ..... pfffuuu fait chaud :D

boum
Messages : 110
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: question Mysensors

Message par boum »

Salut. De base, je rajouterais des println de debug pour savoir exactement ce qui se passe :

Code : Tout sélectionner

/*
 *  Alco_TL_Impuls_Light.ino
 *
 * https://forum.mysensors.org/topic/11263/domoticz-mysensors
 *
 *
 * REVISION HISTORY
 * Version 1.0 - Gateway Serial par Alco 
 * Version 0.0 - Node en RS485 par JeeLet
 * 
 *LA DESCRIPTION 
 * TL :Commande Impulsionnelle de TeLerupteur d'Eclairage 
 * TS :Retour d'Etat par un contact auxiliaire du TL. 
 * 
 * L'installation Electrique n'est pas modifiee, 
 * les boutons poussoir de l'habitat Cmd aussi le TL. 
 *  
 *  
 */ 

//#define MY_DEBUG
#define MY_NODE_ID 24           /*pour Node ID static*/

/* ----- Module RS485 ----*/
#define MY_RS485
#define MY_RS485_DE_PIN 2
#define MY_RS485_BAUD_RATE 9600
// #define MY_RS485_HWSERIAL Serial1 /* Mega2560, port Serial X? */

#include <MySensors.h>
#include <Bounce2.h>

#define STATE_CHILD_ID 0   /*Id du capteur (enfant)*/

#define RELAY_PIN  4   // pin Cmd Telerupteur     "TL"
#define CONTROL_INPUT_PIN  3  // pin Contact Auxiliaire  "TS"

#define RELAY_ON 1 
#define RELAY_OFF 0

Bounce debouncer = Bounce();  // initialize debouncer

MyMessage msg(STATE_CHILD_ID,V_STATUS);

void setup()
{
    pinMode(CONTROL_INPUT_PIN, INPUT_PULLUP);
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, RELAY_OFF);

    debouncer.attach(CONTROL_INPUT_PIN);
    debouncer.interval(20); // minimum ?
}

bool currentState;
bool controllerState;

void presentation()
{
    sendSketchInfo("Cmd TL", "1.a");
    present(STATE_CHILD_ID, S_BINARY); // replace S_LIGHT for MySensors 2.0
}

void loop()
{
    // Send impulse if controller changed state
    if (controllerState != currentState)
    {
        Serial.print("Envoi impulsion pour passer vers état: ");
        Serial.println(controllerState);
        currentState = controllerState;
        digitalWrite(RELAY_PIN, RELAY_ON);
        wait(200);                          //delai On-Off Impuls
        digitalWrite(RELAY_PIN, RELAY_OFF);
    }

    // Inform controller if state change from input
    if (debouncer.update()) 
    {
        bool newState = !debouncer.read();
        Serial.print("Changement état du contact :");
        Serial.println(newState);
        if (newState != currentState)
        {
            currentState = newState;
            if (currentState != controllerState)
            {
                Serial.println("Envoi message à la passerelle");
                send(msg.set(currentState));
            }
        }
    }
}

void receive(const MyMessage &message)
{
    if (message.isEcho()) // keep message.isAck() for older MySensors version
    {
        Serial.println("Ceci est un accusé de réception de la passerelle");
        Serial.println("Cmd TL 1.a");
        return;
    }

    if (message.type==V_STATUS) // V_STATUS pour MyS v2.0, annulé V_LIGHT. 
    {    
        controllerState = message.getBool();

        // Write some debug info
        Serial.print("Changement entrant pour le capteur:");
        Serial.print(message.sensor);
        Serial.print(", New status: ");
        Serial.println(message.getBool());
    }
}
// ------------ fin Pgm -----------
maticz a écrit :
01 août 2020, 07:45
mais maintenant des erreurs sur les commandes données via domoticz
Commande seulement un sur trois est pris en compte

mais aussi les commandes/direct en local (les bouton poussoirs)
ne sont pas plus signaler a domoticz (le changement d’état du TL)
Pour ce qui est des commandes ignorées, je regarderais déjà au niveau de la passerelle. Reçoit-elle les messages du nœud quand le contacteur change d'état ? Si elle envoie les commandes au nœud, sont-elles reçues ? Il y a peut-être un problème de communication entre les deux.

Si les messages passent correctement, alors là il faudra regarder dans le schéma du nœud pour corriger la logique.
tu dit (le post au dessus :D )
"Est-ce intentionnel ce mélange de valeurs ?"
le V_STATUS et le S_LIGHT ???
Non, dans le programme original, deux macros sont égales à 3, donc ça marche tant que l'ID du nœud et la connexion du contacteur ne changent pas.

Code : Tout sélectionner

#define CHILD_ID 3   /*Id du capteur (enfant)*/
#define BUTTON_PIN  3  // pin Contact Auxiliaire  "TS"

MyMessage msg(CHILD_ID,V_STATUS); // OK represente l'ID du capteur
  pinMode(BUTTON_PIN,INPUT_PULLUP); // OK pin du contacteur
  debouncer.attach(BUTTON_PIN); // OK pin du contacteur aussi
  present(BUTTON_PIN, S_LIGHT); // ARGH! on voulait l'ID du capteur présenté au controleur ici (CHILD_ID)
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

maticz
Messages : 24
Enregistré le : 14 juil. 2019, 11:18

Re: question Mysensors

Message par maticz »

... Crévindiou l'Mr Boum il me formatiz dans mon apprentissage du C#

Bonjour

un retour sur un Test avec la dernière version du sketch.

Utilisation du Bouton Poussoir (BP) en local qui donne le basculement du Télérupteur (TL)
avec un Changement d'état du contact auxiliaire on/off (TS) .... a la clef (j'aime bien cette expression)

visu des messages sur terminal serie, Uno et Mega2560 ( le node et Gw)
après un reset des cartes

Code : Tout sélectionner

     action1 sur Bouton Poussoir

Node : Changement état du contact :0
Gw : ... rien..

	-----action2--------

node: Changement état du contact :1
	  Envoi message à la passerelle
	  Envoi impulsion pour passer vers état: 0

Gw:  24;0;1;0;2;1

	-----action3--------

node: Changement état du contact :0

Gw : ...rien..

	------action4-------

node : 	Envoi message à la passerelle
       	Envoi impulsion pour passer vers état: 0

Gw : 	24;0;1;0;2;1
mais aucune action sur domoticz, Cmd du TL et retour TS.
je vais regarder un peux mieux le pourquoi

uN Big Merci Boum pour ton Aide

Re-Edit a 15h58 ....ouf, juste avant le Thé

Boum je commence a voir plus clair avec MySensor .... je m'ensor bien (facilllle)
suis en pleine modif du scktech, le delay/wait je Delet avec le/les code lier.
Et j'ai de bon résultat.
.... a suivre.

Répondre