Сохранение времени событий

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

AndreyD
Сообщения: 25
Зарегистрирован: Ср фев 20, 2019 7:16 am
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Сохранение времени событий

Сообщение AndreyD » Ср янв 29, 2020 8:59 pm

Подскажите, где почитать или в какую сторону смотреть. Может отдельный модуль есть. Нужно сохранять время какого-нибудь события для отдельного устройства, например, когда срабатывал датчик движения. Чтобы можно было просматривать получившийся лог и "выдергивать" оттуда значения.
Cubieboard7 + WD Black WD5000LPLX, Debian GNU/Linux 9 (stretch)
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Сохранение времени событий

Сообщение Chainik » Ср янв 29, 2020 9:21 pm

AndreyD писал(а):
Ср янв 29, 2020 8:59 pm
Подскажите, где почитать или в какую сторону смотреть. Может отдельный модуль есть. Нужно сохранять время какого-нибудь события для отдельного устройства, например, когда срабатывал датчик движения. Чтобы можно было просматривать получившийся лог и "выдергивать" оттуда значения.
Можете в код, который запускается при срабатывании датчика движения записать, к примеру:

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

//запишем время срабатывания датчика в формате «HH:MM»
setGlobal('MotionSensor01.updatedTimeHHMM', gg('ThisComputer.timeNow'));
Для лога вам удобнее будет использовать время в формате timestamp. Тогда можете записать:

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

//запишем время срабатывания датчика в формате timestamp
setGlobal('MotionSensor01.updatedTime', time());
Естественно, чтобы получался лог и можно было "выдергивать", у Объект.Свойства со временем срабатывания необходимо включить историю.
За это сообщение автора Chainik поблагодарил:
AndreyD (Чт янв 30, 2020 6:17 am)
Рейтинг: 1.16%
AndreyD
Сообщения: 25
Зарегистрирован: Ср фев 20, 2019 7:16 am
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Сохранение времени событий

Сообщение AndreyD » Ср янв 29, 2020 9:32 pm

Chainik писал(а):
Ср янв 29, 2020 9:21 pm
Естественно, чтобы получался лог и можно было "выдергивать", у Объект.Свойства со временем срабатывания необходимо включить историю.
В истории будут храниться только значения при изменении Свойства или все с какой-то периодичностью? Если второе, то это какая-то избыточность.
Cubieboard7 + WD Black WD5000LPLX, Debian GNU/Linux 9 (stretch)
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Сохранение времени событий

Сообщение Chainik » Ср янв 29, 2020 10:24 pm

AndreyD писал(а):
Ср янв 29, 2020 9:32 pm
В истории будут храниться только значения при изменении Свойства или все с какой-то периодичностью? Если второе, то это какая-то избыточность.
А это как вы организуете. В случает, допустим, с температурными датчиками можно поступать и так и так (как удобнее пользователю).
Но у вас же датчик движения. Тут каждое срабатывание по сути новое значимое событие. Соответственно, у него свое время.
Но можете сочинить и какой-нибудь алгоритм касательно правил записи новых значений. Например, если последняя запись события о срабатывании датчика движения была менее 20 минут назад, новое время срабатывания не пишем.
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: Сохранение времени событий

Сообщение fandaymon » Чт янв 30, 2020 2:26 am

Chainik писал(а):
Ср янв 29, 2020 9:21 pm
AndreyD писал(а):
Ср янв 29, 2020 8:59 pm
Подскажите, где почитать или в какую сторону смотреть. Может отдельный модуль есть. Нужно сохранять время какого-нибудь события для отдельного устройства, например, когда срабатывал датчик движения. Чтобы можно было просматривать получившийся лог и "выдергивать" оттуда значения.
Можете в код, который запускается при срабатывании датчика движения записать, к примеру:

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

//запишем время срабатывания датчика в формате «HH:MM»
setGlobal('MotionSensor01.updatedTimeHHMM', gg('ThisComputer.timeNow'));
Для лога вам удобнее будет использовать время в формате timestamp. Тогда можете записать:

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

//запишем время срабатывания датчика в формате timestamp
setGlobal('MotionSensor01.updatedTime', time());
Естественно, чтобы получался лог и можно было "выдергивать", у Объект.Свойства со временем срабатывания необходимо включить историю.
Я может быть скажу какую-нибудь глупость, но датчик движения и так хранит историю своего срабатывания, без лишних телодвижений. Если зайти в историю свойства status, то там видны единички в моменты, когда датчик движения срабатывал
move.jpg
move.jpg (82.37 КБ) 3875 просмотров
За это сообщение автора fandaymon поблагодарил:
AndreyD (Чт янв 30, 2020 6:17 am)
Рейтинг: 1.16%
AndreyD
Сообщения: 25
Зарегистрирован: Ср фев 20, 2019 7:16 am
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Сохранение времени событий

Сообщение AndreyD » Чт янв 30, 2020 6:13 am

Я так понимаю речь о Простых устройствах, в них я ещё не разбирался, пока делал только через создание своих объектов.

У меня стоит самодельный датчик наличия напряжения в сети, а сама система на ИБП. Вот хочу логировать, когда внешнее питание отключалось, а когда включалось.

Да и сдатчиками движения тоже понадобиться.

То есть лучше ничего самому не городить, а идти через Простые устройства?
Cubieboard7 + WD Black WD5000LPLX, Debian GNU/Linux 9 (stretch)
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 317 раз
Поблагодарили: 466 раз

Re: Сохранение времени событий

Сообщение Logrus » Чт янв 30, 2020 6:32 am

к примеру у меня история в ПУ у статуса и валуе отключена, а некоторые вещи логируются через дебмеш в свои файлы или у части пишутся в ивенты, а еще появился logAction.
вариантов множество - зависят от конкретной задачи.
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
AndreyD
Сообщения: 25
Зарегистрирован: Ср фев 20, 2019 7:16 am
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Сохранение времени событий

Сообщение AndreyD » Чт янв 30, 2020 4:50 pm

Logrus писал(а):
Чт янв 30, 2020 6:32 am
к примеру у меня история в ПУ у статуса и валуе отключена, а некоторые вещи логируются через дебмеш в свои файлы или у части пишутся в ивенты, а еще появился logAction.
вариантов множество - зависят от конкретной задачи.
logAction это модуль? Что-то не могу его найти.

Обновил систему, нашёл. )
Cubieboard7 + WD Black WD5000LPLX, Debian GNU/Linux 9 (stretch)
AndreyD
Сообщения: 25
Зарегистрирован: Ср фев 20, 2019 7:16 am
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Сохранение времени событий

Сообщение AndreyD » Чт янв 30, 2020 7:13 pm

Chainik писал(а):
Ср янв 29, 2020 9:21 pm

Можете в код, который запускается при срабатывании датчика движения записать, к примеру:

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

//запишем время срабатывания датчика в формате «HH:MM»
setGlobal('MotionSensor01.updatedTimeHHMM', gg('ThisComputer.timeNow'));
Для лога вам удобнее будет использовать время в формате timestamp. Тогда можете записать:

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

//запишем время срабатывания датчика в формате timestamp
setGlobal('MotionSensor01.updatedTime', time());
Естественно, чтобы получался лог и можно было "выдергивать", у Объект.Свойства со временем срабатывания необходимо включить историю.
А не проще не создавать Свойство со временем срабатывания, а включить историю на Свойство самого значения, там же есть дата и время? А в дальнейшем использовать функции "Работа с историей"?
Cubieboard7 + WD Black WD5000LPLX, Debian GNU/Linux 9 (stretch)
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

Re: Сохранение времени событий

Сообщение Chainik » Чт янв 30, 2020 7:42 pm

AndreyD писал(а):
Чт янв 30, 2020 7:13 pm
...
А не проще не создавать Свойство со временем срабатывания, а включить историю на Свойство самого значения, там же есть дата и время? А в дальнейшем использовать функции "Работа с историей"?
Все зависит от формулировки задачи. Если нужно последнее значение, проще создать свойство. Если надо как-то обрабатывать несколько значений (например, находить среднее значение датчиков), то тогда надо использовать функции работы с историей или делать функции по обработке запросов к БД.
Ответить