Note de ce sujet :
  • Moyenne : 2 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
eibd - Routing vs Tunneling
#1
Bonjour,

Bon, ma compréhension de KnxNet/IP n'étant pas du tout au niveau de ce que je pensais, j'ai besoin de vos lumières...

Pour les échanges de données en fonctionnement normal (hors config, etc..), KNX utilise le mécanisme de multicast, en utilisant comme destination une Group Address. Je ne vous apprend rien.

Les passerelles IP simples, comme la N148 de Siemens, ne peuvent être utilisées qu'en mode unicast, c'est à dire qu'il faut établir une connexion sur la passerelle (unique sur la version 21, 4 possibles sur la 22) pour pouvoir ensuite envoyer/recevoir des GA. C'est le mode Tunneling.

Les passerelles de type routeur, elles, si j'ai bien compris, forward les requètes de type GA du bus KNX vers une adresse IP multicast, et inversement. C'est le mode Routing.

Déjà, est-ce que j'ai bon, jusque là ?

eibd est capable de fonctionner dans les 2 modes : soit en mode Tunneling, soit en mode Routing. Mais comment le configure-t-on en mode Routing ? Si l'on ne précise pas d'adresse après le paramètre 'ip:', quelle adresse/port multicast est utilisé ?

D'autre part, est-ce que le mode Routing est compatible avec linknx ? Pour l'instant, mes divers essais sont infructueux : non seulement je ne vois pas passer de trame IP multicast, mais en plus linknx n'arrive plus à dialoguer avec eibd...

Merci d'avance pour vos lumières.
Frédéric

https://pknyx.gbiloba.org (de nouveau en ligne !)
Répondre
#2
Tu y es presque!

Dans cette affaire, il n'est pas utile de faire le lien entre les modes de diffusion des messages entre le bus KNX et TCP. Oui, tous les messages KNX qui t'importent (en tant qu'utilisateur d'une installation programmée) sont multicast, mais c'est égal pour la passerelle.

Tu as tout juste pour les passerelles.

L'adress IP et le port prédéfini KNX IP multicast sont 224.0.23.12 et 3671. Dans eibd, ces valeurs sont optionnelles car il va les utiliser si tu n'indique rien (je crois).

Attention cependant, les trames du modes routing ne sont pas les mêmes que les trames du mode tunelling... Le coeur du messages est toujours en cEMI, mais les headers sont légèrement différents.


Mais pour finir, à quoi sert eibd dans cette histoire ? Si tu as un routeur, ton code python (j'ai lu l'autre fil) doit simplement faire un listen sur l'ip multicast et voilà, non ?


Répondre
#3
Merci pour ta réponse.

Justement non, je n'ai pas de routeur IP, juste une bête passerelle ! C'est pour ça que je veux switcher eibd en mode routeur. Mais visiblement, ça ne fonctionne pas. Je vois quelques trames multicast IP lorsque je le lance, puis plus rien. Et linknx n'arrive pas à se conecter à eibd lorsqu'il est en mode routeur, visiblement...

Concernant l'adresse multicast par défaut, ce n'est pas l'adresse qui sert à la découverte des services ? En tout cas, cette adresse est déjà utilisée par la passerelle Siemens, et même après avoir lancé eibd, c'est elle qui répond au ping sur cette adresse... Et si je force une autre adresse dans eibd, personne ne répond lorsque je la ping.

Pour info, eibd est lancé comme ceci :

/usr/local/bin/eibd --daemon=/var/log/eibd.log --pid-file=/var/log/eibd.pid --eibaddr=0.0.1 -D -S --Routing --listen-tcp=6720 ip:224.0.23.13:3672
Frédéric

https://pknyx.gbiloba.org (de nouveau en ligne !)
Répondre
#4
A propos de l'adresse:

Il y a deux adresses multicast définies par KNX. Une pour trouver les passerelles (c'est ce qu'utilise ETS pour la trouver) et une pour échanger des messages. Mais ce sont les mêmes souvent en pratique (les trames sont différentes, pas moyen de se mélanger les pinceaux):

/////////////// EIBnet/IP system specs, core
8.5.2 IP multicast addresses
8.5.2.1 EIBnet/IP system setup multicast address
To ensure that any EIBnet/IP device can be reached by the EIBnet/IP Core discovery services a „System Setup Multicast Address“ is defined. The value of the „System Setup Multicast Address“ is 224.0.23.12.
8.5.2.2 EIBnet/IP routing multicast address
Any EIBnet/IP device implementing EIBnet/IP routing has a „Routing Multicast Address“. This address is derived from the „System Setup Multicast Address“ by adding an offset. This offset has a default value of zero.
///////////////

