Forum KNX francophone / English KNX forum
Generer linknx.xml a partir du projet ETS5 - Version imprimable

+- Forum KNX francophone / English KNX forum (https://www.knx-fr.com)
+-- Forum : Français (https://www.knx-fr.com/forumdisplay.php?fid=3)
+--- Forum : Logiciels libres (linknx, knxweb, pKNyX,...) (https://www.knx-fr.com/forumdisplay.php?fid=10)
+--- Sujet : Generer linknx.xml a partir du projet ETS5 (/showthread.php?tid=4589)



Generer linknx.xml a partir du projet ETS5 - condo4 - 23/02/2017

N'arrivant pas a trouver un script recent (ETS5) pour générer automatiquement les Objets linknx depuis un projet ETS5, j'ai écris mon propre script python.
Si ça intéresse quelqu'un, je l'ai mis a cet adresse :

https://github.com/condo4/Knxproj2Linknx

Le principe est simple :

On appel la commande

./knxproj2linknx.py monfichier.knxproj linknx_source.xml linknx_sortie.xml

Si on ne donne pas de linknx_sortie.xml, le resultat est affiché en console

Si on donne "-" comme paramètre de sortie, le fichier linknx_source.xml est modifier, et linknx_source.xml~ contient l'ancienne version

Je l'ai mis sur github si certain veulent le ré-utiliser ou le modifier (pull request bienvenue)


RE: Generer linknx.xml a partir du projet ETS5 - Energy01 - 23/02/2017

Salut,

super merci pour l'initiative
je n'ai pas regardé mais quels sont les différences dans le knxproj entre ETS4 et ETS5 ?

j'ai essayé avec un knxproj ETS4 !!
au premier lancement j'ai :
Code :
Traceback (most recent call last):
  File "knxproj2linknx.py", line 4, in <module>
    from lxml import etree
ImportError: No module named lxml

et pour lancer : $ sudo pip install lxml
mais il faut libxml2 ...
donc : $ sudo apt-get install libxml2-dev libxslt-dev python-dev
puis $ sudo pip install lxml

puis donc $ python knxproj2linknx.py monfichier.knxproj linknx.xml linknx_sortie.xml
Code :
Traceback (most recent call last):
  File "knxproj2linknx.py", line 41, in <module>
    GAs = xml.xpath("//knx:GroupAddresses/knx:GroupRanges", namespaces=namespaces)[0]
IndexError: list index out of range

et là je creuse le problème

une question pourquoi avoir besoin d'un "source" pour le linknx.xml en paramètre je n'ai pas bien compris l'intérêt ?
si j'ai compris le programme cela ajoute les "nouveaux" objects uniquement ?

merci à toi
@+
Anthony


RE: Generer linknx.xml a partir du projet ETS5 - condo4 - 24/02/2017

alors pour python, je ne suis pas fan de pip, je prefert ce qui est packagé par la distribution...
dans ton cas, un apt install python-xml aurait suffit je pense...
entre ets4 et 5 je sais pas, il me faudrait un exemple pour tester...

concernant le linknx source en effet, si les objet avec l'id generer existe, sa les met a jour uniquement...
Mon but été de concerver mes regle et autre parametre.
Mais il est vrai qu'il ne serait pas compliquer d'en generer un s'il n'est pas donné...


RE: Generer linknx.xml a partir du projet ETS5 - Energy01 - 24/02/2017

quelques pistes / remarques
namespaces = {"knx":"http://knx.org/xml/project/13" ,"xsd":"http://www.w3.org/2001/XMLSchema" ,"xsi":"http://www.w3.org/2001/XMLSchema-instance"}

j'ai remplacé par le 13 par 11 dans mon cas surement une première différence entre ETS4 et ETS5 ...
"knx":"http://knx.org/xml/project/11"

mais ensuite j'ai bloqué sur pas mal de conversion de caractères il n'aime pas les "/" ni les apostrophes
pour testé j'ai modifié la ligne :
new_names = rng.attrib['Name'].title().replace("/","").split()
en
new_names = rng.attrib['Name'].replace("/","").replace("'","_").replace(" ","_").split()

donc c'est "passé" mais cela ne ma trouvé aucu DATATYPE , "normal" vu que rien de définit dans le xml mais là cela doit être dans ETS que cela peut se définir ou se déduire par un autre moyen ...

pour le "nom" des objects tu concatènes le "name" de chaque niveau des GA donc niveau 1 2 puis 3
perso le texte de niveau 3 me suffit il serait peut-être intéressant de pourvoir "choisir" la méthode pour créer le nom des objects ?
en gros mon découpage des GA :
maison : 0
-> Eclairage On/Off & variable : 0
--> WC RDC - Plafonnier - On/Off : 1
--> WC RDC - Plafonnier - Indication état On/Off : 2

résultats des objects :
<object id="Maison_Eclairage_OnOff_&amp;_Variable_Wc_Rdc_-_Plafonnier_-_OnOff" gad="0/0/1" init="request">Maison_Eclairage_OnOff_&amp;_Variable_Wc_Rdc_-_Plafonnier_-_OnOff</object>
<object id="Maison_Eclairage_OnOff_&amp;_Variable_Wc_Rdc_-_Plafonnier_-_Indication_État_OnOff" gad="0/0/2" init="request">Maison_Eclairage_OnOff_&amp;_Variable_Wc_Rdc_-_Plafonnier_-_Indication_État_OnOff</object>

donc dans mon cas ceux-ci me suffit largement :
<object id="Wc_Rdc_-_Plafonnier_-_OnOff" gad="0/0/1" init="request">Wc_Rdc_-_Plafonnier_-_OnOff</object>
<object id="Wc_Rdc_-_Plafonnier_-_Indication_État_OnOff" gad="0/0/2" init="request">Wc_Rdc_-_Plafonnier_-_Indication_État_OnOff</object>

autre remarque tu peux enlever la gestion du paramètre init="request" qui est de toute manière la fonction par défaut

merci encore pour ton travail et ton partage
@+
Anthony.


RE: Generer linknx.xml a partir du projet ETS5 - condo4 - 24/02/2017

Salut,
Je vais regarder dans la semaine tes remarque, faite un truc compatible ETS 4 et 5 serait interressant.
Mais la, le week end, je suis plus sur le chantier que a coder :-)
J'ai un petit but, mais je sais pas quand j'aurais le temps d'y bosser, mais en gros, je souhaite faire un packaging complet sous Yocto pour générer des images avec:
knxd / linknx / knxweb2
L'idée serait qu'au premier démarrage, on a une page pour configurer de façon assisté knxd, puis linknx en donnant sont fichier knxproj...
Ensuite, grace a Yocto, je pourrais générer des images pour plusieurs cible (raspberry, wandboard...) et les proposer sur un site.

Pour le moment, pour avancer, j'ai mis debian sur ma wandboard, et je cherche a me familiarisé avec tout ces outils, et voir la meilleur façon de packager.

Et aujourd'hui, je galère un peu avec KNXD, mais je vais mettre sa dans un autre poste...