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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

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

Сообщение CheBuraw » Пт мар 02, 2018 9:06 pm

Задача:
Имеется кнопка звонка. Нажатия на кнопку пишутся в историю. требуется вывести на сцену блок с временем когда кто-то нажимал на кнопку в течении суток.
Мои потуги в этом направлении. Как обычно я пошел трудным путем. путь был нелегок, но в итоге имею запрос для базы который выводит дату и время когда значение моей кнопки было 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"}]} 
Ну и в третий раз озвучу свой вопрос:
Каким образом это потом вывести на сцену? Меня интересует именно строчный вариант у не график.
Вероятнее всего я опять нагородил тут лишнего огорода и есть вариант решения куда проще. Буду очень признателен за помошь.
За это сообщение автора CheBuraw поблагодарил:
Maks21 (Ср май 30, 2018 11:02 am)
Рейтинг: 1.16%
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

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

Сообщение Vovix » Пт мар 02, 2018 11:04 pm

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 оформления разного - заключить в таблицу, применить цвета т.д.
За это сообщение автора Vovix поблагодарили (всего 2):
CheBuraw (Пн апр 02, 2018 4:44 pm) • C_3AXAPOB (Чт июн 07, 2018 11:14 am)
Рейтинг: 2.33%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

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

Сообщение CheBuraw » Пн апр 02, 2018 5:11 pm

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");
Jilber
Сообщения: 717
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 117 раз
Поблагодарили: 113 раз

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

Сообщение Jilber » Пн апр 02, 2018 10:41 pm

CheBuraw писал(а):
Пт мар 02, 2018 9:06 pm
Имеется кнопка звонка. Нажатия на кнопку пишутся в историю.
Интересует к какому устройству и как именно подключена кнопка. Появилось желание тоже подключить звонок. Спасибо.
Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

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

Сообщение CheBuraw » Ср апр 04, 2018 12:06 pm

Кнопка, среди прочих датчиков подключена к ESP8266. Прошивка от https://wifi-iot.com. Опция Работа с прерываниями, режим Active send.
На плате с ESP вход кнопки и PIR-датчиков организовал через оптроны, для подавления помех. Работает стабильно, ложных срабатываний не было при расстоянии от кнопки до ESP порядка 15 метров. Там же прикручена логика через опцию Logic2, чтобы при нуле на входе кнопки на секунду включался GPIO на который подключен звонок и чтобы ночью звонок не срабатывал.
При таком способе получается что в MajorDoMo передается информация о факте нажатия звонка, а вот срабатывание звонка возложено целиком на ESP. По мне так удобнее, чтобы простая логика отрабатывалась без участия сервера.
Jilber
Сообщения: 717
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 117 раз
Поблагодарили: 113 раз

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

Сообщение Jilber » Ср апр 04, 2018 1:01 pm

Я правильно понял ? Номинал резистора 10k ? Пробовал так раньше, но у меня почему-то не заработало.
СпойлерПоказать
Pushbutton to GND.png
Pushbutton to GND.png (32.49 КБ) 5811 просмотров
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 816 раз

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

Сообщение tarasfrompir » Ср апр 04, 2018 1:23 pm

Поменяй плюс с минусом о тогда будет правильней срабатывать. Ато 1 будет как выкл - некошерно как-то...
Да и постоянно на входе + - не хорошо...
Спасибо нам ПОМОЖЕТ..!
Jilber
Сообщения: 717
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 117 раз
Поблагодарили: 113 раз

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

Сообщение Jilber » Ср апр 04, 2018 1:29 pm

СпойлерПоказать
Pushbutton to 5V.png
Pushbutton to 5V.png (33.1 КБ) 5798 просмотров
Я правильно понимаю, что таким образом вместо кнопки можно подключить и геркон, например счётчик воды ?
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 816 раз

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

Сообщение tarasfrompir » Ср апр 04, 2018 1:45 pm

Ну да можна подключать все что только переключается ( изменяет состояние)....
Только геркон лучше перепустить через сам резюк последовательно... как в варианте 1
ПС Не обращай внимание на все что написал - надо начинать из геркона -какой его рабочий ток. а потом уже все это дело химичить...
Спасибо нам ПОМОЖЕТ..!
Jilber
Сообщения: 717
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 117 раз
Поблагодарили: 113 раз

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

Сообщение Jilber » Ср апр 04, 2018 8:27 pm

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