Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[conseils] ajout de code au code du RMS
#1
Bonjour,

Je viens solliciter quelques conseils. Je fais cela à la lecture de certains posts qui indiquent un très bon niveau de compétences en codage de certains membres du forum.

Pour ma part, je n'ai que quelques compétences de base en terme de codage (je n'ai pas touché un arduino depuis une dizaine d'années). Je suis juste capable d'utiliser l'ide, de compiler, de gérer les bibliothèques, d'utiliser le moniteur série pour débugger un minimum, et d'adapter un peu de code à mes besoins en m'appuyant sur des exemples. Heureusement, l'esp32 et l'arduino n'en manquent pas.

J'en viens à mes questions.
En gros, je souhaite ajouter un petit morceau de code au code du routeur actuel.

Ce code est destiné à transmettre, par la liaison série, la valeur ou l'état de quelques variables (int, bool) existantes (puissances, état d'un pin...) récupérées sur un RMS, vers un arduino uno r3.
Le uno sera chargé d'élaborer à partir de ces valeurs, une consigne pour un chargeur de VE.

Le RMS "source" prend ses mesures depuis une passerelle Enphase (ça, ça fonctionne déjà).
J'ai identifié les variables qui m'intéressent et je me suis assuré qu'elles étaient valides en les affichant dans le moniteur série du rms.
Pour l'instant je ne me m'occupe que de cette partie (transmission depuis l'esp32, réception sur le uno), le reste (asservissement, sur le uno) sera traité ensuite et séparément.

Ma principale question est :
Dois-je ajouter ce code (transmission série) à une partie existante du programme (dans un des fichiers .ino ou autre) ou créer un nouveau fichier pour plus de clarté et pour éviter de foutre la zone dans le reste du code ?
Dans ce dernier cas, ma préoccupation est bien sûr d'avoir accès aux variables que je veux "exporter" vers l'arduino.

Si, parmi les membres du forum, quelqu'un a des conseils à me prodiguer, je lui en serais très reconnaissant !
Répondre
#2
Bonjour,
Vous pourriez peut-être depuis votre arduino uno récupérer les données qui vous intéresse directement depuis votre RMS source via une requête sur /ajax_data. C'est ce que fait un routeur secondaire utilisant un routeur maître comme source de mesure.
Vous pouvez regarder le fichier Source_Externe.ino.
Avec cette solution, aucune modification du code du RMS ne serait nécessaire.
Répondre
#3
Si j'ai bien compris, tu souhaite récupérer des infos afin d'élaborer une consigne pour un chargeur de VE
ce serait bien que tu détaille toutes tes infos nécessaires car soit elles sont déjà présentes soit certains les ont déjà extraites voire exploitées ..

Modifier/ rajouter du code sur le routeur est bien entendu possible, certains l'ont fait mais à chaque version lors de mises à jour, ce posera la question d'implémenter ou non ce code sur la dernière version ...
As tu pensé également à une transmission via MQTT et l'usage de HA ( par exemple pour élaborer ta consigne et pilote ton chargeur VE) ?
Config : 3 routeurs F1ATB en V14.25 - 2 routeurs fixes en mode Triacs + 1 routeur mobile polyvalent en mode : Triac+SSR
PV 3kw (8 panneaux TrinaSolar 425W + Onduleur SunGrow 3KW) - Supervision : Home Assistant / Shelly & MQTT
Autoconsommation moyenne >96 % depuis l'usage des routeurs f1atb Smile
Répondre
#4
Bonjour Mike,
Merci pour cette piste. Je n'y avais pas pensé, et c'est astucieux.
Cependant, il y a 2 écueils : à la lecture du code, ça vole un peu haut pour moi pour l'instant, et l'arduino uno n'a pas de wifi ou de port ethernet pour ces échanges.
Répondre
#5
(Hier, 03:58 PM)Rakibou a écrit : Bonjour Mike,
Merci pour cette piste. Je n'y avais pas pensé, et c'est astucieux.
Cependant, il y a 2 écueils : à la lecture du code, ça vole un peu haut pour moi pour l'instant, et l'arduino uno n'a pas de wifi ou de port ethernet pour ces échanges.

Le code est plus simple qu'il n'y parait mais si l'arduino uno n'a pas de wifi ça va être effectivement compliqué à mettre en place.
L'utilisation de l'arduino uno est obligatoire ? un ESP 32 ne pourrait pas être utilisé à la place ?
Répondre
#6
(Hier, 03:55 PM)Sgb31 a écrit : Si j'ai bien compris, tu souhaite récupérer des infos afin d'élaborer une consigne pour un chargeur de VE
ce serait bien que tu détaille toutes tes infos nécessaires car soit elles sont déjà présentes soit certains les ont déjà extraites voire exploitées ..
C'est ça.
Sur un RMS configuré en Enphase, je souhaite récupérer la puissance consommée PactConso_M et la puissance produite PactProd, plus l'état d'un pin configuré dans les actions en on/off sur 2 seuils de P.
Les infos doivent être passées à l'arduino, qui sera équipé d'un shield câblé sur le fil pilote cp.
Le code de l'asservissement du courant de charge n'est pas encore écrit.

Citation :Modifier/ rajouter du code sur le routeur est bien entendu possible, certains l'ont fait mais à chaque version lors de mises à jour, ce posera la question d'implémenter ou non ce code sur la dernière version ...
Oui, bien sûr, j'en suis bien conscient. Mais à ce stade pas question d'intégrer cela au RMS, j'en suis juste à la bidouille expérimentale. J'ajouterai donc les modifs manuellement à chaque nouvelle version si besoin. D'où l'idée que le code supplémentaire soit "bien rangé".

Citation :As tu pensé également à une transmission via MQTT et l'usage de HA ( par exemple pour élaborer ta consigne et pilote ton chargeur VE) ?
J'y ai pensé, et c'est ce que je ne veux pas faire. Je n'ai pas de HA pour l'instant et pas envie d'en installer.
Je voudrais juste expérimenter une solution compacte, avec très peu de matériel et de code.

Merci d'avoir pris le temps de me répondre.

(Hier, 04:11 PM)Mike a écrit :
(Hier, 03:58 PM)Rakibou a écrit : Bonjour Mike,
Merci pour cette piste. Je n'y avais pas pensé, et c'est astucieux.
Cependant, il y a 2 écueils : à la lecture du code, ça vole un peu haut pour moi pour l'instant, et l'arduino uno n'a pas de wifi ou de port ethernet pour ces échanges.

Le code est plus simple qu'il n'y parait mais si l'arduino uno n'a pas de wifi ça va être effectivement compliqué à mettre en place.
L'utilisation de l'arduino uno est obligatoire ? un ESP 32 ne pourrait pas être utilisé à la place ?
L'esp32 pourrait sans doute faire ça, mais l'arduino uno va être équipé d'un shield destiné à piloter directement le fil cp du chargeur. Le shield (je n'en suis pas le concepteur) a été développé pour l'uno.
Répondre
#7
on doit pouvoir ajouter une carte wifi dessus.
Répondre
#8
(Hier, 06:21 PM)grostoto a écrit : on doit pouvoir ajouter une carte wifi dessus.
Merci, mais ce n'est pas la question :)

