Lire dans Jeedom des infos sur arduino et voir à les piloter aussi

Bonjour
je ne sais pas si je suis dans le bon sujet. A modifier si necessaire.

Je cherche à lire des infos sur une Arduino Uno + Shield Ethernet R3 sans passer par un plugin du type
Jeeduino

Actuellement j’ai un petit programme dans ma Uno qui permet de voir dans mon exploreur des valeurs et des états que je peux modifier, je tape IP et j’ai ça:

Ceci avec ce code dans ma Uno: (origine du code inconnu un vieux code que j’avais trouvé il y a bien longtemps)

#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SD.h> // bibliothèque pour la carte SD

byte mac[] = {à inserer ici}; // tableau pour l'adresse MAC de votre carte
byte ip[] = {192, 168, 1, 40}; //tableau pour l'adresse IP
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
// Initialise notre serveur




unsigned long tpsDep; //temps départ pour la gestion des LED
int pinLed[5] = {2, 3, 5, 6, 7}; //tableau des pins de LED
boolean etatLed[5] = {0, 0, 0, 0, 0}; //tableau des états des LED
int modeLed[5] = {0, 0, 0, 0, 0}; // tableau des modes des LED


void setup() {
  for (int l = 0; l < 5; l++) {
    pinMode(pinLed[l], OUTPUT);
  }
  Serial.begin (9600); //initialisation de communication série
  Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
  Serial.print("*\n-> Le serveur est sur l'adresse : ");
  Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
  serveur.begin(); // démarre l'écoute
}

void loop() {
  gestionClient(); // fonction qui gère toute la communication avec le client
  gestionLed(); // fonction qui gère l'allumage des LED
}

//----------------------Fonctions----------------------
//fonction qui gère la communication avec le client
void gestionClient() {
  EthernetClient client = serveur.available(); //on écoute le port
  if (client) { //si client existe
    Serial.println("Client en ligne"); //on le dit...
    if (client.connected()) { // si le client est connecté
      GET(client); //appel de la fonction de décodage
      //réponse au client
      entete(client); // fonction pour l'entête de la page HTML
      corps(client); // fonction pour le corps
      piedPage(client); // fonction pour le pied de page
      Serial.println("Fin de communication avec le client\n");
      client.stop(); //on déconnecte le client
    }
  }
}
//fonction de fabrication de l'entête HTML
void entete(EthernetClient cl) {
  //infos pour le navigateur
  cl.println("HTTP/1.1 200 OK"); // type du HTML
  cl.println("Content-Type: text/html; charset=ascii"); //type de fichier et encodage des caractères
  cl.println("Connection: close");  // fermeture de la connexion quand toute la réponse sera envoyée
  cl.println();
  //balises d'entête
  cl.println("<!DOCTYPE HTML>");
  cl.println("<html>");
  cl.println("<head><title>Web-Commande de LED</title></head>");
  cl.println("<body><h1>Web-Commande de LED</h1><hr><br>");
////  
//NOUVEAU ajoute état de pins
{
  cl.println("<h1>Etat des pins analogiques</h1>"); //titre en grosse lettres 
 cl.println("<hr>"); //ligne horizontale
      for (int p=0;p<5;p++){ // boucle pour parcourir les pins
        cl.print("pin Analogique"); // affichage
        cl.print(p); //numéro de pin
        cl.print(" : "); // affichage
        cl.print(analogRead(p)); //valeur donnée par le CAN
       
        cl.print("<br>"); //saut de ligne
      }
}
////

}
//fonction de fabrication du corps de page
void corps(EthernetClient cl) {
  cl.println("<br>"); // saut de ligne
  //boucle pour construire chaque ligne en fonction des LED
  for (int l = 0; l < 5; l++) {
    cl.print("<br>LED ");
    cl.print(l);
    cl.print(" ");
    Serial.println(l);
    switch (modeLed[l]) {
      case 0:
        cl.print("OFF ");
        break;
      case 1:
        cl.print("ON ");
        break;
      case 2:
        cl.print("CLI ");
        break;
    }
    cl.print(" <a href=?"); //création du lien inutile de répéter l'adresse du site
    cl.print(l);
    cl.println(" target=_self >Change</a><br>");
  }
}
//fonction de fabrication du pied de page
void piedPage(EthernetClient cl) {
  //balises de pied de page
  cl.println("<br><hr>");
  cl.println("</body>");
  cl.println("</html>");
}
//fonctin décodage GET
void GET(EthernetClient cl) {
  boolean lu = 0; //variable pour indiquer l'état de lecture
  while (cl.available()) { // tant qu'il a des infos à transmettre
    char c = cl.read(); // on lit le caractère
    delay(1); //delai de lecture
    if (c == '?' && lu == 0) { //si "?" repéré
      c = cl.read(); //on lit le caractère suivant qui contient la donnée
      int led = int(c) - 48; //on la transforme en nombre
      modeLed[led] = (modeLed[led] + 1) % 3; //on change l'état de la LED
      delay(10);
      lu = 1; // on dit qu'on a lu l'info
    }

  }
}
//fonction d'allumage des LED par rapport au tableau de mode.
void gestionLed() {
  unsigned long tpsAct = millis(); // récupération du temps actuel
  if (tpsAct - tpsDep > 250) { //si délai dépassé
    for (int l = 0; l < 5; l++) { // chaque LED
      if (modeLed[l] == 0) { // si mode éteint
        etatLed[l] = 0; // on éteind
      }
      else if (modeLed[l] == 1) {// si mode allumé
        etatLed[l] = 1; //on allume
      }
      else if (modeLed[l] == 2) { //si mode clignotant
        etatLed[l] = !etatLed[l]; //on inverse l'état
      }
      digitalWrite(pinLed[l], etatLed[l]); //on met le pin à jour
      tpsDep = tpsAct; //on réinitialise le temps
    }
  }
}