=> multicast par défault = setup multicast.
Mais bon, c'est égal, si tout le monde s'accorde sur une autre adresse multicast pour les messages, c'est tout bon.

Tous les devices qui écoutent cette adresse multicast devraient répondre à ton ping. Mais bon...

Si je comprends bien ce que tu essayes de faire, c'est d'utiliser eibd comme routeur depuis une source tunelling, afin que ton code python puisse fonctionner en mode routeur ?

De ce que je comprends de l'aide de eibd, ca donne eibd -S -R ipt:<ta_passerelle> (+ le reste du bazar), pour dire: connecte toi au bus via la passerelle en tunelling, sois Serveur avec support du Routing (sur l'adresse multicast ci-dessus je pense, je ne sais pas comment tu le configure pour en utiliser une autre).
Ensuite, ton code python devrait voir du traffic sur 224.0.23.12 à chaque fois que tu envoies un message sur le bus.

Les messages que tu vois sur les adresses multicast sont certainement des recherches de devices KNX...

Pour linknx, je sais pas. Je suppose qu'il se connecte via localhost sur l'interface propriétaire de eibd (qui si je comprends bien n'est affectée par aucune option ci-dessus), donc ?

Répondre
#5
(26/06/2013, 15:59:21)silverrcx a écrit : A propos de l'adresse:

Il y a deux adresses multicast définies par KNX. Une pour trouver les passerelles (c'est ce qu'utilise ETS pour la trouver) et une pour échanger des messages. Mais ce sont les mêmes souvent en pratique (les trames sont différentes, pas moyen de se mélanger les pinceaux):

/////////////// EIBnet/IP system specs, core
8.5.2 IP multicast addresses
8.5.2.1 EIBnet/IP system setup multicast address
To ensure that any EIBnet/IP device can be reached by the EIBnet/IP Core discovery services a „System Setup Multicast Address“ is defined. The value of the „System Setup Multicast Address“ is 224.0.23.12.
8.5.2.2 EIBnet/IP routing multicast address
Any EIBnet/IP device implementing EIBnet/IP routing has a „Routing Multicast Address“. This address is derived from the „System Setup Multicast Address“ by adding an offset. This offset has a default value of zero.
///////////////

=> multicast par défault = setup multicast.
Mais bon, c'est égal, si tout le monde s'accorde sur une autre adresse multicast pour les messages, c'est tout bon.

Vu !

Citation :Tous les devices qui écoutent cette adresse multicast devraient répondre à ton ping. Mais bon...

Si je comprends bien ce que tu essayes de faire, c'est d'utiliser eibd comme routeur depuis une source tunelling, afin que ton code python puisse fonctionner en mode routeur ?

De ce que je comprends de l'aide de eibd, ca donne eibd -S -R ipt:<ta_passerelle> (+ le reste du bazar), pour dire: connecte toi au bus via la passerelle en tunelling, sois Serveur avec support du Routing (sur l'adresse multicast ci-dessus je pense, je ne sais pas comment tu le configure pour en utiliser une autre).
Ensuite, ton code python devrait voir du traffic sur 224.0.23.12 à chaque fois que tu envoies un message sur le bus.

Les messages que tu vois sur les adresses multicast sont certainement des recherches de devices KNX...

Bon, en fait, c'est le script de lancement de eibd, sur la linknxwebbox qui m'a induit en erreur ! Lorsqu'on choisit comme adresse ipt:xxx, il ajoute automatiquement --Tunneling. Si on utilise comme adresse ip:xxx, il ajoute --Router... En gros, il ajoute le mode que tu utilises pour te connecter, pour relayer la ressource qu'il a consommée, ce qui n'est pas tout à fait ce que je veux faire...

Comme tu le suggères, il faut rester avec ipt:xxx, et ajouter l'option --Router en plus de --Tunneling.. Le script ne gère pas ce que je veux faire... Il faut que je le force. Et ça sembler marcher Smile

Citation :Pour linknx, je sais pas. Je suppose qu'il se connecte via localhost sur l'interface propriétaire de eibd (qui si je comprends bien n'est affectée par aucune option ci-dessus), donc ?

Yep, c'est ça. linknx se connecte sur le port 6720 où tourne eibd (il faut lancer eibd avec l'option --listen-tcp=6720).

Merci pour ton aide ! Je continue mon framework...
Frédéric

https://pknyx.gbiloba.org (de nouveau en ligne !)
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)