Le cdc est figé :
- arduino r3
- shield spécifique
- pas de possibilité d'ajouter un autre shield

Vous êtes nombreux à m'encourager à faire autre chose qu'ajouter un bout de code et/ou qu'à utiliser le matériel prévu.
Merci quand même, j'apprécie vos efforts, mais la question (originale) reste posée !
Répondre
#9
Le plus concret c est quand meme rajouter du code ce n’est pas du tout impossible.
Globalement d une version à l autre André ne supprime pas de variables, il y en a plutot plus que moins.
Pour s y retrouver simplement avec Ide arduino et son C++ tu peux dans un meme projet ajouter du code dans un fichier à part.
Et personnellement quand je retouche les modules originaux je mets l ancien code en commentaire avec mes initiales devant, c est ainsi rapide à reconduire si André fait evoluer sa source

Bon apres il faut savoir decortiquer les lignes pour inserer ses fonctions au bon endroit.
Pour ecrire les nouvelles lignes , chat gpt est ton ami.
Perso je commencerai par faire un programme depuis le debut hors programme routeur. Quand ca fonctionne tu reperes les variables à transmettre et tu transformes ton code en function et sub à integrer dans le code routeur
Répondre
#10
Merci Lolo, je suis d'accord avec la méthode, et perdu avec l'endroit (les endroits ?) où insérer le code.

J'ai déjà identifié les variables à transmettre.
Dans les paramètres du rms, le port série est sur 16 et 17 (rx,tx) identifiés dans le rms par RXD2 et TXD2.
(du coup, il faut peut-être définir plus précisément la liaison série).

En gros, si c'était tout seul, le code ressemblerait à ça :
Code :
int PactProd = 0;
int PactConso_M = 0;
enab = digitalRead(14);
bool enab = false;

void setup() {
  Serial.begin(9600);  // UART vers Arduino Uno
}

void loop() {
  // Formater la chaîne : "0;0;1" ou "0;0;0"
  String data = String(PactProd) + ";" + String(PactConso_M) + ";" + String(enab ? 1 : 0);
  Serial.println(data);  // Envoi des données par UART
  delay(2000);  // Envoi toutes les 2 secondes
}

mon problème, et ma question, c'est : où je mets ça ?
Je suppose qu'il faut emballer ça dans une fonction, et mettre sa déclaration, son setup et son exécution au(x) bon(s) endroit(s) dans le code existant...
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 59jag, Lolo69, 1 visiteur(s)