Jeedom (ESP Easy) ==> ESP01S ==> Arduino (besoin aide interprétation String)

Bonjour,

Bon c’est plus un sujet Arduino, mais vu que c’est en lien avec Jeedom, je tente ici, je pense que ce type de solution de communication peut intéresser des membres de la communauté.

Lors d’un précédent post, je posait la question pour se passer de Jeeduino car non compatible avec Deconz (pb de librairies).
Présentation du sujet:

Je suis donc parti sur une solution avec un ESP01S connecté en série avec l’Arduino.
J’ai mis et configuré ESP EASY dans Jeedom et flashé/config la ESP01S.
J’arrive à envoyé via le plugin ESP EASY de l’info a mon Arduino, sauf que c’est pas formaté comme je le veux.

J’utilise cette cde:
http://xxx.xxx.x.xx/control?cmd=serialsend,testreception2

Voici un exemple de ce que je reçois:

Info lue : 4683974 : Info   : WD   : Uptime 78 ConnectFailures 0 FreeMem 25720 WiFiStatus 3 ESPeasy internal wifi status: Conn. IP Init

Position de la virgule : -1
Info lue : 4713974 : Info   : WD   : Uptime 79 ConnectFailures 0 FreeMem 25720 WiFiStatus 3 ESPeasy internal wifi status: Conn. IP Init

Position de la virgule : -1
Info lue : 4731166 : Info   : HTTP: serialsend,testreception2testreception2


Position de la virgule : 35

Ce qui m’intéresse ici c’est « testreception2testreception2 », les autres lignes arrivent un peu comme ça régulièrement.
L’idée est de pouvoir extraire l’info « testreception2testreception2 », donc globalement ce qu’il y a après « serialsend, », savez vous s’il y existe une manière de faire dans Arduino (je débute tant bien que mal, je suis déjà content de recevoir en partie ce que j’attends :wink: )

Je me disais qu’avec la position de la virgule si >0, prendre en compte que la fin de la String, mais je trouve pas…

Si quelqu’un a une idée, je suis preneur!

Merci d’avance.

Le code de l’Arduino au cas ou:

int RVch1HUp = 13; //Relais volet Chambre 1 Haut Montée
int RVch1HDn = 12; //Relais volet Chambre 1 Haut Descente
//String Infoserie = 0; //Variable ou sera écrit ce qui sera reçu part le port série

void setup() {
  // put your setup code here, to run once:
pinMode(RVch1HUp, OUTPUT); //configuration pin13 en sortie
pinMode(RVch1HDn, OUTPUT); //configuration pin12 en sortie
Serial.begin(9600); //démarrage communication série
}

void loop() {
  // put your main code here, to run repeatedly:
if (Serial.available()>0){ //on regarde si le buffer a des données
  String Infoserie = Serial.readString(); //on recopie les données dans la variable Infoserie
  delay(100);
  int startofrealinfo = Infoserie.indexOf(',');
  Serial.print("Info lue : ");
  Serial.println(Infoserie);
  Serial.print("Position de la virgule : ");
  Serial.println(startofrealinfo);
  //while (Serial.available()) Serial.read();
  if (Infoserie == "commande 1" ){ //si test est vrai, activation de la sortie pour 1 seconde
    Serial.print("Action : ");
    Serial.println("OK1"); 
    digitalWrite(RVch1HUp, HIGH);
    delay(1000);
    digitalWrite(RVch1HUp, LOW);}
  else if (Infoserie == "commande2" ){
    Serial.print("Action : ");
    Serial.println("OK0");    
    digitalWrite(RVch1HDn, HIGH);
    delay(1000);
    digitalWrite(RVch1HDn, LOW);
  }
}
}

Bon bien j’ai trouvé, pas évident car je débute en programmation, c’est plus ou moins mes premières lignes de code hors tuto…

J’ai utilisé la fonction .startsWith(« chaine recherchée », position premier caractère dans la chaine):

int RVch1HUp = 13; //Relais volet Chambre 1 Haut Montée
int RVch1HDn = 12; //Relais volet Chambre 1 Haut Descente
//String Infoserie = 0; //Variable ou sera écrit ce qui sera reçu part le port série

void setup() {
  // put your setup code here, to run once:
pinMode(RVch1HUp, OUTPUT); //configuration pin13 en sortie
pinMode(RVch1HDn, OUTPUT); //configuration pin12 en sortie
Serial.begin(9600); //démarrage communication série
}

void loop() {
  // put your main code here, to run repeatedly:
if (Serial.available()>0){ //on regarde si le buffer a des données
  String Infoserie = Serial.readString(); //on recopie les données dans la variable Infoserie
  delay(100);
  int startofrealinfo = Infoserie.indexOf(','); //on recherche la position de la virgule dans la chaine de caractère
  Serial.print("Info lue : "); //affiche "Info lue :" dans le moniteur série
  Serial.println(Infoserie); //affiche la String reçue dans le moniteur série
  Serial.print("Position de la virgule : "); //affiche "Position de la virgule : " dans le moniteur série
  Serial.println(startofrealinfo);//Affiche la position de la virgule dans le moniteur série
  //while (Serial.available()) Serial.read(); //on lit les données dans le buffer quand non vide
  if (Infoserie.startsWith(",RVch1HUpRVch1HUp", startofrealinfo)){ //on test si la valeur après la position de la virgule correspond au test, si vrai, on allume la led pendant une seconde
    Serial.print("Action : ");
    Serial.println("OK1"); 
    digitalWrite(RVch1HUp, HIGH);
    delay(1000);
    digitalWrite(RVch1HUp, LOW);}
  else if (Infoserie.startsWith(",RVch1HDnRVch1HDn", startofrealinfo)){
    Serial.print("Action : ");
    Serial.println("OK0");    
    digitalWrite(RVch1HDn, HIGH);
    delay(1000);
    digitalWrite(RVch1HDn, LOW);
  }
}
}

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.