Простые устройства / Simple Devices описание методов

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

Модератор: immortal

Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

Простые устройства / Simple Devices описание методов

Сообщение tarasfrompir »

Положу здесь описание методов простых устройств...
Для затравки - смотрю люди мучаются .....
САМИ МЕТОДЫ ОПИСАНЫ ИЗ ФАЙЛОВ - ТО ЧТО У ВАС ДОПИСАНО В МАЖОРИКЕ НЕ ВКЛЮЧЕНО ЗДЕСЬ...!!!

МЕТОД SDevices_statusUpdated запускается при изменении значения свойства устройство.status
SPOILERSPOILER_SHOW
обновляет время последнего срабатывания устройство.updatedText
ДАТЧИК ДВИЖЕНИЯ
SPOILERSPOILER_SHOW
1. Ждем переменные от метода SDevices_statusUpdated.php, если еще не выполнен то ждем еще 3 секунды к его исполнению.
ЕСЛИ ОПЯТЬ НИЧЕГО НЕ ПОЛУЧИЛИ ТО заканчиваем метод.
2. Берет переменную NobodyHomeMode.active (определяет активировано ли НИКОГО НЕТ ДОМА)
3. Устанавливает таймер на 20 секунд.
4. Устанавливает значение на то что датчи активирован.
5. Запускает метод logicAction для текущего датчика.
6. Если активировано "Никого нет дома" (NobodyHomeMode.active) и включено игнорирование срабатывание датчика то ПРЕКРАЩАЕТ работу текущего метода.
7. Если НЕактивировано "Никого нет дома" (NobodyHomeMode.active) то запускает метод (NobodyHomeMode.deactivate) (ЛАЖОНУЛСЯ - устанавливает значение что КТО ТО ДОМА -изменяет) Этот метод нихрена пока что не делает.
8. И запускает таймер на 1 час для указания того что ктото ДОМА.
9. Указавает в связаной комнате (где установлен датчик движения) что КТО ТО в этой КОМНАТЕ. (Запускает мемод onActivity для связаной комнаты.)
Режим еко ---
SPOILERSPOILER_SHOW
1. При выключени режима ЕКО... Перебирает все устройства имеющие свойство - groupEcoOn и если оно (свойство имеет значение 1 )
то включает все устрйства
2. То же и при включении режима ЕКО - но с точностью до наооборот...
МЕТОД Rooms_onActivity.php -(тут нашел старую запись немного сумбурную)
SPOILERSPOILER_SHOW
1. обновляется состояние присутствия в комнате (комната.SomebodyHere - назначает 1)
2. этот же метод запускает updateActivityStatus.

А тот в свою очередь проверяет все комнаты на присутствие 1 в SomebodyHere. и сообщает (передает значение в титульную страницу ) есть ли кто здесь.

После этого метод updateActivityStatus ждет время заданое в IdleDelay (которого кстати нет в свойствах комнаты надо создать самому ну или ждет 10 минут которые прописаны жестко в коде - это срок задержки на перевод в состояние onIdle)
И переводит комнаты в состояние onIdle. И после опять сообщает что ктото в комнате (ах) уже был на титульной странице Мажордома.
метод ТЕМНОЕ ВРЕМЯ СУТОК (не ночной режим)
SPOILERSPOILER_SHOW
1. Активация этого режима - пока не дает ничего
2. А вот ДЕАктивация - выключает все устройства у которых указано - "выключать на рассвете"
НОЧНОЙ РЕЖИМ - пока ничего не делает...

Датчик открытия/закрытия
SPOILERSPOILER_SHOW
1. Обновляет время срабатывания датчика
2. запускает метод setUpdatedText
3. Выставляет значения на датчик что тот жив
4. Если присутсвует поле aliveTimeout (в часах) то берет из него данные и запускает
таймер на время в часах на указание того что датчик мертв.
ЕСЛИ же такого поля нет то время указывается для этого таймера 2 суток.
5. Если указано значение isActivity (обращать внимание на этот датчик при срабатывании в комнате)
и если активирован режим никого нет дома то запускется метод деактивации режима НИкого нет доМА
6. очищаются все таймеры на НИКОГО НЕТ ДОМА
7. и запускается таймер на 1 час для активации метода НИКОГО НЕТ ДОМА
8. Если датчик привязан к комнате то запускается метод активности в комнате
9. запускается метод logicAction для этого датчика
ПЕРЕМЕННЫЕ Свойства обьектов
Такая переменна ThisComputer.nobodyHome не используется - со слов Сергея
SPOILERSPOILER_SHOW
ThisComputer.nobodyHome -- такой переменной у меня нигде не используется и в поиске не могу найти. Есть NobodyHomeMobde.active -- это в отдельном объекте.
ThisComputer.somebodyHomeText - получает значение при запуске метода Rooms_updateActivityStatus
И указывает его в стандартной шапке страницы
SPOILERSPOILER_SHOW
1. Если активно Никого нет домА - то указывает что кто то был и в каких комнатах была активность.
2. Иначе Указывает что в определенных комнатах произошла активность.
%ThisComputer.somebodyHomeText%- получает значение от простых устройств...
SPOILERSPOILER_SHOW
Описание порядка получения присутствия того что кто то дома - пример датчик движения ОБЯЗАТЕЛЬНО ДОЛЖЕН БЫТЬ ПРИВЯЗАН К КОМНАТЕ

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

if ($linked_room) {
  callMethodSafe($linked_room.'.onActivity', array('sensor'=>$ot));
 }
 
Вот этот код из SMotions_motionDetected запускает метод комната.onActivity (тоесть это - Rooms_onActivity) (если датчик привязан к комнате)

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

if ($linked_room) {
  callMethodSafe($linked_room.'.onActivity', array('sensor'=>$ot));
 }
 

а тот в свою очередь запускает метод комната.Rooms_updateActivityStatus (тоесть это - Rooms_updateActivityStatus).

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

if (getGlobal('NobodyHomeMode.active')) {
    $somebodyHomeText = LANG_DEVICES_ROOMS_NOBODYHOME." ".LANG_DEVICES_ROOMS_ACTIVITY." " . date('H:i', $rooms[0]['time']) . " (" . $rooms[0]['room'] . ")";
} else {
    $res_rooms = array();
    for ($i = 0; $i < $total; $i++) {
        if ($rooms[$i]['active']) {
            $res_rooms[] = $rooms[$i]['room'];
        }
    }
    $somebodyHomeText = LANG_DEVICES_ROOMS_SOMEBODYHOME." ". LANG_DEVICES_ROOMS_ACTIVITY . " " . implode(", ", $res_rooms);
}

echo $somebodyHomeText;

setGlobal('somebodyHomeText', $somebodyHomeText);
 

А на основной странице отображается %ThisComputer.somebodyHomeText% состояние что кто то дома
..
от где то так...
Для простых устройств переменная устройство.status при активации ее в 1 запускает всю цепь событий простых устройств...
Последний раз редактировалось tarasfrompir Чт фев 01, 2018 5:26 pm, всего редактировалось 21 раз.
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: Простые устройства / Simple Devices описание методов

Сообщение Logrus »

в motionDetected не понял
if (!isset($params['statusUpdated'])) {
setTimeout($ot.'_motion_timer_status', '', 3);
}
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

Re: Простые устройства / Simple Devices описание методов

Сообщение tarasfrompir »

Моя догадка простая - если не получил параметр statusUpdated то подожди 3 секунды и продолжи ...
Я очень даже склоняюсь к этому
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: Простые устройства / Simple Devices описание методов

Сообщение Logrus »

за компом позже еще раз посмотрю
ночной мессаджлевел в методе, то запутать можно (можно самому уровень громкости повесить), да получается от названия темы далеко, но ...
наверное, нужно разобрать до комментариев подробных, да на гит
п.с. я в принципе этот путь уже прошел, но ...
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

Re: Простые устройства / Simple Devices описание методов

Сообщение tarasfrompir »

Кстати встречал данную конструкцию еще где то в простіх устройствах
ПС
И вообще вопрос стоит так нужно ли это все расписывать ???
ППс
Просто есть некоторые мысли по усовершенствованию этих действий ...
Стоит ли заниматся этим ?
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: Простые устройства / Simple Devices описание методов

Сообщение Logrus »

хз, это не ко мне (не компетентен)
и все-таки мне не понятно:
if (!isset($params['statusUpdated'])) { // SDevices_statusUpdated.php
setTimeout($ot.'_motion_timer_status', '', 3); // запустить таймер на 3 секунды, а что он сделает?
}
имхо, надо расписать, то там сложнее
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

Re: Простые устройства / Simple Devices описание методов

Сообщение tarasfrompir »

Ждет того что если метод SDevices_statusUpdated.php еще не выполнен то ждем еще 3 секунды к его исполнению.
ПС
В тексте подправил
ППС Но тут же и запутался к чему он этот метод -? если и в нем производятся половина таких же действий...
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Контактная информация:

Re: Простые устройства / Simple Devices описание методов

Сообщение Gelezako »

tarasfrompir1 писал(а): ПС
И вообще вопрос стоит так нужно ли это все расписывать ???
ППс
Просто есть некоторые мысли по усовершенствованию этих действий ...
Стоит ли заниматся этим ?
Нужно, нужно. Мне интересно, распиши свои мысли по усовершенствованию.
Ещё, просьба уточнять какое именно свойство апдейтиться "ThisComputer.somebodyHomeText" или "ThisComputer.HomeStatus". Потому что они очень похожи и очень часто противоречат. Это я про те случаи когда ты указывал вот такое объяснение "устанавливает значение что КТО ТО ДОМА".
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

Re: Простые устройства / Simple Devices описание методов

Сообщение tarasfrompir »

Железко для Тебя ответил в шапку...
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: Простые устройства / Simple Devices описание методов

Сообщение Logrus »

Gelezako писал(а): Ещё, просьба уточнять какое именно свойство апдейтиться "ThisComputer.somebodyHomeText" или "ThisComputer.HomeStatus". Потому что они очень похожи и очень часто противоречат. Это я про те случаи когда ты указывал вот такое объяснение "устанавливает значение что КТО ТО ДОМА".
ThisComputer.HomeStatus
вызывается раз в минуту и находится в Timer onNewMinute
можно и изменить под себя

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

// HomeStatus
$homeStatus=date('H:i'); // задаем точное время
$nobody=gg('NobodyHomeMode.active'); // тут изменено
if ($nobody==1) {
 $homeStatus.=' Дома никого.'; // в зависимости
} elseif ($nobody==2) {
 $homeStatus.=' Все спят.'; // в зависимости
} else {
 $homeStatus.=' Дома кто-то есть.'; // в зависимости
}
// у кого-то видел местоположение пользователя по gps выводят
$homeStatus.=' '.gg('Security.stateDetails');
$homeStatus.=' '.gg('System.stateDetails');
$homeStatus.=' '.gg('Communication.stateDetails');
sg('HomeStatus',$homeStatus); // пишем в свойство
к простым устройствам отношения не имеет
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить