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

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

Модератор: immortal

yden
Сообщения: 141
Зарегистрирован: Пн авг 22, 2016 10:03 am
Благодарил (а): 28 раз
Поблагодарили: 5 раз

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

Сообщение yden » Пт сен 21, 2018 9:33 pm

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
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пт сен 21, 2018 9:43 pm

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

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

Сообщение yden » Пт сен 21, 2018 9:56 pm

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

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

Сообщение juricks » Пн мар 11, 2019 1:15 pm

Добра всем!
Проблема почти как у ТС.
Хочу сделать округление температуры до десятых забираемая с 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 КБ) 4334 просмотра
Безымянный1.png
Безымянный1.png (18.47 КБ) 4334 просмотра
За это сообщение автора juricks поблагодарил:
~220v (Чт июл 02, 2020 11:04 am)
Рейтинг: 1.16%
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн мар 11, 2019 2:50 pm

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
Благодарил (а): 2 раза
Поблагодарили: 3 раза

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

Сообщение juricks » Пн мар 11, 2019 3:02 pm

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
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн мар 11, 2019 3:09 pm

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
Благодарил (а): 2 раза
Поблагодарили: 3 раза

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

Сообщение juricks » Пн мар 11, 2019 3:21 pm

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

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

Сообщение xor » Вт мар 12, 2019 11:27 am


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

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

За это сообщение автора xor поблагодарил:
~220v (Чт июл 02, 2020 12:55 pm)
Рейтинг: 1.16%
Аватара пользователя
juricks
Сообщения: 4
Зарегистрирован: Вс мар 10, 2019 7:46 pm
Благодарил (а): 2 раза
Поблагодарили: 3 раза

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

Сообщение juricks » Вт мар 12, 2019 2:34 pm

Решение проблемы оказалось куда проще, чем я мог предположить, про это уже писал 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. Радуемся округленным значениям.
За это сообщение автора juricks поблагодарили (всего 2):
xor (Вт мар 12, 2019 11:52 pm) • ~220v (Чт июл 02, 2020 12:58 pm)
Рейтинг: 2.33%
Ответить