Slimme-meter en S0-bus uitlezen en naar Database

Hallo
Door vragen die er zijn over energie verbruik en leveren door zonnepanelen, kwam ik deze microcontroller tegen. De lol die ik er aan heb om er mee te experimenteren brachten mij ertoe ea aan te schaffen. Na wat basis dingetjes, toch hier aan begonnen. Door verbouwen van reeds bestaande sketches begint er wat te dagen met kleine succesjes.

Met de verbouwing van een sketch, waarbij de slimme-meter uitgelezen kon worden, heb ik een database verbinding ingezet dat werkt. (vb Thinkpad slimme-meter).
Echter ik wil ook graag weten wat er verbruikt wordt als de zon volop schijnt. Daarvoor mis ik een belangrijke meting. Daar heb ik een kwh meterje voor in de voeding van de omvormer. Die geeft aan wat de productie is. Met de sketch van Rob Tllaart kunnen de pulsen gemeten worden. Deze moeten dan ook naar de database. Met wat reken werk moet ik grafieken kunnen maken.

Nu de sketch:

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0x30, 0x32, 0x31};
IPAddress ip(192, 168, 1, 000);
char serverName[] = "www.&&&&&.com";
EthernetClient client;

const int requestPin = 5;
char input;                     // incoming serial data (byte)
bool readnextLine = false;

#define BUFSIZE 75
char buffer[BUFSIZE];           //Buffer for serial data to find \n .

int bufpos = 0;
unsigned long mEVLT = 0;        // consumption low tariff
unsigned long mEVHT = 0;        // consumption high tariff
unsigned long mELLZ = 0;        // produced low tariff
unsigned long mEHLZ = 0;        // produced high tariff
unsigned long mEAV = 0;         // Actual consumption
unsigned long mEAA = 0;         // Actual ampere
unsigned long mEPV = 0;         // Actual delivery
unsigned long mG = 0;           // Gas
unsigned long kwh = 0;
unsigned long sum = 0;
unsigned long lastTime = 0;     // will store last time
unsigned long interval = 60000; // interval at which to blink (milliseconds)60000

/* S0 kwh RobTillaart script*/
volatile unsigned long rpk = 0;         // raw pulse kwh counter (private)
volatile unsigned long rpk_old = 0;     // value of last read (private)
volatile boolean CS_kwh = false;        // Critical Section for kwh meter (private)

// The interrupt routine
void Kirq()
{
  rpk++;                      // just increment raw pulse counter.
  if (rpk > 1000000000)       // reset pulse counter after 10e9 pulse = 500.000 KW
  {
    if (false == CS_kwh)    // in critical section? // assumption IRQ-call is handled atomic on arduino.
    {
      rpk -= rpk_old;
      rpk_old = 0;
    }
  }
}

// returns kwh's since last reset
float readkwh1()
{
  return rpk / 2000.0;        // one pulse = 0.5 watt.
}

// returns kwh's since last call
float readkwh()
{
  CS_kwh = true;              // Start Critical Section - prevent interrupt Kirq() from changing rpk & rpk_old ;
  long t = rpk;               // store the raw pulse counter in a temp var.
  long k = t - rpk_old;       // subtract last measure to get delta
  rpk_old = t;                // remember old value
  CS_kwh = false;             // End Critical Section
  return k / 2000.0;          // return delta, one pulse = 0.5 watt.
}

/* einde eerste deel Kwh RobTillart*/


void setup()
{
  Serial.begin(115200);
  Serial.print("Start ");
  Serial.println(__FILE__);
  delay(1000);

  Ethernet.begin(mac, ip);
  delay(1000);
  pinMode(4, OUTPUT);         // SD select pin
  digitalWrite(4, HIGH);      // Explicitly disable SD

  //Set RTS pin high, so smart meter will start sending telegrams
  pinMode(requestPin, OUTPUT);
  digitalWrite(requestPin, HIGH);

  // kwh interrupt attached to IRQ 0 = pin2
  attachInterrupt(0, Kirq, FALLING);
}

