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

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

Модератор: immortal

skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Ср янв 16, 2019 11:06 am

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
Не помешает строку преобразовать в числовой формат.

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

$T = (float)file_get_contents("http://192.168.0.30/sec/?pt=25&cmd=get");
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

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

skysilver писал(а):
Ср янв 16, 2019 11:06 am
... Не помешает строку преобразовать в числовой формат. ...
Там проблема в том, что иногда (непонятно откуда) прилетает значение "2orm>bmit". Так что может и не помочь.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Ср янв 16, 2019 12:27 pm

Тогда проверить is_numeric()

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

$T = file_get_contents("http://192.168.0.30/sec/?pt=25&cmd=get");
if (is_numeric($T)) {
  //
}
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Ср янв 16, 2019 3:56 pm

skysilver писал(а):
Ср янв 16, 2019 12:27 pm
Тогда проверить is_numeric()

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

$T = file_get_contents("http://192.168.0.30/sec/?pt=25&cmd=get");
if (is_numeric($T)) {
  //
}
Так то оно так. Я предлагал такой вариант чуть выше.
Но внутри некорректного значения есть цифры (помимо букв). Вдруг is_numeric "скажет" что это число...
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

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

Сообщение ZyaK » Чт янв 17, 2019 1:01 pm

датчики то от какого напряжения запитаны?
PI2 + MQTT + 5 ESP8266 + Atmega16
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение Ivg_spb » Чт янв 17, 2019 9:59 pm

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

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

Сообщение Ivg_spb » Пт янв 18, 2019 9:01 pm

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 являются числовыми и попадают в допустимый диапазон. Иначе пишем предыдущее значение.
Пробуйте, наблюдайте, не появляются ли при таком варианте явно нереальные значения.

Теперь это выглядит вот так:
2019-01-18 20:59:40: temp:22.62 X
2019-01-18 20:59:39: @ X
2019-01-18 20:59:01: temp:22.62 X
2019-01-18 20:58:33: @ X
2019-01-18 20:58:33: temp:22.62 X
2019-01-18 20:58:01: temp:22.62 X
2019-01-18 20:57:34: temp:22.62 X
2019-01-18 20:57:33: @ X
2019-01-18 20:57:02: temp:22.62 X
2019-01-18 20:56:33: temp:22.62 X
2019-01-18 20:56:32: 2@ X
2019-01-18 20:56:01: temp:22.62 X
2019-01-18 20:56:01: temp:22.62 X
2019-01-18 20:55:32: 2@ X
2019-01-18 20:55:32: temp:22.68 X
2019-01-18 20:55:02: temp:22.62 X
2019-01-18 20:54:33: temp:22.62 X
2019-01-18 20:54:32: 2@ X
2019-01-18 20:54:01: temp:22.68 X
2019-01-18 20:53:33: temp:22.68 X
2019-01-18 20:53:32: 2@ X
Ivg_spb
Сообщения: 23
Зарегистрирован: Пт апр 06, 2018 10:51 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение Ivg_spb » Пт янв 18, 2019 9:09 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 Warning: A non-numeric value encountered in C:\_majordomo\htdocs\lib\objects.class.php on line 922

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

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

Сообщение Ivg_spb » Пт янв 18, 2019 9:13 pm

Что интересно, в веб морде Меги показания отображаются корректно
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Пт янв 18, 2019 9:32 pm

Извините что не в своей теме , но это очень похоже на мою проблему. Сама Мега значения меряет корректно , если показывает в вебе. НО не может их передать мажерику ( или тот не может принять). Присмотритесь внимательно - парсер мажерика проглатывает первые 9 байтов строки. Но нормально выводит остальные. Это что то с буфером в самом мажере. Скорее всего не устойчивая связь по сети.

У меня есть такая же проблема при передачи данных по сериалу между двумя ардуинами. Попробуйте уменьшить скорость вывода у Меги.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить