Go Down

Topic: Slimme-meter en S0-bus uitlezen en naar Database (Read 10158 times) previous topic - next topic

arnaudarduino

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:


Code: [Select]

#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 

MAS3

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 ?
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

arnaudarduino

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.
Code: [Select]


#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.



arnaudarduino

Het bestand P3
Code: [Select]

<?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 ?


MAS3

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.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

nicoverduin

Heb je de tabel wel aangepast in de database met die nieuwe velden?
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

arnaudarduino

#6
Nov 02, 2015, 05:26 pm Last Edit: Nov 02, 2015, 06:22 pm by arnaudarduino
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.

nicoverduin

Je kan wel gebruik maken om tussendoor in je php variabelen te echo'en
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

arnaudarduino

#8
Nov 03, 2015, 07:17 pm Last Edit: Nov 06, 2015, 07:48 pm by arnaudarduino
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??"

arnaudarduino

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.

robtillaart

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.
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

robtillaart

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

arnaudarduino

#13
Nov 17, 2015, 09:26 pm Last Edit: Nov 17, 2015, 10:07 pm by arnaudarduino
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.

robtillaart

deze bibliotheek is een goede - http://forum.arduino.cc/index.php?topic=96891.0
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up