IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Boucle envoi mail 1x


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Boucle envoi mail 1x
    Bonjour,
    Je suis débutant sur le forum et sur python

    J'ai passé la journée à essayé de faire une boucle et envoyer un mail quand la condition est remplis.
    J'y suis arrivé mais le problème est que a chaque boucle (toute les secondes) ça envoi un mail.

    Je n'arrive pas a trouver la solution, si vous pouvez m'aider.


    Le contexte :
    J'aimerai faire une alarme avec un contacteur.
    Donc admettons que le contact est TRUE = Envoi d'un mail et attente que l'état devienne FALSE avant d'envoyé un nouveau mail. (Je bloque sur cette partie)
    Et j'ai aussi ajouté 2 led pour identifier visuellement dans quel état ce trouve l'alarme

    Voila ce que j'ai fait (ça tourne sur raspberry pi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import smtplib
    import RPi.GPIO as GPIO
    import time
     
    #Email Variables
    SMTP_SERVER = 'smtp.gmail.com'                          #Serveur SMTP de Google
    SMTP_PORT = 587                                              #Serveur SMTP => Port
    GMAIL_USERNAME = 'monAdresseMail@gmail.com'     #Username du compte Google
    GMAIL_PASSWORD = 'monMotDePasse123'              #Mot de passe du compte Google
     
    # La numerotation choisie pour nommer les broches (BCM)
    GPIO.setmode(GPIO.BCM)
     
    # Evite l'affage des messages d'erreur inutile
    GPIO.setwarnings(False) 
     
    # Definition des pins
    Bouton = 4
    Led1 = 14
    Led2 = 15
     
    # Definition des broches pour les entrees.
    GPIO.setup(Bouton, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
     
    # Definition des broches pour les sorties
    GPIO.setup(Led1, GPIO.OUT, initial = GPIO.LOW)
    GPIO.setup(Led2, GPIO.OUT, initial = GPIO.LOW)
     
     
    class Emailer:
        def sendmail(self, recipient, subject, content):
     
            #Create Headers
            headers = ["From: " + GMAIL_USERNAME, "Subject: " + subject, "To: " + recipient,
                       "MIME-Version: 1.0", "Content-Type: text/html"]
            headers = "\r\n".join(headers)
     
            #Connect to Gmail Server
            session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
            session.ehlo()
            session.starttls()
            session.ehlo()
     
            #Login to Gmail
            session.login(GMAIL_USERNAME, GMAIL_PASSWORD)
     
            #Send Email & Exit
            session.sendmail(GMAIL_USERNAME, recipient, headers + "\r\n\r\n" + content)
            session.quit
     
    sender = Emailer()
     
    while True:
        if (GPIO.input(Bouton) == True):
            GPIO.output(Led1, GPIO.LOW)
            GPIO.output(Led2, GPIO.HIGH)
     
            #sendTo = 'adresseMailDeMonDestinataire@gmail.com'
            #emailSubject = "Alarme - MonTexte"
            #emailContent = "Alarme déclenché le " + time.ctime()
            #sender.sendmail(sendTo, emailSubject, emailContent)
     
            print("Email transmis")
            time.sleep(1.0)
     
        else:
            GPIO.output(Led1, GPIO.HIGH)
            GPIO.output(Led2, GPIO.LOW)
            print("En attente")
            time.sleep(1.0)
     
    GPIO.cleanup()

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Il faut mettre le code entre balises # parce que là, comment dire...
    Pas d'aide par mp.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Phips Voir le message
    Donc admettons que le contact est TRUE = Envoi d'un mail et attente que l'état devienne FALSE avant d'envoyé un nouveau mail. (Je bloque sur cette partie)
    "attente que l'état devienne FALSE", c'est un boucle qui teste à chaque itération l'état et qui en sort lorsqu'il est FALSE ou attendre un changement d'état via les primitives GPIO et des questions à poser dans le forum Arduino ou RaspberryPI...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Le code doit se mettre avec l'indentation...
    Sinon, oui while True, c'est pas terrible.
    Pas d'aide par mp.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Il faut mettre le code entre balises # parce que là, comment dire...
    C'est corrigé

    Effectivement j'avais selectionner la mauvaise balise.


    Citation Envoyé par marco056 Voir le message
    Le code doit se mettre avec l'indentation...
    Sinon, oui while True, c'est pas terrible.
    Problème du a la mauvaise balise


    Citation Envoyé par wiztricks Voir le message
    Salut,

    "attente que l'état devienne FALSE", c'est un boucle qui teste à chaque itération l'état et qui en sort lorsqu'il est FALSE ou attendre un changement d'état via les primitives GPIO et des questions à poser dans le forum Arduino ou RaspberryPI...
    - W
    Oui effectivement j'avais même pas fait attention qu'il y a vais un channel Rapsbery pi.

    Après mon problème concerne plutot le code python pour les GPIO je n'ai pas de problème.

    Dans l'idée je ne sais pas comment faire une boucle qui teste en contine et qui n'envoi la notification qu'une fois.
    Parceque je ne peux (veux) pas intéragire avec le système.

    L'alarme sera monté sur une installation de GAZ et il doit détecter tout seul quand la bouteil est vide = TRUE et quand elle est pleine = False

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Phips Voir le message
    Dans l'idée je ne sais pas comment faire une boucle qui teste en contine et qui n'envoi la notification qu'une fois.
    Un drapeau qui passe de False à True pour tester que le mail a été expédié devrait suffire.

    Après si vous parlez de bouteille de gaz, vous vous rendez compte que le drapeau (variable du programme) aura la durée de vie dudit programme...
    Si la bouteille de gaz se vide en plusieurs heures/semaines/mois, le programme risque de redémarrer pour différentes raisons et devra sauvegarder des données dans des fichiers pour redémarrer dans un état cohérent (avec l'état de la bouteille de gaz et mail expédié ou pas)....
    Et çà va être plus compliqué qu'une boucle et une poignée de variables.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [XL-2007] vba, arrêt de la boucle envoie d'un mail
    Par pepsister dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/02/2014, 17h53
  2. [XL-2010] Envoi mail par excel avec boucle pour tous les champs
    Par jul2012 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/11/2012, 14h54
  3. [MySQL] envoi mail avec boucle
    Par digger dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/10/2012, 21h51
  4. [AC-2003] boucle sur pièces jointes envoi mail
    Par novice06 dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/07/2010, 14h50
  5. pb envoi mail CDONTS
    Par flatron dans le forum ASP
    Réponses: 2
    Dernier message: 30/12/2003, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo