Go Down

Topic: arduino et GOLDMAN SACHS (Read 1 time) previous topic - next topic

leresteux

salut à tous,

je cherche à recupé un flux boursier (ici l'indice de GS). j'ecris un premier code utilisant processing pour récuper l'info ()
Depuis j'ai recupéré un ethernet schield et souaite me passer de processing mais ça bug ...un coup de main svp!

Code: [Select]

#include <SPI.h>
    #include <Ethernet.h>
    #include <TextFinder.h>
   
    float GS;
    //Adresse MAC de la carte
    byte mac[] = {
      0xDE, 0xAF, 0xFF, 0xEF, 0xFE, 0xED};
   
    EthernetClient client;
    TextFinder finder(client);
   
    //Adresse du serveur
    char server[] = "finance.yahoo.com";
   
    //Dernière connection au serveur en ms
    unsigned long lastConnectionTime = 0;       
   
    //Etat de la connection
    boolean lastConnected = false;
   
    //délai entre chaque connection en ms (1mn)
    const unsigned long postingInterval = 60*1000;
    void setup(){
      //Initialisation du port série, utile au débuggage
      Serial.begin(9600);
   
      //Délai afin d'itnialiser correctement le module ethernet
      delay(1000);
   
      //Initialisation de la connection ethernet, attribution automatique d'une IP via DHCP
      Ethernet.begin(mac);
   
      //On affiche l'adresse IP du module
     Serial.print("IP address: ");
     Serial.println(Ethernet.localIP());
   
    }
   
     void loop(){
   
      //Les données sont envoyées sur le port série pour affichage
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
      else {
      Serial.print("hic");}
     
        //Si il n'y a pas de connection mais qu'il y en avait une lors de la dernière execution du loop
      //on arrete le client
      if (!client.connected() && lastConnected) {
        Serial.println();
        Serial.println("disconnecting.");
        client.stop();
      }
   
      //si il n'y a pas de connection mais que 10 secondes se sont écoulées depuis la dernière connection
      //on essaye de nouveau
      if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
        httpRequest();
      }
      //on stocke l'état de la connection
      lastConnected = client.connected();
   
   
   
   
    // On cherche l'attribut GS
        if(finder.find("yfs_l84_gs") ){
          //On stocke la valeur voulue dans la variable temp
          GS = finder.getValue();
          //On affiche cette valeur à des fins de débuggage
          Serial.print("GS:  ");
          Serial.println(GS);
        }
        else {
          Serial.print("Pas de donnees");
        }
      }
   
   
   
   
    //fonction permettant d'effectuer une requete HTTP
    void httpRequest() {
      // si la connection est réussie
      if (client.connect(server, 80)) {
        Serial.println("connecting...");
        // on envoie le HTTP GET
        client.println("GET /q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS HTTP/1.0");
        client.println("Host: finance.yahoo.com");
        client.println("User-Agent: arduino-ethernet");
        client.println("Connection: close");
        client.println();
   
        //on stock le moment de la dernière connection
        lastConnectionTime = millis();
      }
      else {
        //si la connection échoue
        Serial.println("connection failed");
        Serial.println("disconnecting.");
        client.stop();}}

Artouste


salut à tous,

je cherche à recupé un flux boursier (ici l'indice de GS). j'ecris un premier code utilisant processing pour récuper l'info ()
Depuis j'ai recupéré un ethernet schield et souaite me passer de processing mais ça bug ...un coup de main svp!



Bonjour
ça bug , sans plus de precisions, ce n'est pas une question, c'est juste ton constat à toi

leresteux

Ouais pardon  Artouste j'ai fait un peu mon feignant sur ce coup là   :smiley-red:

Code: [Select]
      //Les données sont envoyées sur le port série pour affichage
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
      else {
      Serial.print("hic");}

sur cette partie il m'indique ""hic"   :P

et  ici
Code: [Select]
    // On cherche l'attribut GS
        if(finder.find("yfs_l84_gs") ){
          //On stocke la valeur voulue dans la variable temp
          GS = finder.getValue();
          //On affiche cette valeur à des fins de débuggage
          Serial.print("GS:  ");
          Serial.println(GS);
        }
        else {
          Serial.print("Pas de donnees");
        }
      }

je reçois "pas de donnees" =(


Artouste


Ouais pardon  Artouste j'ai fait un peu mon feignant sur ce coup là   :smiley-red:



:smiley-mr-green:
A tu déjà verifier que tu recois bien des infos avec la methode get  en faisant un get sur un site basique necessitant du un peu moins lourd que la tartine
Code: [Select]
client.println("GET /q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS HTTP/1.0");

leresteux

salut,

j'ai été absent un bon bout de temps.
bon bien je m'en sors plus ou moins bien avec mon ethernet shield
j'arrive a récupérer des valeurs grâce àla librairie textfinder et getFloat().
mais je n'obtiens pas la veritable valeur. ainsi l'indice boursier de 163.44 m'est rendu 163.00.
J'imagine que le programme s'arrette au . (point) le prenant pour un caractére...

comment resoudre ce hic?

j ai regardé un peu dans la librairie mais je dois avouer que ce n'est pas tres claire pour moi
tel que :
findUntil("value", "\n\r")"
getFloat(char skipChar);






Christian_R

"\n\r" est le code qui signifie line feed (saut de ligne) et carriage return (retour chariot).
Ce n'est pas le point . qui marque la fin de transmission.

Par contre, si tu stockes l'indice boursier dans une variable de type int (entier) ça arrondit à .00
Christian

Artouste


salut,

j'ai été absent un bon bout de temps.
bon bien je m'en sors plus ou moins bien avec mon ethernet shield
j'arrive a récupérer des valeurs grâce àla librairie textfinder et getFloat().
mais je n'obtiens pas la veritable valeur. ainsi l'indice boursier de 163.44 m'est rendu 163.00.
J'imagine que le programme s'arrette au . (point) le prenant pour un caractére...

comment resoudre ce hic?

j ai regardé un peu dans la librairie mais je dois avouer que ce n'est pas tres claire pour moi
tel que :
findUntil("value", "\n\r")"
getFloat(char skipChar);


Bonjour
mets ton code tel qu'il est actuellement

leresteux

salut,
voici le code (j ai tout démonté pour reprendre étape par étape).
D'ailleurs apres avoir obtenu une premiere fois la valeur demandée,  il "disconnecting" toujours...

Si tu connais un lien vers une explication francophone ou tres explicite de textfinder je suis preneur :)

merci.

Code: [Select]
#include <TextFinder.h>

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "bourse.capital.fr";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192,168,0,177);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
TextFinder  finder( client );
void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /cotation/nyse/cours-goldman-sachs-group-us38141g1040-266507 HTTP/1.1");
    client.println("Host: bourse.capital.fr");
    client.println("Connection: close");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
if (finder.find("CoursVar")){     
   float valeur = finder.getFloat();
      //On affiche cette valeur à des fins de débuggage
      Serial.print("Valeur:  ");
      Serial.println(valeur);}
      else{Serial.print(".");}


  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while(true);
  }
 
}




leresteux

re,
c'est réussi à recupérer toute la valeur par :  
Code: [Select]
float valeur = finder.getFloat(',');  :)
je vais pouvoir poursuivre doucement...

j'y reviendrais surement

a+

leresteux

comme promis j'y reviens :P
voici mon script
mais je ne le trouve pas classe... en effet je dois deconnecter puis reconnecter ma connection pour eviter le deconnection et obtenir une valeur...
merci
Code: [Select]
#include <SD.h>

#include <TextFinder.h>

#include <SPI.h>
#include <Ethernet.h>

File dataIndice;
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "bourse.capital.fr";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192,168,0,177);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
TextFinder  finder( client );
unsigned int nbreConnection = 0;
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

  if (!SD.begin(4)) {
    Serial.println("initialization SD failed!");
    return;
  }
  Serial.println("initialization SD done.");

}

void loop()
{   
  connection();
  if (
  finder.find("CoursVar"))
  {

    float valeur = finder.getFloat(',');
    //On affiche cette valeur à des fins de débuggage
    Serial.print("Valeur:  ");
    Serial.println(valeur/100);
    dataIndice = SD.open("Indice.txt", FILE_WRITE);
    if (dataIndice) {
      Serial.print("Writing to SD...");
      dataIndice.println(valeur/100);
      // close the file:
      dataIndice.close();
      Serial.println("done.");

    }
  };

  nbreConnection ++; 
  Serial.print("connection ");
  Serial.print(nbreConnection);
  Serial.println("terminé ");
  delay(1000);
}
void connection(){
      Serial.println("disconnecting.");
    client.stop();

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:


  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /cotation/nyse/cours-goldman-sachs-group-us38141g1040-266507 HTTP/1.1");
    client.println("Host: bourse.capital.fr");
    client.println("Connection: close");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:

    Serial.println("connection failed");
  }
}



PS : la carte SD quant a elle marche sans pb


Go Up