Envoyer des données ERT vers Mysql sur Synology (besoin d'aide php)

Bonjour,

Je souhaite conserver certaines données de l’EcoDevices RT2. Pour cela j’aimerai envoyer les données vers une base de données MySql se trouvant sur un NAS Synology.

Par exemple :

  • La consommation d’électricité en provenance de la TIC, la consommation d’eau et de fioul toutes les 15 minutes.
  • En fin de journée, le total de la consommation d’électricité en provenance de la TIC, la consommation d’eau et de fioul.

Je pense qu’il est possible de le faire en exécutant un fichier php via le planificateur de tâche du Nas Synology. Je souhaiterai éviter de passer par une application tierce comme vu dans le forum.

Je n’ai malheureusement pas les connaissances ni les compétences pour créer ce fichier et serai ravi d’avoir un petit coup de main pour m’aider à le réaliser.

Merci d’avance pour votre aide.

Diode

1 « J'aime »

Bonjour,
Je n’ai absolument aucune compétence en php. J’ai tenté de de mutualiser les infos trouvées.
Voici (en pièce jointe) le début du fichier mais qui n’est pas complet car je sèche face à ce langage qui est du charabia pour moi :

<?php

$db_host = "localhost";
$db_username = "root";
$db_password = "password";
$db_name = "BDD";
$table_name = "table";
// Début de connection à la base de donnée
mysql_connect($db_host,$db_username,$db_password) or die ('Impossible de se connecter à la base de donn&eacute;:'.mysql_error());
mysql_select_db($db_name) or die ('Impossible d&apos;ouvrir la base de donnée , FAIL ! '.$db_name.' : '.mysql_error());
//Fin : connexion à la base et sa séléction

//On charge le fichier XML contenant les données 
 $table = simplexml_load_file('http://192.168.1.57/admin/status.xml');
// Pour le deboggage on affiche les résultat en HTML et avec l'encodage utf8
header('Content-Type: text/html; charset=utf-8');

?>

Est-ce qu’une âme charitable, qui connait ce langage, pourrait contrôler ce que j’ai déjà fait et m’aider pour finaliser ce fichier php pour intégrer dans Mysql, par exemple, l’index TIC du fichier http://192.168.1.57/admin/status.xml

Merci beaucoup.

Diode

Bonjour @diode ,

J’ai fait un petit script complet qui ne nécessite pas de base de donnée mais un simple fichier.

A la base il est prévu pour récupérer une donnée du fichier « status.xml » d’un IPX 4, mais le format xml étant universel, il devrait fonctionner avec n’importe quel matériel.

Cdt. Thierry

Bonjour,

Merci pour les infos.

Mais je cherche absolument a intégrer les infos dans la base de données Mysql de mon Nas car une application ira les chercher par la suite.

Je ne connais pas du tout ce langage et ne sais pas du tout comment indiquer, dans le fichier php, comment prendre les données voulues du fichier status.xml pour les mettre dans la base de données dans telle table et dans telle colonne.

Cordialement

Bonjour,

J’ai en projet quelque chose de similaire, malheureusement je n’ai pas le temps de le faire dans l’immédiat (pas avant min 1 mois).

Si d’ici là vous n’avez toujours pas la solution, recontactez moi.

Thierry

Bonjour,

Merci pour cette proposition.

Diode

Bonsoir,

Finalement j’ai trouvé le temps de m’y mettre (en regardant le match ASM/Toulon).

Il y a 2 fichiers dans l’archive:

Fichier SQL:

  • A exécuter dans PhpMyAdmin avant utilisation du code PHP.
  • Il crée la base « domotique/statusxml ».

Fichier PHP:

  • Lecture d’un fichier JSON distant
  • Enregistrement des données dans la base « domotique/statusxml »
  • Lecture de la donnée enregistrée dans la base

PHP.zip (2,5 Ko)

Cdt

Thierry

5 « J'aime »

Merci Beaucoup @Thierry15

:wink:

Je m’aperçois tout juste de mon erreur, il fallait lire:

Bonjour,

J’ai modifié le fichier php pour qu’il puisse accéder au status.xml de mon ERT et j’ai mis « etiquette03 » dans $xml car c’est ce contenu que je souhaite intégrer dans la base de données.

J’ai exécuté le fichier php mais rien ne remonte dans la base.
Y a t il d’autres modifications à faire pour que cela soit adapté à l’ERT?

Merci pour ton aide précieuse car je ne cause pas le php ni rien de tout ça.

Diode

Bonjour @diode,

$xml = « etiquetteEC3 »; ← ce que vous souhaitez récupérer (la ok pas de pb)

$sql_data ← C’est la structure a mettre a jour dans la base de données.
D’origine j’avais mis « lps0 », en le modifiant, vous devez également modifier votre base de données. (voir plus bas).
En effet, le script ne peut pas mettre a jour une structure inexistante.

Mais avant toute chose, avez-vous créé la base de données ?
(« import » dans phpMyAdmin → fichier « domotique-statusxml.sql »)

Une fois crée, modifiez la « structure » « lps0 » qui se trouve dans « domotique/statusxml » par
« etiquetteEC3 ».

Et pour terminer, il faut renseigner dans la page PHP les identifiants: nom d’utilisateur et mot de passe de votre base de données (« Paramètres connexion MYSQL »).

Tenez moi informé :slight_smile:

Thierry

J’oubliais…

Avez-vous activé « mysqli » ?

Allez sur l’interface de gestion de Synology, puis « Web station », « Paramètres PHP » et enfin activez l’extension « mysqli ».

Bonsoir,

J’ai bien créé la base de données avec le fichier sql modifié:


j’ai mis les lignes 42 et 43 en commentaire car ça mettait une valeur dans la base de données qui ne provenait pas du fichier xml. Est-ce qu’il ne fallait pas le faire?

voici la base de données avec les colonnes souhaitées (date, heure, indexTIC) :

J’ai apporté une petite modification pour plus de clarté, j’ai remplacé $sql_data « etiquette03 » par « indexTIC »:

J’ai bien renseigné les paramètres de connexion Mysql.

Sur le Synology:
Sqli est bien coché.

j’ai créé une tache planifiée qui lance le fichier php toutes les 10minutes:

J’ai lancé la tache planifiée manuellement pour tester mais rien n’alimente la base de données.

Diode

Pour info, dans le fichier log il y a:

PHP Fatal error: Call to undefined function mysqli_connect() in /volume1/web/edf/connexion_bdd_CM.php on line 36
Fatal error: Call to undefined function mysqli_connect() in /volume1/web/edf/connexion_bdd_CM.php on line 36

voici la ligne 36:

Bonjour,

Les lignes 42 & 43 sont nécessaire car elles créent une entrée dans la base de données.
Dans le détail, le code suivant:

$mise_a_jour_bdd = « UPDATE $sql_table SET $sql_data=’$req_xml’ WHERE id=1 »;

signifie:
"Met a jour la base de données « sql_table » et enregistre « sql_data » la ou se trouve « id=1 ».

Or sans les ligne 42 & 43, il n’y a pas la ligne « id=1 »

« undefined function mysqli_connect() »: mysqli a priori n’est pas activé, ceci est bien coché ?
avez-vous redémarré le Nas ?

Thierry

1 « J'aime »

Bonjour,

J’ai modifié le fichier sql:

résultat sur Mysql:

Sur le Nas j’avais bien sqli de coché:

Par contre je constate que je n’ai pas selectionné php 7.0.

J’ai relancé la tache planifiée mais toujours aucune info supplémentaire dans la BDD.

Diode

Essayez avec une commande curl dans le planificateur de tâches:

1 « J'aime »

Bonjour,

J’ai créé la tache planifiée:

Je l’ai exécuté dans le gestionnaire de tache mais sans résultat.

Je suis allé dans mon navigateur et j’ai lancé le script:


le résultat affiché ne correspond pas à l’info du fichier xml

Ce chiffre 9999999.999 est bien dans la base de données…

C’est bizarre tout ça

Diode

Bonjour,

Pouce savoir si votre script s’exécute de façon planifié, modifiez la valeur de indexTIC dans la bdd, puis exécutez la planification. Retournez voir la bdd voir si la valeur a été modifiée.

Concernant cette série de chiffres 9, cela indique en général un problème de format.
En mettant « DECIMAL 10,3 », il est possible qu’un arrondi soit opéré, si le chiffre a enregistrer dépasse: 9999999,999 (donc supérieur a 10000000), la valeur enregistrée sera toujours le maximum que vous avez spécifié: 9999999,999.

Vous pouvez contourner le problème (oui je sais, c’est pas bien…) en mettant « VARCHAR » a la place de « DECIMAL ».

Modifiez cette ligne dans le script:

echo « Base de données: $lecture »;

remplacez la par:

echo « Donnée récupérée: $xml - donnée enregistrée: $lecture »;

Cela pourrai aider a solutionner le problème
Si le problème persiste, exécutez le script et donnez moi le résultat affiché
J’ai besoin de connaitre la donnée récupérée qu’il essai d’enregistrer dans la bdd avant que celle-ci ne fasse d’arrondi ou autre.

Thierry

Bonjour,

J’ai changé DECIMAL par VARCHAR mais j’ai une erreur Mysql:

avec ce script:
domotique-statusxml_CM.rar (719 Octets)

Finalement j’ai remis DECIMAL et j’ai fait une modification: DECIMAL (10)

Cela fonctionne:

Par la suite, que faudra t il modifier pour qu’à chaque lancement du script la donnée souhaitée s’inscrive dans la base de données dans une nouvelle ligne?
Que faut il modifier pour ajouter des colonnes dans la base de données avec des données provenant d’autres « étiquettes » du fichier xml?

Merci pour ton aide

Diode