Tout d'abord, pour archiver les données du statut XML de l'IPX à intervalle régulier (disons toutes les heures) il vous faudra une machine fonctionnant 24h/24 et capable d'effectuer cette tâche, sans aucune action de votre part, sinon à quoi bon ? Rappelez-vous les principes de la domotique, ça doit vous faciliter la vie plutôt que vous apporter des contraintes... :-)
Cette machine, ça peut être un ordinateur type PC, mais c'est dommage car un ordi ça consomme, disons 100W parfois beaucoup plus. Et 100W qui tournent en permanence juste pour faire un relevé horaire des données de l'IPX, ça coûte cher et c'est pas du tout écologique. Il existe donc une solution, celle des NAS, ces petits serveurs autonomes qui fonctionnent sans clavier ni écran et qui consomment entre 3 et 5W (en veille automatique) et 15 à 30W (en fonctionnement normal). Le NAS, c'est donc la machine qui accédera à votre IPX pour "lire" son statut (le fameux flux XML) et le sauvegarder dans une base de données.

Pour ce faire, il faut un script écrit dans un langage de programmation informatique, et une base de données d'un certain type. Il existe donc une multitude de possibilités, nous prendrons le couple le plus connu, à savoir PHP pour le langage et mySQL pour la base de données. Avant de programmer un intervalle quelconque de lecture du statut XML, il faut donc écrire un script permettant une lecture unique, suivi de l'écriture dans la base de données. Au préalable, il faudra construire une première table dans la base de données, table qui recevra les informations lues dans le statut XML de l'IPX. Pour créer cette table de manière rapide et facile, il nous suffit de nous baser sur les informations contenues dans le flux XML : voir cet article. Avec des champs supplémentaires pour l'horodatage, nous aurons un total de 33 champs détaillés ci-après :
- "id" : c'est notre champ "index" permettant de numéroter par un identifiant unique chaque enregistrement dans la table
- "annee", "mois", "jour", "heure" : 4 champs au format entier numérique permettant l'horodatage de chaque enregistrement
- "led0" à "led7" : 8 champs au format binaire permettant d'enregistrer l'état des sorties
- "btn0" à "btn7" : 8 champs au format binaire permettant d'enregistrer l'état des entrées numériques
- "day" : champ au format texte permettant d'enregistrer le nom du jour, si vous en avez besoin pour exploitation future
- "analog0" à "analog3" : 4 champs numériques pour enregistrer la valeur brute des entrées analogiques convertie sur 10 bits
- "anselect0" à "anselect3" : 4 champs numériques pour connaître le type de chaque entrée analogique au moment de l'enregistrement
- "count0" à "coun2" : 3 champs numériques pour enregistrer la valeur des 3 entrées-compteurs.
Et voilà votre base de données prête à recevoir les données du statut de l'IPX dans une table ! :bien: Voyons maintenant le script PHP permettant de lire le flux XML et d'enregistrer chaque valeur donnée par l'IPX concernant son état. L'exemple ci-dessous est un extrait, il vous faudra bien évidemment coder d'autres scripts, notamment ceux permettant d'accéder à votre base mySQL et ceux définissant les fonctions pour y écrire des données (notamment la fonction mysql_query).
script1.png
En 1 on trouve le "parseur", c'est-à-dire le code permettant d'extraire chaque valeur des variables contenues dans un fichier XML. L'adresse du fichier sera la variable $fichier, par exemple http://192.168.1.3/status.xml. Pour résumer, ce script permet de faire le ménage dans un fichier XML (par exemple retirer les balises <>) et range les valeurs de toutes les variables trouvées entre les balises $item dans une ensemble appelé $champs.
En 2 il s'agit uniquement de définir les variables d'horodatage d'après votre serveur PHP : on aurait pu prendre celles de l'IPX mais cette dernière ne donne ni le mois ni l'année dans son flux XML.
En 3 nous appelons le parseur en lui demandant de lire le flux XML de l'IPX ($fichier c'est l'adresse du fichier status.xml fourni par l'IPX) pour nous retourner toutes les valeurs lues entre les balises <response> et </response>. Nous nommons et rangeons ces valeurs dans un tableau PHP (array).
Enfin en 4 nous appelons la fonction mySQL permettant d'écrire les données dans la table préalablement créée. Et voilà, vous avez la "philosophie" du script nécessaire à l'archivage en base de données des états de votre IPX ! :-D

Pour exécuter régulièrement ce script, il vous suffit ensuite de créer une tâche planifiée (cron) sur votre NAS permettant d'appeler le script PHP. Ainsi votre base de données se construira toute seule au fil des minutes, des heures ou des jours selon vos choix. Etant équipé en NAS Synology, un prochain article traitera de la mise en place d'un cron sur un DS211j (méthode identique pour d'autres modèles).

NOTA DU 01/11/2012 : l'article sur les "cron" est disponible ! :-D Voir ici.