Php-skript för beräkning av elförbrukning

Generella mjukvarufrågor som inte är beroende av vilket operativsystem som körs skall ställas i denna kategori

Moderator: elf98

Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Bergalot
Gillar hemautomation
Inlägg: 25
Blev medlem: 29 mar 2012, 19:29
Ort: Umeå

Php-skript för beräkning av elförbrukning

Inlägg av Bergalot » 03 maj 2012, 21:00

Hej! Jag sitter och knåpar ihop ett php-skript som skall beräkna elförbrukningen.

Jag har lagrat en tidsstämpel och antalet pulser som en räknare har räknat från en ledpulsdetektor som sitter vid elmätaren.
Detta lagras i mysql databas.

Tanken är att php-skriptet skall beräkna elförbrukningen för varje tidsstämpel genom en loop.

Dock stöter jag på problem när jag skall loopa eftersom jag inte har tillgång till förra värdet i tabellen.
Programet skall göra följande beräkning:
Elförbrukning i Effekt = Delta Joule / Delta tid = (Y2-Y1)/(X2-X1) :)

Början till scriptet ser ut enligt koden nedan:

Kod: Markera allt

$tempdata = @mysql_query("SELECT date,countvalue FROM counts ");
while($row = @mysql_fetch_array($tempdata)){

Här skall alltså ekvationen in.

}
Jag får ju problem då första gången loopen körs då de inte finns något "förra värde" att jämföra med.


Ni som har liknade php-skript. Hur har ni löst detta? Har ni flera skript? Kanske har delat upp beräkningen och utskrivningen av datan till graf.

Idéer är mycket välkomna! :)
Hälsningar/Bergalot

fredrikw
Gillar hemautomation
Inlägg: 34
Blev medlem: 20 nov 2008, 14:44
Ort: Malmö

Re: Php-skript för beräkning av elförbrukning

Inlägg av fredrikw » 04 maj 2012, 08:54

Man håller helt enkelt reda på om iterationen är den första i loopen, och hoppar då över beräkningen för detta, men sparar värdet. Kan t.ex. göras med en boolsk flagga eller en räknare:

Kod: Markera allt

$first = true;
while(..) {
  $val = value_fromdb;
  if ($first) {
    $first = false;  
  } else {
    calc with $val and $prevval
  }
  $prevval = $val;
}
Eller så kan man hålla reda på om man har ett "previous value":

Kod: Markera allt

$prevval = null;
while(..) {
  $val = value_fromdb;
  if (isset($prevval)) {
    calc with $val and $prevval
  }
  $prevval = $val;
}

Skriv svar