2016-12-11 3 views
0

私は、太陽光充電コントローラからMySQLデータベース(5.5.52)にデータを収集しています。これまでのところ、私はテーブルを持って、レジスタMySQLのビューと現在と前の行の間の数学

mysql> SELECT date,time,panelVoltage,panelCurrent,batteryVoltage,loadCurrent 
    FROM registers 
    ORDER BY date,time 
    LIMIT 4; 
+------------+----------+--------------+--------------+----------------+-------------+ 
| date  | time  | panelVoltage | panelCurrent | batteryVoltage | loadCurrent | 
+------------+----------+--------------+--------------+----------------+-------------+ 
| 2016-11-27 | 17:20:41 |  26.04 |   1.31 |   25.15 |  0.72 | 
| 2016-11-27 | 17:21:06 |  26.06 |   1.31 |   25.15 |  0.76 | 
| 2016-11-27 | 17:21:32 |  26.06 |   1.15 |   25.16 |   0.6 | 
| 2016-11-27 | 17:21:57 |  26.06 |   1.3 |   25.16 |  0.68 | 
+------------+----------+--------------+--------------+----------------+-------------+ 

私は私が思うVIEWとしてパネルや負荷のためにワットの時間を計算したいと思いますので、それが最新の状態に保ちます。 (非常に)擬似コード:

SELECT (panelVoltage * panelCurrent) as panelWattage, 
    CONCAT(date, ' ', time) AS datetime 
    FROM registers ORDER BY datetime; 
timeDiff = (currRow.datetime from prevRow.datetime)/3600 # for time decimal hours 
powerSum = (currRow.panelWattage + prevRow.panelWattage)/2 # for average Wattage 
Wh = timeDiff * powerSum # for Watt-hours 

だから、ビュー/列がpanelWhloadWhを保持し、多分それぞれの実行中の合計、panelWhSumloadWhSumでしょう。

$qry = "SELECT CONCAT(date,' ',time) as datetime,loadCurrent,batteryVoltage,panelCurrent,panelVoltage, 
    panelCurrent * panelVoltage as 'panelWatt', loadCurrent * batteryVoltage as 'loadWatt' FROM registers 
    WHERE TIMESTAMP(`date`, `time`) > NOW() - INTERVAL ".$_GET['time']." MINUTE"; 
    $result = mysqli_query($con,$qry); 
    $table = array(); 
    $table['cols'] = array(
    array('label' => 'datetime', 'type' => 'datetime'), 
    array('label' => 'panel Wh', 'type' => 'number'), 
    array('label' => 'load Wh', 'type' => 'number'), 
    array('label' => 'net Wh', 'type' => 'number') 
    foreach($result as $row){ 
    $prevTime = $curTime; 
    $curTime = $datetime; 
    $prevPW = $curPW; 
    $curPW = $row['panelWatt']; 
    $prevLW = $curLW; 
    $curLW = $row['loadWatt']; 
    if ($i == 0) { 
     $prevTime = $datetime; 
     $prePW = $row['panelWatt']; 
     $preLW = $row['loadWatt']; 
    } 
    $diffInSeconds = $curTime->getTimestamp() - $prevTime->getTimestamp(); 
    $panelWh = ($diffInSeconds * 0.5 * ($prevPW + $curPW)/3600); 
    $panelWhTotal = $panelWhTotal + $panelWh; 
    $loadWh = ($diffInSeconds * 0.5 * ($prevLW + $curLW)/3600); 
    $loadWhTotal = $loadWhTotal + $loadWh; 
    $temp[] = array('v' => (float) round($panelWhTotal, 2)); 
    $temp[] = array('v' => (float) round($loadWhTotal, 2)); 
    $temp[] = array('v' => (float) round(($panelWhTotal - $loadWhTotal), 2)); 
    } 

は、上記のPHPコードからの例をグラフ化: panel, load Watt-hours

答えて

0

を私はあなたを示唆私は理解ビューは道、より効率的である - ここで

は私のPHPコードだけではやっています次のような表。私はあなたが enter image description here

enter image description here

+0

そして、どのようにSQLでの訪問者の時間を計算するかを望んでいるようにグラフの何かをするために私を助けcolumns.It別々のデータと時間を持っていることを参照してください? I.あなたのカーブの下の領域で、ビジター時間にリソースがどれくらい使われましたか? – larvarunt

+0

私はこの配列で24時間の勤務時間を設定しました。 – liontass

+0

a = ["00:00"、 "01:00"、 "02:00"、 "03:00"、 "04:00"、 "05:00" 「06:00」、「07:00」、「08:00」、「09:00」、「10:00」、「11:00」、「12:00」、「13:00」、「14 「00:00」「15:00」「16:00」「17:00」「18:00」「 」「19:00」「20:00」「21:00」「22: 00 "、" 23:00 "]; – liontass

関連する問題