Client run only 4 times.

hi here is my code.

#include <SPI.h>
#include <Ethernet.h>
#include <EEPROM.h>
char i=0x00;
char incomingByte = 0;
/*************************************************************************************************/
/*************************************sereiel comm************************************************/
void seriel_com();
char verdi=0x00;
char data_ind[77];


/*************************************************************************************************/
/************************************hent serie nummer********************************************/
void serie_nummer();
char sporg_serie_nummer[24]={0x02,0xaa,0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x02,0xaa,0xaa,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x01,0x59};
char serienummer_tel=0x00;
//char data_ind=0x00;
char * dst;
char sernr[0xff];

char serienummer=0x00;
boolean init_flag=0;
/*************************************************************************************************/
/*************************************init ok*****************************************************/
void init_ok();
//char chek_tot=0x00;
unsigned long chek_tot=0x00;
char chek_test[2];
/*************************************************************************************************/
/******************************hent al data*******************************************************/
void inv_data();
char sporg_data[12]={0x02,0xAA,0xAA,0x01,0x00,0x00,0x01,0x01,0x10,0x00,0x01,0x67};
char data_fil[0xff];
char * dst1;
/*************************************************************************************************/
/******************************pak fil************************************************************/
void pak_fil();
/*************************************************************************************************/
/******************************send al data*******************************************************/
void send_all_data();
/*************************************************************************************************/
// MAC adresse - skal være unik
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Serverens navn
char serverName[] = "xxxx.yyyyy.dd";

EthernetClient client;
int totalCount = 0;
int loopCount = 0;
[color=red]char pageAdd[70];//If I change the variable char pageAdd[70]; to 200 can run 7 times but then it dies too[/color]

void setup() {
  Serial.begin(9600);

  // disable SD SPI
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);

  // Start ethernet
  Serial.println("Starting ethernet...");

  if(!Ethernet.begin(mac)) Serial.println("failed");
  else Serial.println("ok");
  digitalWrite(10,HIGH);

  Serial.println(Ethernet.localIP());

  delay(2000);
  Serial.println("Ready");
}

void loop()
{
  if(init_flag==0)
  {
  serie_nummer();
  init_ok();
  init_flag=1;
  }
  
  inv_data();
  pak_fil();
  send_all_data();
  
 
}

/*************************************************************************************/
/**************************seriel comm************************************************/
void seriel_com()
{
 i=0x00;
   while(i<verdi)
  {
   if (Serial.available() > 0) 
                            {  
                              incomingByte = Serial.read();
                              data_ind[i]=incomingByte;
                              i++;
                              
                           }
     
}
 
}


/*************************************************************************************/
/**************************hent serie nummer******************************************/
void serie_nummer()
{
serienummer_tel=0x00;
  
  while (serienummer_tel<24)
 {  
   Serial.print(sporg_serie_nummer[serienummer_tel]);
  serienummer_tel++;
 }
 verdi=21;
 seriel_com();
 
 i=0x00;
  while (i<verdi)
 {  
  EEPROM.write(i, data_ind[i]); 
  i++;
 }
 

strcpy(sernr,"/invput?id=test_1");
dst = sernr + strlen(sernr);
  for (i = 10; i < 19; i++) {
    if (i > 0) {
      //*(dst1++) = ',';
      delay (10);
    }
    dst += sprintf(dst, "%d", serienummer=(EEPROM.read(i)-48));
  }
  strcat(sernr,"&data=1,2,3,4,5,6");
 /* dst = sernr + strlen(sernr);
  for (i = 0; i < 4; i++) {
    if (i > 0) {
      *(dst++) = ',';
      delay (10);
    }
    dst += sprintf(dst, "%d", serienummer=(EEPROM.read(i)-48));
  }*/
}

/*************************************************************************************/
/***************************init ok***************************************************/
void init_ok()
{
  chek_tot=0x00;
  EEPROM.write(2,0x01);
  EEPROM.write(4,0x00);
  EEPROM.write(7,0x01);
  EEPROM.write(8,0x0B);
  EEPROM.write(19,0x01);
  
  
  
  i=0x00;
  while(i<20)
  {
    chek_tot=EEPROM.read(i)+chek_tot;
    i++;
  }
    
  chek_test[1]=chek_tot;
  chek_test[0]=chek_tot>>8;
  EEPROM.write(21,chek_test[1]);
  EEPROM.write(20,chek_test[0]);
  
 data_ind[0]=0x02;
 Serial.print(data_ind[0]); 
 i=0x00;
while (i<22)
 {  
   data_ind[i]=EEPROM.read(i);
   Serial.print(data_ind[i]);
   i++;
 }  

delay (100);





verdi=12;
 seriel_com();

}
/************************************************************************************************/
/**********************************hent data*****************************************************/

void inv_data()
{
  i=0x00;
  while (i<12)
 {  
   Serial.print(sporg_data[i]);
   i++;
 }
 
  delay (1000);
  
  
 verdi=77;
 seriel_com();
  
  
i=0x00;
   while (i<77)
 {  
   data_ind[i]=EEPROM.read(i);
   //Serial.print(data_ind[i]);
  i++;
 }
 
 dst = sernr + strlen(sernr);
  for (i = 0; i < 4; i++) {
    if (i > 0) {
      *(dst++) = ',';
      delay (10);
    }
    dst += sprintf(dst, "%d", serienummer=EEPROM.read(i));
  }
delay (100);
pak_fil();
}


/**************************************************************************************/
/***************************void pak_fil();********************************************/
void pak_fil()
{
  
  
 
  
}

/*************************************************************************************/
/***************************send alle data********************************************/


void send_all_data()
{
  
    
    sprintf(pageAdd,sernr,totalCount);

    if(!getPage(serverName,pageAdd)) Serial.print("Fail ");
    else Serial.print("Pass ");
    totalCount++;
    Serial.println(totalCount,DEC);
}



byte getPage(char* domainBuffer,char* page)
{
  int inChar;
  char outBuf[128];

  Serial.print("connecting...");

  if(client.connect(domainBuffer,8000))
  {
    Serial.println("connected");

    sprintf(outBuf,"GET %s HTTP/1.0\r\n\r\n",page);
    client.write(outBuf);
  } 
  else
  {
    Serial.println("failed");
    return 0;
  }

  // connectLoop controls the hardware fail timeout
  int connectLoop = 0;

  while(client.connected())
  {
    while(client.available())
    {
      inChar = client.read();
      Serial.write(inChar);
      // set connectLoop to zero if a packet arrives
      connectLoop = 0;
    }

    connectLoop++;

    // if more than 10000 milliseconds since the last packet
    if(connectLoop > 10000)
    {
      // then close the connection from this end.
      Serial.println();
      Serial.println("Timeout");
      client.stop();
    }
    // this is a delay for the connectLoop timing
    delay(1);
  }

  Serial.println();

  Serial.println("disconnecting.");
  // close client end
  client.stop();

  return 1;
}

it works perfectly, 4 times and then it dies.

If I change the variable char pageAdd[70]; to 200 can run 7 times but then it dies too.

I need it to run endless so every time it receives data it gets sent to the server

After you run
Tools + Auto Format
and repost
the code
I'll have another
try at reading it.

Super thank you.
here it comes the.

#include <SPI.h>
#include <Ethernet.h>
#include <EEPROM.h>
char i=0x00;
char incomingByte = 0;
/*************************************************************************************************/
/*************************************sereiel comm************************************************/
void seriel_com();
char verdi=0x00;
char data_ind[77];


/*************************************************************************************************/
/************************************hent serie nummer********************************************/
void serie_nummer();
char sporg_serie_nummer[24]={
  0x02,0xaa,0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x02,0xaa,0xaa,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x01,0x59};
char serienummer_tel=0x00;
//char data_ind=0x00;
char * dst;
char sernr[0xff];

char serienummer=0x00;
boolean init_flag=0;
/*************************************************************************************************/
/*************************************init ok*****************************************************/
void init_ok();
//char chek_tot=0x00;
unsigned long chek_tot=0x00;
char chek_test[2];
/*************************************************************************************************/
/******************************hent al data*******************************************************/
void inv_data();
char sporg_data[12]={
  0x02,0xAA,0xAA,0x01,0x00,0x00,0x01,0x01,0x10,0x00,0x01,0x67};
char data_fil[0xff];
char * dst1;
/*************************************************************************************************/
/******************************pak fil************************************************************/
void pak_fil();
/*************************************************************************************************/
/******************************send al data*******************************************************/
void send_all_data();
/*************************************************************************************************/
// MAC adresse - skal være unik
byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Serverens navn
char serverName[] = "xxxx.ddddd.kk";

EthernetClient client;
int totalCount = 0;
int loopCount = 0;
char pageAdd[70];

void setup() {
  Serial.begin(9600);

  // disable SD SPI
  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);

  // Start ethernet
  Serial.println("Starting ethernet...");

  if(!Ethernet.begin(mac)) Serial.println("failed");
  else Serial.println("ok");
  digitalWrite(10,HIGH);

  Serial.println(Ethernet.localIP());

  delay(2000);
  Serial.println("Ready");
}

void loop()
{
  if(init_flag==0)
  {
    serie_nummer();
    init_ok();
    init_flag=1;
  }

  inv_data();
  pak_fil();
  send_all_data();


}

/*************************************************************************************/
/**************************seriel comm************************************************/
void seriel_com()
{
  i=0x00;
  while(i<verdi)
  {
    if (Serial.available() > 0) 
    {  
      incomingByte = Serial.read();
      data_ind[i]=incomingByte;
      i++;

    }

  }



}


/*************************************************************************************/
/**************************hent serie nummer******************************************/
void serie_nummer()
{
  serienummer_tel=0x00;

  while (serienummer_tel<24)
  {  
    Serial.print(sporg_serie_nummer[serienummer_tel]);
    serienummer_tel++;
  }
  verdi=21;
  seriel_com();

  i=0x00;
  while (i<verdi)
  {  
    EEPROM.write(i, data_ind[i]); 
    i++;
  }


  strcpy(sernr,"/invput?id=test_1");
  dst = sernr + strlen(sernr);
  for (i = 10; i < 19; i++) {
    if (i > 0) {
      //*(dst1++) = ',';
      delay (10);
    }
    dst += sprintf(dst, "%d", serienummer=(EEPROM.read(i)-48));
  }
  strcat(sernr,"&data=1,2,3,4,5,6");
  /* dst = sernr + strlen(sernr);
   for (i = 0; i < 4; i++) {
   if (i > 0) {
   *(dst++) = ',';
   delay (10);
   }
   dst += sprintf(dst, "%d", serienummer=(EEPROM.read(i)-48));
   }*/
}

/*************************************************************************************/
/***************************init ok***************************************************/
void init_ok()
{
  chek_tot=0x00;
  EEPROM.write(2,0x01);
  EEPROM.write(4,0x00);
  EEPROM.write(7,0x01);
  EEPROM.write(8,0x0B);
  EEPROM.write(19,0x01);



  i=0x00;
  while(i<20)
  {
    chek_tot=EEPROM.read(i)+chek_tot;
    i++;
  }

  chek_test[1]=chek_tot;
  chek_test[0]=chek_tot>>8;
  EEPROM.write(21,chek_test[1]);
  EEPROM.write(20,chek_test[0]);

  data_ind[0]=0x02;
  Serial.print(data_ind[0]); 
  i=0x00;
  while (i<22)
  {  
    data_ind[i]=EEPROM.read(i);
    Serial.print(data_ind[i]);
    i++;
  }  

  delay (100);





  verdi=12;
  seriel_com();

}
/************************************************************************************************/
/**********************************hent data*****************************************************/

void inv_data()
{
  i=0x00;
  while (i<12)
  {  
    Serial.print(sporg_data[i]);
    i++;
  }

  delay (1000);


  verdi=77;
  seriel_com();


  i=0x00;
  while (i<77)
  {  
    data_ind[i]=EEPROM.read(i);
    //Serial.print(data_ind[i]);
    i++;
  }

  dst = sernr + strlen(sernr);
  for (i = 0; i < 4; i++) {
    if (i > 0) {
      *(dst++) = ',';
      delay (10);
    }
    dst += sprintf(dst, "%d", serienummer=EEPROM.read(i));
  }




  delay (100);
  pak_fil();
}


/**************************************************************************************/
/***************************void pak_fil();********************************************/
void pak_fil()
{










  //strcpy(data_fil,"&data=1,2");
  /*dst = sernr + strlen(sernr);
   for (i = 10; i < 19; i++) {
   if (i > 0) {
   //*(dst1++) = ',';
   delay (10);
   }
   dst += sprintf(dst, "%d", serienummer=(EEPROM.read(i)-48));
   
   }
   */



}






/*************************************************************************************/
/***************************send alle data********************************************/


void send_all_data()
{

  // every thirty seconds this runs


  // Data der skal sendes til server
  // Tekst efter id= er inverterens serienummer eller ID
  // Tekst efter data= er data fra inverter. Data skal sendes i følgende rækkefølge:
  // temp, vac, vdc1, idc1, vdc2, idc2, etoday, etot, power
  sprintf(pageAdd,sernr,totalCount);

  if(!getPage(serverName,pageAdd)) Serial.print("Fail ");
  else Serial.print("Pass ");
  totalCount++;
  Serial.println(totalCount,DEC);



}



byte getPage(char* domainBuffer,char* page)
{
  int inChar;
  char outBuf[128];

  Serial.print("connecting...");

  if(client.connect(domainBuffer,8000))
  {
    Serial.println("connected");

    sprintf(outBuf,"GET %s HTTP/1.0\r\n\r\n",page);
    client.write(outBuf);
  } 
  else
  {
    Serial.println("failed");
    return 0;
  }

  // connectLoop controls the hardware fail timeout
  int connectLoop = 0;

  while(client.connected())
  {
    while(client.available())
    {
      inChar = client.read();
      Serial.write(inChar);
      // set connectLoop to zero if a packet arrives
      connectLoop = 0;
    }

    connectLoop++;

    // if more than 10000 milliseconds since the last packet
    if(connectLoop > 10000)
    {
      // then close the connection from this end.
      Serial.println();
      Serial.println("Timeout");
      client.stop();
    }
    // this is a delay for the connectLoop timing
    delay(1);
  }

  Serial.println();

  Serial.println("disconnecting.");
  // close client end
  client.stop();

  return 1;
}
void seriel_com()
{
 i=0x00;

Do you have any serious objections to writing:

i = 0;
char sernr[0xff];

Any objection to:

char sernr [255];

no and no but what difference does it make.
I try right away.

How does it die? Does it keep running without sending requests? Does it send requests and not get a response? Does it quit running?

Since you are constructing the page requested dynamically, I think I would check what page you are requesting.

void send_all_data()
{
    sprintf(pageAdd,sernr,totalCount);

    // Does this print what you think it should?
    Serial.print("PageAdd = ");
    Serial.println(pageAdd);

    if(!getPage(serverName,pageAdd)) Serial.print("Fail ");
    else Serial.print("Pass ");
    totalCount++;
    Serial.println(totalCount,DEC);
}

Why so overly complicated?

    dst += sprintf(dst, "%d", serienummer=(EEPROM.read(i)-48));

is in all the cases you probably want the same as

    *dst++ = EEPROM.read(i);
    *dst = 0;

The problem with your version is that if the content of the EEPROM storage is not an ASCII digit, you might get a much larger string than you expected.

Why do you have all the delay()s in your sketch?

Give me a minute to just try something.

All breaks are for troubleshooting, they will be removed when I'm done.

I have found possible error.

I will return shortly.

To Surfertim!

I have read out as you suggest and no and yes there is what I want, but there will be more on more for each cycle.

the end becomes large

[RX] - PageAdd = /invput?id=test_1&data=,0,0,1,0,4,8,29,29,0-86,-86,1,0

[RX] - PageAdd = /invput?id=test_1&data=,0,0,1,0,4,8,29,29,0-86,-86,1,0-86,-86,1,0

[RX] - PageAdd = /invput?id=test_1&data=,0,0,1,0,4,8,29,29,0-86,-86,1,0-86,-86,1,0-86,-86,1,0

it is as if something repeats itself, but why!

Here is the duplicating part. Where is that being inserted?

0-86,-86,1,0

yes it is, we agree, but I do not know where it comes from.???
Any idea, I'm sure that's the main problem.

a moment more I think I found it.

Can I guess? Is it in the inv_data() function? That is the last function called before the getPage() function.

SurferTim you are great!
The idea you came up with that clarified the problem position.
and what was the error so.
the void in inv_data () I fill more data into dst. that Sumerian up.

It should not be used I had overlooked that.

Thanks for your help

yes we have come to the same conclusion I had not seen your reply ...

Now it run