Не могу освоить перебор объектов по классу

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

Модератор: immortal

IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 19 раз
Поблагодарили: 4 раза

Не могу освоить перебор объектов по классу

Сообщение IrisKo » Пн мар 02, 2020 5:01 pm

Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
И так делала:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
sg($obj['object_title'].'.autoOff',"1");
break;
}

и так:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
if (gg($obj['TITLE'].'.autoOff')==0){
sg($obj['TITLE'].'.autoOff',"1");
break;
}
}

и ни то ни то не работает
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Не могу освоить перебор объектов по классу

Сообщение fandaymon » Пн мар 02, 2020 5:32 pm

IrisKo писал(а):
Пн мар 02, 2020 5:01 pm
Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
И так делала:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
sg($obj['object_title'].'.autoOff',"1");
break;
}

и так:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
if (gg($obj['TITLE'].'.autoOff')==0){
sg($obj['TITLE'].'.autoOff',"1");
break;
}
}

и ни то ни то не работает
А зачем break?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Не могу освоить перебор объектов по классу

Сообщение Chainik » Пн мар 02, 2020 5:37 pm

IrisKo писал(а):
Пн мар 02, 2020 5:01 pm
Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
....
Можно попробовать так:

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

$objects=getObjectsByClass("Rooms");
foreach($objects as $obj) {
   sg($obj['TITLE'].".autoOff",1);
}
Если мне надо прервать исполнение скрипта, я пишу:

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

return"";
За это сообщение автора Chainik поблагодарил:
IrisKo (Пн мар 02, 2020 5:52 pm)
Рейтинг: 1.16%
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 19 раз
Поблагодарили: 4 раза

Re: Не могу освоить перебор объектов по классу

Сообщение IrisKo » Пн мар 02, 2020 5:50 pm

fandaymon писал(а):
Пн мар 02, 2020 5:32 pm

А зачем break?
А бог его знает - где то вычитала что циклы foreach надо делать с break а то будут выполнятся бесконечно. А теперь вот отвечая на ваш вопрос думаю что в моем случае видимо оно находило первую комнату меняло там свойство и завершало цикл, а остальные комнаты оставались нетронутыми?
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Не могу освоить перебор объектов по классу

Сообщение fandaymon » Пн мар 02, 2020 8:31 pm

IrisKo писал(а):
Пн мар 02, 2020 5:50 pm
fandaymon писал(а):
Пн мар 02, 2020 5:32 pm

А зачем break?
А бог его знает - где то вычитала что циклы foreach надо делать с break а то будут выполнятся бесконечно. А теперь вот отвечая на ваш вопрос думаю что в моем случае видимо оно находило первую комнату меняло там свойство и завершало цикл, а остальные комнаты оставались нетронутыми?
Именно так. Foreach в принципе не могут выполняться бесконечно, потому что они перебирают какие-то объекты. Объекты закончились и цикл закончился
За это сообщение автора fandaymon поблагодарил:
IrisKo (Вт мар 03, 2020 2:43 pm)
Рейтинг: 1.16%
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Не могу освоить перебор объектов по классу

Сообщение Logrus » Пн мар 02, 2020 8:37 pm

IrisKo писал(а):
Пн мар 02, 2020 5:50 pm
fandaymon писал(а):
Пн мар 02, 2020 5:32 pm

А зачем break?
А бог его знает - где то вычитала что циклы foreach надо делать с break а то будут выполнятся бесконечно. А теперь вот отвечая на ваш вопрос думаю что в моем случае видимо оно находило первую комнату меняло там свойство и завершало цикл, а остальные комнаты оставались нетронутыми?
у вас второй вариант правильный с проверкой свойства, ну еще обрамление единички двойными кавычками не обязательно здесь, с замечанием выше
За это сообщение автора Logrus поблагодарил:
IrisKo (Вт мар 03, 2020 2:39 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Не могу освоить перебор объектов по классу

Сообщение xor » Пн мар 02, 2020 10:52 pm

IrisKo писал(а):
Пн мар 02, 2020 5:01 pm
Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
...
хе, https://connect.smartliving.ru/profile/ ... ode-2.html

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

cm('grpRooms.setGroupProperty',array('property'=>'autoOff','value'=>1));
За это сообщение автора xor поблагодарил:
IrisKo (Вт мар 03, 2020 2:39 pm)
Рейтинг: 1.16%
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 19 раз
Поблагодарили: 4 раза

Re: Не могу освоить перебор объектов по классу

Сообщение IrisKo » Вт мар 03, 2020 2:42 pm

Logrus писал(а):
Пн мар 02, 2020 8:37 pm
у вас второй вариант правильный с проверкой свойства, ну еще обрамление единички двойными кавычками не обязательно здесь, с замечанием выше
Да, так и сделала и все заработало - убрала бреак и кавычки, но условие оставила и заработало
xor писал(а):
Пн мар 02, 2020 10:52 pm
хе, https://connect.smartliving.ru/profile/ ... ode-2.html

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

cm('grpRooms.setGroupProperty',array('property'=>'autoOff','value'=>1));
Вот это очень интересный вариант, не пробовала, но надо будет где то применить 100% - если реально работает то очень компактненько и красиво получается :)
За это сообщение автора IrisKo поблагодарил:
Logrus (Вт мар 03, 2020 2:48 pm)
Рейтинг: 1.16%
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 19 раз
Поблагодарили: 4 раза

Re: Не могу освоить перебор объектов по классу

Сообщение IrisKo » Вт мар 03, 2020 3:05 pm

Еще один вопрос возник. Можно ли как то таким же образом быстро и элегантно :) поменять свойство (например статус) у всех девайсов определенного класса (например реле), которые привязаны к данной конкретной комнате?
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Не могу освоить перебор объектов по классу

Сообщение Logrus » Вт мар 03, 2020 4:15 pm

IrisKo писал(а):
Вт мар 03, 2020 3:05 pm
Еще один вопрос возник. Можно ли как то таким же образом быстро и элегантно :) поменять свойство (например статус) у всех девайсов определенного класса (например реле), которые привязаны к данной конкретной комнате?
конечно, в вашем варианте в цикле добавить условие на проверку линкедрум
в варианте групп ксора сложнее
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить