Page 3 sur 5

Re: Retrouver le nom des commandes supprimées

Publié : 02 févr. 2018, 18:39
par breizh22
Merci, je vais essayer. Oui c'est vrai que tous les jours, c'est beaucoup, mdr. Une fois par semaine sera bien.

Re: Retrouver le nom des commandes supprimées

Publié : 02 févr. 2018, 18:46
par Bosquetia
ben même pas, tu sauvegardes une fois mais si tu ne fais pas de changements ou de suppression, ça sert à rien...

Re: Retrouver le nom des commandes supprimées

Publié : 02 févr. 2018, 18:50
par romanais
Salut, dans ce cas, on va plutôt utiliser le script suivant (légère modification pour générer le fichier .csv et le stocker directement au même endroit que le script de backup, avec un nom fixe, de ce façon il sera écrasé à chaque lancement de la sauvegarde, et tes sauvegardes "Jeedom" contiendront toujours la dernière version du fichier).

Code : Tout sélectionner

<?php

// Variables de connexion à la base des données 
$hostname = "localhost"; 
$user = "jeedom"; 
$password = "MOT DE PASSE MYSQL"; 
$database = "jeedom"; 
$port = 3306; 

// Nom du fichier CSV exporté
$csv_filename = 'Memo_ID_commandes.csv'; //nom unique - sera écrasé à chaque lancement du script

// Nom de la table à exporter 
$db_record = 'cmd p';
//jointure pour récupérer le nom de l'équipement
$inner = 'INNER JOIN eqLogic j';
$on = 'ON j.id = p.eqLogic_id';

//champs à exporter
$quoi = 'p.id id_commande, p.eqLogic_id id_equipement, j.name nom_equipement, p.eqType plugin, p.name nom_commande, p.logicalId commande';
 
// En option : conditionnels de la requête d'export (WHERE, ORDER BY, LIMIT, etc.) 
$where = '';
//tri par plugin/nom équipement - ordre alphabétique
$order = 'ORDER BY p.eqType, j.name';
   
// Connexion à la base 
$conn = mysqli_connect($hostname, $user, $password, $database, $port); 
if (mysqli_connect_errno()) { 
    die("Echec de la connexion : " . mysqli_connect_error()); 
} 

//gestion des accents
mysqli_set_charset($conn, "latin1");
 
// Création d'un fichier CSV vide 
$csv_export = ''; 
 
// Extraction des données de la table 
$query = mysqli_query($conn, "SELECT ".$quoi." FROM ".$db_record." ".$inner." ".$on." ".$where." ".$order); 
$field = mysqli_field_count($conn); 
 
// Création de la ligne des titres (noms des champs) 
for($i = 0; $i < $field; $i++) { 
    $csv_export.= mysqli_fetch_field_direct($query, $i)->name.';'; 
} 
 
// Nouvelle ligne (semble fonctionner avec Linux & Windows servers) 
$csv_export.= ' 
'; 
 
// Boucle des tuples pour remplir le fichier 
while($row = mysqli_fetch_array($query)) { 
    for($i = 0; $i < $field; $i++) { 
        $csv_export.= '"'.$row[mysqli_fetch_field_direct($query, $i)->name].'";'; 
    } 
    $csv_export.= ' 
'; 
} 

$fp=fopen($csv_filename,"w" ); // ouverture du fichier 
fputs($fp,$csv_export); // enregistrement des données dans le fichier 
fclose($fp);
?>
Ensuite, tu peux faire un scénario pour lancer la sauvegarde quand tu veux.
Tu crées un scénario planifié à ton goût, et tu utilises juste un bloc 'code' contenant ça : (url vers ton script à adapter)

Code : Tout sélectionner

//url du script de sauvegarde
$url="http://IP_JEEDOM/plugins/script/core/ressources/backup_id_commandes_supprimees2.php";
 
// Tableau contenant les options de téléchargement
$options=array(
      CURLOPT_URL            => $url, // Url cible (l'url la page que vous voulez télécharger)
      CURLOPT_RETURNTRANSFER => true, // Retourner le contenu téléchargé dans une chaine (au lieu de l'afficher directement)
      CURLOPT_HEADER         => false // Ne pas inclure l'entête de réponse du serveur dans la chaine retournée
);
 
