Фильтрация значений получаемых от датчиков

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

Модератор: immortal

EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

Фильтрация значений получаемых от датчиков

Сообщение EvgenyG » Вс янв 29, 2017 7:52 pm

Подскажите как отфильтровывать заведомо ложные значения
Например для датчика CO2 мне нужно заменять значения выходящие за диапазон от 400 до 3000
Если значения меньше 400, то записываем значение 390
Если значения больше 3000 то записываем 3000

Сейчас у меня данные записываются в переменную Объекты / OtherSensors / CO2SpBol.CO2

Up

Вопрос решился благодаря DimSun75

Необходимо создать новую переменную в Свойствах. У меня это CO2 и CO2f
CO2 переменная для записи данных с датчика CO2
CO2f "отфильтрованные" данные по ним уже можно строить графики
Для объекта необходимо создать Метод со следующим кодом:

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

If ($params['VALUE'] <398) {
   $this->setProperty($params['TITLE'], 390);
   $this->setProperty($params['TITLE']."f", 390);
   say('Ошибка CO2<398');
} else 
   If ($params['VALUE'] > 3000) {
     $this->setProperty($params['TITLE'], 1400);
     $this->setProperty($params['TITLE']."f", 1400);
     say('Ошибка CO2>3000');
   } else
    {
       $this->setProperty($params['TITLE']."f",$params['VALUE']);
    }
При записи данных применяем Метод
Последний раз редактировалось EvgenyG Ср фев 01, 2017 4:28 pm, всего редактировалось 2 раза.
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение SergeyM » Вс янв 29, 2017 8:52 pm

If ($param<400){$param=390;}
Elseif ($param>3000){$param=3000;}

Отправлено с моего SM-G900FD через Tapatalk
За это сообщение автора SergeyM поблагодарил:
EvgenyG (Вс янв 29, 2017 9:09 pm)
Рейтинг: 1.16%
Windows, Debian 8, 1-Wire
Connect
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение EvgenyG » Вс янв 29, 2017 9:09 pm

Куда это писать?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение SergeyM » Пн янв 30, 2017 6:17 am

В метод, который вызывается при изменении параметра. Например: Есть класс "Sensors" в нем есть вкладки свойств, методов, объектов. На вкладке методов создаете метод "param_changed",например, туда пишите код. На вкладке свойств выбираете, например, "param" у которого в настройках выбираем запускать при изменении метод "param_changed". Почитайте Азбуку, Вики, коннекты других участников. В конце концов поиск по форуму.

Отправлено с моего SM-G900FD через Tapatalk
Windows, Debian 8, 1-Wire
Connect
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение EvgenyG » Вт янв 31, 2017 1:27 am

SergeyM писал(а):В метод, который вызывается при изменении параметра. Например: Есть класс "Sensors" в нем есть вкладки свойств, методов, объектов. На вкладке методов создаете метод "param_changed",например, туда пишите код. На вкладке свойств выбираете, например, "param" у которого в настройках выбираем запускать при изменении метод "param_changed". Почитайте Азбуку, Вики, коннекты других участников. В конце концов поиск по форуму.

Отправлено с моего SM-G900FD через Tapatalk
Спасибо
В азбуке и вике без поллитра не разобраться. На форуме про фильтрацию ничего нет.
Естественно первым делом пытался разобраться.

Только вот не получилось
Что делаю не так?
Вот код для метода:

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

If ($param<398) {
 $param=390;
 say('Ошибка CO2<398');
}

If ($param>3000) {
 $param=1400;
 say('Ошибка CO2>3000');
} 
Есп передаёт значения в переменную CO2SpBol.CO2 и метод прописан.

Алиса после каждого опроса датчика выдаёт "Ошибка CO2<398"
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение SergeyM » Вт янв 31, 2017 5:55 am

Если у Вас данные приходят в переменную (параметр) СО2, так изамените в коде $param на $CO2. Посмотрите у меня в коннекте, кажется метод tempchanged в классе tempsensors.

Отправлено с моего SM-G900FD через Tapatalk
Windows, Debian 8, 1-Wire
Connect
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение SergeyM » Вт янв 31, 2017 5:57 am

Если же Вы хотите использовать данные не из переменной, но непосредственно передаваемый параметр, то синтаксис немного другой

Отправлено с моего SM-G900FD через Tapatalk
Windows, Debian 8, 1-Wire
Connect
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение SergeyM » Вт янв 31, 2017 6:07 am

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

$t=round($this->getProperty("temp"), 0); //получаем значение из переменной "temp"
if (($t > 84) || ($t < -50)) {
  //Некорректные данные
  $this->setProperty("alive",0); 
  return; 
} 
Windows, Debian 8, 1-Wire
Connect
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение EvgenyG » Вт янв 31, 2017 6:09 am

Разве param не должен обращаться к переменной для которой метод применяется? Т.е. для каждой переменной надо свой метод писать?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

Re: Фильтрация значений получаемых от датчиков

Сообщение EvgenyG » Вт янв 31, 2017 6:21 am

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

If ($CO2<398) {
 $CO2=390;
 say('Ошибка CO2<398');
}

If ($CO2>3000) {
 $CO2=1400;
 say('Ошибка CO2>3000');
} 
так тоже не работает
не могу разобраться
можете поправить мой код?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ответить