void loop()
{
  decodeTelegram();

  if (millis() - lastTime > interval) {
    lastTime = millis();
    // read the pulses
    kwh = readkwh1();
    sum += kwh;

    // send new data
    httpRequest();

    //Reset variables to zero for next run
    mEVLT = 0;
    mEVHT = 0;
    mELLZ = 0;
    mEHLZ = 0;
    mEAV = 0;
    mEAA = 0;
    mEPV = 0;
    mG = 0;
  }
}


bool decodeTelegram()
{
  bool newData = false;
  long tl = 0;
  long tld = 0;

  while (Serial.available())
  {
    input = Serial.read();
    Serial.write(input);
    buffer[bufpos++] = input & 127;
    char inChar = (char)input;
    if (input == '\n') // We received a new line (data up to \n)
    {
      newData = true;
      // 1-0:1.8.1 = Elektra verbruik laag tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:1.8.1(%ld.%ld" , &tl, &tld) == 2)
      {
        mEVLT = tl * 1000 + tld;
      }
      // 1-0:1.8.2 = Elektra verbruik hoog tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:1.8.2(%ld.%ld" , &tl, &tld) == 2)
      {
        mEVHT = tl * 1000 + tld;
      }
      // 1-0:2.8.1 = Elektra levering laag tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:2.8.1(%ld.%ld" , &tl, &tld) == 2)
      {
        mELLZ = tl * 1000 + tld;
      }
      // 1-0:2.8.2 = Elektra levering hoog tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:2.8.2(%ld.%ld" , &tl, &tld) == 2)
      {
        mEHLZ = tl * 1000 + tld;
      }
      // 1-0:1.7.0 = Elektra huidig verbruik (DSMR v4.0)
      if (sscanf(buffer, "1-0:1.7.0(%ld.%ld" , &tl , &tld) == 2)
      {
        mEAV = tl * 1000 + tld;
      }
      // 1-0:31.7.0 = Elektra stroom (DSMR v4.0)
      if (sscanf(buffer, "1-0:31.7.0(%ld" , &tl) == 1)
      {
        mEAA = tl;
        Serial.print("Ampere = ");
        Serial.print(mEAA);
        Serial.println(" ");
      }
      // 1-0:2.7.0 = Elektra geleverd (DSMR v4.0)
      if (sscanf(buffer, "1-0:2.7.0(%ld.%ld" , &tl , &tld) == 2)
      {
        mEPV = tl * 1000 + tld;
      }
      // 0-1:24.2.1 = Gas (DSMR v4.0) on Kaifa MA105 meter
      if (strncmp(buffer, "0-1:24.2.1", strlen("0-1:24.2.1")) == 0) {
        if (sscanf(strrchr(buffer, '(') + 1, "%d.%d", &tl, &tld) == 2)
        {
          mG = tl * 1000 + tld;
        }
      }
      // Empty buffer again (whole array)
      for (int i = 0; i < 75; i++)
      {
        buffer[i] = 0;
      }
      bufpos = 0;
      break;
    }
  }
  return newData;
}


void httpRequest()
{
  // if there's a successful connection:
  if (client.connect(serverName, 80))
  { float kwh = readkwh();
  float sum = readkwh1();
    Serial.print("GET /datalogger/p3.php?mEVLT=");
    Serial.print(mEVLT);
    Serial.print("&mEVHT=");
    Serial.print(mEVHT);
    Serial.print("&mELLZ=");
    Serial.print(mELLZ);
    Serial.print("&mEHLZ=");
    Serial.print(mEHLZ);
    Serial.print("&mEAV=");
    Serial.print(mEAV);
    Serial.print("&mEAA=");
    Serial.print(mEAA);
    Serial.print("&mEPV=");
    Serial.print(mEPV);
    Serial.print("&kwh=");
    Serial.print(kwh);
    Serial.print("&sum=");
    Serial.print(sum);
    Serial.print("&mG=");
    Serial.print(mG);
    Serial.println(" HTTP/1.1");
    Serial.println("Host: &&&&&.com");
    Serial.println("User-Agent: arduino-ethernet");
    Serial.println("Connection: stop/close");
    Serial.println();

    client.print("GET /datalogger/p3.php?mEVLT=");
    client.print(mEVLT);
    client.print("&mEVHT=");
    client.print(mEVHT);
    client.print("&mELLZ=");
    client.print(mELLZ);
    client.print("&mEHLZ=");
    client.print(mEHLZ);
    client.print("&mEAV=");
    client.print(mEAV);
    client.print("&mEAA=");
    client.print(mEAA);
    client.print("&mEPV=");
    client.print(mEPV);
    client.print("&kwh=");
    client.print(kwh);
    client.print("&sum=");
    client.print(sum);
    client.print("&mG=");
    client.print(mG);
    client.println(" HTTP/1.1");
    client.println("Host: &&&&&.com");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    //Request complete; empty recieve buffer
    while (client.available())
    {
      char c = client.read(); //gets byte from ethernet buffer
      if (client.available() == false)
      {
        delay(25); // give some extra time for next packet to arrive
      }
    }
    client.println();
    Serial.println("Success!");
  }
  else
  {
    Serial.println("Failed");
  }
  client.stop();
}

