Pages: 1 [2] 3   Go Down
Author Topic: Gmail notifier sans Ethernet Shield  (Read 4199 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
2. C'est exactement ce que fait mon programme, dans le tiens il te manque une boucle infinie avec un sleep (une sorte de "delay" comme sur l'Arduino).

C'est pour le fait qu'il check les mails en permanence ou pour faire clignoter la led constamment ?

J'ai essayer ça, pas d'erreur mais en fait il n'y a pas de "bouclage" du programme ...

Quote
import serial, sys, feedparser, time
#Settings - Change these to match your account details
USERNAME="xxxxx@gmail.com"
PASSWORD="xxxxxxx"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "COM3" # Change this to your serial port!
# Set up serial port
try:
   ser = serial.Serial("COM3", 9600)
except serial.SerialException:
   print "no device connected - exiting"
   sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
   
# Output data to serial port
if newmails > 0:
   ser.write("m")
   print "some mail"
else:
   ser.write("n")
   print "no mail"
#print data to terminal


# Close serial port
time.sleep(0.5)

PS: j'ai réussit a lancer ce script dans l’exécuteur Windows en faisant : c:/python27/checkmail.py

merci
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Toulouse - FRANCE
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai repris ta méthode avec feedparser et voilà un script fonctionnel :
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import feedparser
import serial
import time

# ------------------------------------------------------------------------------ #

request = 'https://user:password@mail.google.com/gmail/feed/atom'
serial = 'COM3'
delay = 2

# ------------------------------------------------------------------------------ #

def check_gmail (request):
try:
newmails = int(feedparser.parse(request)['feed']['fullcount'])
except:
return 'ERROR'
else:
return newmails

# ------------------------------------------------------------------------------ #

try:
ser = serial.Serial(serial, 9600)
except:
print 'No device connected !'
else:
while True:
reply = check_gmail(request)
if reply == 'ERROR':
ser.write(-1)
print reply
else:
if reply > 0:
   ser.write(1)
else:
   ser.write(0)
print str(reply) + ' new mail(s) !'
time.sleep(delay)

Chez moi tout marche bien.
Sur mon circuit j'ai une LED verte, et une rouge (pour la gestion des erreurs).

Si l'Arduino reçoit 1, j'allume la LED verte et j’éteins la LED rouge (email(s) non lu(s)).
Si l'Arduino reçoit 0, j'éteins la LED verte et j’éteins LED la rouge (pas email(s) non lu(s)).
Si l'Arduino reçoit -1, j'éteins la LED verte et j'allume LED la rouge (erreur, qui peut être de connexion à Internet ou login invalide).

Petite remarque : j'ai allongé la pause (sleep) dans la boucle, si ça tourne trop vite, tu risques de faire ramer l'ordi et ta connexion Internet, sachant que même un check toute les 5 secondes ça suffit amplement pour être avertis rapidement (même si avec les ordi de nos jours, il en faut pas mal pour leurs faire mal smiley-razz).

Enjoy it smiley !
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci a toi mais avec python je commence a craquer  smiley-twist

J'ai donc repris ton code et j'ai compris son cheminement
Quote
import feedparser
import serial
import time

# ------------------------------------------------------------------------------ #

request = "https://xxxx:xxxxx@mail.google.com/gmail/feed/atom"
serial = "COM3"
delay = 2

# ------------------------------------------------------------------------------ #

def check_gmail (request):
   try:
      newmails = int(feedparser.parse(request)['feed']['fullcount'])
   except:
      return 'ERROR'
   else:
      return newmails

# ------------------------------------------------------------------------------ #

try:
   ser = serial.Serial("COM3", 9600)
except:
   print 'No device connected !'
else:
   while True:
      reply = check_gmail(request)
      if reply == 'ERROR':
         ser.write(-1)
         print reply
      else:
         if reply > 0:
            ser.write("m")
         else:
            ser.write("n")
         print str(reply) + ' new mail(s) !'
      time.sleep(delay)

et je me retrouve avec l'erreur 'No device connected !'

