Go Down

Topic: Projet domotique : teleinfo + 4 relais + T°C 1wire (Read 6 times) previous topic - next topic

bluemax2001

Code: [Select]
sprintf(test, "<br>P_Inst : %ld", papp);
      plen=es.ES_fill_tcp_data(buf,plen,test);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</font></h3>") );  

       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><img src='http://chart.apis.google.com/chart?chs=300x150&cht=gom&chco=00FF00,FFFF00,FF0000&chls=3|10,1,1&chd=t:") );  
      sprintf(test, "%ld&chds=0,8000&chl=%ld'>" ,papp,papp);

     plen=es.ES_fill_tcp_data(buf,plen,test);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><a href='t.htm?cmd=1000'>Histo Conso</a>") );  
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><a href='t.htm?cmd=0'>Histo Puissance</a>") );  
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><a href='t.htm?cmd=1'>Valeurs Brut</a>") );  

       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</html>") );  
       
       return(plen);
}
/////////////////////////////////////////////////////////
// affichage page Valeurs courantes Compteur
// !!  Longueur max de trame Ethernet 600 Octets
/////////////////////////////////////////////////////////

uint16_t print_webpage4(uint8_t *buf)
{
       uint16_t plen;
          plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
      sprintf(test, "<html><head><title>Tele %ldW</title></head>", papp);
      plen=es.ES_fill_tcp_data(buf,plen,test);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <h2><font color=\"blue\">"));
      sprintf(test, "<br>   %d:%d:%d    %d/%d/%d", hour(),minute(),second(),day(),month(),year());

      plen=es.ES_fill_tcp_data(buf,plen,test);
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br> ADCO = "));
      plen=es.ES_fill_tcp_data(buf,plen,adco);
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br> OPTARIF = "));
      plen=es.ES_fill_tcp_data(buf,plen,optarif);
     sprintf(test, "<br>ISOUSC = %ld", isousc);
      plen=es.ES_fill_tcp_data(buf,plen,test);
     sprintf(test, "<br>HCHC = %ld", hchc);
      plen=es.ES_fill_tcp_data(buf,plen,test);
     sprintf(test, "<br>HCHP = %ld", hchp);
      plen=es.ES_fill_tcp_data(buf,plen,test);

      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br> PTEC = "));
      plen=es.ES_fill_tcp_data(buf,plen,ptec);
     sprintf(test, "<br>IINST = %ld", iinst);
      plen=es.ES_fill_tcp_data(buf,plen,test);
      sprintf(test, "<br>IMAX = %ld", imax);
      plen=es.ES_fill_tcp_data(buf,plen,test);
      sprintf(test, "<br>PAPP = %ld", papp);
      plen=es.ES_fill_tcp_data(buf,plen,test);
      sprintf(test, "<br>HHPHC = %c", hhphc);
     plen=es.ES_fill_tcp_data(buf,plen,test);
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br> MODETAT = "));
      plen=es.ES_fill_tcp_data(buf,plen,motdetat);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  <br></font></h2></html> ") );  
       return(plen);
}

/////////////////////////////////////////////////////////
// affichage page Historique
// !!  Longueur max de trame Ethernet 600 Octets
/////////////////////////////////////////////////////////
uint16_t print_webpage2(uint8_t *buf,int cmd,char Pile_num)
{       // Attention 550 char Max

unsigned int base = DIM_ENTETE * Pile_num;
unsigned int Deb_pile = Read_int(base);
 int Taille_pile = Read_int(base + 2);

 long Time_wrap = Read_long(base+4);
 int Interval =  Read_int(base+8);
unsigned int Ptr =  Read_int(base+ 10);
 unsigned long Time_evt;
 static int len = 10;
 int pos_fin;
 int pos_deb;
unsigned char value;

       uint16_t plen;
       int position;
       plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
      sprintf(test, "<html><head><title>Teleinfo Historique</title></head>");
      plen=es.ES_fill_tcp_data(buf,plen,test);

            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <h2><font color=\"blue\">"));
 
       if(Pile_num == 1) position =cmd;
       if(Pile_num == 0) position =cmd-1000;
       
       if (cmd ==0) position=0;
       pos_fin = position +len;
       pos_deb = position;
        Time_evt = Time_wrap ;
      sprintf(test, " %d/%d/%d  <BR>",day(Time_evt),month(Time_evt),year(Time_evt));
       plen=es.ES_fill_tcp_data(buf,plen,test);


       while (( position < pos_fin)&& (position <= Taille_pile))
       {
         if (position > Ptr) Time_evt = Time_wrap + ((position-Taille_pile-1)*Interval);
         else  Time_evt = Time_wrap +(position*Interval);
         value = EEPROM.read(Deb_pile+position);
         if(value < 255)
           {
          sprintf(test, "<br>%d:%d:%d", hour(Time_evt),minute(Time_evt),second(Time_evt));
          plen=es.ES_fill_tcp_data(buf,plen,test);
           if(Pile_num == 1)sprintf(test, " %5d W", (value*40));
           if(Pile_num == 0)sprintf(test, " %5d Kw/h",value);

            plen=es.ES_fill_tcp_data(buf,plen,test);
           }
         position++;
       }
       if(position - pos_deb ==len)
       {
           if(Pile_num == 0) position = position + 1000;
           sprintf(test, "<BR><a href='t.html?cmd=%d'>></a>", position);

           plen=es.ES_fill_tcp_data(buf,plen,test);
       }

       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  <br></font></h2></html> ") );

       return(plen);
}

/////////////////////////////////////////////////////////
//     affichage page Dump EEPROM
// !!  Longueur max de trame Ethernet 600 Octets
/////////////////////////////////////////////////////////
uint16_t print_webpage3(uint8_t *buf,int cmd,char Pile_num)
{       // Attention 550 char Max
       uint16_t plen;
       int position;
       plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));

            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<html><head><title>Teleinfo Dump</title></head> <h2><font color=\"blue\">"));

       position=cmd-2000;
       while ( position < cmd-2000+50)
       {
           sprintf(test, " %x;", EEPROM.read(position));
           plen=es.ES_fill_tcp_data(buf,plen,test);
           position++;
       }
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  <br></font></h2></html> ") );
       return(plen);
}


/////////////////////////////////////////////////////////////////////////
// Analyse des paramétre de la ligne de Commande
////////////////////////////////////////////////////////////////////////

int analyse_cmd(char *str)
{
 int r=0;
 int i=0;
 if (find_key_val(str,"cmd"))
 {   // is a ASCII number, return it
     while (strbuf[i] < 0x3a && strbuf[i] > 0x2f)
     {
       r=(r*10)+(strbuf[i]-0x30);
       i++;
     }
 }
 else return (-1);
 return r;
}

bluemax2001

#6
Jan 12, 2011, 03:13 pm Last Edit: Jan 12, 2011, 03:13 pm by bluemax2011 Reason: 1
Code: [Select]
#include "print.h"
#include "string.h"
#include "etherShield.h"
#include "stdio.h"
#include "Time.h"
#include "EEPROM.h"
#include "param.h"
time_t prevDisplay = 0; // when the digital clock was displayed

#include "teleinfo.h"
#include "log.h"
#include "serveur_web.h"
#include "ntp.h"
char power;
char index;
void setup()
{
 init_ethernet();
 Serial.begin(1200);
         // parite paire E
         // 7 bits data
 UCSR0C = B00100100;
        ///////////////////////////////////////////////////////////////////////////
        // Avec cette commande serial monitor ne fonctionne pas normalement!
        // il faut etablir une liaison avec hyperterminal
        // attention l'uploading necessite de déconnecter la pin0 Rx
        ////////////////////////////////////////////////////////////////////////////
 setSyncInterval(interval_synchro);    
 setSyncProvider( client_process_NTP);  //set function to call when sync required
////////////////////////////////////////////////////////////////////////////////////////////////////
//Taille des piles d'enregistrement mémoire Max 1024 Bits
///////////////////////////////////////////////////////////////////////////////////////////////////
 test_init_pile ( 30, 500, 60, 1); // init de la pile (Offset, longueur, Intervall temps, N°pile)
 test_init_pile (540, 450, 1800, 0); // init de la pile (Offset, longueur, Intervall temps, N°pile)
}

void loop()
{
 web_server();
 read_teleinfo();

   // display heure
 if( now() != prevDisplay) //update the display only if the time has changed
 {
     power=papp/40;
     Write_log( now(), power, 1);                // Ecriture pile Puissnce
   
     if (ptec[1]=='C') index = (hchc/1000)%250;  // Sauve Index Heure Creuse
     else index = (hchp/1000)%250;               // Sauve Index Heure Creuse
     Write_log( now(), index, 0);                // Ecriture Pile Index Kw/h

     prevDisplay = now();
    // digitalClockDisplay();  
 }
}

//*****************************************************************************************
//
// Function : Affichage liaison serie
//
//*****************************************************************************************

void digitalClockDisplay(){
 // digital clock display of the time
 Serial.print(hour());
 printDigits(minute());
 printDigits(second());
 Serial.print(" ");
 Serial.print(day());
 Serial.print(" ");
 Serial.print(month());
 Serial.print(" ");
 Serial.print(year());
 Serial.println();
}

void printDigits(int digits){
 // utility function for digital clock display: prints preceding colon and leading 0
 Serial.print(":");
 if(digits < 10)
   Serial.print('0');
 Serial.print(digits);
}


************le .pde

bluemax2001

#7
Jan 12, 2011, 05:07 pm Last Edit: Jan 12, 2011, 07:38 pm by bluemax2011 Reason: 1
J'ai bien des ex de code pour le onewire + dallas mais c'est où les placer dans mon code (enfin le code que j'ai trouvé) et les incorporer aussi sur une des 4 page web ou rajouter une 5eme page.
pareil pour les relais (contact on/off).

bluemax2001

Pas facile ou plus de place mem. ou j'ai loupé un épisode  :'(

bluemax2001

Code: [Select]
// get current temperature
#define TEMP_PIN  3
void getCurrentTemp( int *sign, int *whole, int *fract);


je pense le mettre en pageweb 1 (si cela fonctionne j'essaierai de le mettre en page 5 à créer).

Code: [Select]
  // initialize DS18B20 datapin
   digitalWrite(TEMP_PIN, LOW);
   pinMode(TEMP_PIN, INPUT);      // sets the digital pin as input (logic 1)


et celui là après //init the ethernet/ ip layer:

Go Up