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

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

Добавлено: Вт янв 31, 2017 11:33 pm
EvgenyG
пробовал разные комбинации:
'NEW_VALUE' на 'VALUE' (или на 'value' не знаю чем они отличаются) и 'PROPERTY' на "TITLE'
если заменить 'PROPERTY' на "TITLE' то начинают появляться дублирующие значения

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

Добавлено: Вт янв 31, 2017 11:37 pm
EvgenyG
условия начали работать вроде
но переменные не заменяются
для чего

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

$this-> 
пишется?

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

Добавлено: Вт янв 31, 2017 11:53 pm
DimSun75
EvgenyG писал(а):условия начали работать вроде
но переменные не заменяются
для чего пишется?
Указатель на текущий объект

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

Добавлено: Ср фев 01, 2017 12:16 am
DimSun75
Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:

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

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'],$params['VALUE']);
       $this->setProperty($params['TITLE']."f",$params['VALUE']);
    }
 
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.

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

Добавлено: Ср фев 01, 2017 1:58 pm
EvgenyG
DimSun75 писал(а):Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:

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

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'],$params['VALUE']);
       $this->setProperty($params['TITLE']."f",$params['VALUE']);
    }
 
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.
Создал свойство CO2SpBol.CO2f только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываются

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

Добавлено: Ср фев 01, 2017 2:02 pm
DimSun75
EvgenyG писал(а):
DimSun75 писал(а):Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:

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

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'],$params['VALUE']);
       $this->setProperty($params['TITLE']."f",$params['VALUE']);
    }
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.
Создал свойство CO2SpBol.CO2f только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываются
Не должно. Последний else как раз и записывает нормальные значения. Кстати из него $this->setProperty($params['TITLE'],$params['VALUE']); можно убрать. Оно лишнее

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

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

Добавлено: Ср фев 01, 2017 2:05 pm
EvgenyG
DimSun75 писал(а):
EvgenyG писал(а):
DimSun75 писал(а):Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:

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

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'],$params['VALUE']);
       $this->setProperty($params['TITLE']."f",$params['VALUE']);
    }
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.
Создал свойство CO2SpBol.CO2f только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываются
Не должно. Последний else как раз и записывает нормальные значения. Кстати из него $this->setProperty($params['TITLE'],$params['VALUE']); можно убрать. Оно лишнее

Отправлено с моего SM-G850F через Tapatalk
Всё заработало!!!!
Спасибо огромное!
Надо было перезагрузить esp, не понимаю как это связано, но после перезагрузки по питанию esp всё заработало!

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

Добавлено: Ср фев 01, 2017 2:11 pm
EvgenyG

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

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']);
    } 
Так должен код выглядеть?

Ещё бы добавить анализ, сравнение с предыдущими значениями, если расхождения более чем на 200 единиц, то необходимо записать предыдущее значение. А то получаются скачки. Сейчас в комнате 400, после перезагрузки первые 3-5 значений от датчика глючные, например, 65535, 128 или 5.
Или если значение == 65535, 128 или 5 то записываем предыдущее значение, пока не получим значение отличное от ошибочных.

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

Добавлено: Ср фев 01, 2017 2:18 pm
DimSun75
EvgenyG писал(а):

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

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']);
    }
Так должен код выглядеть?

Ещё бы добавить анализ, сравнение с предыдущими значениями, если расхождения более чем на 200 единиц, то необходимо записать предыдущее значение. А то получаются скачки. Сейчас в комнате 400, после перезагрузки первые 3-5 значений от датчика глючные, например, 65535, 128 или 5.
Или если значение == 65535, 128 или 5 то записываем предыдущее значение, пока не получим значение отличное от ошибочных.
Да именно такой код. По поводу анализа предыдущего значения, то тут мы упираемся в то, что почему-то в ваш метод передаётся странный массив параметров. Может у вас система не обновлена?

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

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

Добавлено: Ср фев 01, 2017 2:24 pm
EvgenyG
DimSun75 писал(а):Может у вас система не обновлена?
Вроде всё обновлено?