[Сценарий] Анализ периода от начала суток и построение индикатора

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

MaxVM
Сообщения: 69
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение MaxVM » Чт ноя 14, 2019 4:38 pm

fandaymon писал(а):
Чт ноя 14, 2019 4:34 pm
MaxVM писал(а):
Чт ноя 14, 2019 4:21 pm
fandaymon писал(а):
Чт ноя 14, 2019 4:16 pm
MaxVM писал(а):
Чт ноя 14, 2019 4:02 pm
JackOfShadows писал(а):
Чт ноя 14, 2019 10:49 am
MaxVM писал(а):
Чт ноя 14, 2019 9:08 am

Код: Выделить всё

SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID= AND ADDED >='1970-01-01 04:00:00'
check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AND ADDED >='1970-01-01 04:00:00'' at line 1

Просит проверить правильность синтаксиса возле 'AND ADDED >='1970-01-01 04:00:00''

Нет значения value_id. После $pvalue = $arr_s['ID']; проверяйте его на пустоту. Лучше даже наличие данных, возвращённых SQLSelectOne.
Не могу понять следующее. Если вставляешь этот скрипт с этими данными по все работает подсчет идет. Но как только вписываешь свои объекты все падает. Пытаюсь найти таблицу phistory чтоб понять как именно должно выглядеть свойство, тоже не нахожу.

У меня есть объект, сделанный через простые устройства, а именно датчик температуры с показом роста ее или падения.
espSensor_temp02.direction (В нам меняются значения 1, 0, -1)
В коде меняю
$obj_title = 'espSensor_temp02.direction'; //имя объекта (поменять на свой !!!!!!!!!!!!!!!!!)
И все падает. Не как не могу понять что ей нужно от меня
Вполне очевидно, что скрипт не находит такой объект, поэтому в переменной $pvalue пусто...
Сильно сомневаюсь что объект называется 'espSensor_temp02.direction', скорее всего он просто 'espSensor_temp02'
Если указываю только espSensor_temp02, то падает аналогичным образом

Код: Выделить всё

http://_/objects/?script=EconomModePeriod
1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AND ADDED>='2019-11-14 00:00:00'' at line 1
SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID= AND ADDED>='2019-11-14 00:00:00'
как сказать тогда что нужно данные из этого объекта брать? Или я не так понимаю?
Надо сначала убедиться что все названия правильные. Сделать сценарий в который вписать

Код: Выделить всё

$obj_title = 'espSensor_temp02';
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
print_r($arr_s);
если какие-то данные возвращает, то название правильное, если нет - то нет

Код: Выделить всё

Array ( [ID] => 318 [TITLE] => espSensor_temp02 [CLASS_ID] => 47 [DESCRIPTION] => Температура батареи (Вход) [LOCATION_ID] => 11 [KEEP_HISTORY] => 0 [SYSTEM] => sdevice10 )
Я так понимаю что возвращает
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение fandaymon » Чт ноя 14, 2019 4:52 pm

MaxVM писал(а):
Чт ноя 14, 2019 4:38 pm

Код: Выделить всё

Array ( [ID] => 318 [TITLE] => espSensor_temp02 [CLASS_ID] => 47 [DESCRIPTION] => Температура батареи (Вход) [LOCATION_ID] => 11 [KEEP_HISTORY] => 0 [SYSTEM] => sdevice10 )
Я так понимаю что возвращает
Дальше посмотреть возвращает ли id свойства - $prop_id

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];

$prop_title = 'direction';  
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND OBJECT_ID=".$obj_id);
$prop_id = $arr_s['ID'];

print_r($arr_s);
Если и то и то есть, тогда пытаться понять почему этого свойства нету в таблице pvalues


$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];
MaxVM
Сообщения: 69
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение MaxVM » Чт ноя 14, 2019 5:06 pm

Я так понимаю что тоже есть
Вложения
Снимок.PNG
Снимок.PNG (41.04 КБ) 3272 просмотра
MaxVM
Сообщения: 69
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение MaxVM » Чт ноя 14, 2019 5:07 pm

Но этот код вставляю

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];

$prop_title = 'direction';  
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND OBJECT_ID=".$obj_id);
$prop_id = $arr_s['ID'];

print_r($arr_s);
Пустой экран
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение fandaymon » Чт ноя 14, 2019 5:27 pm

MaxVM писал(а):
Чт ноя 14, 2019 5:07 pm
Но этот код вставляю

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];

$prop_title = 'direction';  
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND OBJECT_ID=".$obj_id);
$prop_id = $arr_s['ID'];

print_r($arr_s);
Пустой экран
Может быть свойство direction не правильно написано - скажем русская буква где-нибудь затесалась. Можно попробовать скопировать из вывода таблицы pvalues

Ну и посмотреть какие вообще есть свойства у данного объекта

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$arr_s = SQLSelect("SELECT * FROM properties WHERE OBJECT_ID=".$obj_id);

print_r($arr_s);
MaxVM
Сообщения: 69
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение MaxVM » Чт ноя 14, 2019 5:38 pm

Может быть свойство direction не правильно написано - скажем русская буква где-нибудь затесалась. Можно попробовать скопировать из вывода таблицы pvalues

100 раз проверил
Ну и посмотреть какие вообще есть свойства у данного объекта

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$arr_s = SQLSelect("SELECT * FROM properties WHERE OBJECT_ID=".$obj_id);

print_r($arr_s);
Отвечает - Array ( )
Странно другое, как мне кажется, что получаю Class ID-318, ID-47
Следующим этапом скрипт должен отобрать в таблице properties по ним и имени ID свойства, а именно "direction"
но смотрю таблицу, а там нет.

Может это значение у ПРОСТЫХ УСТРОЙСТВ в какую-то другую таблицу ложатся?
Вложения
Снимок.PNG
Снимок.PNG (101.74 КБ) 3267 просмотров
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение fandaymon » Чт ноя 14, 2019 5:53 pm

MaxVM писал(а):
Чт ноя 14, 2019 5:38 pm
Может быть свойство direction не правильно написано - скажем русская буква где-нибудь затесалась. Можно попробовать скопировать из вывода таблицы pvalues

100 раз проверил
Ну и посмотреть какие вообще есть свойства у данного объекта

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$arr_s = SQLSelect("SELECT * FROM properties WHERE OBJECT_ID=".$obj_id);

print_r($arr_s);
Отвечает - Array ( )
Странно другое, как мне кажется, что получаю Class ID-318, ID-47
Следующим этапом скрипт должен отобрать в таблице properties по ним и имени ID свойства, а именно "direction"
но смотрю таблицу, а там нет.

Может это значение у ПРОСТЫХ УСТРОЙСТВ в какую-то другую таблицу ложатся?
А что в таблице properties записано под id 503?
MaxVM
Сообщения: 69
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение MaxVM » Чт ноя 14, 2019 5:58 pm

fandaymon писал(а):
Чт ноя 14, 2019 5:53 pm
MaxVM писал(а):
Чт ноя 14, 2019 5:38 pm
Может быть свойство direction не правильно написано - скажем русская буква где-нибудь затесалась. Можно попробовать скопировать из вывода таблицы pvalues

100 раз проверил
Ну и посмотреть какие вообще есть свойства у данного объекта

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$arr_s = SQLSelect("SELECT * FROM properties WHERE OBJECT_ID=".$obj_id);

print_r($arr_s);
Отвечает - Array ( )
Странно другое, как мне кажется, что получаю Class ID-318, ID-47
Следующим этапом скрипт должен отобрать в таблице properties по ним и имени ID свойства, а именно "direction"
но смотрю таблицу, а там нет.

Может это значение у ПРОСТЫХ УСТРОЙСТВ в какую-то другую таблицу ложатся?
А что в таблице properties записано под id 503?
Вложения
Снимок.PNG
Снимок.PNG (2.22 КБ) 3262 просмотра
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение fandaymon » Чт ноя 14, 2019 6:09 pm

MaxVM писал(а):
Чт ноя 14, 2019 5:58 pm
fandaymon писал(а):
Чт ноя 14, 2019 5:53 pm
MaxVM писал(а):
Чт ноя 14, 2019 5:38 pm
Может быть свойство direction не правильно написано - скажем русская буква где-нибудь затесалась. Можно попробовать скопировать из вывода таблицы pvalues

100 раз проверил
Ну и посмотреть какие вообще есть свойства у данного объекта

Код: Выделить всё

$obj_title = 'espSensor_temp02'; 
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$arr_s = SQLSelect("SELECT * FROM properties WHERE OBJECT_ID=".$obj_id);

print_r($arr_s);
Отвечает - Array ( )
Странно другое, как мне кажется, что получаю Class ID-318, ID-47
Следующим этапом скрипт должен отобрать в таблице properties по ним и имени ID свойства, а именно "direction"
но смотрю таблицу, а там нет.

Может это значение у ПРОСТЫХ УСТРОЙСТВ в какую-то другую таблицу ложатся?
А что в таблице properties записано под id 503?
Т.е. класс с id 46, а не 47... Вручную класс у объекта менялся? А если вписать в таблице objects class id 46? По идее тогда первоначальный скрипт должен отрабатывать
За это сообщение автора fandaymon поблагодарил:
MaxVM (Чт ноя 14, 2019 7:31 pm)
Рейтинг: 1.16%
MaxVM
Сообщения: 69
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: [Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение MaxVM » Чт ноя 14, 2019 6:20 pm

Т.е. класс с id 46, а не 47... Вручную класс у объекта менялся? А если вписать в таблице objects class id 46? По идее тогда первоначальный скрипт должен отрабатывать
Да, т.к. DIRECTION задана на уровне класса, как я понял.
Видимо заработал код

Такое ощущение, что в синтаксисе проблема была. PHPStorm где проблема.

Значения заносятся и обновляются, выглядит как на скрине.

Только не как не могу увидеть там цифру 1 а не 0.
Подсчет пока не идет, но чувствую что МЫ близки.

Код: Выделить всё

$start_time=date("Y-m-d").' 00:00:00';
$tmr_start = strtotime($start_time);
$tmr_now = time();
$tmr_mem = 0;

$obj_title = 'espSensor_temp04';
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];

$prop_title = 'direction';
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."'");
$prop_id = $arr_s['ID'];

$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];

$arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID=".$pvalue." AND ADDED>='".date('Y-m-d H:i:s', $tmr_start)."'");

$arr_s = SQLSelect("SELECT * FROM phistory WHERE VALUE_ID=".$pvalue." ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID']));

$tmr2 = $tmr_now;

foreach($arr_s as $s) {
    $tmr1 = $tmr2;
    $tmr2 = strtotime($s['ADDED']);}

if ($tmr2<$tmr_start) { $tmr2=$tmr_start; }

if ($s['VALUE']) { $tmr_mem = $tmr_mem + $tmr1 - $tmr2; }

$period = round( $tmr_mem * 100 / ($tmr_now - $tmr_start) );

setGlobal("espSensor_temp02.periodten",$period);
Вложения
2.PNG
А в истории directionten одни 0000
2.PNG (6.87 КБ) 3261 просмотр
1.png
Много раз значение сменилось в direction
1.png (49.43 КБ) 3261 просмотр
Ответить