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

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

Модератор: immortal

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

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

Сообщение tarasfrompir » Чт янв 18, 2018 3:26 pm

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

МЕТОД 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 запускает всю цепь событий простых устройств...
Последний раз редактировалось tarasfrompir Чт фев 01, 2018 5:26 pm, всего редактировалось 21 раз.
За это сообщение автора tarasfrompir поблагодарили (всего 13):
Logrus (Чт янв 18, 2018 5:58 pm) • kawkay (Вт янв 23, 2018 3:05 pm) • Gelezako (Ср янв 24, 2018 2:12 am) • antpino (Ср янв 24, 2018 4:05 pm) • VooDooN (Ср янв 24, 2018 7:23 pm) • ypiter2006 (Вс фев 04, 2018 7:19 pm) • consul (Пт фев 16, 2018 11:31 am) • Serega66 (Вс фев 18, 2018 7:41 pm) • directman66 (Чт май 17, 2018 8:59 am) • ksv (Ср окт 09, 2019 1:51 pm) и ещё 3
Рейтинг: 15.12%
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Чт янв 18, 2018 5:58 pm

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

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

Сообщение tarasfrompir » Пн янв 22, 2018 10:40 am

Моя догадка простая - если не получил параметр statusUpdated то подожди 3 секунды и продолжи ...
Я очень даже склоняюсь к этому
За это сообщение автора tarasfrompir поблагодарил:
andrusha7778 (Сб мар 10, 2018 6:15 pm)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пн янв 22, 2018 11:23 am

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

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

Сообщение tarasfrompir » Пн янв 22, 2018 12:27 pm

Кстати встречал данную конструкцию еще где то в простіх устройствах
ПС
И вообще вопрос стоит так нужно ли это все расписывать ???
ППс
Просто есть некоторые мысли по усовершенствованию этих действий ...
Стоит ли заниматся этим ?
За это сообщение автора tarasfrompir поблагодарил:
Samir77 (Ср май 27, 2020 1:02 am)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пн янв 22, 2018 7:30 pm

хз, это не ко мне (не компетентен)
и все-таки мне не понятно:
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
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Вт янв 23, 2018 10:22 am

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

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

Сообщение Gelezako » Ср янв 24, 2018 2:24 am

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

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

Сообщение tarasfrompir » Ср янв 24, 2018 10:28 am

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

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

Сообщение Logrus » Ср янв 24, 2018 10:42 am

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
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить