Bonjour
Je vais le faire en 2 partie, 1er partie j’explique mes mésaventure et la 2eme sa sera le projet (comprenant 3 module différent)
1er Partie :
Je vais explique pourquoi je me suis lancé sur ce projet, depuis que j’ai fait construire j’ai cherché par plusieurs moyen de domotisé mes éclairage sans pour autant être obligé de passé par des ampoules connecté (chose qui me gêné un peut) après quelque essaie avec un module relais Xiaomi AQARA en zigbee qui se sont révélé concluant, j’en ai commandé 7 (donc la possibilité de piloté 16 circuit d’éclairage au total avec celui que j’avais déjà) !!! « ATTENTION : ne peut pas venir en remplacement d’un télérupteur » !!! donc pour évité de tout mettre dans les boite de dérivation dans les combles je suis partie dans l’optique de ramené les liaison au tableau électrique, j’ai omis de précisé que je suis électricien donc pour sa je sais exactement se que j’ai fait (retour des interrupteur et départ vers les éclairage), j’ai reçu les 7 et j’ai commencé a testé dans le dur (est c’est la que les problème on commencé) quand je piloté par un interrupteur un des module (lui allume bien l’ampoule qui lui est associer) mais a des moment et sans raison apparente, j’ai un autre module qui lui aussi allumé une ampoule alors que je ne l’avais pas sollicité, mais pas que, je me suis aussi retrouvé dans l’impossibilité de piloté un module, donc j’ai essayé de diagnostiqué le soucis, après quelque coup de voltmètre par ci par la, j’ai trouve la cause du problème, en résidentiel le problème est récurrent quand les circuits passe par des pieuvres, tout disjoncteur éteint entre le retour interrupteur et la terre, environ 3V, rien de bien gênant donc je décide de remonté tout les disjoncteurs sauf ceux des éclairage et la c’est la FOIRE entre 50V et 110V sur un circuit non alimenté (les 4 disjoncteur éclairage étant coupé), la il y a de quoi se tiré les cheveux, en cherchant sur internet j’ai trouvé comme quoi le problème est récurent, et il s’appel TENSION RÉSIDUEL (j’ai testé plusieurs solution pour éliminé voir limité cette tension mais rien de concluant j’ai pas réussi a limité le problème, donc pour l’instant j’ai la moitiez de la maison qui a ses éclairage piloté (je tourne avec 4 module relais a la place de 8), donc voila pourquoi j’ai décidé de me lancé dans se projet assez fou.
2eme Partie:
Donc pour le teste, pour voir je suis partie sur ESPhome (pour sont intégration à Home Assistant et MQTT et surtout sa facilité a implémenté des fonctions) un Wemos D1 Mini alimenté en USB avec 2 relais et 2 bouton poussoir sur une breadboard et le résultat est positif avec le code si dessous
########################
#### Config ESPhome ####
########################
esphome:
name: interrupteur_1x2m_01
platform: ESP8266
board: d1_mini
on_boot:
if:
condition:
mqtt.connected:
then:
- logger.log: MQTT is connected!
wifi:
ssid: !secret ssid_wifi_domotique
password: !secret pass_wifi_domotique
use_address: 192.168.2.120 # à mettre si ESPhome ne détecte pas l'ESP sur le réseau
ap:
ssid: "Interrupteur 1x2m 01 - Hotspot"
password: !secret pass_wifi_hotspot_esphome
captive_portal:
web_server:
port: 80
auth:
username: !secret user_webserver_esphome
password: !secret pass_webserver_esphome
logger: # Enable logging
ota:
password: !secret pass_ota_esphome
api:
port: 6053
password: !secret pass_api_esphome
mqtt:
broker: !secret broker_mqtt
username: !secret user_mqtt_esphome
password: !secret pass_mqtt_esphome
discovery: false
discovery_retain: false
topic_prefix: esphome/interrupteur_1x2m_01
log_topic: esphome/interrupteur_1x2m_01/log
#########################
#### Config Firmware ####
#########################
sensor:
- platform: wifi_signal
name: "Interrupteur 1x2m 01 - Signal WiFi"
update_interval: 5s
- platform: uptime
name: "Interrupteur 1x2m 01 - uptime"
binary_sensor:
- platform: gpio # Bouton poussoir 1 (bancher entre le +5V et le GPIO5)
pin:
number: GPIO5
mode: INPUT_PULLUP
inverted: True
name: "Interrupteur 1x2m 01 - BP 1"
on_press: # information à ne pas négligé pour la commutation du relais 1 via le bouton poussoir 1
- switch.toggle: relay1 # correspond à l'id du relais 1
- platform: gpio # Bouton poussoir 2 (bancher entre le +5V et le GPIO4)
pin:
number: GPIO4
mode: INPUT_PULLUP
inverted: True
name: "Interrupteur 1x2m 01 - BP 2"
on_press: # information à ne pas négligé pour la commutation du relais 2 via le bouton poussoir 2
- switch.toggle: relay2 # correspond à l'id du relais 2
switch:
- platform: gpio # Relais 1 (bancher sur le GPIO12)
name: "Interrupteur 1x2m 01 - Relais 1"
pin: GPIO12
id: relay1
#restore_mode: ALWAYS_OFF # Option qui détermine si le relais doit etre commuté au démarrage de l'ESP
- platform: gpio # Relais 2 (bancher sur le GPIO15)
name: "Interrupteur 1x2m 01 - Relais 2"
pin: GPIO15
id: relay2
#restore_mode: ALWAYS_OFF # Option qui détermine si le relais doit etre commuté au démarrage de l'ESP
Avec ce code, voici se que cela me donne sur la page web de l’ESP.
En passe par l’API voici ce que cela me donne sur Home-Assistant.
Mais pour que mon projet puisse aboutir il me faut 1 module pour remplacé les simple allumage et 2 module pour remplacé les vas et viens, pour le 2eme module j’ai modifier un petit peut le code pour qu’il n’y est pas de conflit entre les 2, à chaque « name », « use_address », au hotspot et pour la config de MQTT aussi.
########################
#### Config ESPhome ####
########################
esphome:
name: interrupteur_1x2m_02
platform: ESP8266
board: d1_mini
on_boot:
if:
condition:
mqtt.connected:
then:
- logger.log: MQTT is connected!
wifi:
ssid: !secret ssid_wifi_domotique
password: !secret pass_wifi_domotique
use_address: 192.168.2.121 # à mettre si ESPhome ne détecte pas l'ESP sur le réseau
ap:
ssid: "Interrupteur 1x2m 02 - Hotspot"
password: !secret pass_wifi_hotspot_esphome
captive_portal:
web_server:
port: 80
auth:
username: !secret user_webserver_esphome
password: !secret pass_webserver_esphome
logger: # Enable logging
ota:
password: !secret pass_ota_esphome
api:
port: 6053
password: !secret pass_api_esphome
mqtt:
broker: !secret broker_mqtt
username: !secret user_mqtt_esphome
password: !secret pass_mqtt_esphome
discovery: false
discovery_retain: false
topic_prefix: esphome/interrupteur_1x2m_02
log_topic: esphome/interrupteur_1x2m_02/log
#########################
#### Config Firmware ####
#########################
sensor:
- platform: wifi_signal
name: "Interrupteur 1x2m 02 - Signal WiFi"
update_interval: 5s
- platform: uptime
name: "Interrupteur 1x2m 02 - uptime"
binary_sensor:
- platform: gpio # Bouton poussoir 1 (bancher entre le +5V et le GPIO5)
pin:
number: GPIO5
mode: INPUT_PULLUP
inverted: True
name: "Interrupteur 1x2m 02 - BP 1"
on_press: # information à ne pas négligé pour la commutation du relais 1 via le bouton poussoir 1
- switch.toggle: relay1 # correspond à l'id du relais 1
- platform: gpio # Bouton poussoir 2 (bancher entre le +5V et le GPIO4)
pin:
number: GPIO4
mode: INPUT_PULLUP
inverted: True
name: "Interrupteur 1x2m 02 - BP 2"
on_press: # information à ne pas négligé pour la commutation du relais 2 via le bouton poussoir 2
- switch.toggle: relay2 # correspond à l'id du relais 2
switch:
- platform: gpio # Relais 1 (bancher sur le GPIO12)
name: "Interrupteur 1x2m 02 - Relais 1"
pin: GPIO12
id: relay1
#restore_mode: ALWAYS_OFF # Option qui détermine si le relais doit etre commuté au démarrage de l'ESP
- platform: gpio # Relais 2 (bancher sur le GPIO15)
name: "Interrupteur 1x2m 02 - Relais 2"
pin: GPIO15
id: relay2
#restore_mode: ALWAYS_OFF # Option qui détermine si le relais doit etre commuté au démarrage de l'ESP
Donc la maintenant dans Home Assistant je me retrouve avec sa.
Mais le problème c’est que vu que cela remplace un vas et vient si mes 2 relais 1 son OFF, ma lumière sera quand même allumé et quand les 2 relais 1 sont a ON la lumière sera aussi allumé (cela occasionnera un soucis plus tard) mais sa sans une interprétation de Home Assistant, ce’st que l’on ne sais pas si la lumière est allumé ou pas car nous voyons que l’état des relais, donc avec l’aide de plusieurs personne qui on su m’orienté et m’aidé a mettre en place un entity light qui dépend de l’état des relais 1 des 2 ESP, donc dans home assistant dans le dossier de config, dans le fichier YAML qui prend en charge les entity light on y rajoute se code.
light:
- platform: template
lights:
vv01:
friendly_name: Vas et vient - test # le nom que vous voulez qui apparaîtra sur Home Assistant
value_template: >-
{{ is_state('switch.interrupteur_1x2m_01_relais_1', 'on')
and is_state('switch.interrupteur_1x2m_02_relais_1', 'on')
or is_state('switch.interrupteur_1x2m_01_relais_1', 'off')
and is_state('switch.interrupteur_1x2m_02_relais_1', 'off') }}
turn_on: # une option pour allumé la lumière suivant l’état de l'entity
service: switch.toggle # pourquoi "switch.toggle" et pas "switch.turn_on" car je vais agir sur seulement sur le relais 1 de l'ESP 1 donc si le relais 1 de l'ESP 2 et a "OFF" alors pour allumé la lumière il va mettre le relais 1 de l'ESP 1 a "OFF" pour remplir la condition tout à "OFF"
data:
entity_id: switch.interrupteur_1x2m_01_relais_1
turn_off: # une option pour éteindre la lumière suivant l’état de l'entity
service: switch.toggle # pourquoi "switch.toggle" et pas "switch.turn_off" car je vais agir sur seulement sur le relais 1 de l'ESP 1 donc si le relais 1 de l'ESP 2 et a "ON" alors pour allumé la lumière il va mettre le relais 1 de l'ESP 1 a "ON" pour remplir la condition tout à "OFF"
data:
entity_id: switch.interrupteur_1x2m_01_relais_1
#value_template: >-
# {{ is_state('switch.interrupteur_1x2m_01_relais_1', 'on') // entity du relais 1 sur l'ESP01 ensuite la condition ON ou OFF
# and is_state('switch.interrupteur_1x2m_02_relais_1', 'on') // entity du relais 1 sur l'ESP02 ensuite la condition ON ou OFF et le and au debut permet de de faire comprendre a Home Assistant que si les 2 condition sont réuni alors la lumiere est ON
# or is_state('switch.interrupteur_1x2m_01_relais_1', 'off') // entity du relais 1 sur l'ESP01 ensuite la condition ON ou OFF et le or au debut permet de de faire comprendre a Home Assistant que pour que la lumiere sois ON c'est les 2 conditions au dessus OU les 2 après le or
# and is_state('switch.interrupteur_1x2m_02_relais_1', 'off') }} // entity du relais 1 sur l'ESP02 ensuite la condition ON ou OFF
Donc grâce a se code cela me permet de voir sa comme sa dans Home Assistant.
ESP01 Relais 1 OFF / ESP02 Relais 1 OFF = Lumière ON.
ESP01 Relais 1 ON / ESP02 Relais 1 OFF = Lumière OFF.
ESP01 Relais 1 OFF / ESP02 Relais 1 ON = Lumière OFF.
ESP01 Relais 1 ON / ESP02 Relais 1 ON = Lumière ON.
Et puis si j’appuie sur le commute du vas et vient, il commute le relais 1 de l’ESP01.
Donc niveau code pour l’instant je gère la base et voici le rendu 3D (4 Bouton, 1 Ecran 2,4", DHT22 (avorté mais prévu sur le PCB du module) et photorésistance pour mesuré la luminosité de la pièce (dans une prochaine version) avec montage standard sur boite d’encastrement au norme européenne).
Le PCB dans sa V2 (le tout prévu pour rentré dans une boite d’encastrement de 67mm).
Apres quelque essais (ou j’y avais déjà réfléchi mais cela confirmé se que je pensé) suivant le câblage et le code plus haut dans Home Assistant si les 2 ESP reboot ou même si il y a une panne de courant les 2 relais vont resté a OFF et la la lumière sera allumé et je ne veux pas (surtout si cela se produit en pleine nuit) je préfère mettre un ESP de surveillance dans le tableau pour voir si cela est du a une panne de courant et restauré l’état des relais plutôt que tout passe a OFF et que la lumière s’allume le temps du Boot des ESP.
Donc avant la modification du code.
ESP01 Relais 1 OFF / ESP02 Relais 1 OFF = Lumière ON.
ESP01 Relais 1 ON / ESP02 Relais 1 OFF = Lumière OFF.
ESP01 Relais 1 OFF / ESP02 Relais 1 ON = Lumière OFF.
ESP01 Relais 1 ON / ESP02 Relais 1 ON = Lumière ON.
Et en simulant la panne de courant.
Et après le retour du courant.
Donc voici le code modifier en conséquence.
- platform: template
lights:
vv01:
friendly_name: Vas et vient - test # le nom que vous voulez qui apparaîtra sur Home Assistant
value_template: >-
{{ is_state('switch.interrupteur_1x2m_01_relais_1', 'on')
and is_state('switch.interrupteur_1x2m_02_relais_1', 'off')
or is_state('switch.interrupteur_1x2m_01_relais_1', 'off')
and is_state('switch.interrupteur_1x2m_02_relais_1', 'on') }}
turn_on: # une option pour allumé la lumière suivant l’état de l'entity
service: switch.toggle # pourquoi "switch.toggle" et pas "switch.turn_on" car je vais agir sur seulement sur le relais 1 de l'ESP 1 donc si le relais 1 de l'ESP 2 et a "OFF" alors pour allumé la lumière il va mettre le relais 1 de l'ESP 1 a "OFF" pour remplir la condition tout à "OFF"
data:
entity_id: switch.interrupteur_1x2m_01_relais_1
turn_off: # une option pour éteindre la lumière suivant l’état de l'entity
service: switch.toggle # pourquoi "switch.toggle" et pas "switch.turn_off" car je vais agir sur seulement sur le relais 1 de l'ESP 1 donc si le relais 1 de l'ESP 2 et a "ON" alors pour allumé la lumière il va mettre le relais 1 de l'ESP 1 a "ON" pour remplir la condition tout à "OFF"
data:
entity_id: switch.interrupteur_1x2m_01_relais_1
#value_template: >-
# {{ is_state('switch.interrupteur_1x2m_01_relais_1', 'on') // entity du relais 1 sur l'ESP01 ensuite la condition ON ou OFF
# and is_state('switch.interrupteur_1x2m_02_relais_1', 'on') // entity du relais 1 sur l'ESP02 ensuite la condition ON ou OFF et le and au debut permet de de faire comprendre a Home Assistant que si les 2 condition sont réuni alors la lumiere est ON
# or is_state('switch.interrupteur_1x2m_01_relais_1', 'off') // entity du relais 1 sur l'ESP01 ensuite la condition ON ou OFF et le or au debut permet de de faire comprendre a Home Assistant que pour que la lumiere sois ON c'est les 2 conditions au dessus OU les 2 après le or
# and is_state('switch.interrupteur_1x2m_02_relais_1', 'off') }} // entity du relais 1 sur l'ESP02 ensuite la condition ON ou OFF
Et donc ceci donne cela dans Home Assistant.
La je vais simulé une panne de courant.
J’avais peur que l’entity de la lumiere reste declaré comme ON mais non, et la au reboot.
La suite dans un prochain article