Bonjour fatal25,
Voici comment je procède sur mon Synology DS211+, pour enregistrer les données de voltage de mes batteries solaires, relevées via l’IPX800, dans une base MySQL.
Schématiquement, dans une page PHP, tu lis les valeurs du fichier status.xml que tu vas ensuite écrire dans ta table MySQL via une instruction Insert.
<?php
//Fonctions de connexion à la BDD
include("fonctions.php");
$xml = simplexml_load_file('http://192.168.0.00/status.xml');
$result = array();
// Pour chaque XML child
foreach($xml->children() as $child){
$result[$child->getName()] = trim($child);
}
//On se connecte
connectMaBase();
$Volt_Batterie = ($result['an1'] *0.03223);
$Volt_Batterie = round($Volt_Batterie, 2);
$Temp1 = ($result['an2'] /3.22);
$Temp1 = round($Temp1, 2);
//On prépare la commande sql d'insertion
$sql = 'INSERT INTO IPX800 VALUES(DEFAULT,DEFAULT,"'.$Volt_Batterie.'","'.$Temp1.'")';
/*on lance la commande (mysql_query) et au cas où,
on rédige un petit message d'erreur si la requête ne passe pas (or die)
(Message qui intègrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
// on ferme la connexion
mysql_close();
?>
Cette page PHP est à appeler toutes les x minutes, via une tache Cron que tu définis. (exemple ci-dessous, toutes les minutes) :
Bien penser à faire des tabulations et pas des espaces entre chaque valeur d’une ligne.
DiskStation> vi /etc/crontab
#minute hour mday month wday who command
* * * * * root cd /volume1/web && /usr/bin/php IPX800_data_sql.php
~
~
Ta table MySQL pouvant rapidement grossir (1440 enregistrements / jour si donnée stockée toutes les minutes), la consultation et les graphiques vont mettre plus de vingt secondes à s’afficher quand tu vas dépasser les 250 000 enregistrements. Ceci est dû au fait q’une table mise à jour fréquemment n’est pas stockée en cache.
Solution : ajouter 2 triggers MySQL qui,
-
pour le premier, t’alimente une table temporaire, lors de chaque Insert dans ta table Archive principale, en y créant une copie de l’enregistrement qui vient d’être écrit.
-
pour le second, supprime les enregistrements plus vieux que n jours, pour maintenir la taille de la table temporaire à environ 5000 enregistrements maxi. Ce 2ème trigger est déclenché chaque matin à 0h00.
Ensuite, tu fais pointer tous tes graphiques sur ta table temporaire, pour obtenir des graphiques en moins de 3 secondes.
Voilà pour le mode op.
NB : Sur le Synology, tu ne disposes pas de la souplesse de paramétrage d’un serveur LAMP que tu as installé toi-même.
Par ex : les paramétrages de démarrage de MySQL sont très difficiles à faire évoluer.
De plus, si tu as effectué les mises à jour du DSM, tes parametrages personnels sont à refaire pour la plupart.
Pour Cron, tu n’as pas Crontab, tu es obligé de passer par un éditeur texte (Vi, Nano,…) pour éditer le fichier /etc/crontab.
M’enfin, cela consomme pas trop et apporte pas mal de fonctionnalités sympa.
NB2 : si tu commences à utiliser ton Synology en 24/24, protèges-le par un onduleur, pour éviter des crashs disques, suite à coupure de courant.
Enjoy,
Yann