[RESOLU]ecrire dans une BDD distante depuis mon PI

Paramétrer le Raspberry Pi B/B+ pour se connecter via Ethernet ou une clé WiFi USB

Modérateurs : Francois, maxty01

Répondre
estelle
Raspinaute
Messages : 102
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » lun. 12 déc. 2016 15:30

Salut Bud spencer,

Le fichier que j'envoie fait 1,7 Mo
et pour en avoir le coeur net j'ai envoyé un fichier de 175k

Et toujours la sortie sur le "else"
J'ai également vérifier que les attributs du répertoire images permet l'écriture (733)

Peux tu svp vérifier le code ou le principe
Dans l'exemple que j'ai trouvé il avait mis "monficher" je l'ai remplacé par "pi1.png"

Code : Tout sélectionner

<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['pi1.png']) AND $_FILES['pi1.png']['error'] == 0)
{
        // Testons si le fichier n'est pas trop gros
        if ($_FILES['pi1.png']['size'] <= 2000000)
        {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES["pi1.png"]["name"]);
                echo $infosfichier;
                $extension_upload = $infosfichier['extension'];
                echo $extension_upload;
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        // On peut valider le fichier et le stocker définitivement
                        move_uploaded_file($_FILES["pi1.png"]["tmp_name"], 'images/' . basename($_FILES["pi1.png"]["name"]));
                        echo "L'envoi a bien été effectué !";
                }
                else {echo "Extension non autorisée";}
        }
        else {
         $temp = $_FILES['pi1.png']['size'];
          echo "taille: $temp ";}
}
else {
  $temp=$_FILES['pi1.png']['error'];
  echo "erreur: $temp ";}
?>
programme du PI

Code : Tout sélectionner

fic="/home/pi/partage/pi1.png"          
     file = {'file': open(fic, "rb")}    
      r = requests.post("http://ruches.montminoises.free.fr/AfficheCamera.php", files = file)
      print (r.text)
Merci d'avance
Estelle

estelle
Raspinaute
Messages : 102
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » mar. 13 déc. 2016 16:24

Apparemment il faut que le fichier soit encodé

la requête possède l’attribut enctype="multipart/form-data". Sinon, request.FILES est vide.

J'ai essayé une bidouille comme cela :

Code : Tout sélectionner

fic="/home/pi/partage/pi1.png"       
with open(fic, "rb") as image_file:
      encoded_string = base64.b64encode(image_file.read())
fichier = open("/home/pi/partage/pi2.png", "wb")
fichier.write(encoded_string)
fichier.close()
Mais cela ne fonctionne pas mieux
Il n'a rien qui sort au bout du pipe
Tu aurais une solution
A+
Estelle

estelle
Raspinaute
Messages : 102
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » mar. 13 déc. 2016 16:58

Je passe déjà par Free pour envoyé des emails avec pièces jointes depuis mon PI
Il y a bien un encodage base 64

Code : Tout sélectionner

# Gestion des e-mails
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# ------------------- Envoi d'un e-mail avec PJ -------------------------
def send_email_pj (to,sujet,corps,attach):
    msg = MIMEMultipart()
    msg['From'] = 'estelle@gmail.com'
    msg['To'] = to
    msg['Subject'] = sujet 
    message = corps
    msg.attach(MIMEText(message)) 
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(open(attach, 'rb').read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(attach))
    msg.attach(part)
    
    mailserver = smtplib.SMTP('smtp.free.fr', 587)
    mailserver.ehlo()
    mailserver.starttls()
    mailserver.ehlo()
    mailserver.login('estelle@free.fr', 'xxxxxx')
    mailserver.sendmail('estelle.montmin@gmail.com', to, msg.as_string())
    mailserver.quit()   
Je n'arrive pas à trouver de solution

estelle
Raspinaute
Messages : 102
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » ven. 22 sept. 2017 07:45

Bud Spencer a écrit :Allez, vite fait à l'arrache (ca ne gère pas toutes les erreurs possible ni la sécu, c'est juste un exemple).

Tu écris un fichier tension.php et tu mets ca dedans

Code : Tout sélectionner


<?php                
        $cnx = mysqli_connect('ton_db_host','ton_db_user','ton_db_password','ton_db_dbname') 
        or die('erreur cnx !');

        $qry = "SELECT champsquicontiendlatension FROM tatable ORDER BY champsdordre DESC LIMIT 0, 1";
        $tension = mysqli_fetch_assoc(mysqli_query($cnx,$qry))['champsquicontiendlatension'];
        mysqli_close($cnx);

        echo $tension;
?>
    
A adapter avec tes paramètres et suivant si tu utilises mysql_ ou mysqli_. Quoi qu'il en soit, Quand tu vas appeler cette page ca doit te retourner juste la dernière tension enregistrée dans ta table.



Un exemple de liaison coté client (à tester telle quelle dans une page xxx.php puis à intégrer dans ta page d'index)

Code : Tout sélectionner

<html>
<head>   
</head>
<body>

    <p><b>Ma super page d'waibe que ja fais moi tout seul</b></p>
   
    <p>Tension batterie : <span id="domTension"></span></p>

    <script = "text/javascript">
       
    function getTension() {    
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (this.status == 200 && this.readyState == 4) {
                document.getElementById("domTension").innerHTML = this.responseText;
            }
        };
        xhr.open("GET", "tension.php", true);
        xhr.send();
    }
    
    setInterval(function()
    {
        getTension();
    }, 60000); 

    getTension(); 
	</script>

</body>
</html>


Comment ca marche :
C'est simple, ta page d'index est chargée une seule fois, mais ton navigateur exécute le javascript qui est dedans.
Ce script appel la fonction getTension() toutes les 60000 milliseconde (1 minutes) sans recharger la page.
La fonction getTension() appelle la page tension.php (qui elle, retourne la valeur de la dernière tension) et met a jour l'objet DOM 'domTension'

Si tu veux afficher autres chose que la tension (alerte, couleur, barre graphe ...) , tu peux le coder aussi bien coté serveur que client.
Comment récupérer id="domTension" dans une balise <title> afin de rendre le texte à coté du favicon actif

Image

Ce code ne fonctionne pas:

Code : Tout sélectionner

<head>
  <meta charset="utf-8" />
  <title><div id="domTension"></div></title>
  <link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
  <link rel="stylesheet" type="text/css" href="print.css" media="print" />
  <link rel="icon" type="image/png" href="favicon.png" />  
</head>

Bud Spencer
Raspinaute
Messages : 377
Enregistré le : lun. 15 août 2016 21:38

Re: ecrire dans une BDD distante depuis mon PI

Message par Bud Spencer » ven. 22 sept. 2017 10:48

Si tu veux notifier dans l’onglet du navigateur, tu peux le faire depuis ton script JS en formalisant la variable document.title

Pour tester sur le modèle de script getTention(), supprime ton div dans la balise title du header et remplace-le par le titre de ton site.
Ensuite, remplace la ligne :
document.getElementById("domTension").innerHTML = this.responseText;
par
document.title = this.responseText ;
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

estelle
Raspinaute
Messages : 102
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » ven. 22 sept. 2017 16:25

Ok cela fonctionne

Encore merci Bud Spencer

A+

Répondre

Retourner vers « Le réseau sur le Raspberry Pï »