Pour ce qui est de la config Home Assistant, je me dis qu’on pourrais éviter Node Red puisque les valeur commence toujours par 0, alors on peut convertir l’option du input_select
en « integer » lorsqu’on passe la valeur à modbus dans l’automation.
Pas encore entièrement tester en pratique, seulement sur la théorie pour l’instant
Disons que nos input_select sont du genre:
input_select:
pac_mode:
name: Mode Pompe a Chaleur
options:
- Froid
- Chaleur
- Auto
initial: Auto
icon: mdi:heat-pump
Si on met bien les options dans l’ordre de leur numéro, alors dans un automation on devrait pouvoir récupérer/convertir en numéro dans l’action avec quelque chose du genre:
data_template:
value: "(state_attr('input_select.pac_mode','options').index(states('input_select.pac_mode')))|int"
Et pour réduire au minimum le nombre d’automation nécessaire on peut mettre tout les entity comme trigger, et dans l’action on utilise trigger
, ce qui nous donne
data_template:
value: "(state_attr('trigger.entity_id','options').index(trigger.to_state.state)))|int"
Pour ce qui est de l’adresse modbus je pense qu’on peut définir ça avec un mapper
- service: modbus.write_register
data_template:
address: >-
{% set mapper =
{ 'input_select.pac_mode':'1001',
'input_select.pac_eco_mode':'1007',
'input_select.pac_ecs_boost':'1026' } %}
{{ mapper[trigger.entity_id]|int }}
value: '{{ (state_attr('trigger.entity_id','options').index(trigger.to_state.state)))|int }}'
Ceci dit c’est ma premiere fois avec Modbus alors garantie que je me plante quelques parts.
Encore faut-il le mécanisme pour que les changement fait directement sur la pac met à jour Home Assistant dans la foulé. Mais je pense que vu les sensors mis en place par neuvidor on devrait pouvoir faire un automation similaire, ou bien utiliser des template pour les input_select justement.
Mais la pour convertir le numéro en valeur on fait un peut l’inverse, on prend la valeur numérique du sensor pour appliquer la valeur correct au input_select
value: '{{ state_attr('input_select.pac_mode', 'options')[states('sensor.pac_1051_unit_mode')|int] }}'
# si valeur de 'sensor.pac_1051_unit_mode` passe a 1, alors 'value' sera 'Chaleur'
Une fois que tout sera installé je tenterais de bidouiller avec tout ça et peut-être tenté mon premier Blueprint.