Страница 1 из 2

Время срабатывания датчика в виде списка.

Добавлено: Пт мар 02, 2018 9:06 pm
CheBuraw
Задача:
Имеется кнопка звонка. Нажатия на кнопку пишутся в историю. требуется вывести на сцену блок с временем когда кто-то нажимал на кнопку в течении суток.
Мои потуги в этом направлении. Как обычно я пошел трудным путем. путь был нелегок, но в итоге имею запрос для базы который выводит дату и время когда значение моей кнопки было 1. Этот запрос я оформил в сценарий SQL2PHP. Получился такой код:

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

   $result = SQLSelect("SELECT * FROM `phistory` WHERE `VALUE_ID` = 670 AND `ADDED` >= '2018-01-01' AND `VALUE` LIKE '1' ORDER BY `ADDED` DESC");
foreach ($result as $result)
  {
echo $result['ADDED'].' '.$result['VALUE'].'<br>';
  } 
Да, я знаю что в запросе временной диапазон с начала года и далее. в данный момент не это важно, это я знаю как поправить :) . При переходе по ссылке /objects/?script=SQL2PHP получается следующее:
СпойлерПоказать
2018-02-27 15:41:09 1
2018-02-27 15:33:45 1
2018-02-25 17:06:08 1
2018-02-25 14:20:10 1
2018-02-23 16:46:08 1
2018-02-23 14:43:56 1
2018-02-22 21:26:08 1
2018-02-22 19:10:39 1
2018-02-10 16:26:46 1
2018-02-10 13:30:33 1
2018-02-04 15:18:34 1
2018-02-04 10:33:44 1
2018-02-03 19:08:28 1
2018-02-03 16:33:37 1
Вопрос в том как это отобразить в виде блока на сцене?

Думал вот оно озарение, но потом понял что не все так просто. Понимающие люди уже заметили что я много раз записал в переменную значения и там осталось только последнее.

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

foreach ($result as $result)
  {
sg("ThisComputer.Zvonok",$result['ADDED'].' '.$result['VALUE'].'<br>');
  } 
Скажите, можно ли как-то записать в переменную сразу все результаты? и как потом это показать на сцене?
порывшсь на форуме и в базе знаний наткнулся на HTTP-ссылки для работы с MajorDoMo. Там увидел более элегантное решение извлечение истории /api/history/switch1.status/3days , но к прежней проблеме добавилась ещё одна как преобразовать формат в удобочитаемый? Я так понимаю, что это массив, но как его перевести в строчный вид формата как выше под спойлером?

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

{"result":[{"VALUE":"0","ADDED":"2018-02-28 08:03:02"},{"VALUE":"1","ADDED":"2018-02-28 10:28:26"},{"VALUE":"1","ADDED":"2018-02-28 10:28:26"},{"VALUE":"0","ADDED":"2018-02-28 14:13:02"},{"VALUE":"1","ADDED":"2018-02-28 14:13:05"},{"VALUE":"0","ADDED":"2018-02-28 14:13:07"},{"VALUE":"0","ADDED":"2018-03-02 08:00:01"}]} 
Ну и в третий раз озвучу свой вопрос:
Каким образом это потом вывести на сцену? Меня интересует именно строчный вариант у не график.
Вероятнее всего я опять нагородил тут лишнего огорода и есть вариант решения куда проще. Буду очень признателен за помошь.

Re: Время срабатывания датчика в виде списка.

Добавлено: Пт мар 02, 2018 11:04 pm
Vovix
CheBuraw писал(а):Задача:
Имеется кнопка звонка. Нажатия на кнопку пишутся в историю. требуется вывести на сцену блок с временем когда кто-то нажимал на кнопку в течении суток.
Мои потуги в этом направлении. Как обыч
....
[съедено]
....
Вероятнее всего я опять нагородил тут лишнего огорода и есть вариант решения куда проще. Буду очень признателен за помошь.
если сразу не думая то просто из первого вашего кода - пишите все в объект.свойство

тогда код будет:

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

$reztab = '';
$result = SQLSelect("SELECT * FROM `phistory` WHERE `VALUE_ID` = 670 AND `ADDED` >= '2018-01-01' AND `VALUE` LIKE '1' ORDER BY `ADDED` DESC");
foreach ($result as $result)  {
    $reztab = $reztab.''.$result['ADDED'].' '.$result['VALUE'].'<br>';
}
sg ("ThisComputer.Zvonok", $reztab); 
после этого в том месте HTML страницы (сцена, или домашняя страница)
вы ставите %ThisComputer.Zvonok% и в этом месте получите эту табличку!


UPD
кстати это:

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

$reztab = $reztab.''.$result['ADDED'].' '.$result['VALUE'].'<br>'; 
можно записать еще так:

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

$reztab .= $result['ADDED'].' '.$result['VALUE'].'<br>'; 
А еще конечно можно добавить HTML оформления разного - заключить в таблицу, применить цвета т.д.

Re: Время срабатывания датчика в виде списка.

