Страница 2 из 5
Re: Помогите! Округление температуры из Modbus по TCP
Добавлено: Пт сен 21, 2018 9:33 pm
yden
fandaymon писал(а): Пт сен 21, 2018 9:27 pm
yden писал(а): Пт сен 21, 2018 8:44 pm
Chainik писал(а): Пт сен 21, 2018 8:39 pm
Вообще то округление до одно знака должно выполняться кодом:
Код: Выделить всё
// Выполняем округление с точностью до одного знака
$value = round($value, 1);
Это от примера осталось. мне целое и нужно.
Но не суть, все равно 0 пишет.
Если этот метод вызывается при изменении, то там в параметрах
$params['PROPERTY']
$params['NEW_VALUE']
$params['OLD_VALUE']
$params['SOURCE']
никакого $params['temp'] нету, поэтому и получаем 0...
'temp' - это же свойство объекта, которое мне нужно округлить.
Re: Помогите! Округление температуры из Modbus по TCP
Добавлено: Пт сен 21, 2018 9:43 pm
skysilver
yden писал(а): Пт сен 21, 2018 9:33 pm
'temp' - это же свойство объекта, которое мне нужно округлить.
Это не так работает. Загляни в икс-рей на вкладку Методы. Там сразу увидишь какие-параметры передаются в метод при его вызове и как они называются. Выше уже дали подсказку. Скорее всего тебе нужен параметр $params['NEW_VALUE'].
Re: Помогите! Округление температуры из Modbus по TCP
Добавлено: Пт сен 21, 2018 9:56 pm
yden
skysilver писал(а): Пт сен 21, 2018 9:43 pm
yden писал(а): Пт сен 21, 2018 9:33 pm
'temp' - это же свойство объекта, которое мне нужно округлить.
Это не так работает. Загляни в икс-рей на вкладку Методы. Там сразу увидишь какие-параметры передаются в метод при его вызове и как они называются. Выше уже дали подсказку. Скорее всего тебе нужен параметр $params['NEW_VALUE'].
Благодарю, заработало.
Re: Округление температуры из Modbus по TCP
Добавлено: Пн мар 11, 2019 1:15 pm
juricks
Добра всем!
Проблема почти как у ТС.
Хочу сделать округление температуры до десятых забираемая с esp по mqtt,
Создал метод, пользуясь этим кодом, поменяв параметр на тот который передает esp по xray "NEW_VALUE"
Код: Выделить всё
// Получаем данные от сенсора
$value = $params['NEW_VALUE']/100;
// Фильтруем данные
if ($value > 60 || $value < -60) return;
// Выполняем округление с точностью до одного знака
$value = round($value, 1);
// Сохраняем обработанное значение в свойство объекта
$this->setProperty('value', $value);
В общем показания на выходе после метода не фига не обновляются (замораживаются)
Подскажите пожалуйста что не так делаю?
Re: Округление температуры из Modbus по TCP
Добавлено: Пн мар 11, 2019 2:50 pm
skysilver
juricks писал(а): Пн мар 11, 2019 1:15 pm
$value = $params['NEW_VALUE']/100;
А за каким на 100 делить?
Re: Округление температуры из Modbus по TCP
Добавлено: Пн мар 11, 2019 3:02 pm
juricks
skysilver писал(а): Пн мар 11, 2019 2:50 pm
juricks писал(а): Пн мар 11, 2019 1:15 pm
$value = $params['NEW_VALUE']/100;
А за каким на 100 делить?
https://kb.mjdm.ru/filtraciya-i-okrugle ... majordomo/
Взял с инструкции, проверил на температуре от датчика aqara, все получилось, вот и решил данный код прикрутить к esp
Re: Округление температуры из Modbus по TCP
Добавлено: Пн мар 11, 2019 3:09 pm
skysilver
Всегда полезно немного подумать. У тебя в модуле МКТТ данные приходят уже в нужном формате, и нет никакой необходимости их делить на 100 В отличие от сырых данных в модуле Xiaomi Home, и котором и идет речь в мануале.
Re: Округление температуры из Modbus по TCP
Добавлено: Пн мар 11, 2019 3:21 pm
juricks
Убрал в коде делить на 100, данные по прежнему не обновляются.
P.S. Разобрался сам. Всем спасибо.
Re: Округление температуры из Modbus по TCP
Добавлено: Вт мар 12, 2019 11:27 am
xor
juricks писал(а):...
P.S. Разобрался сам. Всем спасибо.
Вот за такие фразочки минусы жалко нельзя ставить! Чел напряг других своим вопросом, решил его как-то для себя и досвидос. Выхлопа на форуме ноль, другим информации - ноль. Потом пишут - форум плохой.
Отправлено с моего Redmi 4X через Tapatalk
Re: Округление температуры из Modbus по TCP
Добавлено: Вт мар 12, 2019 2:34 pm
juricks
Решение проблемы оказалось куда проще, чем я мог предположить, про это уже писал
sergejey и
yden Спасибо им! Ни разу не писал подобную инструкцию по этому сильно не пинайте.
Инструкция по округлению передаваемых параметров с esp, по протоколу MQTT в данном случае описываю температурные параметры, соответственно с остальными параметрами проделываем аналогичную процедуру, только в своем классе.
1. Нужно зайти в настройку класса
STempSensor и создать новый метод
"tempChanged". В коде ничего не прописываем!
2. Затем там же создаем новое свойство
"tempRounded" и в графе "Запускать метод при изменении " выбираем
"tempChanged"
3. Затем заходим в метод свойства объекта, у меня
"Sensor_temp06" и нажимаем настроить
"tempChanged"
4. Прописываем код.
Код: Выделить всё
// Получаем данные от сенсора
$value = $params['NEW_VALUE'];
// Выполняем округление с точностью до одного знака
$value = round($value, 1);
// Сохраняем обработанное значение в свойство объекта
$this->setProperty('tempRounded', $value);
5. Идем в плагин MQTT, ищем наш датчик и в графе
"Свойство" выбираем вместо
"value" наше прописанное свойство
"tempRounded"
6. Радуемся округленным значениям.