Временные переменные

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

Модератор: immortal

Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Временные переменные

Сообщение Bagir » Пн дек 08, 2014 10:02 pm

При работе кода нужно где то временно сохранить нужные записи. Потом, при следующих запусках этого кода, или вообще другого кода, нужно их прочитать и стереть.
Другими словами, при выполнении кода нужно создать переменную с указанным именем, а потом получить ее значение, если она существует, и уничтожить (либо обнулить) ее.
Таких переменных мне требуется много и с разными уникальными именами. Думал припахать сюда registerEvent, и в детали писать свои значения. Но как потом прочитать эти детали? Я нашел только функцию registeredEventTime чтобы получить время. Есть ли способ получить детали, или придется за ними слазать в базу данных?
А может кроме Event есть еще кармашек?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Временные переменные

Сообщение Bagir » Пн дек 08, 2014 10:36 pm

Пока что выбрал вариант с registerEvent($eventName, $details='мои детали', $expire_in=1); Создаю событие сроком на 1 день. Для моей задачи этого достаточно. Пишу в него нужные данные, а потом мне потребуется получить эти данные по имени события. Для этого напишу функцию registeredEventDetails($eventName) по аналогии с registeredEventTime($eventName). И еще registeredEventErase($eventName)
Если я сбился с пути истинного и ушел в дебри дремучие, пожалуйста направьте на дорогу правильную )))
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Временные переменные

Сообщение sergejey » Пн дек 08, 2014 11:18 pm

На самом деле, работа с событиями как-то недописаной выглядит :) указанные функции будут вполне к месту и я внесу их в общую ветку, как только будут написаны.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Временные переменные

Сообщение Bagir » Пн дек 08, 2014 11:23 pm

Вот набросок для получения деталей. Работает, куда он денется. Вот только надо подумать, может сделать одну общую функцию, которая будет получать все одним массивом, а не только детали или время. Пока что для эксперимента с временными переменными я остановился на этом варианте.

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

// Получить детали события по его имени
function registeredEventDetails($eventName) {
 $even=SQLSelectOne("SELECT * FROM events WHERE EVENT_NAME='".$eventName."'"); 
 if (is_array ($even )) {
  return $even['DETAILS'];
 } else {
  return false;
 }
}
Сейчас проверю его в своей задаче. По ходу дела будет видно на сколько он удобен.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Временные переменные

Сообщение Bagir » Вт дек 09, 2014 3:03 am

Все вполне удобно. Из полезного у событий я нашел не так много данных, чтобы получать их массивом. Время уже есть, и не хватало разве что деталей. Так что registeredEventDetails($eventName) вполне достаточно. Если добавлять ее в штат, то может стоит разве что подумать над строчкой return false; Мне показалось так будет удобно. Главное , чтобы функция вела себя так же как и остальные. Я использовал SQLSelectOne() для подстраховки. Выборка идет по Имени. А оно не может повториться.
Еще пригодится функция удаления. Поменять в запросе SELECT на DELETE несложно, но SQLSelectOne() как бы тут не кстати. Как лучше?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Временные переменные

Сообщение xor » Пт сен 30, 2016 1:57 am

Ещё бы хорошо в комплект функций для Ивентов добавить проверялку времени существования.
Очень удобно

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

//возвращает EXPIRE как timestamp 
//ex: date('Y-m-d H:i:s',registeredEventExpire('myEvent'))
function registeredEventExpire($eventName){
 $even=SQLSelectOne("SELECT UNIX_TIMESTAMP(EXPIRE) t FROM events WHERE EVENT_NAME='".$eventName."'"); 
 if (is_array ($even )) {
  return $even['EXPIRE'];
 } else {
  return false;
 }
}

// Удалить событие по его имени
function registeredEventDelete($eventName) {
 $fn = SQLExec("DELETE FROM events WHERE EVENT_NAME='".$eventName."'"); 
 return $fn;
}
 
ЗЫ. Кто не знает, Expired задается в днях, соответственнно, если нужен интервал меньше, нужно указывать долю от суток.
10 минут --> 1/24/6=0,0069444444444444

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

registerEvent($eventName, $details='',0.0069);
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Временные переменные

Сообщение Vovix » Пт фев 16, 2018 11:31 am

