помогите разобратся с скриптом

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

Модератор: immortal

vitar78
Сообщения: 128
Зарегистрирован: Пт июл 15, 2016 3:12 am
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Re: помогите разобратся с скриптом

Сообщение vitar78 » Пт дек 21, 2018 2:54 pm

Logrus писал(а):
Пт дек 21, 2018 12:45 pm
Пытался по вашему примеру никого нет дома сделать но запутался
вот, а там сейчас на порядок сложнее (((

логика одна, двоичная
Снимок.PNG
относительно этого, сравнить выше и про что сказал

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

$presence = 0;
$objects = getObjectsByClass('Users');
foreach ($objects as $obj) {
 if (getGlobal($obj['TITLE'] . '.WiFiStatus') == 1) {
  $presence = 1;
  break;
 }
}

if ($presence) {
callMethod('SecurityArmedMode.activate');
} else {
callMethod('SecurityArmedMode.deactivate');
}
метод вызывается по изменению свойства WiFiStatus
это "пример" для сравнения с выше
Сделал скрипт вызывается каждую минуту, но идет спам что режим активирован. что я сделал не правильно ?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: помогите разобратся с скриптом

Сообщение Chainik » Пт дек 21, 2018 3:42 pm

vitar78 писал(а):
Пт дек 21, 2018 2:54 pm
...
Сделал скрипт вызывается каждую минуту, но идет спам что режим активирован. что я сделал не правильно ?
Наверное, метод надо вызывать только в том случае, если данный режим в текущий момент не действует. Т.е.:

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

if (gg('SecurityArmedMode.Имя_свойства_статуса_режима') == "1") {
callMethod('SecurityArmedMode.activate');
}
Аналогично и с методом по деактивации режима.
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: помогите разобратся с скриптом

Сообщение Logrus » Пт дек 21, 2018 3:53 pm

vitar78 писал(а):
Пт дек 21, 2018 2:54 pm
Сделал скрипт вызывается каждую минуту, но идет спам что режим активирован. что я сделал не правильно ?
метод вызывается по изменению свойства WiFiStatus
частично уже решит

ну я б выше только как пример рассматривал, т.к. (ну какая охрана от присутствия в сети устройства, она поверх режима никого нет с еще кучей условий - это если все в автомате, и снятие только вручную и т.д.)
все-таки даже если непонятно, код как пример стоит посмотреть (там это решено все и таймер излишен, все по событиям)
так к примеру у меня это промежуточное свойство и запись его идет через проверку на несоответствие, и далее уже проверка что вызвать в режиме естественно с проверкой состояния самого режима
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: помогите разобратся с скриптом

Сообщение lihodeev » Чт апр 04, 2019 5:47 pm

код срабатывает если любое условие выполняется, а надо если оба имеют 1.
СпойлерПоказать
// Если сигнализация включена
if (gg('pirPRH.status')=="1")
//и включен ражим охраны
(gg('ThisComputer.securityMode')=="1");{
// Фиксируем движения в помещении
Say ('кто то в доме неизвестный!!',2);
// Делаем фотку с конкретной камеры
callMethod('Camera01.takeSnapshot');
// Считываем путь до файла
$img='/var/www/html/cms/images/'.gg('Camera01.snapshot');
// Отправляем фотку в телеграм Админу
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendImageToAdmin($img);
}
что не так?
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: помогите разобратся с скриптом

Сообщение Chainik » Чт апр 04, 2019 6:22 pm

lihodeev писал(а):
Чт апр 04, 2019 5:47 pm
код срабатывает если любое условие выполняется, а надо если оба имеют 1.
...
что не так?
Не хватает указания на проверку условий одновременно

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

// Если сигнализация включена
//и включен ражим охраны
if (gg('pirPRH.status')=="1") && (gg('ThisComputer.securityMode')=="1"){
ДЕЙСТВИЯ
}
UPD: убрал лишний символ ";".
Последний раз редактировалось Chainik Вс апр 14, 2019 7:36 pm, всего редактировалось 1 раз.
За это сообщение автора Chainik поблагодарил:
Samir77 (Вс апр 14, 2019 3:02 pm)
Рейтинг: 1.16%
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: помогите разобратся с скриптом

Сообщение lihodeev » Чт апр 04, 2019 7:59 pm

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

// Если сигнализация включена
//и включен ражим охраны
if (gg('pirPRH.status')=="1") && (gg('ThisComputer.securityMode')=="1");{
ДЕЙСТВИЯ
}
ошибка - syntax error, unexpected '&&' (T_BOOLEAN_AND)
уже перерыл весь синтаксис оператора, вроде все верно, а нет.
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: помогите разобратся с скриптом

Сообщение Chainik » Чт апр 04, 2019 8:03 pm

lihodeev писал(а):
Чт апр 04, 2019 7:59 pm
...
ошибка - syntax error, unexpected '&&' (T_BOOLEAN_AND)
уже перерыл весь синтаксис оператора, вроде все верно, а нет.
Наверняка скобки недоставил. Проверьте

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

// Если сигнализация включена
//и включен ражим охраны
if ((gg('pirPRH.status')=="1") && (gg('ThisComputer.securityMode')=="1"));{
ДЕЙСТВИЯ
}
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: помогите разобратся с скриптом

Сообщение lihodeev » Чт апр 04, 2019 8:23 pm

Наверняка скобки недоставил. Проверьте

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

// Если сигнализация включена
//и включен ражим охраны
if ((gg('pirPRH.status')=="1") && (gg('ThisComputer.securityMode')=="1"));{
ДЕЙСТВИЯ
}
есть такое, но тогда не работает, ДЕЙСТВИЕ выполняется в любом случае
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: помогите разобратся с скриптом

Сообщение Chainik » Чт апр 04, 2019 8:29 pm

lihodeev писал(а):
Чт апр 04, 2019 8:23 pm
...
есть такое, но тогда не работает, ДЕЙСТВИЕ выполняется в любом случае
Действие должно выполнятся только в том случае, когда одновременно оба свойства = "1".
Для отладки, чтобы понять, что происходит, можно временно дописать say

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

// Если сигнализация включена
//и включен ражим охраны
if ((gg('pirPRH.status')=="1") && (gg('ThisComputer.securityMode')=="1"));{
say("pirPRH=".gg('pirPRH.status'));
say("securityMode=".gg('ThisComputer.securityMode'));
ДЕЙСТВИЯ
}
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: помогите разобратся с скриптом

Сообщение lihodeev » Чт апр 04, 2019 9:06 pm

Chainik писал(а):
Чт апр 04, 2019 8:29 pm

Действие должно выполнятся только в том случае, когда одновременно оба свойства = "1".
Для отладки, чтобы понять, что происходит, можно временно дописать say

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

// Если сигнализация включена
//и включен ражим охраны
if ((gg('pirPRH.status')=="1") && (gg('ThisComputer.securityMode')=="1"));{
say('бла бла бла',2);
say("pirPRH=".gg('pirPRH.status'));
say("securityMode=".gg('ThisComputer.securityMode'));
ДЕЙСТВИЯ
}
21:04 Алиса: securityMode=1
21:04 Алиса: pirPRH=1
21:04 Алиса: бла бла бла
начинаю шизеть
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Ответить