Bug mysensors relais

Forum dédie aux capteurs et gateway mysensors.org
kisscool1981
Messages : 9
Inscription : 27 mai 2015, 20:03

Bug mysensors relais

Message par kisscool1981 »

Bonjour,
cela fait bientôt 1 an que je teste mysensors avec domoticz.
Donc j'ai 2 modules 8 relais+ 1 module avec 4 relais.
avec la mème programmation au niveau des sketchs j'ai régulièrement un des modules 8 relais qui bug ( et toujours le même)
Cela peux très bien fonctionner 1 mois et après presque tous les jours j'ai des plantages. Domoticz fonctionne, mais l'un des module mysensors de repond plus .

le gatway est a moins de 2 metres avec condensateur sur les nrf.

avez vous des pistes ou connaissance de bug éventuel ?

ci-joint le code utilisé.

merci d'avance

Code : Tout sélectionner

#include <MyConfig.h>
#include <MySensors.h>


#include <SPI.h>

const int RELAY[] = {A0, A1, A2, A3, A4, A5, 5, 6}; // I/O pins for the relays
#define NUMBER_OF_RELAYS 8 // Total number of attached relays
#define RELAY_ON 0  // GPIO value to write to turn on attached relay
#define RELAY_OFF 1 // GPIO value to write to turn off attached relay

MySensor gw;

void setup()  
{   
  
  delay(1000);
  // Initialize library and add callback for incoming messages
  gw.begin(incomingMessage, AUTO, true);
  // Send the sketch version information to the gateway and Controller
  gw.sendSketchInfo("Relay", "1.0");

  // Fetch relay status
  for (int sensor=1, pin=0; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    gw.present(sensor, S_LIGHT);
    // Then set relay pins in output mode
    pinMode(RELAY[pin], OUTPUT);   
    // Set relay to last known state (using eeprom storage) 
    digitalWrite(RELAY[pin], gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
  }
}
    
void loop() 
{
  // Alway process incoming messages whenever possible
  gw.process();
}

void incomingMessage(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
   if (message.type==V_LIGHT) {
     // Change relay state
     digitalWrite(RELAY[message.sensor-1], message.getBool()?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     gw.saveState(message.sensor, message.getBool());
     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   } 
}
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Bug mysensors relais

Message par dokho »

Salut.

Il me semble avoir lu quelques part que trop peu d'espace entre gateway et node c'était pas bon non plus.

Envoyé de mon SM-N9005 en utilisant Tapatalk
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: Bug mysensors relais

Message par ganq »

et que fais-tu pour qu'il fonctionne à nouveau ?
reboot gateway ? reboot module ? reboot domoticz ?
domoticien amateur option bidouille
Triple0s
Messages : 37
Inscription : 23 sept. 2015, 15:13

Re: Bug mysensors relais

Message par Triple0s »

Moi j'ai eut des soucis d'ID identiques .....

peut être voir par la
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Bug mysensors relais

Message par vil1driver »

Salut,

Peut être qu'il serait bon d'utiliser la dernière version ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
kisscool1981
Messages : 9
Inscription : 27 mai 2015, 20:03

Re: Bug mysensors relais

Message par kisscool1981 »

ganq a écrit :et que fais-tu pour qu'il fonctionne à nouveau ?
reboot gateway ? reboot module ? reboot domoticz ?
Bonjour,
je reboot le module et cela refontionne.

Triple0s a écrit :Moi j'ai eut des soucis d'ID identiques .....

peut être voir par la
Apres veirification je n'ai pas d'ID identiques.
Pour essai j'ai defini un ID statique pour voir ce que cela donne.
vil1driver a écrit :Salut,

Peut être qu'il serait bon d'utiliser la dernière version ?
j'ai essayé avec la dernière version de mysensors, mais c'est encore pire.
ça ne fonctionne pas du tout ! plus de remonté dans le log de domoticz ! pas de possibilité d'ajout...bref je suis repassé sur l'ancienne bibliothèque.

Je suis preneur pour toute piste...
Merci d'avance
jackyhi
Messages : 97
Inscription : 09 mai 2016, 23:49

Re: Bug mysensors relais

Message par jackyhi »

Bonsoir aux veilleurs de nuit!! et bonne années aux âmes de bonne volonté.

Je viens de modifier le sketch de RelayWithButtonActuator.ino parce que la réactivité du relais à la commande du bouton était nulle voire, donnait des états erronés dans domoticz par rapport à l'état réel du relais.

je vous livre le sketch que j'ai modifié (dans la section loop à partir de la récupération de l'état du bouton) :

Code : Tout sélectionner


// Enable debug prints to serial monitor
#define MY_DEBUG 

// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
//Definition niveau de puissance d'émission pour le NRF24L01  MIN,LOW,HIGH,MAX 
//Attention au débit nécessaire sur l'alimentation 3.3v lors de puissance MAX
#define MY_RF24_PA_LEVEL RF24_PA_MAX

// Enabled repeater feature for this node
#define MY_REPEATER_FEATURE

#define MY_NODE_ID 4

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

#define RELAY_PIN  4  // Arduino Digital I/O pin number for relay 
#define BUTTON_PIN  3  // Arduino Digital I/O pin number for button 
#define CHILD_ID 1   // Id of the sensor child
#define RELAY_ON 0
#define RELAY_OFF 1

Bounce debouncer = Bounce(); 
int oldValue=0;
bool state;

MyMessage msg(CHILD_ID,V_LIGHT);

void setup()  
{  
  // Setup the button
  pinMode(BUTTON_PIN,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN,HIGH);
  
  // After setting up the button, setup debouncer
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5);

  // Make sure relays are off when starting up
  digitalWrite(RELAY_PIN, RELAY_OFF);
  // Then set relay pins in output mode
  pinMode(RELAY_PIN, OUTPUT);   
      
  // Set relay to last known state (using eeprom storage) 
  state = loadState(CHILD_ID);
  digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
}

