Bonjour,
J’ai un souci de zone mémoire qui ne peut pas être lue en binaire mais bien en mot.
Débuté il y a 25 ans, je me suis fait un système de domotique avec un automate Wago et une supervision que j’ai entièrement
écrite en VB et qui tourne sur un PC en 24/7
J’ai découvert HA il y a peu et je voudrais m’en servir pour avoir une interface sur GSM/Tablette (pas envie de tout ré-écrire sous Android)
et pour avoir un accès de l’extérieur.
J’ai configuré HA pour faire une communication modbus avec l’automate.
D’une manière générale ca fonctionne, mais j’ai un souci pour lire une zone mémoire.
Je voudrais lire QX052.05 mais il s’affiche en Unavailable
binary_sensors:
- name: PLC_TestBit1349
address: 1349 # QX052.05 = 512+16*52+05 = 1349
slave: 1
scan_interval: 2
input_type: discrete_input
En faisant des tests par tatonements j’ai identifié que HA peut lire que jusqu’à l’adresse 1023, après ça devient Unavailable
Ce qui est vraiment étrange, c’est que si je vais lire la mémoire 52 au format mot ça passe.
sensors:
- name: TestAna52
address: 564 # 512+52
slave: 1
scan_interval: 2
state_class: measurement
unit_of_measurement: xx
input_type: input
data_type: int16
scale: 1
offset: 0
precision: 1
Est-ce que quelqu’un aurait une explication ?
Il y a des limitations dans HA avec la lecture de bits ?
Ou alors il faut y accéder autrement qu’a partir de 512 ?
J’espère que non, je n’ai pas envie de devoir modifier le programme automate juste pour HA.
J’ai essayé discrete_input, input et coil : même résultat
Merci d’avance
Edit pour la réponse :
En fait il y a effectivement un « trou » dans les adresses quand on souhaite lire en bit, des mots 32 à 255. Voir mon post ci-dessous.
La solution pour cette plage d’adresses c’est de lire en mot puis de faire un masquage dans un ‹ template ›.
Merci à Pyroaction pour l’idée du template et l’exemple
Voici la config minimale dans mon cas pour lire QX052.05 :
modbus:
- name: modbus_hub
type: tcp
host: 192.168.1.xx
port: 502
sensors:
- name: TestAna52
unique_id: TestAna52
address: 564 # 512+52
slave: 1
scan_interval: 2
state_class: measurement
unit_of_measurement: xx
input_type: input
data_type: int16
scale: 1
offset: 0
precision: 1
template:
- binary_sensor:
- name: Ana52Bit5
unique_id: Ana52Bit5_UID
state: "{{ states('sensor.TestAna52')|int|bitwise_and(32) }}"
Le statut est alors disponible par binary_sensor.ana52bit5
Merci à tous