// Création d'un nouvelle ressource cURL
$CURL=curl_init();
 
      // Configuration des options de téléchargement
      curl_setopt_array($CURL,$options);
 
      // Exécution de la requête
      $content=curl_exec($CURL);      // Le contenu téléchargé est enregistré dans la variable $content. Libre à vous de l'afficher.
 
// Fermeture de la session cURL
curl_close($CURL);
Par contre, perso, je préfère le faire manuellement quand je touche à mon installation, comme ça pas besoin d'aller piocher dans une sauvegarde complète de Jeedom.
Avec une sauvegarde manuelle, tu n'as que les fichiers strictement nécessaires.
Si je trouve une commande orpheline, j'aurai peu de fichiers à contrôler (et je peux tous les conserver, contrairement aux backup Jeedom qui tournent car ça prend de la place).
En sauvegardant tous les jours, quand tu trouveras une commande orpheline, bon courage pour trouver le bon fichier csv contenant toujours la commande ;-)

Re: Retrouver le nom des commandes supprimées

Publié : 02 févr. 2018, 19:23
par meute
romanais a écrit :
02 févr. 2018, 18:50

Par contre, perso, je préfère le faire manuellement quand je touche à mon installation, comme ça pas besoin d'aller piocher dans une sauvegarde complète de Jeedom.
Avec une sauvegarde manuelle, tu n'as que les fichiers strictement nécessaires.
Si je trouve une commande orpheline, j'aurai peu de fichiers à contrôler (et je peux tous les conserver, contrairement aux backup Jeedom qui tournent car ça prend de la place).
En sauvegardant tous les jours, quand tu trouveras une commande orpheline, bon courage pour trouver le bon fichier csv contenant toujours la commande ;-)
+1 surtout qu'avec une rotation de sauvegarde ou même une purge manuelle d'une multitude de fichiers si tu n'as pas remarqué une commande orpheline assez vite tu risque de perdre la trace.

Re: Retrouver le nom des commandes supprimées

Publié : 02 févr. 2018, 19:45
par breizh22
Merci à tous pour les réponses. En effet, vos argumentations sont convaincantes et réalistes. Merci aussi pour les exemples de scripts, ça m'aide bien pour comprendre. :) :D

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 09:24
par extrapitou
Excusez la question de noob mais je n'ai jamais touché a un script de ma vie :roll: :roll:

Donc apres avoir passé une heure a comprendre que le script adminer-4.5.0.php copié dans le repertoire /ressources devait être renommé en backup_id_commandes_supprimees.php, je ne comprends pas ou je dois mettre le code

Code : Tout sélectionner

<?php
// Variables de connexion à la base des données 
$hostname = "localhost"; 
$user = "jeedom"; 
$password = "MOT_DE_PASSE_MYSQL"; //mot de passe de connexion à la base de données
$database = "jeedom"; 
$port = 3306; 

// Nom du fichier CSV exporté
$csv_filename = 'Mémo_ID_commandes_'.date('Y-m-d').'.csv'; 

// Nom de la table à exporter 
$db_record = 'cmd p';
//jointure pour récupérer le nom de l'équipement
$inner = 'INNER JOIN eqLogic j';
$on = 'ON j.id = p.eqLogic_id';

//champs à exporter
$quoi = 'p.id id_commande, p.eqLogic_id id_equipement, j.name nom_equipement, p.eqType plugin, p.name nom_commande, p.logicalId commande';
 
// En option : conditionnels de la requête d'export (WHERE, ORDER BY, LIMIT, etc.) 
$where = '';
//tri par plugin/nom équipement - ordre alphabétique
$order = 'ORDER BY p.eqType, j.name';
   
// Connexion à la base 
$conn = mysqli_connect($hostname, $user, $password, $database, $port); 
if (mysqli_connect_errno()) { 
    die("Echec de la connexion : " . mysqli_connect_error()); 
} 

//gestion des accents
mysqli_set_charset($conn, "latin1");
 
// Création d'un fichier CSV vide 
$csv_export = ''; 
 
// Extraction des données de la table 
$query = mysqli_query($conn, "SELECT ".$quoi." FROM ".$db_record." ".$inner." ".$on." ".$where." ".$order); 
$field = mysqli_field_count($conn); 
 