De sketchen inclusief schrijven naar database werken ieders appart wel. Echter wil ik ze graag als 1 sketch.
De slimme-meter wordt keurig uitgelezen en in de database gezet.
Het kwh-meterje (even een andere want de zon doet het niet) telt niet er wordt wel 0 in database gezet.

help

Hoi arnaudarduino, welkom.

Ik mis een echte vraag, maar kan wel gaan gokken wat je wil.
Je hebt de 2 sketches laten zien, maar niet wat je er van maakt als je ze combineert (ik meen te lezen dat dat al wel geprobeerd hebt).
Kun je de combinatie ook laten zien ?

De 2 sketchen zijn al samen gevoegd ,komt ook netjes door de compilatie.
Zoals de sketch er hier boven staat ging er wel wat naar de database al waren het nullen.
Ik heb er wat aan gesleuteld omdat er geen waarden kwamen ook niet in de serial print.

Dat is gelukt in de serial print staan nu de gemeten waarden. Er wordt ook gemeld dat er verbinding met internet is. Maar er gaat niks naar de database.
De code zoals ik het nu heb.

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0x30, 0x32, 0x31};
IPAddress ip(192, 168, 1, 000);
char serverName[] = "www.&&&&&.com";
EthernetClient client;

const int requestPin = 5;
char input;                     // incoming serial data (byte)
bool readnextLine = false;

#define BUFSIZE 75
char buffer[BUFSIZE];           //Buffer for serial data to find \n .

int bufpos = 0;
unsigned long mEVLT = 0;        // consumption low tariff
unsigned long mEVHT = 0;        // consumption high tariff
unsigned long mELLZ = 0;        // produced low tariff
unsigned long mEHLZ = 0;        // produced high tariff
unsigned long mEAV = 0;         // Actual consumption
unsigned long mEAA = 0;         // Actual ampere
unsigned long mEPV = 0;         // Actual delivery
unsigned long kwh = 0;          // pulse
unsigned long sum = 0;          // sum pulse
unsigned long mG = 0;           // Gas
unsigned long lastTime = 0;     // will store last time
unsigned long interval = 60000; // interval at which to blink (milliseconds)60000

/* S0 kwh RobTillaart script*/
volatile unsigned long rpk = 0;         // raw pulse kwh counter (private)
volatile unsigned long rpk_old = 0;     // value of last read (private)
volatile boolean CS_kwh = false;        // Critical Section for kwh meter (private)

// The interrupt routine
void Kirq()
{
  rpk++;                      // just increment raw pulse counter.
  if (rpk > 1000000000)       // reset pulse counter after 10e9 pulse = 500.000 KW
  {
    if (false == CS_kwh)    // in critical section? // assumption IRQ-call is handled atomic on arduino.
    {
      rpk -= rpk_old;
      rpk_old = 0;
    }
  }
}

// returns kwh's since last reset
float readkwh1()
{
  return rpk / 2000.0;        // one pulse = 0.5 watt.
}

// returns kwh's since last call
float readkwh()
{
  CS_kwh = true;              // Start Critical Section - prevent interrupt Kirq() from changing rpk & rpk_old ;
  long t = rpk;               // store the raw pulse counter in a temp var.
  long k = t - rpk_old;       // subtract last measure to get delta
  rpk_old = t;                // remember old value
  CS_kwh = false;             // End Critical Section
  return k / 2000.0;          // return delta, one pulse = 0.5 watt.
}

/* einde eerste deel Kwh RobTillart*/


void setup()
{
  Serial.begin(115200);
  Serial.print("Start ");
  Serial.println(__FILE__);
  delay(1000);

  Ethernet.begin(mac, ip);
  delay(1000);
  pinMode(4, OUTPUT);         // SD select pin
  digitalWrite(4, HIGH);      // Explicitly disable SD

  //Set RTS pin high, so smart meter will start sending telegrams
  pinMode(requestPin, OUTPUT);
  digitalWrite(requestPin, HIGH);

  // kwh interrupt attached to IRQ 0 = pin2
  attachInterrupt(0, Kirq, FALLING);
}

void loop()
{
  decodeTelegram();

  if (millis() - lastTime > interval) {
    lastTime = millis();
    // read the pulses
    kwh = readkwh1();
    sum += kwh;

    // send new data
    httpRequest();

    //Reset variables to zero for next run
    mEVLT = 0;
    mEVHT = 0;
    mELLZ = 0;
    mEHLZ = 0;
    mEAV = 0;
    mEAA = 0;
    mEPV = 0;
    mG = 0;
  }
}


bool decodeTelegram()
{
  bool newData = false;
  long tl = 0;
  long tld = 0;

  while (Serial.available())
  {
    input = Serial.read();
    Serial.write(input);
    buffer[bufpos++] = input & 127;
    char inChar = (char)input;
    if (input == '\n') // We received a new line (data up to \n)
    {
      newData = true;
      // 1-0:1.8.1 = Elektra verbruik laag tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:1.8.1(%ld.%ld" , &tl, &tld) == 2)
      {
        mEVLT = tl * 1000 + tld;
      }
      // 1-0:1.8.2 = Elektra verbruik hoog tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:1.8.2(%ld.%ld" , &tl, &tld) == 2)
      {
        mEVHT = tl * 1000 + tld;
      }
      // 1-0:2.8.1 = Elektra levering laag tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:2.8.1(%ld.%ld" , &tl, &tld) == 2)
      {
        mELLZ = tl * 1000 + tld;
      }
      // 1-0:2.8.2 = Elektra levering hoog tarief (DSMR v4.0)
      if (sscanf(buffer, "1-0:2.8.2(%ld.%ld" , &tl, &tld) == 2)
      {
        mEHLZ = tl * 1000 + tld;
      }
      // 1-0:1.7.0 = Elektra huidig verbruik (DSMR v4.0)
      if (sscanf(buffer, "1-0:1.7.0(%ld.%ld" , &tl , &tld) == 2)
      {
        mEAV = tl * 1000 + tld;
      }
      // 1-0:31.7.0 = Elektra stroom (DSMR v4.0)
      if (sscanf(buffer, "1-0:31.7.0(%ld" , &tl) == 1)
      {
        mEAA = tl;
        Serial.print("Ampere = ");
        Serial.print(mEAA);
        Serial.println(" ");
      }
      // 1-0:2.7.0 = Elektra geleverd (DSMR v4.0)
      if (sscanf(buffer, "1-0:2.7.0(%ld.%ld" , &tl , &tld) == 2)
      {
        mEPV = tl * 1000 + tld;
      }
      // 0-1:24.2.1 = Gas (DSMR v4.0) on Kaifa MA105 meter
      if (strncmp(buffer, "0-1:24.2.1", strlen("0-1:24.2.1")) == 0) {
        if (sscanf(strrchr(buffer, '(') + 1, "%d.%d", &tl, &tld) == 2)
        {
          mG = tl * 1000 + tld;
        }
       
      }
      // Empty buffer again (whole array)
      for (int i = 0; i < 75; i++)
      {
        buffer[i] = 0;
      }
      bufpos = 0;
      break;
    }
  }
  return newData;
}


