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

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

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

МЕТОД SDevices_statusUpdated запускается при изменении значения свойства устройство.status
СпойлерПоказать
обновляет время последнего срабатывания устройство.updatedText
ДАТЧИК ДВИЖЕНИЯ
СпойлерПоказать
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 для связаной комнаты.)
Режим еко ---
СпойлерПоказать
1. При выключени режима ЕКО... Перебирает все устройства имеющие свойство - groupEcoOn и если оно (свойство имеет значение 1 )
то включает все устрйства
2. То же и при включении режима ЕКО - но с точностью до наооборот...
МЕТОД Rooms_onActivity.php -(тут нашел старую запись немного сумбурную)
СпойлерПоказать
1. обновляется состояние присутствия в комнате (комната.SomebodyHere - назначает 1)
2. этот же метод запускает updateActivityStatus.

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

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

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

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

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 запускает всю цепь событий простых устройств...

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

Добавлено: Чт янв 18, 2018 5:58 pm
Logrus
в motionDetected не понял
if (!isset($params['statusUpdated'])) {
setTimeout($ot.'_motion_timer_status', '', 3);
}

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

Добавлено: Пн янв 22, 2018 10:40 am
tarasfrompir
Моя догадка простая - если не получил параметр statusUpdated то подожди 3 секунды и продолжи ...
Я очень даже склоняюсь к этому

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

Добавлено: Пн янв 22, 2018 11:23 am
Logrus
за компом позже еще раз посмотрю
ночной мессаджлевел в методе, то запутать можно (можно самому уровень громкости повесить), да получается от названия темы далеко, но ...
наверное, нужно разобрать до комментариев подробных, да на гит
п.с. я в принципе этот путь уже прошел, но ...

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

Добавлено: Пн янв 22, 2018 12:27 pm
tarasfrompir
Кстати встречал данную конструкцию еще где то в простіх устройствах
ПС
И вообще вопрос стоит так нужно ли это все расписывать ???
ППс
Просто есть некоторые мысли по усовершенствованию этих действий ...
Стоит ли заниматся этим ?

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

Добавлено: Пн янв 22, 2018 7:30 pm
Logrus
хз, это не ко мне (не компетентен)
и все-таки мне не понятно:
if (!isset($params['statusUpdated'])) { // SDevices_statusUpdated.php
setTimeout($ot.'_motion_timer_status', '', 3); // запустить таймер на 3 секунды, а что он сделает?
}
имхо, надо расписать, то там сложнее

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

Добавлено: Вт янв 23, 2018 10:22 am
tarasfrompir
Ждет того что если метод SDevices_statusUpdated.php еще не выполнен то ждем еще 3 секунды к его исполнению.
ПС
В тексте подправил
ППС Но тут же и запутался к чему он этот метод -? если и в нем производятся половина таких же действий...

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

Добавлено: Ср янв 24, 2018 2:24 am
Gelezako
tarasfrompir1 писал(а): ПС
И вообще вопрос стоит так нужно ли это все расписывать ???
ППс
Просто есть некоторые мысли по усовершенствованию этих действий ...
Стоит ли заниматся этим ?
Нужно, нужно. Мне интересно, распиши свои мысли по усовершенствованию.
Ещё, просьба уточнять какое именно свойство апдейтиться "ThisComputer.somebodyHomeText" или "ThisComputer.HomeStatus". Потому что они очень похожи и очень часто противоречат. Это я про те случаи когда ты указывал вот такое объяснение "устанавливает значение что КТО ТО ДОМА".

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

Добавлено: Ср янв 24, 2018 10:28 am
tarasfrompir
Железко для Тебя ответил в шапку...

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

Добавлено: Ср янв 24, 2018 10:42 am
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); // пишем в свойство
к простым устройствам отношения не имеет