// Création de la ligne des titres (noms des champs) 
for($i = 0; $i < $field; $i++) { 
    $csv_export.= mysqli_fetch_field_direct($query, $i)->name.';'; 
} 
 
// Nouvelle ligne (semble fonctionner avec Linux & Windows servers) 
$csv_export.= ' 
'; 
 
// Boucle des tuples pour remplir le fichier 
while($row = mysqli_fetch_array($query)) { 
    for($i = 0; $i < $field; $i++) { 
        $csv_export.= '"'.$row[mysqli_fetch_field_direct($query, $i)->name].'";'; 
    } 
    $csv_export.= ' 
'; 
} 
 
// Export des données au format CSV et appel du fichier créé pour téléchargement 
header("Content-type: text/x-csv"); 
header("Content-Disposition: attachment; filename=".$csv_filename.""); 
echo($csv_export);
?>
si je le met a la suite de

Code : Tout sélectionner

/var/www/html/plugins/script/core/ressources/backup_id_commandes_supprimees.php
lors de la sauvegarde, j'ai un message :

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.


Merci d'avance :)

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 09:34
par meute
T'as en effet pas tout suivi et rien compris ...

Commence par là et oublie tout ce qui est avant ce post : viewtopic.php?f=132&t=31663&start=20#p580373

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 09:35
par romanais
Salut, oups petit mélange des 2 méthodes, oublie celle avec adminer.php et attaque là ;-)

viewtopic.php?p=580373#p580373

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 09:55
par extrapitou
Lol pas taper :)

Ok merci pour la précision je teste ca tout a l'heure, mais en gros c'est ce que je pense avoir fait au debut (parce que j'avais pas lu le debit du topic) et j'avais aussi le message en rouge "error internal......"



Envoyé depuis mon Mobicarte (Si Si jvous jure !!!)


Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 10:19
par romanais
Ré-essaie ;-)

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 10:52
par extrapitou
non toujours INTERNAL SERVER ERROR.

Du coup j'ai essayé en téléchargeant notepad++ de créer un script "backup_id.php" et faire un c/c du code, et de poser le script dans le répertoire ressources via "outil de developpement"

et dans jeedom j'ai créer le script avec : /var/www/html/plugins/script/core/ressources/backup_id.php

et la ça marche c'est cool :)

Je ne sais pas pourquoi via le plugin script ca n'a pas marché, ca restera un mystère :)

Merci en tout cas :)

J'aurais appris a faire une requete SQL sur Jeedom aujourd'hui :D

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 11:57
par romanais
Curieux mais tant mieux si tu t'en es sorti au final (ne bidouille pas trop avec sql sur ta box de production ;-)

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 14:05
par glenan
romanais a écrit :
02 févr. 2018, 09:56
:oops: Ça fait super plaisir que ça serve et d'avoir vos retours !

@Glenan : J'ai testé Libreoffice du coup, mais je n'ai pas eu de souci de caractères accentués avec ce qui est proposé par défaut.
Je confirme, dans LibreOffice, avec le jeu de caractères Latin2 il subsiste quelques accents non pris en compte.
Latin1 me semble parfait.

Mais attention, le jeu de caractères par défaut dans LibreOffice n'est pas forcément le même chez tout le monde.

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 14:41
par glenan
extrapitou a écrit :
03 févr. 2018, 09:24
Excusez la question de noob mais je n'ai jamais touché a un script de ma vie :roll: :roll:

Donc apres avoir passé une heure a comprendre que le script adminer-4.5.0.php copié dans le repertoire /ressources devait être renommé en "backup_id_commandes_supprimees.php", je ne comprends pas ou je dois mettre le code
Pas d'adminer utilise plutôt un outil comme
https://winscp.net/eng/docs/lang:fr?#ut ... ign=5.11.3
protocole sftp port 22

Il faut se logguer avec identifiant root afin d'avoir les droits en écriture.

Dans les explications de Romanais, on remarque que l'équipement script créé fait référence (dans le champ requête) à un fichier php :
/var/www/html/plugins/script/core/ressources/backup_id_commandes_supprimees.php

C'est bien évidemment ce fichier php qui doit contenir le script fourni ici.
Si tu conserves le même nom de fichier que romanais (backup_id_commandes_supprimees.php), tu fais un copier coller du script dans un fichier texte "backup_id_commandes_supprimees.txt" dont tu renommes l'extension en php.
ce fichier php doit être ensuite copié dans le bon dossier /var/www/html/plugins/script/core/ressources/ à l'aide de winscp (ou tout autre outil).

Un glisser déplacer du fichier php sous windows, avec winscp fonctionne parfaitement, c'est donc simple à copier dans jeedom avec cet outil.

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 16:25
par extrapitou
Ah mais ok dc c'est bien ce que j'ai fais au final sans savoir que c'était comme ca qu'il fallait faire :)

Merci pour les précisions.

Envoyé depuis mon Mobicarte (Si Si jvous jure !!!)


Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 17:42
par romanais
Pour mémoire et d'une manière générale, pour les scripts, le plus simple est tout de même :

D'aller sur le plugin "Script".
Bouton "Ajouter"
Donner un nom à l'équipement (Mémo ID pour commandes supprimées) puis valider avec le bouton "D'accord".
Ensuite on choisit l'objet parent, puis la catégorie, on active et on rend visible.
On sauvegarde une première fois avec le bouton "Sauvegarder" (oui c'est fou :D
Toujours sur cet équipement, on se rend sur l'onglet "Commandes".
On clique sur "Ajouter une commande script".
On donne un nom à la commande (backup_id_commandes).
On reste sur "Type script : Script".
Et pour "Type : Info/Autre".
On clique sur "Nouveau" puis on rentre un nom pour le script (backup_id_commandes_supprimees.php)
On valide avec "D'accord".
Une fenêtre s'ouvre, on colle simplement le code dedans.
On clique sur "Enregistrer".
Ça ferme la fenêtre, on clique alors sur "Sauvegarder".

Voilà, on a notre script posé dans /var/www/html/plugins/script/core/ressources/
Accessible par http://IP_JEEDOM/plugins/script/core/ressources/backup_id_commandes_supprimees.php

On peut retourner éditer ce script/code à tout moment (avec le bouton Editer).
Pas de problèmes de droits, ni de logiciels supplémentaires à installer.

Ça semble long parce que j'ai détaillé chaque clic, mais moins de 2 minutes suffisent pour ces étapes :)

Re: Retrouver le nom des commandes supprimées

Publié : 03 févr. 2018, 21:10
par extrapitou

romanais a écrit :
Une fenêtre s'ouvre, on colle simplement le code dedans.
On clique sur "Enregistrer".
Ça ferme la fenêtre, on clique alors sur "Sauvegarder".
Ah ben c'est ca que j'ai pas. Aucune fenêtre ne s'ouvre j'ai surement pas fait le début correctement.

Merci d'avoir expliquer en détail je ferai des test pour voir ce que j'ai mal fait.

Envoyé depuis mon Mobicarte (Si Si jvous jure !!!)


Re: Retrouver le nom des commandes supprimées

Publié : 04 févr. 2018, 11:44
par zeftp
meute a écrit :
02 févr. 2018, 11:46
Suis sûr que même Loic va implémenter ton script ... ca charge pas jeedom et ça peut vraiment être utile ... n'est ce pas Loic ? :mrgreen:
Ca mériterais presque une place dans les HowTo de la doc officielle, comme ça rien à maintenir niveau code et tout le monde à accès à l'information pour l’implémenter si besoin.
Tout à fait d'accord (après, y'a pas que Loïc qui bosse sur le code Jeedom non plus ;)).

J'offre une bière sur Lyon au nom de la communauté à qui implémentera la sauvegarde automatique du dernier nom de commande connue lors de sa suppression ! :)

Romanais, tu pourrais faire un edit de ton premier post avec la dernières versions de ton script que je fasse un lien depuis le premier post pour ceux que ça intéresse? :)

Merci

Re: Retrouver le nom des commandes supprimées

Publié : 04 févr. 2018, 11:53
par romanais
Ça marche je fais ça en début de semaine

Re: Retrouver le nom des commandes supprimées

Publié : 24 mars 2018, 12:16
par kerdale
Merci romanais pour ce tuto et ce script absolument nickel qui fonctionne du premier coup que je découvre seulement aujourd'hui ( après avoir bataillé toute la journée d'hiers à retrouver ce qu'était cette fichue cde orpheline qui mettait le bazar :D ). Pour info sous Ios/Exel ouverture directe sans avoir à choisir le caractère latin1 ou autre.
Bravo