Depuis quelques temps déjà, je m’initie à la domotique et aux mesures et tentatives d’automatisation de quelques éléments de mon domicile. Je suis les capteurs grâce à un récepteur RF-Link basé sur un Raspberry PI, le tout avec le logiciel Domoticz dont je ne pourrai vous dire que du bien.
Parcourant de nombreux blogs et forums, j’ai découvert qu’il était possible de surveiller assez facilement sa consommation électrique en exploitant les données Téléinfo fournies par notre compteur ERDF (triphasé).
Grâce aux informations fournies sur les blogs suivants, je suis parvenu à faire le montage d’un module RF 433.92 Mhz qui transmet les informations nécessaires à Domoticz, pour le suivi de notre consommation électrique :
- Téléinfo EDF Arduino sans fil avec RFXCOM sur Domotic and stupid geek stuff
- Téléinfo EDF – Suivi conso de votre compteur électrique sur Magdiblog
- Montage teleinfo pour Raspberry Pi / BeagleBone
Le montage est fonctionnel mais pour l’instant sommaire, car monté sur une plaque d’essai. Voici l’installation temporaire en images.
Le principe de l’installation repose sur :
- Un octocoupleur permettant de réceptionner et sérialiser les informations de téléinfo ERDF (sans qu’il y ait un contact physique entre votre compteur et le module d’envoi des informations)
- Un arduino (Nano) pour interpréter ces informations et les transformer
- Un émetteur RF 433.92 Mhz (chinois) pour transmettre les informations vers la box domotique (en émulant un périphérique Oregon CM180)
Je n’ai pas estimé le coût de l’installation, mais je pense qu’il doit être inférieur à 10€. Ce qui est bien sans aucune mesure avec les modules du commerce (entre 50€ et 200€).
Ce montage suppose que vous disposez déjà d’un élément capable de réceptionner des informations via RF (une box domotique ou un montage à partir de Raspberry Pi / RFXCOM ou RFLink). Question composants, vous allez avoir besoin de tout cela :
- Adruino Nano USB
- Optocoupleur SFH620A-x (ref exacte SFH620A-3)
- Module RF 433Mhz
- Plusieurs résistances, dans mon cas précis :
- 220 Ω
- 1 MΩ
- 2 MΩ
- 3 KΩ
- Une plaque d’essai, du fil
Voici le schéma dessiné sur 123d.circuits.io (un service Autodesk, excellent). La version circuit imprimé est encore en cours d’optimisation.
Pour l’installation, il vous faut tout d’abord identifier les points de connexion Téléinfo pour votre compteur (visiteurs du reste du monde, ces informations sont valables pour la France), pour ma part sur un Landis Gyr+ Triphasé, dont le manuel est ici.
Les liens précités en début d’article contiennent quasiment tout le nécessaire pour mettre en oeuvre le module, exception faite que le programme destiné à l’Arduino est prévu pour un compteur monophasé (ce qui doit être le cas de la majorité des foyers en France). J’ai donc dû opérer à quelques premières modifications du code pour respecter la séquence transmise pour un compteur triphasé. Les principales modifications reposent sur le fait qu’en triphasé, les informations (intensité instantanée, intensité maximale) sont à fournir pour chacune des phases, en plus de quelques autres indicateurs. Le code modifié ne l’est que pour la réception des informations, pas pour l’envoi des données vers la box domotique.
En voici le contenu :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 |
/* Ce programme a été élaboré à partir du code de M. Olivier LEBRUN réutilisé en grande partie pour réaliser un encodeur OWL CM180 (Micro+) /* ainsi qu'à partir du code (+ carte électronique à relier au compteur) de M. Pascal CARDON pour la partie téléinfo /* Onlinux a fourni des trames du OWL CM180 me permettant de faire les algo d'encodage (il a développer un code de décodage des trames) /* Je remercie les auteurs. Ci-dessous les liens vers leur site internet. /* ***** 04/03/2015 ******** Snips ******* /*======================================================================================================================= ONLINUX : Decode and parse the Oregon Scientific V3 radio data transmitted by OWL CM180 Energy sensor (433.92MHz) http://blog.onlinux.fr https://github.com/onlinux/OWL-CMR180 /*======================================================================================================================= /*======================================================================================================================= /* * connectingStuff, Oregon Scientific v2.1 Emitter * http://connectingstuff.net/blog/encodage-protocoles-oregon-scientific-sur-arduino/ * * Copyright (C) 2013 olivier.lebrun@gmail.com */ //======================================================================================================================= /*======================================================================================================================= my_teleinfo (c) 2012-2013 by Script name : my_teleinfo http://www.domotique-info.fr/2014/05/recuperer-teleinformation-arduino/ Usage : + Arduino Teleinfo report program + This program receives data frames from the EDF counter teleinfo port, it parse it, validate each data group by verfying the checksum, stores it in local variables, displays the actual counter, consumption ... Frame content is sent to a remote PHP server, thru Internet. The remote PHP server records the received data in a MySQL data base. + Runs on a Leonardo, RX on PIN 0 VERSIONS HISTORY Version 1.00 30/11/2013 + Original version Version 1.10 03/05/2015 Manu : Small ajustment to variabilise the PIN numbers for Transmiter and Teleinfo Version 1.10 TRIPHASE 20/03/2016 Arnaud : Ajusements pour un compteur ERDF Triphasé ======================================================================================================================*/ // montage électronique conforme à http://www.domotique-info.fr/2014/05/recuperer-teleinformation-arduino/ #include <SoftwareSerial.h> // PIN SIETTINGS // const byte TELEINFO_PIN = 8; //Connexion TELEINFO const byte TX_PIN = 3; //emetteur 433 MHZ // PIN SIETTINGS // const unsigned long TIME = 488; const unsigned long TWOTIME = TIME*2; #define SEND_HIGH() digitalWrite(TX_PIN, HIGH) #define SEND_LOW() digitalWrite(TX_PIN, LOW) byte OregonMessageBuffer[13]; // OWL180 //********************************************************* SoftwareSerial* mySerial; char HHPHC; int ISOUSC; // intensité souscrite int IINST1; // Intensité Instantanée pour la phase 1 en A int IINST2; // Intensité Instantanée pour la phase 2 en A int IINST3; // Intensité Instantanée pour la phase 3 en A int IMAX1; // intensité maxi pour la phase 1 en A int IMAX2; // intensité maxi pour la phase 1 en A int IMAX3; // intensité maxi pour la phase 1 en A int PMAX; // Puissance maximale triphasée atteinte (W) int PAPP; // puissance apparente en VA unsigned long HCHC; // compteur Heures Creuses en W unsigned long HCHP; // compteur Heures Pleines en W String PTEC; // Régime actuel : HPJB, HCJB, HPJW, HCJW, HPJR, HCJR String ADCO; // adresse compteur String OPTARIF; // option tarifaire String MOTDETAT; // status word int PPOT; // Présence des potentiels String pgmVersion; // TeleInfo program version boolean ethernetIsOK; boolean teleInfoReceived; char chksum(char *buff, uint8_t len); boolean handleBuffer(char *bufferTeleinfo, int sequenceNumnber); char version[17] = "TeleInfo V 1.00"; unsigned long PAPP_arrondi; // PAPP*497/500/16 arrondi unsigned long chksum_CM180; unsigned long long HCP; //********** debug // char buffer[100];// à virer *************** //********************************************************************** /** * \brief Send logical "0" over RF * \details azero bit be represented by an off-to-on transition * \ of the RF signal at the middle of a clock period. * \ Remenber, the Oregon v2.1 protocol add an inverted bit first */ inline void sendZero(void) { SEND_LOW(); delayMicroseconds(TIME); SEND_HIGH(); delayMicroseconds(TIME); } /** * \brief Send logical "1" over RF * \details a one bit be represented by an on-to-off transition * \ of the RF signal at the middle of a clock period. * \ Remenber, the Oregon v2.1 protocol add an inverted bit first */ inline void sendOne(void) { SEND_HIGH(); delayMicroseconds(TIME); SEND_LOW(); delayMicroseconds(TIME); } /** * \brief Send a buffer over RF * \param data Data to send * \param size size of data to send */ void sendData(byte *data, byte size) { for(byte i = 0; i < size; ++i) { (bitRead(data[i], 0)) ? sendOne() : sendZero(); (bitRead(data[i], 1)) ? sendOne() : sendZero(); (bitRead(data[i], 2)) ? sendOne() : sendZero(); (bitRead(data[i], 3)) ? sendOne() : sendZero(); (bitRead(data[i], 4)) ? sendOne() : sendZero(); (bitRead(data[i], 5)) ? sendOne() : sendZero(); (bitRead(data[i], 6)) ? sendOne() : sendZero(); (bitRead(data[i], 7)) ? sendOne() : sendZero(); } } /** * \brief Send an Oregon message * \param data The Oregon message */ void sendOregon(byte *data, byte size) { sendPreamble(); sendData(data,size); sendPostamble(); } /** * \brief Send preamble * \details The preamble consists of 10 X "1" bits (minimum) */ inline void sendPreamble(void) { for(byte i = 0; i < 10; ++i) //OWL CM180 { sendOne(); } } /** * \brief Send postamble */ inline void sendPostamble(void) { for(byte i = 0; i <4 ; ++i) //OWL CM180 { sendZero() ; } SEND_LOW(); delayMicroseconds(TIME); } //================================================================================================================= // Basic constructor //================================================================================================================= void TeleInfo(String version) { // Serial.begin(1200,SERIAL_7E1); mySerial = new SoftwareSerial(TELEINFO_PIN, 9); // RX, TX mySerial->begin(1200); pgmVersion = version; // variables initializations ADCO = "270622224349"; OPTARIF = "----"; ISOUSC = 0; HCHC = 0L; // compteur Heures Creuses en W HCHP = 0L; // compteur Heures Pleines en W PTEC = "----"; // Régime actuel : HPJB, HCJB, HPJW, HCJW, HPJR, HCJR HHPHC = '-'; IINST1 = 0; // intensité instantanée en A pour la phase 1 IINST2 = 0; // intensité instantanée en A pour la phase 2 IINST3 = 0; // intensité instantanée en A pour la phase 3 IMAX1 = 0; // intensité maxi pour la phase 1 en A IMAX2 = 0; // intensité maxi pour la phase 2 en A IMAX3 = 0; // intensité maxi pour la phase 3 en A PMAX = 0; // Puissance maximale triphasee atteinte (en W) PAPP = 0; // puissance apparente en VA MOTDETAT = "------"; PPOT = 0; // Présence des potentiels } //================================================================================================================= // Capture des trames de Teleinfo //================================================================================================================= boolean readTeleInfo(boolean ethernetIsConnected) { #define startFrame 0x02 #define endFrame 0x03 #define startLine 0x0A #define endLine 0x0D #define maxFrameLen 280 int comptChar=0; // variable de comptage des caractères reçus char charIn=0; // variable de mémorisation du caractère courant en réception char bufferTeleinfo[21] = ""; int bufferLen = 0; int checkSum; ethernetIsOK = ethernetIsConnected; int sequenceNumnber= 0; // number of information group //--- wait for starting frame character while (charIn != startFrame) { // "Start Text" STX (002 h) is the beginning of the frame if (mySerial->available()) charIn = mySerial->read()& 0x7F; // Serial.read() vide buffer au fur et à mesure } // fin while (tant que) pas caractère 0x02 // while (charIn != endFrame and comptChar<=maxFrameLen) while (charIn != endFrame) { // tant que des octets sont disponibles en lecture : on lit les caractères // if (Serial.available()) if (mySerial->available()) { charIn = mySerial->read()& 0x7F; // incrémente le compteur de caractère reçus comptChar++; if (charIn == startLine) bufferLen = 0; bufferTeleinfo[bufferLen] = charIn; // on utilise une limite max pour éviter String trop long en cas erreur réception // ajoute le caractère reçu au String pour les N premiers caractères if (charIn == endLine) { checkSum = bufferTeleinfo[bufferLen -1]; if (chksum(bufferTeleinfo, bufferLen) == checkSum) {// we clear the 1st character strncpy(&bufferTeleinfo[0], &bufferTeleinfo[1], bufferLen -3); bufferTeleinfo[bufferLen -3] = 0x00; sequenceNumnber++; if (! handleBuffer(bufferTeleinfo, sequenceNumnber)) { Serial.println(F("Sequence error 1 ...")); return false; } } else { Serial.println(F("Checksum error 2...")); return false; } } else bufferLen++; } if (comptChar > maxFrameLen) { Serial.println(F("Overflow error ...")); return false; } } return true; } //================================================================================================================= // Frame parsing //================================================================================================================= //void handleBuffer(char *bufferTeleinfo, uint8_t len) boolean handleBuffer(char *bufferTeleinfo, int sequenceNumnber) { // create a pointer to the first char after the space char* resultString = strchr(bufferTeleinfo,' ') + 1; boolean sequenceIsOK; // Sequence Debug data Serial.print("SequenceNumber :"); Serial.println(sequenceNumnber); Serial.print("Buffer :"); Serial.println(bufferTeleinfo); switch(sequenceNumnber) { case 1: if (sequenceIsOK = bufferTeleinfo[0]=='A') ADCO = String(resultString); break; case 2: if (sequenceIsOK = bufferTeleinfo[0]=='O') OPTARIF = String(resultString); break; case 3: if (sequenceIsOK = bufferTeleinfo[1]=='S') ISOUSC = atol(resultString); break; case 4: if (sequenceIsOK = bufferTeleinfo[3]=='C') HCHC = atol(resultString); break; case 5: if (sequenceIsOK = bufferTeleinfo[3]=='P') HCHP = atol(resultString); break; case 6: if (sequenceIsOK = bufferTeleinfo[1]=='T') PTEC = String(resultString); break; case 7: if (sequenceIsOK = bufferTeleinfo[1]=='I') IINST1 =atol(resultString); break; case 8: if (sequenceIsOK = bufferTeleinfo[1]=='I') IINST2 =atol(resultString); break; case 9: if (sequenceIsOK = bufferTeleinfo[1]=='I') IINST3 =atol(resultString); break; case 10: if (sequenceIsOK = bufferTeleinfo[1]=='M') IMAX1 =atol(resultString); break; case 11: if (sequenceIsOK = bufferTeleinfo[1]=='M') IMAX2 =atol(resultString); break; case 12: if (sequenceIsOK = bufferTeleinfo[1]=='M') IMAX3 =atol(resultString); break; case 13: if (sequenceIsOK = bufferTeleinfo[3]=='X') PMAX =atol(resultString); break; case 14: if (sequenceIsOK = bufferTeleinfo[1]=='A') PAPP =atol(resultString); break; case 15: if (sequenceIsOK = bufferTeleinfo[1]=='H') HHPHC = resultString[0]; break; case 16: if (sequenceIsOK = bufferTeleinfo[1]=='O') MOTDETAT = String(resultString); break; case 17: if (sequenceIsOK = bufferTeleinfo[2]=='O') PPOT = atol(resultString); break; } #ifdef debug if(!sequenceIsOK) { Serial.print(F("Out of sequence ...")); Serial.println(bufferTeleinfo); } #endif return sequenceIsOK; } //================================================================================================================= // Calculates teleinfo Checksum //================================================================================================================= char chksum(char *buff, uint8_t len) { int i; char sum = 0; for (i=1; i<(len-2); i++) sum = sum + buff[i]; sum = (sum & 0x3F) + 0x20; return(sum); } //================================================================================================================= // This function displays the TeleInfo Internal counters // It's usefull for debug purpose //================================================================================================================= void displayTeleInfo() { Serial.print(F(" ")); Serial.println(); Serial.print(F("ADCO ")); Serial.println(ADCO); Serial.print(F("OPTARIF ")); Serial.println(OPTARIF); Serial.print(F("ISOUSC ")); Serial.println(ISOUSC); Serial.print(F("HCHC ")); Serial.println(HCHC); Serial.print(F("HCHP ")); Serial.println(HCHP); Serial.print(F("PTEC ")); Serial.println(PTEC); Serial.print(F("IINST1 ")); Serial.println(IINST1); Serial.print(F("IINST2 ")); Serial.println(IINST2); Serial.print(F("IINST3 ")); Serial.println(IINST3); Serial.print(F("IMAX1 ")); Serial.println(IMAX1); Serial.print(F("IMAX2 ")); Serial.println(IMAX2); Serial.print(F("IMAX3 ")); Serial.println(IMAX3); Serial.print(F("PAPP ")); Serial.println(PAPP); Serial.print(F("HHPHC ")); Serial.println(HHPHC); Serial.print(F("MOTDETAT ")); Serial.println(MOTDETAT); Serial.print(F("PPOT ")); Serial.println(PPOT); } void encodeur_OWL_CM180() { if (PTEC.substring(1,2)=="C") { HCP=(HCHC*223666LL)/1000LL; } else { HCP=(HCHP*223666LL)/1000LL; } OregonMessageBuffer[0] =0x62; // imposé OregonMessageBuffer[1] =0x80; // GH G= non décodé par RFXCOLM, H = Count //OregonMessageBuffer[2] =0x3C; // IJ ID compteur : "L IJ 2" soit (L & 1110 )*16*16*16+I*16*16+J*16+2 // si heure creuse compteur 3D, si HP compteur 3C if (PTEC.substring(1,2)=="C") { OregonMessageBuffer[2] =0x3D; // Serial.print(F("HEURE CREUSE 0x3D")); //débug ******************************* } else { OregonMessageBuffer[2] =0x3C; } //OregonMessageBuffer[3] =0xE1; // KL K sert pour puissance instantanée, L sert pour identifiant compteur PAPP_arrondi=long(long(PAPP)*497/500/16); // améliore un peu la précision de la puissance apparente encodée (le CM180 transmet la PAPP * 497/500/16) if ((float(PAPP)*497/500/16-PAPP_arrondi)>0.5) { ++PAPP_arrondi; } OregonMessageBuffer[3]=(PAPP_arrondi&0x0F)<<4; //OregonMessageBuffer[4] =0x00; // MN puissance instantée = (P MN K)*16 soit : (P*16*16*16 + M*16*16 +N*16+K)*16*500/497. attention RFXCOM corrige cette valeur en multipliant par 16 puis 500/497. OregonMessageBuffer[4]=(PAPP_arrondi>>4)&0xFF; //OregonMessageBuffer[5] =0xCD; // OP Total conso : YZ WX UV ST QR O : Y*16^10 + Z*16^9..R*16 + O OregonMessageBuffer[5] =((PAPP_arrondi>>12)&0X0F)+((HCP&0x0F)<<4); //OregonMessageBuffer[6] =0x97; // QR sert total conso OregonMessageBuffer[6] =(HCP>>4)&0xFF; //OregonMessageBuffer[7] =0xCE; // ST sert total conso OregonMessageBuffer[7] =(HCP>>12)&0xFF; // ST sert total conso //OregonMessageBuffer[8] =0x12; // UV sert total conso OregonMessageBuffer[8] =(HCP>>20)&0xFF; // UV sert total conso //OregonMessageBuffer[9] =0x00; // WX sert total conso OregonMessageBuffer[9] =(HCP>>28)&0xFF; //OregonMessageBuffer[10] =0x00; //YZ sert total conso OregonMessageBuffer[10] =(HCP>>36)&0xFF; chksum_CM180= 0; for (byte i=0; i<11; i++) { chksum_CM180 += long(OregonMessageBuffer[i]&0x0F) + long(OregonMessageBuffer[i]>>4) ; } chksum_CM180 -=2; // = =b*16^2 + d*16+ a ou [b d a] //OregonMessageBuffer[11] =0xD0; //ab sert CHECKSUM somme(nibbles ci-dessuus)=b*16^2 + d*16+ a + 2 OregonMessageBuffer[11] =((chksum_CM180&0x0F)<<4) + ((chksum_CM180>>8)&0x0F); //OregonMessageBuffer[12] =0xF6; //cd d sert checksum, a non décodé par RFXCOM OregonMessageBuffer[12] =(int(chksum_CM180>>4)&0x0F); //C = 0 mais inutilisé } //************************************************************************************ void setup() { Serial.begin(115200); // pour la console, enlever les barres de commentaires ci dessous pour displayTeleInfo() TeleInfo(version); } void loop() { teleInfoReceived=readTeleInfo(true); if (teleInfoReceived) { encodeur_OWL_CM180(); mySerial->end(); //NECESSAIRE !! arrête les interruptions de softwareserial (lecture du port téléinfo) pour émission des trames OWL sendOregon(OregonMessageBuffer, sizeof(OregonMessageBuffer)); // Send the Message over RF mySerial->begin(1200); //NECESSAIRE !! relance les interuptions pour la lecture du port téléinfo displayTeleInfo(); // console pour voir les trames téléinfo } } |
Et au final, on dispose dans Domoticz des enregistrements de la consommation électrique.
Reste à faire:
- Le circuit imprimé pour pérenniser cette solution
- Le périphérique détecté sous Domoticz via la RFLink n’affiche que la consommation, et non le détail des Heures Pleines (HP) et Heures Creuses (HC). Je vais regarder comment personnaliser tout cela, quitte à créer un nouveau module pour RFLink si c’est à ma portée.
Et finalement, quelques captures d’écrans de Domoticz en fonctionnement, montrant les deux capteurs en action.
Super infos et tuto.
Je suis aussi intéressé par la Domotique.
Je suis en option Tempo triphasé.
J’ai actuellement un Raspberry 3, RFXcom USB et le logiciel Domoticz.
Pour le relevé Téléinfo :
1 Arduino Nano et les composants en suivant les conseils de « Domotic and stupid geek stuff ».
Après une brève analyse de votre schéma de montage ne manque-t-il pas une connexion entre le PIN 4 de l’Octo et l’Arduino pour l’alimenter ? Il n’est branché que sur le GND.
Sur différents forums les schémas font apparaitre :
– 1 seule résistance de 1.2k entre la borne téléinfo1 et la borne 1 de l’Octo
– 1 seule résistance de 3.3k sur le PIN 4 et le PIN 3.3v de l’Arduino.
Et enfin après avoir copié (si je peux) votre script et téléversé dans l’Arduino tout devrait fonctionner, pas d’autre manip ?
L’intégration du dispositif dans Domoticz se fait-elle simplement en le sélectionnant par la flèche verte ?
Est-il directement en communication avec le RFXcom ?
Merci d’avance pour votre partage et les infos sur votre site.
Fred.
Bonjour Fred,
Je vais vérifier le schéma… mais je ne crois pas, car l’alimentation provient de D8.
Pour les résistances, c’est tout simplement que je n’avais pas une 1,2k et une 3,3k, j’ai donc sommé les résistances : 1k + 220 Ohm et 3k + 300 Ohms.
Dans Domoticz, après reconnaissance du périphériques, j’ai deux entrées, une pour les heures creuses et une pour les heures pleines.
Donc ça devrait fonctionner ^^
Je rajoute des captures d’écran de Domoticz à l’article pour illustrer tout cela.
A bientôt
Petitsuisse,
Merci pour le retour rapide de l’info.
Je dois faire ma demande pour activer la téléinfo.
J’espère que ça va être possible.
Mon compteur ERDF digitale date de 1998, il a les bornes téléinfo, mais n’ayant jamais travaillé le dossier avant j’ignorais si elles étaient activées ou pas.
Après test avec les conseils de « Domotic and stupid geek stuff » » je me suis rendu compte que la téléinfo n’était pas activée.
Je vais contacter rapidement ERDF et voir si c’est possible sans trop de frais.
En cas d’échec j’y aurais laissé quelques euros, bien qu’il est toujours possible d’utiliser l’Arduino pour d’autres usages !
Petite question, si je branche le montage mais que la téléinfo n’est pas activée est-ce que Domoticz devrait trouver quand même le dispositif en renseignant une valeur 0 ?
Avec le montage de « Domotic and stupid geek stuff » je n’avais aucun signal dans Domoticz mais peut-être que cela était dû à mon installation en triphasé ?
Fred.
Je vous reviens, je viens de tester voici les message que j’aidansla console de l’Arduino :
Buffer : BBRHCJB 041838035
Sequence error1 …
Buffer ADCO 039709113641
SequenceNumber :2
Buffer :OPTARIF BBR+
SequenceNumber :3
Buffer :ISOUSC 30
SequenceNumber :4
Buffer :BBRHCJB 041838035
etc….
J’ai toujours le même relevé en boucle.
Pour info j’ai contacté ERDF qui m’informe que pour eux la téléinformation est active, ce que je doute car mon compteur digital a été changé en 1998 et je ne pense pas qu’a cette époque ce service était vulgarisé.
Cela se confirme peut être vu les trames que je récupère mais n’y connaissant rien je me permets de vous demandez votre avis.
Fred.
Bonjour Fred,
Il s’agit probablement du fait que le script n’est pas (encore) adapté pour l’option tempo (dont je ne dispose pas). la séquence n’est donc pas reconnue.
De quel modèle de compteur disposes-tu ? Avec la documentation adaptée, on va peut-être réussir à créer un script universel !
Salut Petitsuisse !
super ton adaptation pour le triphasé ! J’ai ajouté un lien sur mon tutoriel vers cette page pour ceux qui cherchent le code pour un compteur triphasé…
Pour info j’ai aussi bossé sur une solution HP/HC avec ce OWL simulé et snip sur ce forum ma pas mal aidé avec son code :
http://easydomoticz.com/forum/viewtopic.php?f=7&t=158&start=30#p3905
Mais tu l’as peu être déjà lu…
Autre info: pour éviter les perturbation sur les autres capteur (appartement ça arrive) et saturer le rfxcom j’ai ajoute un delay(12000) sur mon script dans le loop…
A + Manu.
Salut Manu
Merci beaucoup, mais c’est très très inspiré du travail que tu as déjà fait, je n’ai fait qu’adapter à une autre séquence, alors bravo à toi !
Oui j’ai suivi le fil sur la solution HP/HC, j’en ai une version customisée également qui tourne sur mon Domoticz. Je vais essayer la vôtre.
Comme indiqué plus haut, je suis un novice sur le sujet ^^.
Je vais rajouter le delay, mais personnellement je n’ai pas rencontré de problème de perturbations sur mes autres capteurs (mais je n’en ai pas beaucoup).
Bonne continuation à toi !
Bonjour à tous,
Simplement pour vous informer que chez moi tout est ok.
Merci pour vous infos et à l’excellentissime Snpis pour le développement du script adapté au tempo triphasé .
Voici le lien :
http://easydomoticz.com/forum/viewtopic.php?f=7&t=158&start=130
Bonne continuation et merci pour l’aide.
Fred
Magnifique, je suis content que tout fonctionne désormais. Effectivement, Snips a fourni une superbe aide, à tous !
bonjour et d’abord bravo pour ton tuto: je l’ai suivi à la lettre pour mon compteur triphasé (identique) et je remonte bien des infos à mon jeedom mais est ce normal que je n’ai que les infos « puiss instant’ en W et « conso total » en KWH ? ainsi qu etat de batterie et signal ?
merci par avance