Je me dit que c'est peut être mon arduino qui merdouille alors je lance "mon" code:

Quote
import feedparser
import serial
import time
#Settings - Change these to match your account details
USERNAME="xxxx@gmail.com"
PASSWORD="xxxxxx"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "COM3"
delay = "2"
# Change this to your serial port!
# Set up serial port
try:
   ser = serial.Serial("COM3", 9600)
except serial.SerialException:
   print "no device connected - exiting"
   sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
   
# Output data to serial port
if newmails > 0:
   ser.write("m")
   print "some mail"
else:
   ser.write("n")
   print "no mail"
#print data to terminal


# Close serial port
time.sleep(delay)

Et la pas de souci le check des mails se lance mais je pense que mon delay ne fonctionne pas car je n'est qu'un seul "no email" et pas de nouvelle ligne toutes les 2 secondes ....

merci beaucoup


Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Toulouse - FRANCE
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et si tu transforme ça :
Code:
try:
        ser = serial.Serial("COM3", 9600)
except:
        print 'No device connected !'
En :
Code:
try:
        ser = serial.Serial("COM3", 9600)
except serial.SerialException:
        print 'No device connected !'

Et dans le tiens c'est tout à fais normal que ça ne check qu'une seule fois.
Je te l'ai déjà dis, tu n'as pas de boucle, donc une fois le programme finit, il quitte.

C'est pour ça que dans le miens il y a :
Code:
while True:

C'est un boucle infinie.
L'équivalent en langage C (pour l'Arduino) :
Code:
while (true)

Donc dans mon programme, le cheminement est :
Quote
check des emails

si ERROR --> -1
sinon
        si nombre > 0 --> 1
        sinon --> 0

petit "dodo" du programme pendant n secondes...
Et HOP ! On remonte à la première étape !

Donc voilà...
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Traceback (most recent call last):
  File "C:\Python27\checkgmail.py", line 25, in <module>
    except serial.SerialException:
AttributeError: 'str' object has no attribute 'SerialException'

En remplaçant voila la nouvelle erreur .... Je pige vraiment pas alors que cette partie du code est identique sur les 2 et que un fonctionne et pas l'autre ...

merci beaucoup

EDIT:

OK je commence a comprendre la "boucle", j'ai donc rajouter le else et while true dans mon code mais ça coince encore grrrr
Quote
import feedparser
import serial
import time
#Settings - Change these to match your account details
USERNAME="xxxxxx@gmail.com"
PASSWORD="xxxxxxxx"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "COM3"
delay = 2

# Change this to your serial port!
# Set up serial port
try:
   ser = serial.Serial("COM3", 9600)
except serial.SerialException:
   print "no device connected - exiting"
   sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
   
# Output data to serial port
else:
   while True:

if newmails > 0:
   ser.write("m")
   print "some mail"
else:
   ser.write("n")
   print "no mail"
#print data to terminal


# Close serial port
time.sleep(delay)
« Last Edit: March 06, 2011, 11:21:11 am by chicotore » Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Toulouse - FRANCE
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est moi qui ai fais une bétise smiley-razz !
Il y avait un conflit de nom entre le module "serial" et la variable "serial" que j'avais mis au début.

Voilà le code corrigé :
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import feedparser
import serial
import time

# ------------------------------------------------------------------------------ #

request = 'https://user:password@mail.google.com/gmail/feed/atom'
serial_port = 'COM3'
delay = 2

# ------------------------------------------------------------------------------ #

def check_gmail (request):
try:
newmails = int(feedparser.parse(request)['feed']['fullcount'])
except:
return 'ERROR'
else:
return newmails

# ------------------------------------------------------------------------------ #

try:
ser = serial.Serial(serial_port, 9600)
except serial.SerialException:
print 'No device connected !'
else:
while True:
reply = check_gmail(request)
if reply == 'ERROR':
ser.write(-1)
print reply
else:
if reply > 0:
   ser.write(1)
else:
   ser.write(0)
print str(reply) + ' new mail(s) !'
time.sleep(delay)

J'ai changé la variable "serial" en "serial_port".
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah bah nikel celui la fonctionne  smiley, je m'en vais l'éplucher pour mieux comprendre ce que j'avais zaper ....

Bon maintenant il me reste a faire la partie "arduino"  smiley-grin

franchement merci beaucoup pour ton aide  smiley-mr-green
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Toulouse - FRANCE
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pas de quoi.

Pour la partie Arduino tu peux le faire avec une seule LED sinon.
1 --> LED allumée.
0 --> LED éteinte.
-1 --> LED qui clignote.

Enjoy it !
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je suis parti sur ce concept en fait:

No mail => LED éteinte  ( variable "n" )
Mails => LED clignotante ( variable "m" )
ERROR => LED fixe (variable "-1" )

J'ai déjà fait "la base" il me reste a implanter le clignotement, j'attaque ça de suite


Quote
// led wired + to pin 12, resistor to positive +5v

int outPin = 13; // Output connected to digital pin 12
int mail = LOW; // Is there new mail?
int val; // Value read from the serial port
void setup()
{
 pinMode(outPin, OUTPUT); // sets the digital pin as output
 Serial.begin(9600);
 Serial.flush();
 mail = LOW; // start off with lights out
}

void loop()
{
 // Read from serial port
 if (Serial.available())
 {
   val = Serial.read();
   Serial.println(val, BYTE);

   if (val == 110) // n = 110 in dec
   {
     mail = LOW;  // HIGH is off because led is connected to +5v on the other side
   }
   if (val == -1) // n = 110 in dec
   {
     mail = LOW;  // HIGH is off because led is connected to +5v on the other side
   }

   else if (val == 109) //109 = m in dec
   {
     mail = HIGH; // LOW is on because led is connected to +5v on the other side
   }
 }

 // Set the status of the output pin
 digitalWrite(outPin, mail);
}
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Partie "clignotante" implémenté mais ça clignote pas outchhh ^^


Quote
// led wired + to pin 12, resistor to positive +5v

int outPin = 13; // Output connected to digital pin 12
int mail = LOW; // Is there new mail?
int val; // Value read from the serial port
void setup()
{
 pinMode(outPin, OUTPUT); // sets the digital pin as output
 Serial.begin(9600);
 Serial.flush();
 mail = LOW; // start off with lights out
}

void loop()
{
 // Read from serial port
 if (Serial.available())
 {
   val = Serial.read();
   Serial.println(val, BYTE);

   if (val == 110) // n = 110 in dec
   {
     mail = LOW;  // HIGH is off because led is connected to +5v on the other side
   }
   if (val == -1) // n = 110 in dec
   {
       mail = HIGH;  // HIGH is off because led is connected to +5v on the other side
   }

   else if (val == 109) //109 = m in dec
   {
      mail = LOW; // LOW is on because led is connected to +5v on the other side
     delay(1000);
     mail = HIGH; // LOW is on because led is connected to +5v on the other side
     delay(1000);
   }
 }

 // Set the status of the output pin
 digitalWrite(outPin, mail);
}
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Arff j'ai besoin de vous  smiley-roll, ma LED ne veut pas clignoter j'ai beau chercher je vois pas !
Elle reste fixe au lieu de clignoter pourtant j'ai bien mis un "delay" d'allumage et d'extinction  smiley-red
Quote
// led wired + to pin 12, resistor to positive +5v

int outPin = 13; // Output connected to digital pin 12
int mail = LOW; // Is there new mail?
int val; // Value read from the serial port
void setup()
{
 pinMode(outPin, OUTPUT); // sets the digital pin as output
 Serial.begin(9600);
 Serial.flush();
 mail = LOW; // start off with lights out
}

