Page 1 sur 3
Parser une info depuis une base mysql
Publié : 24 nov. 2015, 21:08
par deennoo
Bonjoir !
Dans mon entreprise : Mettre le niveau d'essence de mon reservoir de voiture dans domoticz en % j'ai besoin d'un peu d'aide car je galere.
J'ai mis en place un serveur qui reçoit les logs d'un app android.
Ce serveur crée une belle database Mysql,
Ce serveur est accessible depuis une page web, sur la page web j'ai la possibilité d'exporter : en Json ou CSV
Je souhaite recupérer une seul valeur de la derniere ligne ecrite (en w2) sur l'image ci dessous (tiré d'un export CSV).

- Capture.JPG (33 Kio) Consulté 7562 fois
Cette valeur va ensuite etre envoyer dans un device % dans domoticz (pour cette partie pas de probleme, j'ai déja des exemples a suivre).
Que vaut'il mieux? lire direcetment dans la database une fois par jour ? exporter en json ou en csv et parser depuis le fichier telecharger ?
J'ai un super exemple sous android fourni par neutrino ici :
viewtopic.php?f=16&t=859&start=20
Est ce qu'il y a une chance d'avoir un equivalent sous Linux ?
Re: Parser une info dans base mysql
Publié : 24 nov. 2015, 21:35
par rimram31
Tu veux faire quoi ? Extraire la donnée a partir du serveur et/ou d'une machine ayant accès a cette base ou a partir d'un mobile ?
Si c'est la 1ere réponse, il "suffit" d'installer le client mysql (sudo apt-get install mysql devrait le faire) et d'interroger la base: mysql --host < hostname du serveur> --user < db user> --password<pwd> <nom database> "requete sql", ça va afficher le résultat de la requête (l'option -N peut t'intéresser pour supprimer les entêtes).
Pour ta requête, ça dépend un peu de ta base et sa structure ... c'est quoi ton w2 ? la dernière valeur d'une table ? le kff126b le nom de la colonne ? Quel critère pour dire "dernière ligne", la colonne time ? Si oui qque chose dans le genre "SELECT kff126b FROM <table name> ORDER BY time DESC LIMIT 1" te sortira la valeur de la colonne en question de la "dernière" ligne", (en fait on trie par time décroissant et on ne garde que la 1ere ligne)
Re: Parser une info depuis une base mysql
Publié : 24 nov. 2015, 21:39
par Neutrino
L'export en JSON peut être appelé avec une commande curl ?
Elle affiche quoi en retour ?
Re: Parser une info dans base mysql
Publié : 24 nov. 2015, 22:17
par deennoo
rimram31 a écrit :Tu veux faire quoi ? Extraire la donnée a partir du serveur et/ou d'une machine ayant accès a cette base ou a partir d'un mobile ?
Extraire la donnée qui est sur le serveur, depuis le meme serveur, pour l'envoyer vers domoticz qui est sur une autre machine;
rimram31 a écrit :Pour ta requête, ça dépend un peu de ta base et sa structure ... c'est quoi ton w2 ? la dernière valeur d'une table ? le kff126b le nom de la colonne ? Quel critère pour dire "dernière ligne", la colonne time ? Si oui qque chose dans le genre "SELECT kff126b FROM <table name> ORDER BY time DESC LIMIT 1" te sortira la valeur de la colonne en question de la "dernière" ligne", (en fait on trie par time décroissant et on ne garde que la 1ere ligne)
La ligne 2 est la derniere entrée dans cette base de donnée, la colonne W c'est le % d'essence restant dans mon reservoir.
Oui time est le critere qui dit que c'est la derniere ligne donc je vais essayer :
mysql --host < localhost> --user < db user> --password<pwd> <nom database> "SELECT kff126b FROM <table name> ORDER BY time DESC LIMIT 1"
Re: Parser une info depuis une base mysql
Publié : 24 nov. 2015, 22:25
par deennoo
Neutrino a écrit :L'export en JSON peut être appelé avec une commande curl ?
Elle affiche quoi en retour ?
En fait l'export en json telecharge un fichier uniquement de la derniere session, mais je dois le sélectionner a la main
Voici deux exemples de lien de telechargement :
Code : Tout sélectionner
http://192.168.0.37/torque/export.php?sid=1448384522302&filetype=json
http://192.168.0.37/torque/export.php?sid=1448383446493&filetype=json
Re: Parser une info dans base mysql
Publié : 24 nov. 2015, 22:59
par rimram31
deennoo a écrit :...Oui time est le critere qui dit que c'est la derniere ligne donc je vais essayer :
mysql --host < localhost> --user < db user> --password<pwd> <nom database> "SELECT kff126b FROM <table name> ORDER BY time DESC LIMIT 1"
Le plus simple est d'exécuter sur le serveur ou tourne la base (peut-être soucis de droits sinon). Si tu es sur le serveur, tu n'as pas besoin de "--hostname". Sert toi au besoin de
man mysql pour les options, tu peux déjà exécuter un mysql (
mysql --user=<...> -p <database>) pour lancer une session (s'affiche un ">", quit/exit pour sortir je sais plus

) et tester/mettre au point une requete ...
rem: en session, une requête sql se termine par un
; Quelques commandes utiles: "SHOW TABLES;" pour avoir la liste des tables de la database, "DESC <table name>;" pour avoir la structure d'une table, "SELECT * FROM <table name> LIMIT 10;" (10 pour exemple) pour afficher quelques éléments ... (le '*' veut dire toutes les colonnes).
Pour l'essentiel pour extraire des données: SELECT <liste de champs/colonnes séparés par des ,> FROM <table> [WHERE <condition> ... AND/OR ...] [ORDER BY ... ASC/DESC] [LIMIT ...] les [] pour indiquer que c'est en option.
Re: Parser une info depuis une base mysql
Publié : 24 nov. 2015, 23:01
par Neutrino
On abandonne le JSON.
La solution de rimram31 me parait vraiment plus pertinente dans ce cas.
Re: Parser une info depuis une base mysql
Publié : 25 nov. 2015, 09:27
par patrice
Neutrino a écrit :On abandonne le JSON.
La solution de rimram31 me parait vraiment plus pertinente dans ce cas.
Oui,oui un bon select et c'est classé
Re: Parser une info depuis une base mysql
Publié : 25 nov. 2015, 10:09
par rimram31
Du coup je m'aperçois que j'ai pas tout bon ... désolé, la requete SQL est passée via l'option -e (ou en input), essaie plutôt:
Code : Tout sélectionner
dbname="..."
user="..."
pwd="..."
resultat=`mysql -u $user -p$pwd $dbname -N -e "SELECT ..."`
(quote inverse en shell) ou quelque chose dans le genre.
Re: Parser une info depuis une base mysql
Publié : 25 nov. 2015, 14:22
par deennoo
En php ? Python ? Lua ?
Ce que vous me donner je peux essaye en ligne de commande ?
Je resterais ce soir, aujourd'hui c'est journée parents a la crèche, les petits comprennent rien a linux...pas assez d image.