void httpRequest()
{
  // if there's a successful connection:
  if (client.connect(serverName, 80))
  { float kwh = readkwh();
    float sum = readkwh1();
    Serial.print("GET /datalogger/p3.php?mEVLT=");
    Serial.print(mEVLT);
    Serial.print("&mEVHT=");
    Serial.print(mEVHT);
    Serial.print("&mELLZ=");
    Serial.print(mELLZ);
    Serial.print("&mEHLZ=");
    Serial.print(mEHLZ);
    Serial.print("&mEAV=");
    Serial.print(mEAV);
    Serial.print("&mEAA=");
    Serial.print(mEAA);
    Serial.print("&mEPV=");
    Serial.print(mEPV);
    Serial.print("&kwh=");
    Serial.print(kwh, 5);
    Serial.print("&sum=");
    Serial.print(sum, 5);
    Serial.print("&mG=");
    Serial.print(mG);
    Serial.println(" HTTP/1.1");
    Serial.println("Host: &&&&&.com");
    Serial.println("User-Agent: arduino-ethernet");
    Serial.println("Connection: stop/close");
    Serial.println();
    Serial.println("web ");
    
    client.print("GET /datalogger/p3.php?mEVLT=");
    client.print(mEVLT);
    client.print("&mEVHT=");
    client.print(mEVHT);
    client.print("&mELLZ=");
    client.print(mELLZ);
    client.print("&mEHLZ=");
    client.print(mEHLZ);
    client.print("&mEAV=");
    client.print(mEAV);
    client.print("&mEAA=");
    client.print(mEAA);
    client.print("&mEPV=");
    client.print(mEPV);
    client.print("&kwh=");
    client.print(kwh);
    client.print("&sum=");
    client.print(sum);
    client.print("&mG=");
    client.print(mG);
    client.println(" HTTP/1.1");
    client.println("Host: &&&&&.com");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    //Request complete; empty recieve buffer
    while (client.available())
    {
      char c = client.read(); //gets byte from ethernet buffer
      if (client.available() == false)
      {
        delay(25); // give some extra time for next packet to arrive
      }
    }
    client.println();
    Serial.println("Success!");
  }
  else
  {
    Serial.println("Failed");
  }
  client.stop();
}

Er staat wat "rommel" tussen probeersels.

Het bestand P3

<?php
error_reporting(E_ALL);

//Connect to database
include 'config.php';
include 'opendb.php';

//Waardes van vorige wegschrijf actie ophalen
$query = mysql_query("SELECT laag_tarief, hoog_tarief, laag_tarief_geleverd, hoog_tarief_geleverd, huidig_verbruik, stroom_verbruik, huidig_geleverd, gas, kwh, sum  FROM `readings3` ORDER BY `readings3`.`time`  DESC LIMIT 1");
$row = mysql_fetch_array($query);
$previous_laag_tarief = $row[0];
$previous_hoog_tarief = $row[1];
$previous_laag_tarief_geleverd = $row[2];
$previous_hoog_tarief_geleverd = $row[3];
$previous_huidig = $row[4];
$previous_huidig_geleverd = $row[5];
$previous_gas = $row[6];
$min_vermogen = 0;
$max_vermogen = 230*25; //Maximale vermogen = 230V * vermogen hoofdzekering (1x25A)

//Alle opgehaalde variabelen op type 'INTEGER' zetten ivm vergelijken zometeen
settype($previous_elektra, "integer");
settype($previous_huidig, "integer");
settype($previous_huidig_geleverd, "integer");
settype($previous_gas, "integer");

//GET variabelen naar andere variabele schrijven
$mEVLT = $_GET["mEVLT"];
$mEVHT = $_GET["mEVHT"];
$mELLZ = $_GET["mELLZ"];
$mEHLZ = $_GET["mEHLZ"];
$mEAV = $_GET["mEAV"];
$mEAA = $_GET["mEAA"];
$mEPV = $_GET["mEPV"];
/*$kwh = $_GET["kwh"];*/
/*$sum = $_GET["sum"];*/
$mG = $_GET["mG"];

//GET variabelen op 'integer' zetten 
settype($mEVLT, "integer");
settype($mEVHT, "integer");
settype($mELLZ, "integer");
settype($mEHLZ, "integer");
settype($mEAV, "integer");
settype($mEAA, "integer");
settype($mEPV, "integer");
settype($kwh, "integer");
settype($sum, "integer");
settype($mG, "integer");