void loop()
{
 // Read from serial port
 if (Serial.available())
 {
   val = Serial.read();
   Serial.println(val, BYTE);

   if (val == 110) // n = 110 in dec
   {
     mail = LOW;  // HIGH is off because led is connected to +5v on the other side
   }
   if (val == -1) // n = 110 in dec
   {
       mail = HIGH;  // HIGH is off because led is connected to +5v on the other side
   }

   else if (val == 109) //109 = m in dec
   {
      mail = LOW; // LOW is on because led is connected to +5v on the other side
     delay(1000);
     mail = HIGH; // LOW is on because led is connected to +5v on the other side
     delay(1000);

   }
 }

 // Set the status of the output pin
 digitalWrite(outPin, mail);
}

merci a vous
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Toulouse - FRANCE
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est normal que ça ne marche pas...

Quand tu fais :
Code:
mail = LOW; // LOW is on because led is connected to +5v on the other side
delay(1000);
mail = HIGH; // LOW is on because led is connected to +5v on the other side
delay(1000);

Ce qui se traduit par :
Quote
Changement de la variable mail à LOW...
Attente de 1 seconde...
Changement de la variable mail à HIGH...
Attente de 1 seconde...

Changement du statut de la LED avec la valeur de la variable mail.
En gros ta valeur n'a pas changé quand tu arrive à la modification du statut de la LED.

Dans ton cas, je ne ferais pas clignoter cette LED, c'est plus compliqué.
Voilà ma version avec 3 LED (verte, rouge et bleu) :
Code:
int verte = 11;
int rouge = 12;
int blanche = 13;

int value = 0;

void setup()
{
  pinMode(verte, OUTPUT);
  pinMode(rouge, OUTPUT);
  pinMode(blanche, OUTPUT);
 
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    value = Serial.read();
   
    digitalWrite(verte, LOW);
    digitalWrite(rouge, LOW);
    digitalWrite(blanche, LOW);
   
    if (value == 79) // Nouveau message (O)
    {
      digitalWrite(verte, HIGH);
    }
    if (value == 78) // Pas de nouveau message (N)
    {
      digitalWrite(rouge, HIGH);
    }
    if (value == 69) // Erreur (E)
    {
      digitalWrite(blanche, HIGH);
    }
  }
 
}
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah ok  smiley-wink pour le faire avec 3 LED c'est bon j'ai réussit le montage et ça fonctionne ( une bleu, une rouge et une verte ) mais je voulais essayer de la faire clignoter  smiley-wink

La faire clignoter c'est du genre vraiment compliqué ?

Si c'est le cas je laisse tombé ce premier projet, j'en est déjà un deuxième en tête. Fait réagir une série de LED ( RGB ou non suivant laquelle de ma commande ebay arrive en premier ) en fonction de la musique avec un petit micro electret ! j'ai d’ailleurs commencé un schémas ^^

j'aimerais avoir ce rendu :  http://www.youtube.com/watch?v=HPhm8VTCWpg&feature=player_embedded

j'ai trouvé ce schémas:



que j'ai essayer de retranscrire en "visuel" comme ça :



mais pas sur que ce soit bon ^^


thanks a lot smiley
« Last Edit: March 08, 2011, 03:55:33 pm by chicotore » Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Toulouse - FRANCE
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce n'est pas non plus infaisable...
C'est encore et toujours une histoire de boucle, d'agencement de ton code...
Si tu y tiens tant que ça, fais le, mais c'est se compliquer la vie pour rien quand on peux faire si simple.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re, j'ai une petite question a propos de ton code :
Quote
   if (value == 79) // Nouveau message (O)
    {
      digitalWrite(verte, HIGH);
    }
    if (value == 78) // Pas de nouveau message (N)
    {
      digitalWrite(rouge, HIGH);
    }
    if (value == 69) // Erreur (E)
    {
      digitalWrite(blanche, HIGH);

En faite d'ou vienne les valeurs 79,78 et 69 ?

Dans mon code j'avais 110 pour "n" et pas 79
109 pour "m" et pas 78

EDIT: en fait je vient de capter que c'étais en majuscule dans ton code et en minuscule dans le miens, donc c'est OK ^^
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Pages: 1 [2] 3   Go Up
Jump to: