Bonjour
C'est en grande partie ce que je fait dans mon application
piloteVmc
Dans lequel j'ai modifié le logiciel Teleinfo qui affiche les courbes tempo avec le logiciel Hignchart Highstock.
Marc
Bonjour
C'est en grande partie ce que je fait dans mon application
piloteVmc
Dans lequel j'ai modifié le logiciel Teleinfo qui affiche les courbes tempo avec le logiciel Hignchart Highstock.
Marc
Bonjour
J'ai mis mon projet complet sur github qui utilise la libTeleinfo de Charles, ça peux peut-être servir pour d'autres applications.
le lien est: (https://github.com/marco402/piloteVMC.git)
Marc
as-tu remplacé sizeof(tabNames) par 38 ?
Marc
J'ai ajouté un test dans build_emoncms_json au cas ou on a jamais reçu de message teleinfo , dans ce cas j'avais un reboot par le watchdog.
if(! first_item)
// go to next node
me = me->next;
//marc
else
if (me->free) {
//1st item is free : empty list !
Debugln("Teleinfo list is empty !");
break;
}
//fin marc
if( ! me->free ) {
C'est le code qui était déjà dans tinfoJSONTable.
Il faudra voir pour httpRequest si tu as encore un soucis et pour jeedomPost.
J'ai dimensionné le tableau à 400 et j'ai mis ta modif String(atol(me->value)).
Github est à jour.
Marc
Il y a un autre problème, le buffer dimensionné à 136 est trop petit avec les variables ajoutées, je l'ai passé de 136 à 300.
webClient-->httpPost -->char buffer[300];
marc
Bonjour Pierre
J'ai fait une erreur dans la dernière version:
en fin de webClient.cpp fonction validate_value_name
Il faut que tu remplace sizeof(tabNames) par 38 ou la nouvelle taille du tableau tabName si tu ajoute des champs(ce que j'ai fait dans la dernière version pour les 4 champs que tu avait indiqué).
J'ai ajouté par sécurité un ESP.wdtFeed(); en début de build_emoncms_json.
marc
@mangoose
Bonjour Pierre
J'ai corrigé sur Github et j'ai ajouté une classe myTinfo pour sortir les fonctions de Wifinfo.ino.
Pour ton problème, est-ce lié à ma version ?
Est ce que le reboot se fait sur l'initialisation ?
As tu des messages console au moment du reboot (watchdog...)?
Marc
Bonjour Pierre,
Je pense que c'est normal, j'ai bien précisé que le mode standard est à terminer (je n'ai pas encore le linky pour essayer).
Marc
@Marco40
Bonjour
J'ai mis une version de Wifinfo/Libteleinfo réorganisée sur github:
https://github.com/marco402/LibTeleinfo/tree/rewrite-Wifinfo.
-Je n'ai pas re testé:
-Les sorties leds(leds.cpp et leds.h),j'ai conservé les fonctions d'origine mais j'ai une autre version avec des leds APA106.
-Les sortie emoncms,jeedom et httpRequest, fonctions qui sont d'origine à la mise en place des classes près.
Bonjour Charles
Je ne sais pas ou vous en êtes dans la réécriture du code, j'ai remanié entièrement wifinfo pour une application perso,
je pense la mettre plus tard sur github. Je peux déjà vous l'envoyer si ça vous intéresse.
J'ai mis en place les classes:
les fonctionnalités présentes dans wifinfo
-myWifi ajout start stop wifi horaire paramétrés par l'interface web
-myOta
-webClient
-webServer
-config
-LibTeleinfo mode standard à terminer(j'ai pas encore le linky)
-mySyslog version de Dominique DAMBRAIN 2017-07-10
-ledRGBSerial (pour des APA106)
ajout
-myNTP mise à l'heure datation
-simuTempo simulation de trames tempo (historique)
-enregistrement enregistrement d'informations (compteur couleur imax...)
ajouts pour mon application qui pilote la vmc et affiche les couleurs tempo et jour/nuit
-vmc
-interRelais
-buzzer
-canBus liaison vers un module d'affichage commande + capteur déporté st7735
-capteur
-ta12 surveillance du courant vmc
-dht
-smt160
le programme principal
traitement_tempo.ino
Bonjour
J'ai fait une modification pour transférer les fichiers spiffs en OTA à partir de la page html car j'avais une erreur.
J'ai peut-être un problème de version, je met le code de la modification si ça peux servir:
//ajout pour spiffs
int command = U_FLASH;
if (strstr(upload.filename.c_str(), "spiffs"))
{
command = U_SPIFFS;
//Debugln("command = U_SPIFFS");
}
//else
//Debugln("command = U_FLASH");
if (!Update.begin(maxSketchSpace,command))--->ligne 694 modifiée de Wifinfo.ino.
Bonjour
J'ai prévu une option de compilation dans libTeleinfo.cpp pour le mode standard , je n'ai pas pus les essayer n'ayant pas encore le linky .
Je les met si ça peux aider.
Vous devez avoir le mode affiché sur votre compteur pour savoir si vous êtes en mode standard(9600 bds) ou historique(1200bds).
-----------------------------dans l'en-tête--------------------------------------
#define MODE_HISTORIQUE
-----------------------------dans le setup()---------------------------------------
#ifdef MODE_HISTORIQUE
Serial.begin(1200, SERIAL_7E1);
#else
Serial.begin(9600, SERIAL_7E1); //5.3.5. Couche physique document enedis Enedis-NOI-CPT_54E.pdf
#endif
-----------------------------dans TInfo::checkLine(char * pline) -----------
//5.3.6. Couche liaison document enedis Enedis-NOI-CPT_54E.pdf
#ifdef MODE_HISTORIQUE
if ( *p==' ' && ptok) {
#else
if ( *p=='\t' && ptok) { //reste a traiter les champs horodatés
#endif
--------------------------dans TInfo::calcChecksum------------------------
unsigned char TInfo::calcChecksum(char *etiquette, char *valeur)
{
uint8_t i;
#ifdef MODE_HISTORIQUE
uint8_t sum = ' '; // Somme des codes ASCII du message + un espace
#else
uint8_t sum = 0x09; // Somme des codes ASCII du message + un espace
sum+= 0x09;
#endif
// avoid dead loop, always check all is fine
if (etiquette && valeur) {
// this will not hurt and may save our life
if (strlen(etiquette) && strlen(valeur)) {
while (*etiquette)
sum += *etiquette++;
while (*valeur)
sum += *valeur++;
#ifdef MODE_HISTORIQUE
return ((sum & 63) + ' ');
#else
return ((sum & 0x3f) + 0x20);
#endif
}
}
return 0;
}
}
Bonjour
Si vous les avez encore, pouvez-vous préciser la liste des composants qu'il manque pour faire fonctionner le kit et à quel prix?
Merci
@mjeanne
Vous parlez-donc d'une version wifinfo modifiée? qui réémet les informations reçues de Rx serial vers Tx serial1 au profit d'une box domotique.
Bonjour
C'est toujours possible mais il faudrait prévoir un relais pour commuter l'entrée série entre la liaison teleinfo ou la simulation.
Je vous colle le code directement, problème avec un fichier.
#define SIMUTRAMETEMPO
#ifdef SIMUTRAMETEMPO
//avec esp12 0.9
//strapper ces 2 pins:
//emission sur serial1 esp12-->GPIO2--->TXD1-->D4
//réception sur serial après le swap-->GPIO13---->RXD2--->D7
//fonctions calcChecksum de LibTeleinfo modifié
unsigned char calcChecksum(char *mot)
{
unsigned int i;
unsigned int sum = ' '; // Somme des codes ASCII du message + un espace
// avoid dead loop, always check all is fine
if (mot) {
// this will not hurt and may save our life ;-)
if (strlen(mot)) {
while (*mot)
sum += *mot++;
return ((sum & 63) + ' ');
}
}
return 0;
}
/* ======================================================================
Function: initSimuTrame
Purpose :
Input :
Output : -
Comments: -
====================================================================== */
int cptChar = 500;
unsigned long cpt = 0; //max:4294967295
#define END_STR '\0' // End of group
#define NBCHAR 23
#define NBCHAMP 17
//options supplémentaire du compilateur, ajouter -fpermissive
//ATTENTION a tabnames de webserver.cpp si version LibTeleinfo-syslog.zip
char TRAME[][NBCHAR] = { "\x02\0","\rADCO 039801172264 \0", "\rOPTARIF BBR* \0", "\rISOUSC 45 \0",
"\rBBRHCJB 008078393 \0", "\rBBRHPJB 015766489 \0", "\rBBRHCJW 001256887 \0",
"\rBBRHPJW 002075407 \0", "\rBBRHCJR 000153905 \0", "\rBBRHPJR 000532607 \0",
"\rPTEC HCJW \0", "\rDEMAIN BLEU \0", "\rIINST 001 \0","\rIMAX 025 \0",
"\rHHPHC Y \0","\rMOTDETAT 000000 \0","\x03\0" };
void initSimuTrameTempo(void)
{
for (int i = 1; i < NBCHAMP - 1; i++)
{
TRAME[i][0] = TINFO_SGR;
for (int j = 0; j <NBCHAR; j++)
{
if (TRAME[i][j] == END_STR)
{
TRAME[i][j] = calcChecksum(&TRAME[i][1]); //CRC
TRAME[i][j + 1] = TINFO_EGR;
TRAME[i][j + 2] = END_STR;
break;
}
}
}
}
void emetTrameTempo(void)
{
char Etiq[] = "ADCO";
//mise a jour du compteur
char buffer[13];
sprintf(buffer, "%012u", cpt);
for (int i = 0; i < 12; i++)
TRAME[1][i + 6] = buffer[i];
TRAME[1][19] = tinfo.calcChecksum(&Etiq[0], &buffer[0]);
//emission d'une trame complète
for (int i = 0; i < NBCHAMP; i++)
{
for (int j = 0; j < NBCHAR; j++)
{
if (TRAME[i][j] != END_STR)
Serial1.write(TRAME[i][j]);
else
break;
}
delay(10);//tempo inter champ
}
cpt += 1; //pas de test de débordement...
delay(10);//tempo intertrame
}
#endif //SIMUTRAMETEMPO
#ifdef SIMUTRAMETEMPO
//dans setup juste avant Init teleinfo
Serial1.begin(1200, SERIAL_7E1);
Serial1.setRxBufferSize(1024);
initSimuTrameTempo();
#endif // SIMUTRAMETEMPO
#ifdef SIMUTRAMETEMPO
//au début de loop
cptChar += 1;
if(cptChar>=500)
{
emetTrameTempo();
cptChar = 0;
}
#endif //SIMUTRAMETEMPO
Bonjour,
j'ai ajouté une option pour simuler des trames teleInfo en bouclant TX serial1 vers Rx serial2.
Je vous joint 1 fichier avec les modifications à ajouter à WinInfo.ino ainsi qu'un copie décran de l'onglet tinfo associé.
[0_1518804378137_modif WinInfo.txt](Envoi en cours 100%)