HI,
I installed this firmware in HAAS and it works fine. It controls my 8 relays without problem and the status remains the same when I restart my nano, it takes the same status.
I have problems only at the start to detect the relays in HASS. I have tried several things but I would like to know how to avoid it if the status has already been detected. In other words, the first initiation.
#include <Arduino.h>
/**
 *
 * REVISION HISTORY
 * Cette version est fonctionnel et est compatible avec Home Assistant (Sauf l'initialisation)
 * Utilise le composant 74HC595 pour réduire le nombre de fils.
 *
 * DESCRIPTION
 * Ce firmware utilise 8 sorties pour relais
 * V_STATUS sert seulement pour le statu de sortie
 * V_CUSTOM est pour activé les relais.
*/
// Mettre le mode DEBUG ou l'enlever en commentaire
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_RF24
//#define MY_RADIO_RFM69
//#define MY_IS_RFM69HW
//#define MY_RFM69_NEW_DRIVER				// Use new RFM69 Driver (include ATC)
//#define MY_RFM69_FREQUENCY RFM69_868MHZ
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#define SN "8_Relais"
#define SV "1.2"
#define NB_OUTPUTS 8
#define OUTPUT_SER		7	// Serial data comes on this pin
#define OUTPUT_RCLK		8	// This is the LATCH pin. Data is released when the pin goes HI
#define OUTPUT_SRCLK	4	// Clock pin
#define HEARTBEAT_DELAY 3600000
#define pinEnable 6 // C'est dans la conception du board. La pin D6 doit être à 0 pour que le 74HC595 soit enable.
byte outputStates;
unsigned long lastHeartBeat=0;
void changeOutputState(int i, boolean newState){
	bitWrite(outputStates, i, newState);
	// Lock latch
	digitalWrite(OUTPUT_RCLK, LOW);
	// Write bits
	shiftOut(OUTPUT_SER, OUTPUT_SRCLK, MSBFIRST, outputStates);
	// Unlock latch
	digitalWrite(OUTPUT_RCLK, HIGH);
}
void setup() {
	pinMode( OUTPUT_SER, OUTPUT);
	pinMode( OUTPUT_RCLK, OUTPUT);
	pinMode( OUTPUT_SRCLK, OUTPUT);
  pinMode( pinEnable, OUTPUT);
  digitalWrite(pinEnable, LOW);  // On met ici toujour la pin D6 à LOW
  
}
void presentation() {
	// On envoie ici la version et le nom du Sketch
	sendSketchInfo(SN, SV);
	// On présente les relais selon le nombre établi au départ.
	for (int i=0; i< NB_OUTPUTS; i++){
		present(i, S_BINARY );
	}
}
void loop(){
  
	// Send a HeartBeat frequently so Domoticz see us as alive.
	if (millis() > lastHeartBeat + HEARTBEAT_DELAY){
		lastHeartBeat = millis();
		sendHeartbeat();
    }
}
void receive(const MyMessage &message){
	boolean currentStatus;
	switch(message.type){
		case V_CUSTOM:
			// Revert output status :
			currentStatus=bitRead(outputStates, message.sensor);
			changeOutputState(message.sensor, !currentStatus);
			break;
		case V_STATUS:
			changeOutputState(message.sensor, message.getBool());
			break;
	}
	// Send new state :
	currentStatus=bitRead(outputStates, message.sensor);
	MyMessage msg(message.sensor, V_STATUS);
	msg.set(currentStatus);
	send(msg);
}
Thank if somebody known