void presentation()  {
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("Relay & Button", "1.0");

  // Register all sensors to gw (they will be created as child devices)
  present(CHILD_ID, S_LIGHT);
}

/*
*  Example on how to asynchronously check for new messages from gw
*/
void loop() 
{
  debouncer.update();
  // Get the update value
  int value = debouncer.read();
  if (value != oldValue && value==0) {
       // inverse state
      state = state?false:true;
      // Change relay state directement sur la broche
      digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
      //send(msg.set(state?false:true), true); // Send new state and request ack back //ancienne commande!!!
      //envoi msg changement etat du relais suite action BP pour mettre a jour domoticz avec acknowlege pour verifcation
      send(msg.set(state), true); // Send new state and request ack back       
  }
  oldValue = value;
} 
 
void receive(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
  if (message.isAck()) {
     #ifdef MY_DEBUG
        Serial.println("Ceci est un ack de la gateway");
     #endif 
  }

  if (message.type == V_LIGHT) {
     // Change relay state
     state = message.getBool();
     digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID, state);
    
     // Write some debug info
     #ifdef MY_DEBUG
      // Write some debug info
       Serial.print("Nouveau changement du Relay:");
       Serial.print(message.sensor);
       Serial.print(", Nouvel Etat: ");
       Serial.println(message.getBool());
     #endif 
   } 
}


Le relais fonctionne parfaitement et le bouton est réactif.

Mais voici les logs de debug que j'obtien dans le moniteur série:

Code : Tout sélectionner

Init complete, id=4, parent=0, distance=1, registration=1
TSP:SANCHK:OK
TSP:MSG:READ 5-5-4 s=255,c=3,t=8,pt=1,l=1,sg=0:1
TSP:MSG:FPAR RES (ID=5, dist=1)
TSP:SANCHK:OK
TSP:SANCHK:OK
TSP:MSG:READ 0-0-4 s=1,c=1,t=2,pt=0,l=1,sg=0:1         //Action ON sur relais dans domoticz
TSP:MSG:ACK msg
TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=0,l=1,sg=0,ft=4,st=ok:1
Nouveau changement du Relay:1, Nouvel Etat: 1
TSP:MSG:READ 0-0-4 s=1,c=1,t=2,pt=0,l=1,sg=0:0         //Action OFF sur relais dans domoticz
TSP:MSG:ACK msg
TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=ok:0
Nouveau changement du Relay:1, Nouvel Etat: 0
!TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=fail:1  //Action ON sur relais avec BP
!TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=fail:0  //Action OFF sur relais avec BP
TSP:SANCHK:OK
!TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,ft=2,st=fail:1  //Action ON sur relais avec BP
TSP:SANCHK:OK
!TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,ft=3,st=fail:0  //Action OFF sur relais avec BP 
TSP:SANCHK:OK
TSP:MSG:READ 0-0-4 s=1,c=1,t=2,pt=0,l=1,sg=0:1        //Action ON sur relais dans domoticz
TSP:MSG:ACK msg
TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=0,l=1,sg=0,ft=4,st=ok:1
Nouveau changement du Relay:1, Nouvel Etat: 1
TSP:MSG:READ 0-0-4 s=1,c=1,t=2,pt=0,l=1,sg=0:0        //Action OFF sur relais dans domoticz
TSP:MSG:ACK msg
TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=ok:0
Nouveau changement du Relay:1, Nouvel Etat: 0
TSP:SANCHK:OK
Apparemment la commande à partir de domoticz fonctionne bien mais les messages envoyés quand j'agis sur le bouton affichent du st=fail:1 ou 0

Qui peut me dire ce qui pêche dans le code du sketch?
Raspberry Pi2 VPN, Pi 3, Pi4 ,RFXCom, 6 volets BLYSS, sondes Temp_humid Attiny85, zigbee, Mysensors, RFLINK , Zwave capteurs portes Prises, Alarme avec 2 sirènes maison esp8266, Thermostat NETAMO vannes thermostatiques
Répondre