Alors pour le schema je me suis inspiré de cette page, j'ai simplement rajouté 2 relais et 2 boutons en plus:
http://forum.mysensors.org/topic/799/my-relay-module
Pour le branchement de ces 2 relais supplémentaires se réferer au code ci-dessous pour voir sur quel pin les branchers. C'est hyper fastoche:
_______________________________________________________________________________________________
#include <MySensor.h>
#include <SPI.h>
#include <Bounce2.h>
#define RELAY_PIN1 3 // Arduino Digital I/O pin number for relay
#define RELAY_PIN2 4 // Arduino Digital I/O pin number for relay
#define RELAY_PIN3 5 // Arduino Digital I/O pin number for relay
#define BUTTON_PIN1 6 // Arduino Digital I/O pin number for button
#define BUTTON_PIN2 7 // Arduino Digital I/O pin number for button
#define BUTTON_PIN3 8 // 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 debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
int oldValue1=0;
int oldValue2=0;
int oldValue3=0;
bool state1;
bool state2;
bool state3;
MySensor gw;
MyMessage msg1(1,V_LIGHT);
MyMessage msg2(2,V_LIGHT);
MyMessage msg3(3,V_LIGHT);
void setup()
{
gw.begin(incomingMessage, AUTO, true);
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Relay & Button", "1.0");
// Setup the button
pinMode(BUTTON_PIN1,INPUT);
pinMode(BUTTON_PIN2,INPUT);
pinMode(BUTTON_PIN3,INPUT);
// Activate internal pull-up
digitalWrite(BUTTON_PIN1,HIGH);
digitalWrite(BUTTON_PIN2,HIGH);
digitalWrite(BUTTON_PIN3,HIGH);
// After setting up the button, setup debouncer
debouncer1.attach(BUTTON_PIN1);
debouncer2.attach(BUTTON_PIN2);
debouncer3.attach(BUTTON_PIN3);
debouncer1.interval(5);
debouncer2.interval(5);
debouncer3.interval(5);
// Register all sensors to gw (they will be created as child devices)
gw.present(1, S_LIGHT);
gw.present(2, S_LIGHT);
gw.present(3, S_LIGHT);
// Make sure relays are off when starting up
digitalWrite(RELAY_PIN1, RELAY_OFF);
digitalWrite(RELAY_PIN2, RELAY_OFF);
digitalWrite(RELAY_PIN3, RELAY_OFF);
// Then set relay pins in output mode
pinMode(RELAY_PIN1, OUTPUT);
pinMode(RELAY_PIN2, OUTPUT);
pinMode(RELAY_PIN3, OUTPUT);
// Set relay to last known state (using eeprom storage)
state1 = gw.loadState(1);
digitalWrite(RELAY_PIN1, state1?RELAY_ON:RELAY_OFF);
state2 = gw.loadState(2);
digitalWrite(RELAY_PIN2, state2?RELAY_ON:RELAY_OFF);
state3 = gw.loadState(3);
digitalWrite(RELAY_PIN3, state3?RELAY_ON:RELAY_OFF);
}
/*
* Example on how to asynchronously check for new messages from gw
*/
void loop()
{
gw.process();
debouncer1.update();
debouncer2.update();
debouncer3.update();
// Get the update value
int value1 = debouncer1.read();
if (value1 != oldValue1 && value1==0) {
gw.send(msg1.set(state1?false:true), true); // Send new state and request ack back
}
oldValue1 = value1;
// Get the update value
int value2 = debouncer2.read();
if (value2 != oldValue2 && value2==0) {
gw.send(msg2.set(state2?false:true), true); // Send new state and request ack back
}
oldValue2 = value2;
// Get the update value
int value3 = debouncer3.read();
if (value3 != oldValue3 && value3==0) {
gw.send(msg3.set(state3?false:true), true); // Send new state and request ack back
}
oldValue3 = value3;
}
void incomingMessage(const MyMessage &message) {
// We only expect one type of message from controller. But we better check anyway.
if (message.isAck()) {
Serial.println("This is an ack from gateway");
}
if (message.type == V_LIGHT) {
// Change relay state
if(message.sensor==1){
digitalWrite(RELAY_PIN1, message.getBool()?RELAY_ON:RELAY_OFF);
state1=message.getBool();
}
if(message.sensor==2){
digitalWrite(RELAY_PIN2, message.getBool()?RELAY_ON:RELAY_OFF);
state2=message.getBool();
}
if(message.sensor==3){
digitalWrite(RELAY_PIN3, message.getBool()?RELAY_ON:RELAY_OFF);
state3=message.getBool();
}
// 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());
}
}
________________________________________________________________________________________________
Autre chose que j'ai découvert: le soucis que j'avais pour les commandes inversés: pour rappel le relais au repos, la lumiére était allumé, et la lumière éteinte le relais était actif. Vous allez me dire suffit d'inversé les fils sur le relais entre NO et NC....sauf que dans domoticz si la lumière est éteinte elle est allumé en réalité et vice versa.
J'ai contourné le soucis en modifiant le programme en mettant pin on sur 0 et pin off sur 1.
Aujourd'hui j'ai installé un autre relais et meme soucis. J'avais pas envie de recompiler le programme car je n'ai pour l'instant qu'un seul Arduino que j'utilise pour programmer et comme passerelle.
Je me suis dit doit y avoir un truc car pas très logique que lorsqu'on branche le relais sur le 5v celui-ci s'active direct et le fait d'envoyer la commande
ON le désactive.
J'ai donc pensé au petit cavalier sur la carte relais mais j'ai rien trouvé sur sa fonction (ou j'ai mal cherché...

) . J'ai tenté le coup en déplacant ce cavalier et Bingo ça a fonctionné!!!
Ce cavalier permet donc d'inverser les commandes du relais!!
