Нечисловые данные датчиков температуры
Модератор: immortal
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Нечисловые данные датчиков температуры
Добрый день! Все подключено через MegaD, часть датчиков температуры ds18b20 вместо показаний температуры (не всех, а только части показаний) выдают примерно вот такой резулультат: 2orm>bmit°
Что очень печально сказывается как на графике температуры, так и на работе в качестве термостата.
Пробовал настроить фильтрацию показаний, но не получилось. Из-за чего возможно такое поведение МД? Датчик подключен с питанием 3.3V,а так же через специальный шилд (без него ситуация не меняется). В вебморде MegaD показания стабильно цифровые.
Что очень печально сказывается как на графике температуры, так и на работе в качестве термостата.
Пробовал настроить фильтрацию показаний, но не получилось. Из-за чего возможно такое поведение МД? Датчик подключен с питанием 3.3V,а так же через специальный шилд (без него ситуация не меняется). В вебморде MegaD показания стабильно цифровые.
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Нечисловые данные датчиков температуры
А почему "фильтровать" не удается? Можно ведь попробовать:
И графики не портятся. И алгоритм управления "не сойдет с ума".
Да,... может вы значения температуры через модуль "MegaD" получаете? Если так, рекомендую получать из прямых запросов к Меге (из методов, сценариев), т.е. без использования модуля "MegaD". Думаю, тогда и сама проблема нечисловых значений уйдет.
Код: Выделить всё
$T = //Тут у вас в переменной $T сохраняется какое-то значение температуры, возможно, "кривое", нечисловое
if (is_numeric($T)) {
sg('Имя_объекта.Имя_свойства', $T);
} else {
//В свойство температуры пишем предыдущее (нормальное, числовое) значение
sg('Имя_объекта.Имя_свойства', gg('Имя_объекта.Имя_свойства'));
}
Да,... может вы значения температуры через модуль "MegaD" получаете? Если так, рекомендую получать из прямых запросов к Меге (из методов, сценариев), т.е. без использования модуля "MegaD". Думаю, тогда и сама проблема нечисловых значений уйдет.
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Re: Нечисловые данные датчиков температуры
Разумно. Прямые запросы попробую. При указанном коде выдает ошибки обработки.
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Нечисловые данные датчиков температуры
Вы бы привели полностью код, которым запрашивается значение температуры с датчика.
А также, в какое Объект.Свойство (наименование) у вас пишется значение температуры.
В общем, поподробнее описали бы вашу ситуацию.
А также, в какое Объект.Свойство (наименование) у вас пишется значение температуры.
В общем, поподробнее описали бы вашу ситуацию.
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Re: Нечисловые данные датчиков температуры
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'));
Использовать для программирования:
PHP Blockly
$T = //Тут у вас в переменной $T сохраняется какое-то значение температуры, возможно, "кривое", нечисловое
if (is_numeric($T)) {
sg('Sensor_temp06.value', $T);
} else {
//В свойство температуры пишем предыдущее (нормальное, числовое) значение
sg('Sensor_temp06.value', gg('Sensor_temp06.value'));
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Re: Нечисловые данные датчиков температуры
По умолчанию датчики опрашиваются через MegaD.
Делается общим скриптом по привязанным датчикам. Код, предложенный выше вставляю в методах работы с конкретным датчиком.
Делается общим скриптом по привязанным датчикам. Код, предложенный выше вставляю в методах работы с конкретным датчиком.
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Re: Нечисловые данные датчиков температуры
Попробовал немного иную вариацию, она позволила сохранить код
$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
$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
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Нечисловые данные датчиков температуры
В общем все правильно (что выдало ошибку), надо несколько поправить синтаксис. Попробуйте так:
Код: Выделить всё
$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);}
-
- Сообщения: 23
- Зарегистрирован: Пт апр 06, 2018 10:51 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 0
- Поблагодарили: 0
Re: Нечисловые данные датчиков температуры
С прыгающими значениями, вроде, всё срослось, спасибо!
С нечисловыми данными проблема осталась: 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
С нечисловыми данными проблема осталась: 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
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Нечисловые данные датчиков температуры
Давайте пробовать дальше:
Код: Выделить всё
$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'));}
Пробуйте, наблюдайте, не появляются ли при таком варианте явно нереальные значения.