//Checken of binnengekomen standen voldoen aan eisen (meterstand = hoger dan vorige, huidig verbruik > minimale vermogen, kleiner dan maximale vermogen) om incorrecte waarden te negeren
if (
    $mEVLT >= $previous_laag_tarief
    && $mEVHT >= $previous_hoog_tarief 
    && $mG >= $previous_gas //Inkomende meterstand moet groter zijn dan vorige meterstand
    && $mG <= ($mG + 6000) //Gasmeter is type 'G6', which stands for max. 6m3/hour. So value can never be bigger than value + 6000
    && $mEAV >= $min_vermogen //Huidig verbruik moet groter zijn dan minimale verbruik (nachtverbruik)
    && $mEAV <= $max_vermogen //Huidig verbruik moet kleiner zijn dan max. vermogen 1fase aansluiting
    ) 
{ 
    /*$SQL = "INSERT INTO mdnaam.readings3 (id, time, laag_tarief, hoog_tarief, laag_tarief_geleverd, hoog_tarief_geleverd, huidig_verbruik,  huidig_geleverd, gas, kwh, sum) VALUES  (NULL, NULL, '".$mEVLT."', '".$mEVHT."', '".$mELLZ."', '".$mEHLZ."', '".$mEAV."', '".$mEAA."', '".$mEPV."', '".$mG."','".$_GET["kwh"]."','".$_GET["sum"]."')";
 mysql_query($SQL);*/
  $SQL = "INSERT INTO mdnaam.readings3 (id, time, laag_tarief, hoog_tarief, laag_tarief_geleverd, hoog_tarief_geleverd, huidig_verbruik, stroom_verbruik, huidig_geleverd, kwh, sum, gas) VALUES (NULL, NULL, '".$mEVLT."', '".$mEVHT."', '".$mELLZ."', '".$mEHLZ."', '".$mEAV."', '".$mEAA."', '".$mEPV."', '".$mG."')";
    mysql_query($SQL);
 /*$SQL = "INSERT INTO mdnaam.readings3 (id, time, laag_tarief) VALUES (NULL, NULL, '".$mEVLT."', '".$mEVHT."')";
    mysql_query($SQL);*/
 
}
else { 

    //Foutieve waarden wegschrijven naar tabel voor latere debugging
    $SQL = "INSERT INTO mdnaam.faulty_readings3 (id, time, laag_tarief, hoog_tarief, laag_tarief_geleverd, hoog_tarief_geleverd, huidig_verbruik,  huidig_geleverd, gas, kwh, sum) VALUES           (NULL, NULL, '".$mEVLT."', '".$mEVHT."', '".$mELLZ."', '".$mEHLZ."', '".$mEAV."', '".$mEAA."', '".$mEPV."', '".$mG."','".$_GET["kwh"]."','".$_GET["sum"]."')";    
    mysql_query($SQL);
}


?>

Wat er nu mis gaat is schrijven naar database ?

Sorry, niet erg goed naar die code gekeken dus.
Zag halverwege ineens setup voorbij komen en dacht dat je gewoon 2 sketches achter elkaar had gezet.
Ik kan je niet helpen met de database, sorry.

Heb je de tabel wel aangepast in de database met die nieuwe velden?

Ja heb ik ook aangepast . Voor de compleetheid.
Straks als alles werkt foto erbij en de php en sketch en tabel structuur.

id int(11) NOT NULL AUTO_INCREMENT,
time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
laag_tarief decimal(11,0) NOT NULL,
hoog_tarief int(11) NOT NULL,
laag_tarief_geleverd int(11) NOT NULL,
hoog_tarief_geleverd int(11) NOT NULL,
huidig_verbruik decimal(11,0) NOT NULL,
stroom_verbruik decimal(11,0) NOT NULL,
huidig_geleverd decimal(11,0) NOT NULL,
kwh float NOT NULL, (in plaats van float ook decimal, varchar geprobeerd maar ???)
sum float NOT NULL,
gas int(11) NOT NULL,
PRIMARY KEY (id)

Straks weer verder proberen.

Bedankt alvast voor meekijken allen.

Je kan wel gebruik maken om tussendoor in je php variabelen te echo'en

