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

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

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

Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

Re: стили для элементов сцен

Сообщение Jager » Вт ноя 22, 2016 12:34 pm

Vit писал(а):может кто из присутствующих может планы помещений в 3d почертить помочь, буду благодарен
Рисуется на раз-два вообще без навыков viewtopic.php?p=40523#p40523
dengi.76
Сообщения: 211
Зарегистрирован: Вт фев 06, 2018 9:40 pm
Откуда: Пермь
Благодарил (а): 110 раз
Поблагодарили: 7 раз

Re: Анализ периода от начала суток и построение индикатора

Сообщение dengi.76 » Пн сен 10, 2018 5:19 pm

mazahaka7sk писал(а):
Вт ноя 22, 2016 11:35 am
Сделал все как у вас имена обьектов не менял так как у меня такие же названия но почему то не работает ( что я сделал не так подскажите??
Я тоже сделал всё как описано ( имена свойств/объектов такие-же), но почему то не взлетело ( всегда "0" ). Что может быть не так ???
sega6549
Сообщения: 519
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 60 раз
Поблагодарили: 75 раз
Контактная информация:

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

Сообщение sega6549 » Чт дек 20, 2018 9:32 am

Сценарий работает, как я понял необходимо что бы сохранялась история свойства, проверял на других объектах, при попытке высчитать процент активности объектов простых устройств, например сколько процентов времени горит свет на кухне, сценарий вылетает с ошибкой
СпойлерПоказать

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

Error
Details
http://192.168.0.10/objects/?script=EconomModePeriod
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND ADDED>='2018-12-20 00:00:00'' at line 1
SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID= AND ADDED>='2018-12-20 00:00:00'
Backtrace
#0 /var/www/lib/mysqli.class.php(396): custom_error->__construct('1064: You have ...', 0)
#1 /var/www/lib/mysqli.class.php(185): mysql->Error('SELECT COUNT(ID...', 0)
#2 /var/www/lib/mysqli.class.php(230): mysql->Exec('SELECT COUNT(ID...')
#3 /var/www/lib/sqlFunctions.class.php(90): mysql->SelectOne('SELECT COUNT(ID...')
#4 /var/www/modules/scripts/scripts.class.php(150) : eval()'d code(39): SQLSelectOne('SELECT COUNT(ID...')
#5 /var/www/modules/scripts/scripts.class.php(150): eval()
#6 /var/www/lib/common.class.php(706): scripts->runScript('EconomModePerio...', Array)
#7 /var/www/objects/index.php(172): runScript('EconomModePerio...', Array)
#8 {main}
это связано с тем что простые устройства хранят базу в другом месте? или с чем то еще?
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Yashalta
Сообщения: 301
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 153 раза
Поблагодарили: 27 раз

Re: Анализ периода от начала суток и построение индикатора

Сообщение Yashalta » Ср мар 20, 2019 5:04 pm

Cкрипт работает, еще раз спасибо автору!
dengi.76 писал(а):
Пн сен 10, 2018 5:19 pm
mazahaka7sk писал(а):
Вт ноя 22, 2016 11:35 am
Сделал все как у вас имена обьектов не менял так как у меня такие же названия но почему то не работает ( что я сделал не так подскажите??
Я тоже сделал всё как описано ( имена свойств/объектов такие-же), но почему то не взлетело ( всегда "0" ). Что может быть не так ???
У меня он тоже долго "не работал" правда всегда писал "100%" пока после какого-то обновления Алиса не начала ни стого ни с сего говорить/писать
Режим EconomMode активирован.
Включаю режим экономии
Режим Никого нет дома активирован.
Режим EconomMode диактивирован.
и т.д.
и тут я заметил, что цифры начали меняться...
Хотя у меня нет датчиков движения и т.п. Я думаю началось у меня после того, как я привязал светодиодную ленту к простым устройствам а простые устройства связаны в Eco группу не все конечно но, то что касается света те, точно в группе.

Если вы все сделали по инструкции и "привязали" те же объекты и свойства и у вас пишет постоянно "0%" или как у меня "100%" то проверьте свойства
NobodyHomeMode.active
EconomMode.active

У меня было постоянно 100% т.к. свойства были все время "1"! Если у вас "0" то, значить эти свойства равняются "0".
MaxVM
Сообщения: 63
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 7 раз
Поблагодарили: 0

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

Сообщение MaxVM » Чт ноя 14, 2019 9:08 am

Подскажите пожалуйста

Ругается на синтаксис, я в этом-0, а надо очень!

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

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 >='1970-01-01 04:00:00'' at line 1
SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID= AND ADDED >='1970-01-01 04:00:00'

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

// Для начала нам нужно получить id нашего объекта и id класса которому принадлежит объект
$obj_title = 'espSensor_temp02.direction'; //имя объекта (поменять на свой !!!!!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];

/* Имена свойств находятся в таблице properties
   с указанием id класса если свойство заданно на уровне класса,
   или id объекта если свойство принадлежит объекту лично.
*/   
// Получим id свойства по его имени И (id класса ИЛИ id объекта)
$prop_title = 'direction';  //имя свойства (поменять на свое!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND (CLASS_ID='".$class_id."' OR OBJECT_ID='".$obj_id."')");
$prop_id = $arr_s['ID'];

// значения свойств находятся в таблице pvalues
// Нам нужен id. (уточнить необходимость сортировки по UPDATED)
$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];

/* Зная $pvalue можно слазать за данными истории в таблицу phistory
   Для нашей задачи нужно получить все записи по времени >= началу суток + 1 запись
*/   
// Получить количество записей за нужный период времени
$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)."'");
// Взять это количество записей +1
$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.Period",$period); //запись значения в свойство объекта (поменять на свое!!!!!!!!!!!!!!)  
Где ошибка? и есть ли она?

Спасибо!
JackOfShadows
Сообщения: 93
Зарегистрирован: Ср янв 09, 2019 8:37 pm
Благодарил (а): 23 раза
Поблагодарили: 24 раза

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

Сообщение 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.
MaxVM
Сообщения: 63
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 7 раз
Поблагодарили: 0

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

Сообщение 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'; //имя объекта (поменять на свой !!!!!!!!!!!!!!!!!)
И все падает. Не как не могу понять что ей нужно от меня
fandaymon
Сообщения: 1347
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 37 раз
Поблагодарили: 505 раз

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

Сообщение 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'
MaxVM
Сообщения: 63
Зарегистрирован: Вт янв 10, 2017 2:26 pm
Благодарил (а): 7 раз
Поблагодарили: 0

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

Сообщение 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'
как сказать тогда что нужно данные из этого объекта брать? Или я не так понимаю?
fandaymon
Сообщения: 1347
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 37 раз
Поблагодарили: 505 раз

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

Сообщение 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);
если какие-то данные возвращает, то название правильное, если нет - то нет
Ответить