MAJ du 21/06/2022 : utilisation de mqtt en !include et grosse optimisation du code
Objectif
Intégrer le contrôle de votre spa INTEX dans Home Assistant. faire des automatisations pour la filtration ou pour une mise hors gel (oui je baigne l’hivers donc je ne le vide pas en période hivernal) etc…
Pré requis :
- HA ^^
- un broker MQTT comme mosquitto broker (et mqtt explorer pour faire les tests par exemple)
- un spa (vérifier le model dans les liens ci dessous)
- un esp flashé prêt à l’emploi (lien ci dessous)
- du wifi accessible vers spa (le boitier que j’utilise à une antenne pour amplifier le signal)
- un maillot de bain (pas franchement obligatoire, rien de mieux qu’un jacuzzi à poil)
A noter
Suite à mon post d’origine [Partage] Connecter Controler son spa Intex via MQTT - Home Assistant - Tutoriels & Partages / Intégration - Home Assistant Communauté Francophone (hacf.fr) N’ayant pas les compétences j’ai décidé d’utiliser le boitier tout prêt de @PaTiTan Système wifi (MQTT) pour Spa INTEX - Communauté HACF / Petites Annonces - Home Assistant Communauté Francophone qui utilise ce tuto sur GitHub : jnsbyr/esp8266-intexsbh20: MQTT WiFi remote control for the Intex PureSpa SB-H20 whirlpool (github.com)
Autant j’arrive à faire quelques soudures, mais dès que j’attaque ce genre de projet, mes plaques ressemble à de la dentelle lol
Sur ce lien, vous aurez tous les topic que vous pourrez écouter : jnsbyr/esp8266-intexsbh20: MQTT WiFi remote control for the Intex PureSpa SB-H20 whirlpool (github.com) et rajouter autant de sensors que vous le souhaitez.
Branchement du boitier
Quand vous recevrez votre boitier, il suffira de le connecter entre le bloc moteur et l’ecran de votre spa. il s’agira juste de dévisser un cable et d’y mettre le boitier. Un tournevis cruciforme pour une seule vis. le tuto du branchement vous sera fourni. (faire le branchement lorsque le spa est débranché électriquement!)
Passer l’interrupteur du boitier sur ON et rebrancher le spa, attendre quelques secondes pour que le boitier se connecte à votre wifi. Si vous le pinger, ou que vous le voyer dans votre DHCP (je vous conseillerai de faire une reservation d’adresse ip comme d’habitude) testez les fonctions de votre spa à partir de l’ecran de commande , cela aidera à remonter tout les informations dans les topic de votre broker mqtt.
Les informations que l’on récupère dans MQTT Explorer (avant meme de s’attaquer à HA)
Cette partie n’est pas obligatoire, mais cela permet de verifier le bon fonctionnement du boitier vers mqtt.
Ce qui va nous interessé en premier, ce sont les valeurs du Topic pool : bubble, filter, heater, power et le sous topic water qui indiquera la temperature actuelle (tempAct) et la température souhaitée (tempSet)
Que faire de toutes ces infos?
Nous allons créer des sensors, un climate, et des switchs…c’est du mqtt, et la methode que vous connaissez déjà - plateform: mqtt
sera déprécié dans peu de temps; sur ce, les exemples de code ci dessous seront optimisés pour l’intégration actuelle.
J’utilise également des !include :
mqtt:
climate: !include mqtt_climate.yaml
number: !include mqtt_number.yaml
sensor: !include mqtt_sensor.yaml
switch: !include mqtt_switch.yaml
les sensors :
Pour créer le sensor de température actuelle de l’eau , de la température souhaité et de la temperature du boitier, il vous suffira de copier coller ce code dans votre fichier
donc j’ai rajouté ces lignes dans mon mqtt_sensor.yaml
code sensors
###################################################################
########## SPA INTEX ##########
###################################################################
# Temperature à atteindre
- name: "intex_temp_set"
state_topic: "pool/water/tempSet"
unique_id: "intex_temp_set"
unit_of_measurement: 'c'
# Temperature de l eau
- name: "intex_temp_actu"
unique_id: mqtt_intex_temp_actu
icon: mdi:thermometer-water
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
state_topic: "pool/water/tempAct"
device_class: temperature
state_class: measurement
unit_of_measurement: °C
# Temperature du boitier
- name: "intex_temp_boitier"
unique_id: mqtt_intex_temp_boitier
icon: mdi:thermometer-alert
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
state_topic: "wifi/temp"
device_class: temperature
state_class: measurement
entity_category: diagnostic
unit_of_measurement: °C
et nous les retrouvons :
ou avec une carte mini graph :
→ le tempAct correspond à la température actuelle, et tempSet à la température que vous souhaitée.
Je ne vous mets pas le code des cartes, HA est bourré d’assistant maintenant et chacun aura ses préférences.
/!\ conseil : vider le cache de votre navigateur pendant vos tests ! (merci à 𝓢𝓮𝓽𝓱#9267 et @fredarro pour leur aide sur notre chan discord)
les switchs :
et oui, les switch…ce serait quand même pratique d’allumer le spa ou de l’éteindre; de programmer le filtre ou de le relancer automatiquement quand il s’arrête; de pouvoir actionner le chauffage …
Et comme tout en domotique, ce qui est inutile est totalement indispensable !
Je souhaites donc les switchs :
- On/Off du spa,
- On/Off du filtre,
- On/Off des bulles,
Contrairement aux sensors, où il suffit de lire l’information d’un topic, pour envoyer une nouvelle valeur (changer un on en off par exemple) il faudra utiliser le sous topic ‹ command › !
ce n’est pas compliqué c’est expliqué là : jnsbyr/esp8266-intexsbh20: MQTT WiFi remote control for the Intex PureSpa SB-H20 whirlpool (github.com) avec le tableau Subscribed Topics
Code à coller dans le fichier mqtt_switch.yaml
code switch
###############################################################
############## SPA INTEX ###############
###############################################################
# Switch on off
- name: intex_power
unique_id: mqtt_intex_power
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
payload_on: "on"
payload_off: "off"
state_topic: pool/power
command_topic: pool/command/power
# swicth des bulles
- name: intex_bubble
unique_id: mqtt_intex_bubble
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
payload_on: "on"
payload_off: "off"
state_topic: pool/bubble
command_topic: pool/command/bubble
# switch du filtre
- name: intex_filter
unique_id: mqtt_intex_filter
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
payload_on: "on"
payload_off: "off"
state_topic: pool/filter
command_topic: pool/command/filter
En l’intégrant à une carte vous allez vous retrouver avec ca :
(n’oubliez pas de respecter votre nomenclature sur le nommage de vos entités et de mettre des friendly name pour le coté WAF
Créer une entité Climate pour contrôler la température
Il suffira de coller ce code dans le fichier mqtt_climate.yaml :
code climate
###################################################
####### SPA INTEX ######
###################################################
- name: intex_heater
unique_id: "mqtt_intex_heater"
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
payload_on: "on"
payload_off: "off"
modes:
- "off"
- "heat"
mode_state_topic: "pool/heater"
mode_state_template: >-
{% set values = { 'off':'off','on':'heat','standby':'heat'} %}
{{ values[value] if value in values.keys() else 'off' }}
mode_command_topic: "pool/command/heater"
mode_command_template: >-
{% set values = {'heat':'on','off':'off'} %}
{{ values[value] if value in values.keys() else 'off' }}
action_topic: "pool/heater"
action_template: >-
{% set values = { 'off':'off','on':'heating','standby':'idle'} %}
{{ values[value] if value in values.keys() else 'off' }}
current_temperature_topic: "pool/water/tempAct"
temperature_state_topic: "pool/water/tempSet"
temperature_command_topic: "pool/command/water/tempSet"
temperature_command_template: "{{ value | int }}"
temp_step: 1.0
precision: 1.0
min_temp: 20
max_temp: 40
Vous pourrez ensuite faire une carte climate :
Si vous préférez avoir un slide pour regler la temperature voici le code à coller dans mqtt_number.yaml
code number
###################################################
####### SPA INTEX ######
###################################################
- name: intex_temperature_set
unique_id: mqtt_intex_temperature_set
availability:
- topic: "wifi/state"
payload_available: "online"
payload_not_available: "offline"
value_template: >-
{% set values = { 'offline':'offline','online':'online','error':'offline'} %}
{{ values[value] if value in values.keys() else 'offline' }}
min: 20
max: 40
step: 1.0
state_topic: "pool/water/tempSet"
command_topic: "pool/command/water/tempSet"
command_template: "{{ value | int }}"
il faudra alors rajouter un switch pour allumer le chauffage.
Conclusion
Voila, je penses que la boucle est bouclée.
Pour ma part, je vais continuer sous Node Red pour par exemple recevoir une notification quand l’eau arrive en température et prochainement coupler les informations avec la sonde de PH.
Gros merci aussi à @piitaya pour son partage de code et son aide. !
exemple, aperçu :
pour un lovelace sur tablette ou ordi ou une microsoft surface :
pour un lovelace sur telephone avec (l’excellent) Mushroom :