Zo het werkt.
Wat er fout zat ,in $SQL = ("INSERT INTO in het phpscript moest niet nog een id en time "geinsert" worden. Nadat ik die weghaalde ging alles naar de database.

Ik ga het e.a. uitwerken en dan het resultaat met foto en sketch en php hier plaatsen.

Moet nog uitzoeken of die pulsen teller ook kan starten met een andere waarde.
Ik heb namelijk al zo'n kwh-metertje in gebruik zou handig zijn als die door kon tellen.

Dat is dan eigenlijk ook nog een vraagje.
" Kan je ook een tellerstand ingeven vanwaar gestart moet worden??"

Speciale vraag aan Rob Tillaart.

Nu heb ik het script werkend en getrimd.

In deze sketch wil ik variable sum om 23:59 of na x aantal pulsen laten resetten.

Hoe moet ik dat doen graag jullie hulp.

arnaudarduino:
Nu heb ik het script werkend en getrimd.

In deze sketch wil ik variable sum om 23:59 of na x aantal pulsen laten resetten.

Hoe moet ik dat doen graag jullie hulp.

je moet een Real Time Clock (RTC) gebruiken en iedere minuut de tijd opvragen en als het dan 12:00 is
schrijf je de som weer weg.

Er zijn verschillende RTC's met libraries met voorbeeld sketches.

moderator mode: topics merged...

Oke , gaan we daar eens mee aan het werk.
Dus ik moet iets vinden bv een RTC die de rpk naar 0 zet?

Bedankt voor de hint.

deze bibliotheek is een goede - Library for time zone conversions and automatic DST adjustments - Exhibition / Gallery - Arduino Forum

Nu krijg ik best wel aardig wat data binnen met deze sketch.
Maar de arduino of netwerkshield of sketch stopt met regelmaat.
Dan moet ik de voeding even loskoppelen en weer opstarten.
Dan werkt het weer poosje ene keer aantal dagen dan weer een uur of 10.

Wat raden jullie aan om als voeding te gebruiken.?

Nu heb ik er een usb-lader als voeding.

En ik krijg nog steeds niet voor elkaar om met een mills timer de variabele rpk naar 0 te zetten na (omgerekend) 23:55 uur

ik verdenk je programma, zoals declaraties die je in de loop hebt staan, beter is om dat boven de setup te doen, dan blijven ze vast staan ipv dat ze steeds aangemaakt worden.
stel even je maakt een byte aan, dan maak je nog een byte aan, dan maak je een word aan, vervolgens maak je die eerste byte weer aan, waardoor de byte vrijkomt en op een andereplaats weer gemaakt wordt, dit was vroeger in basic een probleem.

Zucht, dat snap ik wel, maar om dat dan aan te passen?.?.?.?.?
Geen idee. Was al blij dat de arduino nu meet wat die moet meten.
Dacht er al aan om nog er nog een kwh bij te plaatsen, maar toch maar even niet.
Maar nu is die niet meer stabiel. Ik dacht misschien dat de usb adaptervoeding het probleem zou zijn.

arnaudarduino:
Zucht, dat snap ik wel, maar om dat dan aan te passen?.?.?.?.?
Geen idee. Was al blij dat de arduino nu meet wat die moet meten.
Dacht er al aan om nog er nog een kwh bij te plaatsen, maar toch maar even niet.
Maar nu is die niet meer stabiel. Ik dacht misschien dat de usb adaptervoeding het probleem zou zijn.

Tja dat is nu eenmaal het verschil tussen iemand die een keer iets bouwt en de vakman die nadenkt over architectuur, memory management, structuur enz. Maar mocht je denken dat je de enige was, dan kan ik je teleurstellen. Zie het zo, van je fouten kun je leren. :slight_smile:

Ik raad je aan om het toch op te lossen.
Je mag er bij zuchten en je mag er ook best bij tieren, ik ga dat toch niet horen.
Maar je leert er echt wat van als je het kunt oplossen, en je mag dan ook trots zijn op jezelf (nog meer dan je nu al (terecht) bent).

De volgende keer dat je een projectje bedenkt, zul je er dankbaar gebruik van maken, wellicht zonder er echt bij stil te staan.

Ik moest, net als de andere respondenten, meteen denken aan het vollopen van het beperkte geheugen.
Je hebt je proof of concept, nu nog de puntjes op de ï zetten.