Hello,
À force de râler auprès d'Helios, à propos de ma VMC KWL EC-370 Pro mal fichue, ils ont finalement décidé de me la changer. Plutôt que de rester sur le même modèle avec la nouvelle régulation EasyControls, je suis même passé sur une 500 W, plus grosse, mais pas certifiées passiv'haus ; le rendement est donc moins bon (les chiffres sont les mêmes, mais ils ne le calculent pas de la même façon ; en gros, pour une même valeur, c'est 10% de moins), mais comme elle est surdimensionnée, les ventilos consomment moins dans ma plage d'utilisation. Elle est, du coup, aussi moins bruyante
Bref, tout ça pour dire que maintenant, le paramétrage peut se faire via l'interface web. Mais elle dispose également d'un serveur Modbus TCP en standard ! Du coup, j'ai commencé à regarder pour faire une passerelle KNX en utilisant pKNyX.
Pour le moment, mon souci c'est de dialoguer avec ce foutu serveur Modbus. Déjà, leur façon d'utiliser ce protocole est vraiment zarbi : plutôt que d'utiliser le standard Modbus, en mettant chaque variable dans un registre (coils, holding registers, etc...), ils ont implémenté une boîte aux lettres ascii ! Pfff... En gros, pour lire une variable, il faut :
- commencer par écrire son numéro sous forme ascii en l'envoyant via la fonction Modbus 'write multiple registers', avec pour adresse de départ 1, et où chaque caractère ascii est groupé par deux (puisqu'il s'agit de registres 16 bits) ;
- puis lire le registre en faisant une lecture des n premiers holding registers, et on décode la chaîne ascii de manière inverse.
Pour l'instant, je n'arrive qu'à lire : si je lis les 10 premiers holding registers, j'obtiens toujours :
[30256, 12336, 12336, 15691, 22348, 8261, 17184, 13616, 12375, 8268]
ce qui, une fois décodé, donne :
v00000=KWL EC 500W L
En gros, la variable courante est v00000, et elle vaut "KWL EC 500W L".
Maintenant, si j'essaye d'écrire le nom d'une autre variable, la v00104 (température aire extérieur) par exemple, j'obtiens toujours une erreur de type valeure illégale.
J'utilise pour communiquer le package python pymodbus. J'ai essayé également avec python-tk, une autre implémentation, et j'ai la même erreur. Et je ne pige pas d'où ça vient. D'après le code (et la norme Modbus), ce genre d'erreur sort si on essaye d'envoyer trop de valeurs (one ne peut adresser que 123 registres consécutifs), ou si le nombre d'octets envoyés n'est pas le double du nombre de registres. J'ai vérifié dans le code python, on passe une liste, et le nombre d'octets est al taille de la liste x2, donc pas de souci.
Du coup, je me demande si ce n'est pas la VMC qui répond ça, plutôt que la librairie d'envoie.
J'aimerais savoir si quelqu'un a par hasard des infos sur le sujet... Comme c'est tout nouveau, y'a peu de chance, mais j'espère que ce fil sera référencé par Google, et que d'autres futurs utilisateurs tomberont dessus... En attendant, je poursuis mes tests.
À force de râler auprès d'Helios, à propos de ma VMC KWL EC-370 Pro mal fichue, ils ont finalement décidé de me la changer. Plutôt que de rester sur le même modèle avec la nouvelle régulation EasyControls, je suis même passé sur une 500 W, plus grosse, mais pas certifiées passiv'haus ; le rendement est donc moins bon (les chiffres sont les mêmes, mais ils ne le calculent pas de la même façon ; en gros, pour une même valeur, c'est 10% de moins), mais comme elle est surdimensionnée, les ventilos consomment moins dans ma plage d'utilisation. Elle est, du coup, aussi moins bruyante
Bref, tout ça pour dire que maintenant, le paramétrage peut se faire via l'interface web. Mais elle dispose également d'un serveur Modbus TCP en standard ! Du coup, j'ai commencé à regarder pour faire une passerelle KNX en utilisant pKNyX.
Pour le moment, mon souci c'est de dialoguer avec ce foutu serveur Modbus. Déjà, leur façon d'utiliser ce protocole est vraiment zarbi : plutôt que d'utiliser le standard Modbus, en mettant chaque variable dans un registre (coils, holding registers, etc...), ils ont implémenté une boîte aux lettres ascii ! Pfff... En gros, pour lire une variable, il faut :
- commencer par écrire son numéro sous forme ascii en l'envoyant via la fonction Modbus 'write multiple registers', avec pour adresse de départ 1, et où chaque caractère ascii est groupé par deux (puisqu'il s'agit de registres 16 bits) ;
- puis lire le registre en faisant une lecture des n premiers holding registers, et on décode la chaîne ascii de manière inverse.
Pour l'instant, je n'arrive qu'à lire : si je lis les 10 premiers holding registers, j'obtiens toujours :
[30256, 12336, 12336, 15691, 22348, 8261, 17184, 13616, 12375, 8268]
ce qui, une fois décodé, donne :
v00000=KWL EC 500W L
En gros, la variable courante est v00000, et elle vaut "KWL EC 500W L".
Maintenant, si j'essaye d'écrire le nom d'une autre variable, la v00104 (température aire extérieur) par exemple, j'obtiens toujours une erreur de type valeure illégale.
J'utilise pour communiquer le package python pymodbus. J'ai essayé également avec python-tk, une autre implémentation, et j'ai la même erreur. Et je ne pige pas d'où ça vient. D'après le code (et la norme Modbus), ce genre d'erreur sort si on essaye d'envoyer trop de valeurs (one ne peut adresser que 123 registres consécutifs), ou si le nombre d'octets envoyés n'est pas le double du nombre de registres. J'ai vérifié dans le code python, on passe une liste, et le nombre d'octets est al taille de la liste x2, donc pas de souci.
Du coup, je me demande si ce n'est pas la VMC qui répond ça, plutôt que la librairie d'envoie.
J'aimerais savoir si quelqu'un a par hasard des infos sur le sujet... Comme c'est tout nouveau, y'a peu de chance, mais j'espère que ce fil sera référencé par Google, et que d'autres futurs utilisateurs tomberont dessus... En attendant, je poursuis mes tests.