Go Down

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

bluemax2001

Jan 11, 2011, 11:50 am Last Edit: Jan 11, 2011, 11:50 am by bluemax2011 Reason: 1
Bonjour à tous d'abord.

J'ai un projet de domotique pour commander à distance (depuis interface web )en fil pilote grâce à 4 relais + Diode mon chauffage et cumulus. Par sécurité, je désire pouvoir contrôler le bon fonctionnement en faisant un relevé de téléinfo sur le compteur EDF et enfin, pouvoir relever la T°C en 1wire avec des DS18B20 dans une ou plusieurs pièces.

Comme je suis hyper newbee puisque je ne m'intéresse au système Arduino que depuis moins d'un mois. Je vous demande, si possible de l'aide pour arriver à re structurer mon sketch.

Je parts d'un sketch de téléinfo avec mise à l'heure sur serveur ntp et histo. de conso. ( pour l'insérer il faut aller sur ftp ?).
De celui ci, je voudrais comprendre comment m'organiser pour rajouter le 1wire et dallas temp. et la fonction 4 relais on ou Off sur deux nouvelles pages (si possible). J'ai des "examples" mais faut il mettre avant ou après l'INIT, ...

merci pour votre aide. ;)



bluemax2001

 J'ai peut-être pas donné assez d'information ? Il faut quoi en plus ?

Pas facile de débuter ....

Jean-François

#2
Jan 11, 2011, 10:59 pm Last Edit: Jan 11, 2011, 10:59 pm by jfs Reason: 1
Quote
Il faut quoi en plus ?


Mettre le code dans les balises [.code] [./code]  (sans les points)   ;)
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

B@tto

Quote
Pas facile de débuter ....


Euuuhh oué, enfin tu dois pas vraiment débuter vu ton code  ::)  Perso je peux pas t'aider parce que j'y comprend pas grand chose !! Et vu la taille en plus ^^

bluemax2001

Code: [Select]
//*****************************************************************************************
//
// Function : Serveur Web
//
//*****************************************************************************************
#define BUFFER_SIZE 600
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 30
static char strbuf[STR_BUFFER_SIZE+1];
// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf);
uint16_t print_webpage4(uint8_t *buf);
uint16_t print_webpage2(uint8_t *buf,int cmd,char Pile_num);
uint16_t print_webpage3(uint8_t *buf,int cmd,char Pile_num);
int analyse_cmd(char *str);
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)

EtherShield es=EtherShield();

////////////////////////////////////////////////////////////////////
// init
///////////////////////////////////////////////////////////////////
void init_ethernet(void)
{
 
 /*initialize enc28j60*/
      es.ES_enc28j60Init(mymac);
  es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
  delay(10);
       
     /* Magjack leds configuration, see enc28j60 datasheet, page 11 */
     // LEDA=greed LEDB=yellow
     //
     // 0x880 is PHLCON LEDB=on, LEDA=on
     // enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
     es.ES_enc28j60PhyWrite(PHLCON,0x880);
     delay(500);
     //
     // 0x990 is PHLCON LEDB=off, LEDA=off
     // enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
     es.ES_enc28j60PhyWrite(PHLCON,0x990);
     delay(500);
     //
     // 0x880 is PHLCON LEDB=on, LEDA=on
     // enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
     es.ES_enc28j60PhyWrite(PHLCON,0x880);
     delay(500);
     //
     // 0x990 is PHLCON LEDB=off, LEDA=off
     // enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
     es.ES_enc28j60PhyWrite(PHLCON,0x990);
     delay(500);
     //
 // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
 // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
 es.ES_enc28j60PhyWrite(PHLCON,0x476);
     delay(100);
       
 //init the ethernet/ip layer:
 es.ES_init_ip_arp_udp_tcp(mymac,myip,80);

 
}
//////////////////////////////////////////////////////////////////////////////
// Recherche D'une clef dans un string
////////////////////////////////////////////////////////////////////////////////
uint8_t find_key_val(char *str,char *key)
{
       uint8_t found=0;
       uint8_t i=0;
       char *kp;
       kp=key;
       while(*str &&  *str!=' ' && found==0){
               if (*str == *kp){
                       kp++;
                       if (*kp == '\0'){
                               str++;
                               kp=key;
                               if (*str == '=')found=1;
                       }
               }else kp=key;
               str++;
       }
       if (found==1){
               // copy the value to a buffer and terminate it with '\0'
               while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                       strbuf[i]=*str;
                       i++;
                       str++;
               }
               strbuf[i]='\0';
       }
       return(found);
}
/////////////////////////////////////////////////////////////////////
// Serveur HTPP, Analyse la requet, envoie la réponse
/////////////////////////////////////////////////////////////////////
void web_server()
{
 uint16_t plen, dat_p;
static int cmd;
 plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

     /*plen will ne unequal to zero if there is a valid packet (without crc error) */
 if(plen!=0){                
   // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
   if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
     es.ES_make_arp_answer_from_request(buf);
     return;
   }

   // check if ip packets are for us:
   if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
     return;
   }
   
   if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
     es.ES_make_echo_reply_from_request(buf,plen);
     return;
   }
   // tcp port www start, compare only the lower byte
   if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
     if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
        es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
        return;    
     }
     if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
       es.ES_init_len_info(buf); // init some data structures
       dat_p=es.ES_get_tcp_data_pointer();
       if (dat_p==0){ // we can possibly have no data, just ack:
         if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
           es.ES_make_tcp_ack_from_any(buf);
         }
         return;
       }
       if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
               // head, post and other methods for possible status codes see:
           // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
           plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
           goto SENDTCP;
       }
      if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
               plen=print_webpage4(buf);
           goto SENDTCP;
        }
       cmd=analyse_cmd((char *)&(buf[dat_p+5]));
       if (cmd==1){
            plen=print_webpage(buf);
            goto SENDTCP;
       }
       if ((cmd==0)||((cmd >9)&&(cmd <1000 ))){
            plen=print_webpage2(buf,cmd,1);
            goto SENDTCP;
       }
       if ((cmd >=1000)&&(cmd <2000 )){
            plen=print_webpage2(buf,cmd,0);
            goto SENDTCP;
       }
       if ((cmd >=2000)&&(cmd <3000 )){
            plen=print_webpage3(buf,cmd,0);
            goto SENDTCP;
       }
       plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 404 Not Found\r\nContent-Type: text/html\r\n\r\n<TITLE>Error 404</TITLE>ERROR 404 The requested URL was not found on this server."));
       //sprintf(test, "cmd= %d;", cmd);
       //plen=es.ES_fill_tcp_data(buf,plen,test);
     
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
         es.ES_make_tcp_ack_with_data(buf,plen); // send data      
     }
   }
 }
}

/////////////////////////////////////////////////////////
// affichage page Valeurs courantes Compteur
// !!  Longueur max de trame Ethernet 600 Octets
/////////////////////////////////////////////////////////

uint16_t print_webpage(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>", papp);
       // plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<meta http-equiv=\"refresh\" content=\"15\" /></head>") );  
      plen=es.ES_fill_tcp_data(buf,plen,test);

            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <h3><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);
     sprintf(test, "<br>Ind_HC : %ld", hchc);
      plen=es.ES_fill_tcp_data(buf,plen,test);
     sprintf(test, "<br>Ind_HP : %ld", hchp);
      plen=es.ES_fill_tcp_data(buf,plen,test);

Go Up