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

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

Добавлено: Вс янв 29, 2017 7:52 pm
EvgenyG
Подскажите как отфильтровывать заведомо ложные значения
Например для датчика 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']);
    }
При записи данных применяем Метод

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

Добавлено: Вс янв 29, 2017 8:52 pm
SergeyM
If ($param<400){$param=390;}
Elseif ($param>3000){$param=3000;}

Отправлено с моего SM-G900FD через Tapatalk

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

Добавлено: Вс янв 29, 2017 9:09 pm
EvgenyG
Куда это писать?

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

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

Отправлено с моего SM-G900FD через Tapatalk

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

Добавлено: Вт янв 31, 2017 1:27 am
EvgenyG
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"

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

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

Отправлено с моего SM-G900FD через Tapatalk

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

Добавлено: Вт янв 31, 2017 5:57 am
SergeyM
Если же Вы хотите использовать данные не из переменной, но непосредственно передаваемый параметр, то синтаксис немного другой

Отправлено с моего SM-G900FD через Tapatalk

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

Добавлено: Вт янв 31, 2017 6:07 am
SergeyM

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

$t=round($this->getProperty("temp"), 0); //получаем значение из переменной "temp"
if (($t > 84) || ($t < -50)) {
  //Некорректные данные
  $this->setProperty("alive",0); 
  return; 
} 

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

Добавлено: Вт янв 31, 2017 6:09 am
EvgenyG
Разве param не должен обращаться к переменной для которой метод применяется? Т.е. для каждой переменной надо свой метод писать?

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

Добавлено: Вт янв 31, 2017 6:21 am
EvgenyG

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

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

If ($CO2>3000) {
 $CO2=1400;
 say('Ошибка CO2>3000');
} 
так тоже не работает
не могу разобраться
можете поправить мой код?