Нечисловые данные датчиков температуры

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Нечисловые данные датчиков температуры

Сообщение Ivg_spb » Сб янв 12, 2019 4:24 pm

Добрый день! Все подключено через MegaD, часть датчиков температуры ds18b20 вместо показаний температуры (не всех, а только части показаний) выдают примерно вот такой резулультат: 2orm>bmit°
Что очень печально сказывается как на графике температуры, так и на работе в качестве термостата.
Пробовал настроить фильтрацию показаний, но не получилось. Из-за чего возможно такое поведение МД? Датчик подключен с питанием 3.3V,а так же через специальный шилд (без него ситуация не меняется). В вебморде MegaD показания стабильно цифровые.
Chainik
Сообщения: 769
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 85 раз
Поблагодарили: 215 раз

Re: Нечисловые данные датчиков температуры

Сообщение Chainik » Сб янв 12, 2019 5:29 pm

А почему "фильтровать" не удается? Можно ведь попробовать:

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

$T = //Тут у вас в переменной $T сохраняется какое-то значение температуры, возможно, "кривое", нечисловое
if (is_numeric($T)) {
sg('Имя_объекта.Имя_свойства', $T);
} else {
//В свойство температуры пишем предыдущее (нормальное, числовое) значение
sg('Имя_объекта.Имя_свойства', gg('Имя_объекта.Имя_свойства'));
}
И графики не портятся. И алгоритм управления "не сойдет с ума".

Да,... может вы значения температуры через модуль "MegaD" получаете? Если так, рекомендую получать из прямых запросов к Меге (из методов, сценариев), т.е. без использования модуля "MegaD". Думаю, тогда и сама проблема нечисловых значений уйдет.
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Re: Нечисловые данные датчиков температуры

Сообщение Ivg_spb » Вс янв 13, 2019 1:01 pm

Разумно. Прямые запросы попробую. При указанном коде выдает ошибки обработки.
Chainik
Сообщения: 769
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 85 раз
Поблагодарили: 215 раз

Re: Нечисловые данные датчиков температуры

Сообщение Chainik » Вс янв 13, 2019 1:08 pm

Вы бы привели полностью код, которым запрашивается значение температуры с датчика.
А также, в какое Объект.Свойство (наименование) у вас пишется значение температуры.
В общем, поподробнее описали бы вашу ситуацию.
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Re: Нечисловые данные датчиков температуры

Сообщение Ivg_spb » Вс янв 13, 2019 5:33 pm

Parse error: syntax error, unexpected 'if' (T_IF) in C:\_majordomo\htdocs/cms/cached/4c4aca920fa19cc99c15d4e15a2ab358.php on line 2
Использовать для программирования:
PHP Blockly

$T = //Тут у вас в переменной $T сохраняется какое-то значение температуры, возможно, "кривое", нечисловое
if (is_numeric($T)) {
sg('Sensor_temp06.value', $T);
} else {
//В свойство температуры пишем предыдущее (нормальное, числовое) значение
sg('Sensor_temp06.value', gg('Sensor_temp06.value'));
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Re: Нечисловые данные датчиков температуры

Сообщение Ivg_spb » Вс янв 13, 2019 5:35 pm

По умолчанию датчики опрашиваются через MegaD.
Делается общим скриптом по привязанным датчикам. Код, предложенный выше вставляю в методах работы с конкретным датчиком.
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Re: Нечисловые данные датчиков температуры

Сообщение Ivg_spb » Вс янв 13, 2019 5:50 pm

Попробовал немного иную вариацию, она позволила сохранить код
$T = file_get_contents("192.168.0.30/sec/?pt=25&cmd=get");
if ($T >= 50 || $T <= -10) {
//Пишем предыдущее значение, чтобы не терялась дискретность по периодичности сбора показаний
sg (Sensor_temp06.value, gg(Sensor_temp06.value));
} else {
sg (Sensor_temp06.value, $T);}

но при тестировании выдало такую ошибку:


Warning: file_get_contents(192.168.0.30/sec/?pt=25&cmd=get): failed to open stream: No error in C:\_majordomo\htdocs\modules\objects\objects.class.php(561) : eval()'d code on line 1 Warning: Use of undefined constant Sensor_temp06 - assumed 'Sensor_temp06' (this will throw an Error in a future version of PHP) in C:\_majordomo\htdocs\modules\objects\objects.class.php(561) : eval()'d code on line 4 Warning: Use of undefined constant value - assumed 'value' (this will throw an Error in a future version of PHP) in C:\_majordomo\htdocs\modules\objects\objects.class.php(561) : eval()'d code on line 4 Warning: Use of undefined constant Sensor_temp06 - assumed 'Sensor_temp06' (this will throw an Error in a future version of PHP) in C:\_majordomo\htdocs\modules\objects\objects.class.php(561) : eval()'d code on line 4 Warning: Use of undefined constant value - assumed 'value' (this will throw an Error in a future version of PHP) in C:\_majordomo\htdocs\modules\objects\objects.class.php(561) : eval()'d code on line 4
Chainik
Сообщения: 769
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 85 раз
Поблагодарили: 215 раз

Re: Нечисловые данные датчиков температуры

Сообщение Chainik » Вс янв 13, 2019 6:20 pm

Ivg_spb писал(а):
Вс янв 13, 2019 5:50 pm
но при тестировании выдало такую ошибку:
В общем все правильно (что выдало ошибку), надо несколько поправить синтаксис. Попробуйте так:

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

$T = file_get_contents("http://192.168.0.30/sec/?pt=25&cmd=get");
if ($T >= 50 || $T <= -10) {
//Пишем предыдущее значение, чтобы не терялась дискретность по периодичности сбора показаний
sg('Sensor_temp06.value', gg('Sensor_temp06.value'));
} else {
sg('Sensor_temp06.value', $T);}
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

Re: Нечисловые данные датчиков температуры

Сообщение Ivg_spb » Вт янв 15, 2019 11:50 pm

С прыгающими значениями, вроде, всё срослось, спасибо!
С нечисловыми данными проблема осталась: Warning: A non-numeric value encountered in C:\_majordomo\htdocs\lib\objects.class.php on line 922 Warning: A non-numeric value encountered in C:\_majordomo\htdocs\lib\objects.class.php on line 922
Chainik
Сообщения: 769
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 85 раз
Поблагодарили: 215 раз

Re: Нечисловые данные датчиков температуры

Сообщение Chainik » Ср янв 16, 2019 9:57 am

Ivg_spb писал(а):
Вт янв 15, 2019 11:50 pm
...С нечисловыми данными проблема осталась: ...
Давайте пробовать дальше:

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

$T = file_get_contents("http://192.168.0.30/sec/?pt=25&cmd=get");
if (is_numeric($T) || $T <= 50 || $T >= -10) {
//Пишем предыдущее значение, чтобы не терялась дискретность по периодичности сбора показаний
sg('Sensor_temp06.value', $T);
} else {
sg('Sensor_temp06.value', gg('Sensor_temp06.value'));}
Здесь будет производиться запись текущего значения, если данные в переменной $T являются числовыми и попадают в допустимый диапазон. Иначе пишем предыдущее значение.
Пробуйте, наблюдайте, не появляются ли при таком варианте явно нереальные значения.
Ответить