sergejey писал(а):На самом деле, работа с событиями как-то недописаной выглядит :) указанные функции будут вполне к месту и я внесу их в общую ветку, как только будут написаны.
Сергей, наберусь наглости напомнить!
... и функции уже написаны выше, уважаемыми xor и Bagir

А именно:
к настоящему времени в системе есть функции (имеющие отношения к Event по имени) -
registerevent
registeredeventtime

subscribetoevent - не знаю(предполагаю тока) что делает!?
unsubscribefromevent - не знаю(предполагаю тока) что делает!?

И не хватает: registeredEventDetails, registeredEventExpire и registeredEventDelete
хотя возможно две имеющиеся, но не имеющие описания, в какой-то степени могут быть использованы
Последний раз редактировалось Vovix Пт фев 16, 2018 11:39 am, всего редактировалось 1 раз.
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Временные переменные

Сообщение nick7zmail » Пт фев 16, 2018 11:37 am

Vovix писал(а): subscribetoevent - не знаю(предполагаю тока) что делает!?
unsubscribefromevent - не знаю(предполагаю тока) что делает!?
хотя возможно две имеющиеся но имеющие описания в какой-то степени могут быть использованы
Эти функции работают только для модулей. Это подписка и отписка на разные ивэнты (HOURLY, SAY) модулей. В модуле в свою очередь есть функция (processSubscription вроде, или как то так), вызываемая при любых ивэнтах, и в неё передаётся имя ивэнта.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Временные переменные

Сообщение Vovix » Пт фев 16, 2018 11:51 am

nick7zmail писал(а):
Vovix писал(а): subscribetoevent - не знаю(предполагаю тока) что делает!?
unsubscribefromevent - не знаю(предполагаю тока) что делает!?
хотя возможно две имеющиеся но имеющие описания в какой-то степени могут быть использованы
Эти функции работают только для модулей. Это подписка и отписка на разные ивэнты (HOURLY, SAY) модулей. В модуле в свою очередь есть функция (processSubscription вроде, или как то так), вызываемая при любых ивэнтах, и в неё передаётся имя ивэнта.
Тем более наверно нужны эти (собрал их вместе, это не моё творчество):

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

/**
 * Комплект из трех функций работы с событиями Event
 * 
 * @param string $eventName имя события (Event'а)
 * @return 
 *     1) registeredEventDetails ($eventName)
 *         $even['DETAILS'] || Boolean: false
 *     2) registeredEventExpire ($eventName)
 *         $even['EXPIRE'] || Boolean: false
 *     3) registeredEventDelete($eventName)
 *         результат попытки удаления из таблицы бызы данных
 */

// Получить детали события по его имени
function registeredEventDetails($eventName) {
    $even=SQLSelectOne("SELECT * FROM events WHERE EVENT_NAME='".$eventName."'"); 
    if (is_array ($even )) {
        return $even['DETAILS'];
    } else {
        return false;
    }
}

//возвращает EXPIRE как timestamp 
//ex: date('Y-m-d H:i:s',registeredEventExpire('myEvent'))
function registeredEventExpire($eventName){
    $even=SQLSelectOne("SELECT UNIX_TIMESTAMP(EXPIRE) t FROM events WHERE EVENT_NAME='".$eventName."'"); 
    if (is_array ($even )) {
        return $even['EXPIRE'];
    } else {
        return false;
    }
}

// Удалить событие по его имени
function registeredEventDelete($eventName) {
    $fn = SQLExec("DELETE FROM events WHERE EVENT_NAME='".$eventName."'"); 
    return $fn;
}
За это сообщение автора Vovix поблагодарил:
odinvolk (Пт сен 15, 2023 8:42 am)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Временные переменные

Сообщение sergejey » Вс фев 18, 2018 9:31 am

Тут небольшая путаница возникает с событиями... Просто их два типа. Один тип, это системная шина событий, которая используюется модулями и ядром для инициализации каких-либо действий (функции subscribeToEvent, processSubscriptions и обработчики в модулях типа propertySetHandle). Второй тип событий никак не связан с первым и представляет собой универсальный приёмник и обработчик пользовательских событий. В админке это раздел События и указанные в предыдущем сообщении функции. В модуле событий, кстати, можно связать их поступление с каким-нибудь объектом, вывести в виде дерева, а для отправки событий можно использовать API вида:

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

/api/events/<PATH/TO/EVENT>?param1=value1&param2=value2 -- сохранения события с параметрами

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить