Округление температуры из Modbus по TCP

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

Модератор: immortal

yden
Сообщения: 141
Зарегистрирован: Пн авг 22, 2016 10:03 am

Re: Помогите! Округление температуры из Modbus по TCP

Сообщение 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' - это же свойство объекта, которое мне нужно округлить.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

Re: Помогите! Округление температуры из Modbus по TCP

Сообщение skysilver »

yden писал(а): Пт сен 21, 2018 9:33 pm 'temp' - это же свойство объекта, которое мне нужно округлить.
Это не так работает. Загляни в икс-рей на вкладку Методы. Там сразу увидишь какие-параметры передаются в метод при его вызове и как они называются. Выше уже дали подсказку. Скорее всего тебе нужен параметр $params['NEW_VALUE'].
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
yden
Сообщения: 141
Зарегистрирован: Пн авг 22, 2016 10:03 am

Re: Помогите! Округление температуры из Modbus по TCP

Сообщение yden »

skysilver писал(а): Пт сен 21, 2018 9:43 pm
yden писал(а): Пт сен 21, 2018 9:33 pm 'temp' - это же свойство объекта, которое мне нужно округлить.
Это не так работает. Загляни в икс-рей на вкладку Методы. Там сразу увидишь какие-параметры передаются в метод при его вызове и как они называются. Выше уже дали подсказку. Скорее всего тебе нужен параметр $params['NEW_VALUE'].
Благодарю, заработало.
Аватара пользователя
juricks
Сообщения: 4
Зарегистрирован: Вс мар 10, 2019 7:46 pm

Re: Округление температуры из Modbus по TCP

Сообщение 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);
В общем показания на выходе после метода не фига не обновляются (замораживаются)
Подскажите пожалуйста что не так делаю?
Вложения
Безымянный2.png
Безымянный2.png (21.56 КБ) 5505 просмотров
Безымянный1.png
Безымянный1.png (18.47 КБ) 5505 просмотров
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

Re: Округление температуры из Modbus по TCP

Сообщение skysilver »

juricks писал(а): Пн мар 11, 2019 1:15 pm $value = $params['NEW_VALUE']/100;
А за каким на 100 делить?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
juricks
Сообщения: 4
Зарегистрирован: Вс мар 10, 2019 7:46 pm

Re: Округление температуры из Modbus по TCP

Сообщение 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
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

Re: Округление температуры из Modbus по TCP

Сообщение skysilver »

juricks писал(а): Пн мар 11, 2019 3:02 pm https://kb.mjdm.ru/filtraciya-i-okrugle ... majordomo/
Взял с инструкции, проверил на температуре от датчика aqara, все получилось, вот и решил данный код прикрутить к esp
Всегда полезно немного подумать. У тебя в модуле МКТТ данные приходят уже в нужном формате, и нет никакой необходимости их делить на 100 В отличие от сырых данных в модуле Xiaomi Home, и котором и идет речь в мануале.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
juricks
Сообщения: 4
Зарегистрирован: Вс мар 10, 2019 7:46 pm

Re: Округление температуры из Modbus по TCP

Сообщение juricks »

Убрал в коде делить на 100, данные по прежнему не обновляются.
P.S. Разобрался сам. Всем спасибо.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

Re: Округление температуры из Modbus по TCP

Сообщение xor »


juricks писал(а):...
P.S. Разобрался сам. Всем спасибо.
Вот за такие фразочки минусы жалко нельзя ставить! Чел напряг других своим вопросом, решил его как-то для себя и досвидос. Выхлопа на форуме ноль, другим информации - ноль. Потом пишут - форум плохой.

Отправлено с моего Redmi 4X через Tapatalk

Аватара пользователя
juricks
Сообщения: 4
Зарегистрирован: Вс мар 10, 2019 7:46 pm

Re: Округление температуры из Modbus по TCP

Сообщение juricks »

Решение проблемы оказалось куда проще, чем я мог предположить, про это уже писал sergejey и yden Спасибо им! Ни разу не писал подобную инструкцию по этому сильно не пинайте.
Инструкция по округлению передаваемых параметров с esp, по протоколу MQTT в данном случае описываю температурные параметры, соответственно с остальными параметрами проделываем аналогичную процедуру, только в своем классе.
1. Нужно зайти в настройку класса STempSensor и создать новый метод "tempChanged". В коде ничего не прописываем!
SPOILERSPOILER_SHOW
Изображение
2. Затем там же создаем новое свойство "tempRounded" и в графе "Запускать метод при изменении " выбираем "tempChanged"
SPOILERSPOILER_SHOW
Изображение
3. Затем заходим в метод свойства объекта, у меня "Sensor_temp06" и нажимаем настроить "tempChanged"
SPOILERSPOILER_SHOW
Изображение
4. Прописываем код.

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

// Получаем данные от сенсора
$value = $params['NEW_VALUE'];
 
// Выполняем округление с точностью до одного знака
$value = round($value, 1);
 
// Сохраняем обработанное значение в свойство объекта
$this->setProperty('tempRounded', $value);
SPOILERSPOILER_SHOW
Изображение
5. Идем в плагин MQTT, ищем наш датчик и в графе "Свойство" выбираем вместо "value" наше прописанное свойство "tempRounded"
SPOILERSPOILER_SHOW
Изображение
6. Радуемся округленным значениям.
Ответить