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

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

Модератор: immortal

Аватара пользователя
CheBuraw
Сообщения: 30
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 8 раз
Поблагодарили: 14 раз

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

Сообщение CheBuraw » Вт фев 13, 2018 12:05 pm

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

Только что мы создали в планировщике БД событие, которое будет с заданной периодичностью удалять из базы истории записи со значением "-127.00"
Суточное тестирование проблем не выявило. Скрипт отрабатывает четко и графики вновь стали наглядными.
За это сообщение автора CheBuraw поблагодарили (всего 2):
Chainik (Вт фев 13, 2018 12:27 pm) • Amarok (Вт фев 13, 2018 1:08 pm)
Рейтинг: 2.33%
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

Сообщение fandaymon » Вт фев 13, 2018 12:31 pm

По-моему гораздо проще не добавлять такие значения в базу. Перед добавлением делать проверку на -127 и всё...
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Вт фев 13, 2018 12:32 pm

CheBuraw, спасибо, что делитесь наработками и подробными инструкциями.
Правда, у меня возникает естественный вопрос. Если мы используем Мажордомо, почему нельзя перед записью значения в БД верифицировать его на корректность/допустимость, и явно ошибочные "отбраковывать" (или заменять предыдущими)? Зачем избран такой "сложный" путь "отбраковки" неправильных значений уже после записи в БД (и непосредственно из СУБД)?
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение Amarok » Вт фев 13, 2018 1:22 pm

Можно использовать такой алгоритм:
  • привязать датчик к свойству input
  • создать метод inputChanged с таким текстом:

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

    $value = $this->getProperty('input');
    if ($value != $this->getProperty('value'); {
     if ($value <= '-127') {return;}
     $this->setProperty('value',$value);
    }
    
  • связываем свойство input с методом inputChanged
  • и уже на свойство value прикручиваем историю.
Таким способом мы отбросим повторяющиеся или неверные значения.
За это сообщение автора Amarok поблагодарил:
CheBuraw (Вт фев 13, 2018 4:43 pm)
Рейтинг: 1.16%
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
CheBuraw
Сообщения: 30
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 8 раз
Поблагодарили: 14 раз

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

Сообщение CheBuraw » Вт фев 13, 2018 4:25 pm

Честно говоря, для меня проще оказалось настроить систематическую чистку БД, чем отсеивать данные значения на лету, при получении.
Ваши предложения считаю достаточно интересными. Я о таком варианте даже как-то и не подумал :).
Amarok, спасибо за конкретный пример ещё одного варианта решения проблемы.
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение Amarok » Вт фев 13, 2018 8:07 pm

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

if ($value != $this->getProperty('value'); {
 if ($value <= '-127') {return;}
 $this->setProperty('value',$value);
} 
Тут можно любые действия делать будет. Округлять, заменять и т.п..
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Fav0rit
Сообщения: 60
Зарегистрирован: Чт мар 19, 2015 10:27 pm
Благодарил (а): 8 раз
Поблагодарили: 22 раза

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

Сообщение Fav0rit » Чт фев 15, 2018 8:34 pm

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

Отправлено с моего Redmi 3 через Tapatalk
//cloud.tapatalk.com/s/5a85c523f4182/Sensors.txt
За это сообщение автора Fav0rit поблагодарил:
CheBuraw (Вт фев 27, 2018 8:48 am)
Рейтинг: 1.16%
CAHbKA
Сообщения: 39
Зарегистрирован: Сб мар 17, 2018 6:37 am
Благодарил (а): 10 раз
Поблагодарили: 2 раза

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

Сообщение CAHbKA » Ср мар 21, 2018 3:34 pm

Amarok писал(а):Можно использовать такой алгоритм:

привязать датчик к свойству input
А если это не датчик, погода с тырнета, но видимо само это свойство надо искать где то в папках через консоль (ну или через ssh цепляться и рыться в папках). через веб оболочку это не сделаешь. Правильно?
Pi3 + MJD
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение Amarok » Чт мар 22, 2018 7:37 am

смотря как и куда данные считываются. могу через тимвьювер глянуть
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Volter5000
Сообщения: 38
Зарегистрирован: Пн мар 27, 2017 12:33 am
Откуда: ДНР, Донецк
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение Volter5000 » Вс мар 25, 2018 11:48 pm

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