Et t il possible avec un virtuel et ou un scenario de récupérer les infos de la page Web directement sur la Uno

je suis un bidouilleur sans connaissances en informatique, je cherche un truc simple.

Bonne journée

Vous pouvez utiliser le plugin script pour faire cela
https://doc.jeedom.com/fr_FR/plugins/programming/script/

Dans « URL du fichier xml » vous mettez l’url de la page (idem que votre navigateur internet), type script XML, puis après dans « requête » vous indiquez le chemin pour atteindre la balise xml ayant l’information souhaitée.
Dans la doc jeedom, regardez les exemples XML

Il faudra peut être retravailler le code arduino pour mettre au propre la structure de la page

1 « J'aime »

Merci @tomtom pour ce retour.

J’ai donc installé le plugin script

J’ai fait ceci après avoir regardé la doc infos XML

Il doit manquer un truc pour que cela fonctionne

Doc trop légère pour un débutant comme moi.

As tu un exemple qui correspond plus à mon besoin, je ne vois pas comment transposer les exemples de la doc à mon besoin,
Je ne comprend pas ce que je dois écrire pour lire une ou plusieurs infos de mon Arduino

Dans l’url du fichier xml, mettez plutot : http://192.168.1.40/?4

Dans requête il faut aussi remplir, par contre c’est selon le contenu de la page.

Dans votre navigateur, lorsque vous avez la page d’affichée, faites au clavier : ctrl + U
Et copiez nous le contenu dans le forum, ca permettra de vous guider

voici le résultat du CTRL+U

<!DOCTYPE HTML>
<html>
<head><title>Web-Commande de LED</title></head>
<body><h1>Web-Commande de LED</h1><hr><br>
<h1>Etat des pins analogiques</h1>
<hr>
pin Analogique0 : 222<br>pin Analogique1 : 229<br>pin Analogique2 : 239<br>pin Analogique3 : 225<br>pin Analogique4 : 207<br><br>
<br>LED 0 CLI  <a href=?0 target=_self >Change</a><br>
<br>LED 1 OFF  <a href=?1 target=_self >Change</a><br>
<br>LED 2 OFF  <a href=?2 target=_self >Change</a><br>
<br>LED 3 OFF  <a href=?3 target=_self >Change</a><br>
<br>LED 4 OFF  <a href=?4 target=_self >Change</a><br>
<br><hr>
</body>
</html>

j’espère que cela vous convient

Bonjour
Je suis toujours sur le sujet et je ne trouve rien sur internet ou sur Jeedom pour résoudre mon problème
Le passage par le script et certainement la solution, problème doc trop light pour une personne comme moi et je n’ai pas trouvé d’exemple pour transposer à mon besoin.
Y a t il une personne qui pourrai regarder le sujet et me fournir une solution
Je ne souhaite pas utiliser Jeeduino, encore moins claire pour moi.

Bonne journée

Je viens de voir que le copier colle du CTRL+U ne présente pas les numéros de lignes.

image

Bonjour à toutes et tous et bonne année

Je reviens sur ce sujet sur lequel je n’ai pas beaucoup de retours
J’ai besoin de votre aide, y a t 'il des personnes qui maitrisent les scripts ou le dialogue avec Arduino pour me donner une solution à ma demande
Malgré mes recherches sur internet je ne trouve rien qui correspond à mon besoin ou à mon niveau

Utilise plutot le type html en mettant la meme URL.
dans la partie requete , ajoute une jquerry pour parser le html.
note : la structure du html est bien pour l’affichage mais pas pour récupérer des valeurs (il manque des tags autour de ces valeurs).
il faudrait ajouter des <div class="led0">OFF</div>, faire une jquery du genre div.led0

Bonjour @lienrag35 et merci pour ce retour
Je commençais à croire que personnes utilisés le plugin Script et Arduino
Maintenant le problème est que je me lance dans un truc que je ne maitrise pas.

C’est à dire 192.168.1.40 dans option et dans requête

Cela se complique je ne comprend pas ces termes donc je ne vois pas quoi écrire et ou l’ecrire

Dernier problème

A quel endroit dans le code du Arduino je dois ajouter ton code