Добавлено: Пн апр 02, 2018 5:11 pm
CheBuraw
Vovix, да Вы просто волшебник!! Был почему-то уверен что Ваша конструкция так же будет перезаписывать одно и тоже свойство, ан нет! Я и не подумал что можно предыдущий результат присоединять к новому!!
И ещё - оказалось, что моя городьба (как обычно) была совершенно излишне! Есть нормальные стандартные функции для получения информации из истории без явных запросов в SQL и не надо привлекать /api/history/switch1.status/3days и как-то потом обрабатывать. Тоже самое отлично реализуется другой встроеной функцией: getHistory($varname, $start_time, $stop_time).
Еще обнаружил функцию для обрезания строки string substr ( string string, int start [, int length] ). Ей оказалось удобно "отрезать" из получаемого значения 2018-01-01 12:12:12 только время.

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

// Указываем свойство куда складывается история срабатывания PIR ESP826600103a6a.inY
// выборка за последние скользящие сутки (-1 день)
$result = getHistory("ESP826600103a6a.inY", strtotime("-1 day"));
$i = 1; // переменная для нумерации строк
foreach ($result as $result)
  {
if ($result['VALUE']){
// обрезаем строку дата_время для отображения только времени (с 11 символа и далее)
 $reztab = $reztab.''.$i.' - '.substr($result['ADDED'],11).' '.$result['VALUE'].'<br>';
 $i ++;} 
  }
sg ("ThisComputer.Zvonok", $reztab); 
echo getGlobal("ThisComputer.Zvonok");

Re: Время срабатывания датчика в виде списка.

Добавлено: Пн апр 02, 2018 10:41 pm
Jilber
CheBuraw писал(а):
Пт мар 02, 2018 9:06 pm
Имеется кнопка звонка. Нажатия на кнопку пишутся в историю.
Интересует к какому устройству и как именно подключена кнопка. Появилось желание тоже подключить звонок. Спасибо.

Re: Время срабатывания датчика в виде списка.

Добавлено: Ср апр 04, 2018 12:06 pm
CheBuraw
Кнопка, среди прочих датчиков подключена к ESP8266. Прошивка от https://wifi-iot.com. Опция Работа с прерываниями, режим Active send.
На плате с ESP вход кнопки и PIR-датчиков организовал через оптроны, для подавления помех. Работает стабильно, ложных срабатываний не было при расстоянии от кнопки до ESP порядка 15 метров. Там же прикручена логика через опцию Logic2, чтобы при нуле на входе кнопки на секунду включался GPIO на который подключен звонок и чтобы ночью звонок не срабатывал.
При таком способе получается что в MajorDoMo передается информация о факте нажатия звонка, а вот срабатывание звонка возложено целиком на ESP. По мне так удобнее, чтобы простая логика отрабатывалась без участия сервера.

Re: Время срабатывания датчика в виде списка.

Добавлено: Ср апр 04, 2018 1:01 pm
Jilber
Я правильно понял ? Номинал резистора 10k ? Пробовал так раньше, но у меня почему-то не заработало.
СпойлерПоказать
Pushbutton to GND.png
Pushbutton to GND.png (32.49 КБ) 5802 просмотра

Re: Время срабатывания датчика в виде списка.

Добавлено: Ср апр 04, 2018 1:23 pm
tarasfrompir
Поменяй плюс с минусом о тогда будет правильней срабатывать. Ато 1 будет как выкл - некошерно как-то...
Да и постоянно на входе + - не хорошо...

Re: Время срабатывания датчика в виде списка.

Добавлено: Ср апр 04, 2018 1:29 pm
Jilber
СпойлерПоказать
Pushbutton to 5V.png
Pushbutton to 5V.png (33.1 КБ) 5789 просмотров
Я правильно понимаю, что таким образом вместо кнопки можно подключить и геркон, например счётчик воды ?

Re: Время срабатывания датчика в виде списка.

Добавлено: Ср апр 04, 2018 1:45 pm
tarasfrompir
Ну да можна подключать все что только переключается ( изменяет состояние)....
Только геркон лучше перепустить через сам резюк последовательно... как в варианте 1
ПС Не обращай внимание на все что написал - надо начинать из геркона -какой его рабочий ток. а потом уже все это дело химичить...

Re: Время срабатывания датчика в виде списка.

Добавлено: Ср апр 04, 2018 8:27 pm
Jilber
CheBuraw писал(а):
Ср апр 04, 2018 12:06 pm
Кнопка, среди прочих датчиков подключена к ESP8266. Прошивка от https://wifi-iot.com. Опция Работа с прерываниями, режим Active send.
У меня почему-то стабильно работает только при включённой опции "Key":
СпойлерПоказать
Key.jpg
Key.jpg (39.04 КБ) 5751 просмотр
Правда и выключатель при этом подключен по другому:
СпойлерПоказать
Выключатель.jpg
Выключатель.jpg (7.38 КБ) 5751 просмотр
А вообще хорошо бы создать тему с примерами подключения различных кнопок, герконов, датчиков и т.д., которые реально работают у пользователей. Знаю, что существует такая вещь как "Arduino Basic Connections", но видимо там всё не так неоднозначно.