Рассуждения по поводу statusChanged

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

Модератор: immortal

Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Рассуждения по поводу statusChanged

Сообщение Bagir » Пт сен 19, 2014 9:56 pm

Вначале я сам попался на эти грабли, и некоторое время не мог понять как правильно. Пока что я знаю два способа завести данные в систему MDM.
1. Слинкованное свойство с таким железом как 1-Wire, Z-Wave и т.п.
2. Внешние GET. Например Ардуино, MegaD, Ewclid ... В общем все то, что отправляет строку вида http://<ip_server>/objects/?object=FireSensors1&op=m&m=statusChanged&status=0 или работает через командную строку.

Но нам также нужно сразу знать, когда меняется свойств у объекта. Во втором случае все понятно. Запускается метод statusChanged. А в первом варианте можно использовать только запуск метода по изменению свойства. И для слинкованных датчиков сюда тоже очень хорошо подходит statusChanged. Но класс то один, и правила общие. Как быть? Заводить второй класс, чтобы были разные для слинкованных и не слинкованных датчиков? Это вариант, но мне не нравится.
Делать второй метод ChangeStatus? можно, и так у меня было до недавнего времени.

А что если все объединить? Выставить запуск метода statusChanged при изменении свойства Status, а код statusChanged завершать если Status передан параметром.

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

if (isset($params['status'])) {
  $this->setProperty('status',$params['status']);
  return; 
}
Тоже самое и для класса tempSensors, метод tempChanged

Какое будет мнение общества?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
eygen
Сообщения: 393
Зарегистрирован: Чт сен 25, 2014 5:37 pm
Откуда: Екатеринбург
Благодарил (а): 25 раз
Поблагодарили: 52 раза

Re: Рассуждения по поводу statusChanged

Сообщение eygen » Чт сен 25, 2014 5:43 pm

А у меня не работает http://<ip_server>/objects/?object=FireSensors1&op=m&m=statusChanged&status=0
Вот думаю, чего у меня лыжи не едут...
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Рассуждения по поводу statusChanged

Сообщение Bagir » Чт сен 25, 2014 9:20 pm

Эта ссыль была дана только для примера того, как передаются данные из вне в систему. Копировать и пробовать ее запускать у себя на компе не нужно!
<ip_server> это адрес сервера, где установлен МДМ. Например 192.168.1.2
FireSensors1 это имя объекта в системе МДМ
statusChanged имя метода объекта FireSensors1
status - это свойство объекта FireSensors1
Таким действием мы запускаем метод statusChanged и передаем свойство status равное 0
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
eygen
Сообщения: 393
Зарегистрирован: Чт сен 25, 2014 5:37 pm
Откуда: Екатеринбург
Благодарил (а): 25 раз
Поблагодарили: 52 раза

Re: Рассуждения по поводу statusChanged

Сообщение eygen » Пт сен 26, 2014 8:36 am

Bagir писал(а):Эта ссыль была дана только для примера того, как передаются данные из вне в систему. Копировать и пробовать ее запускать у себя на компе не нужно!
<ip_server> это адрес сервера, где установлен МДМ. Например 192.168.1.2
FireSensors1 это имя объекта в системе МДМ
statusChanged имя метода объекта FireSensors1
status - это свойство объекта FireSensors1
Таким действием мы запускаем метод statusChanged и передаем свойство status равное 0

Стоп... Разве с компа через эту строку на сервер не передать значение к примеру свойства статус из вашего примера?
PAV
Сообщения: 968
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Рассуждения по поводу statusChanged

Сообщение PAV » Пт сен 26, 2014 9:04 am

Вызов 192.168.1.100/objects/?object=dimmerHall&op=m&m=remoteStatusChanged&brightness=10

На МЖД в dimmerHall.remoteStatusChanged следующая строчка
$this->setProperty('brightness',$params['brightness']);
После этого свойство dimmmerhall.brightness станет равно 10
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Рассуждения по поводу statusChanged

Сообщение Bagir » Пт сен 26, 2014 9:36 am

Суть и идея темы в использовании метода statusChanged для слинкованных и не слинкованных объектов!!! Тут мне бы хотелось обсудить эти две разные ситуации. Класс один, например тот же keySensors или tempSensors.
Давайте на простом примере разберем ситуацию. У нас две двери. Калитка и входная дверь в дом. На обоих висят кнопки звонка. На калитке кнопка Z-Wave. На двери кнопка подключена через MegaD. В классе keySensors находятся два объекта этих кнопок. У них есть метод statusChanged. В нем код, который просто проигрывает файл звонка.
Свойство status первого объекта датчика калитки слинковано с бинарным датриком Z-Wave.
А status второго объекта датчика двери обновляется с путем вызова метода statusChanged с передачей свойства status.
Теперь ситуация: При нажатии кнопки на входной двери, будет запущен метод statusChanged, и дополнительный код в нем будет исполнен - мы услышим мелодию звонка в дверь.
А вот при нажатии кнопки на калитке, мы ничего не услышим. Статус объекта будет изменен, т.к. он слинкован с датчиком, но метод statusChanged запущен не будет.
Если мы укажем в классе, что при изменении свойства status надо запускать метод statusChanged, то с калиткой все получится. Но что будет с дверью? вероятно мы услышим звонок два раза. Первый раз т.к. сами запустили statusChanged для передачи свойства status, а второй раз т.к. свойство status изменилось.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
PAV
Сообщения: 968
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: Рассуждения по поводу statusChanged

Сообщение PAV » Пт сен 26, 2014 9:55 am

Многобукф ;) Мне кажется не с той стороны идете.
Меняйте статус через statusChanged, а не напрямую.
Пусть кнопка отсылает данные statusChanged, а вот там уже прописать что делать дальше - присвоить свойство одному объекту или нескольким, проиграть звук.
Я, к сожалению, не знаком с прямой интеграцией 1-wire и проч, ибо у меня это все через ардуину. Там все просто - кнопку нажали, запрос ушел на МЖД, вида, как сообщением выше и обработался МЖД.


АДМИН: я бы перенес тему в Логику.
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Рассуждения по поводу statusChanged

Сообщение Bagir » Пт сен 26, 2014 10:03 am

PAV писал(а):Многобукф
Много конечно, а по другому трудно донести мысль. Я же не просто так завел тему, чтобы спросить, как изменить свойство у объекта. Этот шаг понимания системы освоен и уже давным давно в прошлом :)
PAV писал(а):Я, к сожалению, не знаком с прямой интеграцией 1-wire и проч
Ну вот тут то собака и зарыта. У меня наоборот, больше железа, которое слинкованно. 1-wire и Z-Wave. А по вашему способу как раз у меня работает Мегади и Ewclid. Для передачи данных они оипользуют Get запросы. Ардуины пока у меня еще нет. Но это все тоже самое.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Рассуждения по поводу statusChanged

Сообщение Ivan » Пт сен 26, 2014 10:11 am

В 1wire внизу свойств есть поле "запускать при изменении" туда какраз можно сунуть statusChange. Насчёт zwawe не помню и посмотреть не могу т.к. на новом серваке не ставил ещё
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Рассуждения по поводу statusChanged

Сообщение Bagir » Пт сен 26, 2014 10:19 am

У Z такого точно нету. А как насчет другого железа в устройствах? Там вероятно ситуация та же. Если за основу взять, что запуск statusChanged состоится в любом случае, слинкован датчик или нет, то вопрос отпадает сам по себе. А в 1-wire действительно все решается полем "запускать при изменении". Но хотелось бы установить общие правила. Ведь завтра я могу поменять датчик. Отключить от Меги и подключить к Z-Wave, или наоборот.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить