Помощь в php
Модератор: immortal
-
- Сообщения: 60
- Зарегистрирован: Пт фев 15, 2019 12:19 pm
- Благодарил (а): 19 раз
- Поблагодарили: 4 раза
Помощь в php
Я не очень опытный программист если можно так сказать и поэтому возник вопрос каким образом организовать выполнение кода при смене одного свойства на другое. Например есть у меня робот пылесос который имеет свойство "mode" в которое записываются цифры в зависимости от того что он сейчас делает. Когда пылесосит свойство принимает значение "5", когда заряжается свойство принимает значение "8". Так вот хотелось бы как то прописать в коде следующее:
Если свойство меняется с 5 на 8 то сообщить "уборка закончена", если свойство меняется с 8 на 5 то сообщить "началась уборка"...и так далее.
Или например еще вариант использования для юзеров и свойства "расстояние от дома". Если значение свойства уменьшается, то юзер приближается к дому и запускаются определенные сценарии - включается кондиционер, чайник, музыка и феерверки , а если значение свойства увеличивается то юзер уезжает и все выключается...
Вариантов применения много но вот не знаю как прописать в php именно изменение конкретных значении свойства в течении времени. Или например провести сравнение предыдущего значения свойства с текущим, какой командой?
Если свойство меняется с 5 на 8 то сообщить "уборка закончена", если свойство меняется с 8 на 5 то сообщить "началась уборка"...и так далее.
Или например еще вариант использования для юзеров и свойства "расстояние от дома". Если значение свойства уменьшается, то юзер приближается к дому и запускаются определенные сценарии - включается кондиционер, чайник, музыка и феерверки , а если значение свойства увеличивается то юзер уезжает и все выключается...
Вариантов применения много но вот не знаю как прописать в php именно изменение конкретных значении свойства в течении времени. Или например провести сравнение предыдущего значения свойства с текущим, какой командой?
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Помощь в php
php тут в принципе не при чём. Первая задача решается при помощи метода связанного с изменением свойства. Объект пылесос со свойством mode принадлежит к какому-то классу объектов, ну например класс называется Пылесосы. В меню Объекты находим это класс, выбираем редактировать, выбираем вкладку - Методы, добавляем метод, например ModeChanged и вписываем в этом метод примерно такой код
if ($params['OLD_VALUE']==5 and $params['NEW_VALUE']==8) {
say('Уборка закончена');
}
if ($params['OLD_VALUE']==8 and $params['NEW_VALUE']==5) {
say('Уборка началась');
}
Сохраняем.
Далее выбираем вкладку Свойства
выбираем редактировать наше свойство Mode и в комбобоксе Запускать метод при изменении - выбрать наш новый метод - ModeChanged. Сохранить. Ну и в принципе всё.
Теперь когда у нашего объекта Пылесос меняется свойство Mode, то будет вызываться метод ModeChanged c параметрами OLD_VALUE, где будет хранится наше старое значение свойства и NEW_VALUE, где будет хранится новое значение.
Более того - сообщения будут выдаваться и если добавить ещё какой-нибудь объект Пылесос 1, принадлежащий к классу Пылесосы.
Если нам нужны разные реакции для разных пылесосов, то можно зайти в методы нашего объекта и теперь там появился метод ModeChanged - в его настройках можно вписать какой-то другой код и выбрать - выполнять ли родительский код (тот код который мы записали для класса)
if ($params['OLD_VALUE']==5 and $params['NEW_VALUE']==8) {
say('Уборка закончена');
}
if ($params['OLD_VALUE']==8 and $params['NEW_VALUE']==5) {
say('Уборка началась');
}
Сохраняем.
Далее выбираем вкладку Свойства
выбираем редактировать наше свойство Mode и в комбобоксе Запускать метод при изменении - выбрать наш новый метод - ModeChanged. Сохранить. Ну и в принципе всё.
Теперь когда у нашего объекта Пылесос меняется свойство Mode, то будет вызываться метод ModeChanged c параметрами OLD_VALUE, где будет хранится наше старое значение свойства и NEW_VALUE, где будет хранится новое значение.
Более того - сообщения будут выдаваться и если добавить ещё какой-нибудь объект Пылесос 1, принадлежащий к классу Пылесосы.
Если нам нужны разные реакции для разных пылесосов, то можно зайти в методы нашего объекта и теперь там появился метод ModeChanged - в его настройках можно вписать какой-то другой код и выбрать - выполнять ли родительский код (тот код который мы записали для класса)
- Рейтинг: 2.33%
-
- Сообщения: 60
- Зарегистрирован: Пт фев 15, 2019 12:19 pm
- Благодарил (а): 19 раз
- Поблагодарили: 4 раза
Re: Помощь в php
О спасибо огромное. Я как раз не знала что есть такая фишка как $params['OLD_VALUE'] и $params['NEW_VALUE']. О том что можно запускать метод при изменении свойства была вкурсе, а вот про то что можно выхватить как то значение свойства которое было и которое стало не знала
-
- Сообщения: 2079
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: Помощь в php
а параметры очень полезны, для попробовать
//$params['ORIGINAL_OBJECT_TITLE'] //имя объекта
//$params['PROPERTY'] //имя свойства вызвавшего по изменению метод (к примеру темп контроль может вызываться изменением температуры, уставок - оные можно и динамически менять, режимов работы, а в методе это обрабатывать)
//$params['SOURCE'] //4-й аргумент в сетглобал или сейчас юрл кто вызвал и с какими параметрами
//$params['OLD_VALUE']
//$params['NEW_VALUE']
//DebMes(json_encode($this));
//DebMes(json_encode($params));
//DebMes(gr('NEW_VALUE')); //или любой
//$params['ORIGINAL_OBJECT_TITLE'] //имя объекта
//$params['PROPERTY'] //имя свойства вызвавшего по изменению метод (к примеру темп контроль может вызываться изменением температуры, уставок - оные можно и динамически менять, режимов работы, а в методе это обрабатывать)
//$params['SOURCE'] //4-й аргумент в сетглобал или сейчас юрл кто вызвал и с какими параметрами
//$params['OLD_VALUE']
//$params['NEW_VALUE']
//DebMes(json_encode($this));
//DebMes(json_encode($params));
//DebMes(gr('NEW_VALUE')); //или любой
Последний раз редактировалось Logrus Сб май 23, 2020 5:42 pm, всего редактировалось 1 раз.
- За это сообщение автора Logrus поблагодарили (всего 10):
- Chainik (Сб авг 24, 2019 5:43 pm) • IrisKo (Пт авг 30, 2019 11:32 am) • 2007-i (Вс сен 01, 2019 12:31 am) • ImHuman (Вт сен 10, 2019 5:58 pm) • Mavric (Ср сен 18, 2019 8:09 pm) • Bagir (Сб май 23, 2020 1:39 pm) • astotskiy (Сб май 23, 2020 5:47 pm) • SmoKE_xDDD (Сб май 23, 2020 10:20 pm) • Yashalta (Вс май 24, 2020 9:08 pm) • semkyskov (Пт июн 12, 2020 4:39 am)
- Рейтинг: 11.63%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
- Bagir
- Сообщения: 1613
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 374 раза
Re: Помощь в php
Спасибо и от меня. Я тоже не знал, что при вызове метода по изменению свойства объекта массив $params такой богатый. Надо будет где то обязательно это попробовать.
И мне ещё очень интересно, что за пылесос и каким способом получаем от него статусы. Мой жужик не особо общителен, и всё закончилось микро выключателем, приклеенным к базе.
И мне ещё очень интересно, что за пылесос и каким способом получаем от него статусы. Мой жужик не особо общителен, и всё закончилось микро выключателем, приклеенным к базе.
-
- Сообщения: 2079
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: Помощь в php
//DebMes(json_encode(get_defined_vars()));
это побогаче будет, а параметры обязательно надо использовать, а не лезть повторно в бд
это побогаче будет, а параметры обязательно надо использовать, а не лезть повторно в бд
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
-
- Сообщения: 315
- Зарегистрирован: Вс май 20, 2018 9:27 am
- Благодарил (а): 160 раз
- Поблагодарили: 29 раз
Re: Помощь в php
А можно для чайников, поподробнее желательно с примерами! Я не понимаю для чего это но, чуйка подсказывает, что это мне нужно!Logrus писал(а): ↑Сб авг 24, 2019 5:32 pmа параметры очень полезны, для попробовать
//$params['ORIGINAL_OBJECT_TITLE'] //имя объекта
//$params['PROPERTY'] //имя свойства вызвавшего по изменению метод (к примеру темп контроль может вызываться изменением температуры, уставок - оные можно и динамически менять, режимов работы, а в методе это обрабатывать)
//$params['SOURCE'] //4-й аргумент в сетглобал или сейчас юрл кто вызвал и с какими параметрами
//$params['OLD_VALUE']
//$params['NEW_VALUE']
//DebMes(json_encode($this));
//DebMes(json_encode($params));
//DebMes(gr('NEW_VALUE')); //или любой
я тут с трудом осилил только два параметра $params['OLD_VALUE'] и $params['NEW_VALUE']!
ниже мой пример
я взял код метода термостата от сюда viewtopic.php?f=5&t=3003&hilit=AddSched ... =20#p34480
и переделал его с использованием для меня новых параметров $params['OLD_VALUE'] и $params['NEW_VALUE']!
Код: Выделить всё
if ($params['OLD_VALUE']<=($this->getProperty('need_temp')) and $params['NEW_VALUE']>=($this->getProperty('need_temp'))) {
say('Включаю охлаждение');
say('Текущая температура '.$this->getProperty('current_temp').' Нужная вам температура '.$this->getProperty('need_temp').".");
}
if ($params['OLD_VALUE']>=($this->getProperty('need_temp')) and $params['NEW_VALUE']<=($this->getProperty('need_temp'))) {
say('Включаю обогрев');
say('Текущая температура '.$this->getProperty('current_temp').' Нужная вам температура '.$this->getProperty('need_temp').".");
}
А там еще такие параметры есть как $params['ORIGINAL_OBJECT_TITLE'], $params['PROPERTY'], DebMes(json_encode($this));, DebMes(json_encode($params));, DebMes(gr('NEW_VALUE')); которые даже в не представляю как использовать в коде!
подскажите, а?!?!
- SmoKE_xDDD
- Сообщения: 816
- Зарегистрирован: Ср апр 17, 2019 5:00 pm
- Откуда: Нижний Новгород
- Благодарил (а): 110 раз
- Поблагодарили: 898 раз
Re: Помощь в php
Ну вот смотрите, есть у меня датчик температуры, у него 3 параметра: temp, humi, bat_level. Все они привязаны к 1 методу, если изменится температура система вызовет метод и $params['PROPERTY'] будет = temp, я пойму что поменялась температура и запишу ее если пройдет через if($params['OLD_VALUE'] != $params['NEW_VALUE']), запишу я ее как $this->setProperty($params['ORIGINAL_OBJECT_TITLE'].'.'.$params['PROPERTY'], $params['NEW_VALUE']) а если значение не изменилось, я могу запустить, что то другое. Такое строение кода избавляет меня от нужды городить кучу if() условийYashalta писал(а): ↑Вс май 24, 2020 11:09 pmА можно для чайников, поподробнее желательно с примерами! Я не понимаю для чего это но, чуйка подсказывает, что это мне нужно!Logrus писал(а): ↑Сб авг 24, 2019 5:32 pmа параметры очень полезны, для попробовать
//$params['ORIGINAL_OBJECT_TITLE'] //имя объекта
//$params['PROPERTY'] //имя свойства вызвавшего по изменению метод (к примеру темп контроль может вызываться изменением температуры, уставок - оные можно и динамически менять, режимов работы, а в методе это обрабатывать)
//$params['SOURCE'] //4-й аргумент в сетглобал или сейчас юрл кто вызвал и с какими параметрами
//$params['OLD_VALUE']
//$params['NEW_VALUE']
//DebMes(json_encode($this));
//DebMes(json_encode($params));
//DebMes(gr('NEW_VALUE')); //или любой
я тут с трудом осилил только два параметра $params['OLD_VALUE'] и $params['NEW_VALUE']!
ниже мой пример
я взял код метода термостата от сюда viewtopic.php?f=5&t=3003&hilit=AddSched ... =20#p34480
и переделал его с использованием для меня новых параметров $params['OLD_VALUE'] и $params['NEW_VALUE']!Я токое же решение делал павда код в 2 раза длиннее!Код: Выделить всё
if ($params['OLD_VALUE']<=($this->getProperty('need_temp')) and $params['NEW_VALUE']>=($this->getProperty('need_temp'))) { say('Включаю охлаждение'); say('Текущая температура '.$this->getProperty('current_temp').' Нужная вам температура '.$this->getProperty('need_temp')."."); } if ($params['OLD_VALUE']>=($this->getProperty('need_temp')) and $params['NEW_VALUE']<=($this->getProperty('need_temp'))) { say('Включаю обогрев'); say('Текущая температура '.$this->getProperty('current_temp').' Нужная вам температура '.$this->getProperty('need_temp')."."); }
А там еще такие параметры есть как $params['ORIGINAL_OBJECT_TITLE'], $params['PROPERTY'], DebMes(json_encode($this));, DebMes(json_encode($params));, DebMes(gr('NEW_VALUE')); которые даже в не представляю как использовать в коде!
подскажите, а?!?!
- За это сообщение автора SmoKE_xDDD поблагодарили (всего 3):
- Yashalta (Пн май 25, 2020 10:00 am) • Surgeon76 (Пн май 25, 2020 6:15 pm) • Bagir (Ср май 27, 2020 1:34 pm)
- Рейтинг: 3.49%
-
- Сообщения: 2079
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: Помощь в php
тот же пользовательский код и количество устройств
перетрясено то что в альфе про контроль циклов, после еще раз перепроверен генерал лог мускл, нормальное количество обращений к бд 25-27 в сек.
с бд все, сейчас больше волнует графика, отдача ксс и подобного (((
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
-
- Сообщения: 57
- Зарегистрирован: Вс апр 07, 2019 6:49 pm
- Благодарил (а): 33 раза
- Поблагодарили: 10 раз
Re: Помощь в php
Всем привет, вникать для меня займет кучу времени, и если кого не затруднит(можно в личку) нужен код.
Есть датчик движения и лампа филипс, включается по движению и освещенности, по коду прописанному в методе датчика. В лампе miioDimmerph01 заведены еще два свойства, через ПУ bright и cct и к ним свойства miioDimmerph01.saved_bright и miioDimmerph01.cct, нужно в промежуток времени с 8.00 до 11.00 значение этих свойств было 100%, в остальное время 20 и 90%. Заранее спасибо.
Есть датчик движения и лампа филипс, включается по движению и освещенности, по коду прописанному в методе датчика. В лампе miioDimmerph01 заведены еще два свойства, через ПУ bright и cct и к ним свойства miioDimmerph01.saved_bright и miioDimmerph01.cct, нужно в промежуток времени с 8.00 до 11.00 значение этих свойств было 100%, в остальное время 20 и 90%. Заранее спасибо.
Последний раз редактировалось pru469 Вс авг 02, 2020 7:51 am, всего редактировалось 3 раза.