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 :

Problème avec la fonction polling


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    none
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : none
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème avec la fonction polling
    Bonjour / Bonsoir.

    Je suis nouveaux dans le langage python et je travaille actuellement sur du contrôle d'accès avec un lecteur de badge "element14 NXP", mon but est de crée un programme qui récupère le numéro de la carte ainsi que la date et l'heure quand on badge pour qu'ensuite une interface graphique s'ouvre avec les informations du badge et de l'utilisateur.

    Mon problème est que je dois faire en sorte que mon programme fonctionne sans interruptions et que quand un utilisateur badge, fais son rapport et l'envoie, le programme doit se réinitialiser, j'ai donc essayer avec la fonction polling mais cela ne marche pas, soit la variable n'est pas définie, soit il me met l'erreur nxppy.SelectError qui se déclenche quand le lecteur ne détecte aucun carte.

    Si une âme charitable peut m'aider dans ma quête

    Mon code :
    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
     
    from Tkinter import *
    from datetime import datetime
    import nxppy
    import time
    import polling
     
    mifare = nxppy.Mifare()
     
     
    while True:
        try:
            if mifare is None:
                mifare.poll(lambda: mifare.select(), step=0.5, poll_forever=True)
            if mifare is not None:
                uid = mifare.select()
                uiddecimal = int(uid, 16)
                datetime = time.strftime('%d/%m/%y %H:%M',time.localtime())
                print uiddecimal
        except nxppy.SelectError:
                pass
     
     
     
     
    class Application:
        def __init__(self, master):
            frame = Frame(master)
            frame.pack()
            Label(frame, text="Numero de badge : ").grid(row=0, column=0)
            Label(frame, text=uiddecimal).grid(row=0, column=1)
            Label(frame, text="Date et heure d'arriver : ").grid(row=1, column=0)
            Label(frame, text=datetime).grid(row=1, column=1)
            Label(frame, text="Nom de l'agent : ").grid(row=2, column=0)
            Label(frame, text="").grid(row=2, column=1)
            Label(frame, text="Prise de service : ").grid(row=3, column=0)
            saisir = StringVar()
            saisir.set("")
            saisie = Entry(frame, text=saisir, width=50).grid(row=4, column=0)
            prise_service = saisir.get()
            Button(frame, text='Envoyer', command="").grid(row=5, column=1, padx=5, pady=50)
            Button(frame, text='Quitter', command=quit).grid(row=5, column=0, padx=5, pady=50)
     
    root = Tk()
    root.wm_title('Lecteur badge')
    root.geometry("500x300")
    app = Application(root)
    root.mainloop()
    Merci d'avance de votre aide .Pardon pour les fautes d'orthographe.

  2. #2
    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 juliene Voir le message
    Si une âme charitable peut m'aider dans ma quête
    Saisir le badge, l'heure de passage et éventuellement le valider est une activité asynchrone qui pourra s'interfacer avec l'affichage via tkinter (une autre activité asynchrone).
    Il fait sens de pousser la saisie du badge dans un thread.
    Et côté interface soit vous pensez que tkinter est thread safe soit vous devez passer par .after pour appeler une fonction qui mettra l'interface à jour.

    Vous voyez que, là dedans, vous avez un soucis côté conception et réalisation d'une interface graphique qui pilote ou qui est piloté par un thread en plus des détails de réalisation de ce que font les différentes activités dans la pratique.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    none
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : none
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Réponse
    Salut et merci pour votre aide

    Je vais me documenter sur le sujet thread et tester ça puis je reviendrais vers vous

    Merci

    Julien

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par juliene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if mifare is None:
                mifare.poll(lambda: mifare.select(), step=0.5, poll_forever=True)
            if mifare is not None:
                uid = mifare.select()
    Question programmation, il existe le else qui permet de programmer ce qui se passe quand la condition n'est pas vérifiée. Mais surtout ce que je ne m'explique pas, c'est que si "mifare" est à None, tu invoques alors sa méthode poll(). "None" est-il un objet ayant une méthode poll() ????
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    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
    Citation Envoyé par Sve@r Voir le message
    c'est que si "mifare" est à None, tu invoques alors sa méthode poll(). "None" est-il un objet ayant une méthode poll() ????
    Si on veut faire du polling sur la carte, on part déjà de l'exemple donné dans la documentation de nxppy:
    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
    import nxppy
    import time
     
    mifare = nxppy.Mifare()
     
    # Print card UIDs as they are detected
    while True:
        try:
            uid = mifare.select()
            print(uid)
        except nxppy.SelectError:
            # SelectError is raised if no card is in the field.
            pass
     
        time.sleep(1)
    et s'il fonctionne, il n'y a pas de bonne raison d'y toucher.

    La où çà se corse, c'est lorsqu'on veut intégrer un affichage avec un GUI comme tkinter puisqu'on ne sort jamais de la boucle!
    Alors bricoler çà plus ou moins intelligemment avec la bibliothèque polling n'arrangera rien puisqu'elle fait aussi while True:.... time.sleep(...) en interne.


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

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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