Страница 1 из 2

18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вт фев 13, 2018 12:05 pm
CheBuraw
Предыстория.
Столкнулся с такой проблемой при построении графиков. Периодически 2 датчика 18B20 выдают показания -127.00 градусов. Из-за этого, как Вы понимаете, график приобретает не совсем приятный и наглядный вид. Изучение вопроса показало что с такими показаниями я сталкиваюсь не один и на форуме arduino много на эту тему обсуждения имеется. Купировать ошибку (как оказалось такие показания датчик выдает в случае ошибки) на устройстве мне не удалось, поэтому решил чистить её в базе. Понимаю что это реально костыль, но в данной ситуации лично мне так удобнее. Если и Вас достали провалы в показаниях на графиках, то вот моё решение. Делать так Вам или нет решайте сами.
Моё решение.
1) Заходим в phpMyAdmin
http://<DNS_имя_или_IP_сервера_MajorDoMo>/phpmyadmin/
Логин (по умолчанию, если не меняли): root
пароль (по умолчанию, если не меняли): rootpsw
2) В левой части экрана выбираем базу db_terminal
3) Создаем новое Событие
СпойлерПоказать
php02.PNG
php02.PNG (14.78 КБ) 6698 просмотров
4) Заполняем параметры события:
Название события: Любое, как Вам угодно
Состояние: ENABLE (включено)
Тип события: RECURRING (повторяющееся)
Выполнять каждые: 1(один) HOUR (час) // Это периодичность выполнения данного события. Настройте как Вам удобно.
Начало: //я указал текущий день и ближайшее округлённое время. Может его и вообще можно было пустым оставить :)
Определение: DELETE FROM `db_terminal`.`phistory` WHERE value='-127.00'
// Это как раз запрос который в данной базе в ветке истории найдет все записи со значением -127.00 и удалит их
Сохранить при окончании: (не менял)
Определитель: (не заполнял)
Комментарий: (не обязателен)
Сохраняемся. (в моем случае идем Вперёд)
СпойлерПоказать
php03.PNG
php03.PNG (39.66 КБ) 6698 просмотров
5) Проверяем Статус планировщика событий. Должен быть Включен - зелёного цвета.
СпойлерПоказать
php04.PNG
php04.PNG (17.27 КБ) 6698 просмотров
6) Выходим из phpMyAdmin

Только что мы создали в планировщике БД событие, которое будет с заданной периодичностью удалять из базы истории записи со значением "-127.00"
Суточное тестирование проблем не выявило. Скрипт отрабатывает четко и графики вновь стали наглядными.

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вт фев 13, 2018 12:31 pm
fandaymon
По-моему гораздо проще не добавлять такие значения в базу. Перед добавлением делать проверку на -127 и всё...

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вт фев 13, 2018 12:32 pm
Chainik
CheBuraw, спасибо, что делитесь наработками и подробными инструкциями.
Правда, у меня возникает естественный вопрос. Если мы используем Мажордомо, почему нельзя перед записью значения в БД верифицировать его на корректность/допустимость, и явно ошибочные "отбраковывать" (или заменять предыдущими)? Зачем избран такой "сложный" путь "отбраковки" неправильных значений уже после записи в БД (и непосредственно из СУБД)?

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вт фев 13, 2018 1:22 pm
Amarok
Можно использовать такой алгоритм:
  • привязать датчик к свойству input
  • создать метод inputChanged с таким текстом:

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

    $value = $this->getProperty('input');
    if ($value != $this->getProperty('value'); {
     if ($value <= '-127') {return;}
     $this->setProperty('value',$value);
    }
    
  • связываем свойство input с методом inputChanged
  • и уже на свойство value прикручиваем историю.
Таким способом мы отбросим повторяющиеся или неверные значения.

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вт фев 13, 2018 4:25 pm
CheBuraw
Честно говоря, для меня проще оказалось настроить систематическую чистку БД, чем отсеивать данные значения на лету, при получении.
Ваши предложения считаю достаточно интересными. Я о таком варианте даже как-то и не подумал :).
Amarok, спасибо за конкретный пример ещё одного варианта решения проблемы.

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вт фев 13, 2018 8:07 pm
Amarok

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

if ($value != $this->getProperty('value'); {
 if ($value <= '-127') {return;}
 $this->setProperty('value',$value);
} 
Тут можно любые действия делать будет. Округлять, заменять и т.п..

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Чт фев 15, 2018 8:34 pm
Fav0rit
CheBuraw писал(а):Честно говоря, для меня проще оказалось настроить систематическую чистку БД, чем отсеивать данные значения на лету, при получении.
Ваши предложения считаю достаточно интересными. Я о таком варианте даже как-то и не подумал :).
Amarok, спасибо за конкретный пример ещё одного варианта решения проблемы.
Здесь на форуме я выкладывал свой новый класс sensors где все это уже реализовано, очень рекомендую. Могу выложить новую версию, с тех пор я исправить некоторые ошибки и внёс доработки

Отправлено с моего Redmi 3 через Tapatalk
//cloud.tapatalk.com/s/5a85c523f4182/Sensors.txt

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Ср мар 21, 2018 3:34 pm
CAHbKA
Amarok писал(а):Можно использовать такой алгоритм:

привязать датчик к свойству input
А если это не датчик, погода с тырнета, но видимо само это свойство надо искать где то в папках через консоль (ну или через ssh цепляться и рыться в папках). через веб оболочку это не сделаешь. Правильно?

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Чт мар 22, 2018 7:37 am
Amarok
смотря как и куда данные считываются. могу через тимвьювер глянуть

Re: 18B20 периодические показания -127.00. Чистка базы.

Добавлено: Вс мар 25, 2018 11:48 pm
Volter5000
По поводу таких данных, если датчик подключен к ардуине, то я натыкался на что-то типа если температура ниже -17 градусов то будет показывать больше ста, есть исправленная библиотека в нэте.
http://did5.ru/arduino/arduino-neskolko ... 18b20.html
Вот ссылка с описанием проблемы и решением.