Parser une info depuis une base mysql

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Parser une info depuis une base mysql

Message 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
Capture.JPG (33 Kio) Consulté 7561 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 ?
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: Parser une info dans base mysql

Message 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)
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Parser une info depuis une base mysql

Message par Neutrino »

L'export en JSON peut être appelé avec une commande curl ?
Elle affiche quoi en retour ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Parser une info dans base mysql

Message 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"
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Parser une info depuis une base mysql

Message 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
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: Parser une info dans base mysql

Message 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.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Parser une info depuis une base mysql

Message par Neutrino »

On abandonne le JSON.
La solution de rimram31 me parait vraiment plus pertinente dans ce cas.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Parser une info depuis une base mysql

Message 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é
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: Parser une info depuis une base mysql

Message 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.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Parser une info depuis une base mysql

Message 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.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Répondre