Неправильно рисуется график от Ivan
Модератор: immortal
Неправильно рисуется график от Ivan
Ivan,
Обращаюсь к Вам за помощью.
Попытка вывести график изменения свойства объекта примерно так
/s2/grapsh.php?p=Launge_temp.Value
Приводит к тому, что все изменения датируются началом декабря, хотя изменения происходили вчера и сегодня
При этом в истории изменения датчика все в порядке:
Что не так?
Обращаюсь к Вам за помощью.
Попытка вывести график изменения свойства объекта примерно так
/s2/grapsh.php?p=Launge_temp.Value
Приводит к тому, что все изменения датируются началом декабря, хотя изменения происходили вчера и сегодня
При этом в истории изменения датчика все в порядке:
Что не так?
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Неправильно рисуется график от Ivan
О каком коде Ivan идет речь, я с этими графиками много возился, может что подскажу.Sermus писал(а): Что не так?
Re: Неправильно рисуется график от Ivan
Код взял вот из этого поста http://smartliving.ru/forum/viewtopic.p ... t=10#p7932
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Неправильно рисуется график от Ivan
А, ну это практически первоначальный код, кажись там проблема в самом index.php из папки pChart, когда-то я долго с этим боролся, и в итоге заменил старым файлом, на котором у меня все работало, еще когда я только притянул эти графики на этот форум. Надо смотреть что там добавилось и как поменялось, могу выложить свой код, с которым у меня все правильно строится.Sermus писал(а):Код взял вот из этого поста http://smartliving.ru/forum/viewtopic.p ... t=10#p7932
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Неправильно рисуется график от Ivan
У меня highcharts работает с таким кодом:
Код: Выделить всё
<?php
chdir('../');
set_time_limit(0);
/*
Example1 : A simple line chart
*/
include_once("./config.php");
include_once("./lib/loader.php");
include_once(DIR_MODULES."application.class.php");
$db=new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME); // connecting to database
include_once("./load_settings.php");
// Standard inclusions
include("./pChart/pData.class");
include("./pChart/pChart.class");
if (!$width) {
$w=610;
} else {
$w=(int)$width;
}
// Dataset definition
$DataSet = new pData;
if ($p!='') {
if (preg_match('/(.+)\.(.+)/is', $p, $m)) {
$obj=getObject($m[1]);
$prop_id=$obj->getPropertyByName($m[2], $obj->class_id, $obj->id);
}
}
//$type='';
$pvalue=SQLSelectOne("SELECT * FROM pvalues WHERE PROPERTY_ID='".$prop_id."' AND OBJECT_ID='".$obj->id."'");
if (!$pvalue['ID']) {
echo "Incorrect property name";
exit;
}
if ($_GET['op']=='value') {
echo $pvalue['VALUE'];exit;
}
$end_time=time();
if ($_GET['px']) {
$px_per_point=(int)$_GET['px'];
} else {
$px_per_point=6;
}
if (preg_match('/(\d+)d/', $type, $m)) {
$total=(int)$m[1];
$period=round(($total*24*60*60)/(($w-80)/$px_per_point)); // seconds
$start_time=$end_time-$total*24*60*60;
} elseif (preg_match('/(\d+)h/', $type, $m)) {
$total=(int)$m[1];
$period=round(($total*60*60)/(($w-80)/$px_per_point)); // seconds
$start_time=$end_time-$total*60*60;
} elseif (preg_match('/(\d+)m/', $type, $m)) {
$total=(int)$m[1];
$period=round(($total*31*24*60*60)/(($w-80)/$px_per_point)); // seconds
$start_time=$end_time-$total*31*24*60*60;
} elseif (preg_match('/(\d+)\/(\d+)\/(\d+)/', $_GET['start'], $m) && $_GET['interval']) {
$period=(int)$_GET['interval']; //seconds
$start_time=mktime(0, 0, 0, $m[2], $m[3], $m[1]);
$total=1;
}
if ($total>0) {
$px=0;
$px_passed=0;
$dt=date('Y-m-d', $start_time);
/*
$total=count($history);
$itm=0;
for($i=0;$i<$total;$i++) {
$unx=$history[$i]['UNX'];
if ($unx>=$start_time || $i==0) {
$values[$itm]=(float)$history[$i]['VALUE'];
$itm++;
$start_time+=$period;
if ($px_passed>30) {
if (date('Y-m-d', $unx)!=$dt) {
$hours[]=date('d/m', $unx);
$dt=date('Y-m-d', $unx);
} else {
$hours[]=date('H:i', $unx);
}
$px_passed=0;
} else {
$hours[]='';
}
$px+=$px_per_point;
$px_passed+=$px_per_point;
}
}
*/
$history=SQLSelect("SELECT ID, VALUE, UNIX_TIMESTAMP(ADDED) as UNX FROM phistory WHERE VALUE_ID='".$pvalue['ID']."' AND ADDED>=('".date('Y-m-d H:i:s', $start_time)."') AND ADDED<=('".date('Y-m-d H:i:s', $end_time)."') ORDER BY ADDED");
$total_values=count($history);
/*
if ($_GET['op']=='timed') {
//header("Content-type: text/json");
$tret = array();
$t_times = array();
$t_values = array();
for($i=0;$i<$total_values;$i++) {
$t_times[]=$history[$i]['UNX'];
$t_values[]=$history[$i]['VALUE'];
}
$ret['TIMES']=$t_times;
$ret['VALUES']=$t_values;
echo json_encode($ret);
exit;
}
$next_index=0;
$temp_array=array($history[0]['VALUE']);
$approx='avg';
if ($_GET['approx']) {
$approx=$_GET['approx'];
}
*/
while($start_time<$end_time) {
if ($next_index<$total_values) {
for($i=$next_index;$i<$total_values;$i++) {
$next_index=$i;
if ($history[$i]['UNX']>=$start_time) {
$value=$history[$i]['VALUE'];
/* $temp_array=array($history[$i]['VALUE']);*/
break;
}
/* } else {
$temp_array[]=$history[$i]['VALUE'];
}*/
}
} else {
// last known value
$value=$history[$total_values-1]['VALUE'];
}
$values[]=$value;
if ($px_passed>30) {
if (date('Y-m-d', $start_time)!=$dt) {
$hours[]=date('d/m', $start_time);
$dt=date('Y-m-d', $start_time);
} else {
$hours[]=date('H:i', $start_time);
}
$px_passed=0;
} else {
$hours[]='';
}
$start_time+=$period;
$px+=$px_per_point;
$px_passed+=$px_per_point;
}
if ($_GET['fil01']) {
$fil01=$_GET['fil01'];
} else {
$fil01=0;
}
if($fil01!=0){
$all = count($values);
for($z=0; $z<$fil01; $z++){
for($i=0; $i<$all-1; $i++){
if ($values[$i]!=0 && $values[$i+1]!=0) {
$values[$i]=($values[$i]+$values[$i+1])/2;
}
}
for($i=$all-1; $i>=0; $i--){
if ($values[$i]!=0 && $values[$i-1]!=0) {
$values[$i]=($values[$i]+$values[$i-1])/2;
}
}
}
}
$DataSet->AddPoint($values,"Serie1");
$DataSet->AddPoint($hours,"Serie3");
} else {
$DataSet->AddPoint(0,"Serie1");
$DataSet->AddPoint(0,"Serie3");
}
if ($_GET['op']=='values') {
echo json_encode($values);
exit;
}
if ($_GET['op']=='json') {
//header("Content-type: text/json");
$ret = array();
$ret['VALUES']=$values;
$ret['TIME']=$hours;
echo json_encode($ret);
exit;
}
$DataSet->AddAllSeries();
$DataSet->RemoveSerie("Serie3");
$DataSet->SetAbsciseLabelSerie("Serie3");
$DataSet->SetSerieName("24 hours","Serie1");
//$DataSet->SetYAxisName($p);
if ($unit) {
$DataSet->SetYAxisUnit($unit);
} else {
$DataSet->SetYAxisUnit("°C");
}
$DataSet->SetXAxisUnit("");
// Initialise the graph
if (!$height) {
$h=210;
} else {
$h=(int)$height;
}
$Test = new pChart($w,$h);
if ($_GET['gcolor']=='red') {
$Test->setColorPalette(0,220,50,50);
} elseif ($_GET['gcolor']=='brown') {
$Test->setColorPalette(0,220,140,100);
} elseif ($_GET['gcolor']=='black') {
$Test->setColorPalette(0,0,0,0);
} elseif ($_GET['gcolor']=='blue') {
$Test->setColorPalette(0,50,50,250);
} elseif ($_GET['gcolor']=='green') {
$Test->setColorPalette(0,50,250,50);
} elseif ($_GET['gcolor']=='orange') {
$Test->setColorPalette(0,220,190,50);
} else {
if (SETTINGS_THEME=='light' || $_GET['bg']=='light') {
$Test->setColorPalette(0,150,150,150);
} else {
$Test->setColorPalette(0,255,255,255);
}
}
if (SETTINGS_THEME=='light' || $_GET['bg']=='light') {
//$Test->drawGraphAreaGradient(132,153,172,50,TARGET_BACKGROUND);
} else {
$Test->drawGraphAreaGradient(132,153,172,50,TARGET_BACKGROUND);
}
$Test->setFontProperties("./pChart/Fonts/tahoma.ttf",10);
if (SETTINGS_THEME=='light' || $_GET['bg']=='light') {
if ($_GET['title']) {
$Test->drawTitle(60,15,$_GET['title'],55,55,55);
} else {
$Test->drawTitle(60,15,$p,55,55,55);
}
} else {
if ($_GET['title']) {
$Test->drawTitle(60,15,$_GET['title'],250,250,250);
} else {
$Test->drawTitle(60,15,$p,250,250,250);
}
}
if ($_GET['scale']=='zero') {
$scale=SCALE_START0;
} else {
$scale=SCALE_NORMAL;
}
$Test->setFontProperties("./pChart/Fonts/tahoma.ttf",8);
$Test->setGraphArea(60,20,$w-25,$h-30);
if (SETTINGS_THEME=='light' || $_GET['bg']=='light') {
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),$scale,100,100,100,TRUE,0,2);
$Test->drawGraphAreaGradient(240,240,240,5);
$Test->drawGrid(1,TRUE,230,230,230,10);
if ($_GET['scale']=='zero') {
$Test->drawTreshold(0,100,100,100,FALSE,FALSE);
}
} else {
$Test->drawGraphArea(213,217,221,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),$scale,213,217,221,TRUE,0,2);
$Test->drawGraphAreaGradient(162,183,202,50);
$Test->drawGrid(1,TRUE,230,230,230,10);
if ($_GET['scale']=='zero') {
$Test->drawTreshold(0,230,230,230,FALSE,FALSE);
}
}
//$Test->setShadowProperties(3,3,0,0,0,30,4);
// Draw the line chart
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),2);
if ($_GET['gtype']=='curve') {
$Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),.1,30, FALSE);
} elseif ($_GET['gtype']=='bar') {
$Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);
} else {
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawFilledLineGraph($DataSet->GetData(),$DataSet->GetDataDescription(), 30);
}
//
// Render the picture
if (SETTINGS_THEME=='light' || $_GET['bg']=='light') {
$Test->AddBorder(1, 200,200,200);
} else {
$Test->AddBorder(1);
}
$path_to_file='./cached/'.md5($_SERVER['REQUEST_URI']).'.png';
imagepng($Test->Picture, $path_to_file);
Header("Content-type:image/png");
$fsize=filesize($path_to_file);
header("Content-Length:".(string)$fsize);
$buff_length=200*1024;
if ($buff_length>$fsize) {
$buff_length=$fsize;
}
if ($buff_length>0) {
$fd=fopen($path_to_file,'rb');
if ($fd) {
while(!feof($fd)) {
print fread($fd, $buff_length);
}
fclose($fd);
}
}
//$Test->Render();
$db->Disconnect(); // closing database connection
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Неправильно рисуется график от Ivan
Не вдавался в подробности но пример Urbas81 сильно отличается от того что был в примерах.
У меня все выводит правильно.
Я тот скрипт не писал, взял из примера, заменил строку с указанием объекта
Если найдёте ошибку выложите правильный вариант, заодно попросим SergeJey исправить пример
У меня все выводит правильно.
Я тот скрипт не писал, взял из примера, заменил строку с указанием объекта
Если найдёте ошибку выложите правильный вариант, заодно попросим SergeJey исправить пример
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Неправильно рисуется график от Ivan
Ivan писал(а):Не вдавался в подробности но пример Urbas81 сильно отличается от того что был в примерах.
У меня все выводит правильно.
Я тот скрипт не писал, взял из примера, заменил строку с указанием объекта
Если найдёте ошибку выложите правильный вариант, заодно попросим SergeJey исправить пример
Тот код, что я выложил, его надо скопировать и создать файл index.php и положить его в папку pChart, предыдущий index.php пока переместить в другую папку. Именно через этот файл higcharts получает данные для построения графика, у себя проверил, все строится по примеру со стикерами, хотя и не удивительно, там в файле отличи только в том, что передается имя переменной, по которой нужно строить график, раньше имя забивалось жестко.
-
- Сообщения: 289
- Зарегистрирован: Вс сен 16, 2012 9:39 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Неправильно рисуется график от Ivan
Странно, специально создал у себя последний вариант s2, все работает. Надо посмотреть изначально higcharts работает, как он есть по умолчанию, прописав туда нужную температуру, добиться работы, а потом связывать с s2, т.к файл в s2 аналогичен файлу higcharts, за исключением того, что в s2 передается имя переменной. При клике на пиктограмме, передается правильная переменная?Sermus писал(а):С этим кодом на график вообще ничего не выводится.