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

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

Модератор: immortal

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

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

Сообщение EvgenyG » Вт янв 31, 2017 11:33 pm

пробовал разные комбинации:
'NEW_VALUE' на 'VALUE' (или на 'value' не знаю чем они отличаются) и 'PROPERTY' на "TITLE'
если заменить 'PROPERTY' на "TITLE' то начинают появляться дублирующие значения
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 11:37 pm

условия начали работать вроде
но переменные не заменяются
для чего

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

$this-> 
пишется?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Вт янв 31, 2017 11:53 pm

EvgenyG писал(а):условия начали работать вроде
но переменные не заменяются
для чего пишется?
Указатель на текущий объект
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Ср фев 01, 2017 12:16 am

Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод 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" тоже будет нормальное значение, а вот в истории будут дубликаты.
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Ср фев 01, 2017 1:58 pm

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 только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываются
Вложения
CO2Переменные.png
CO2Переменные.png (12.04 КБ) 4932 просмотра
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Ср фев 01, 2017 2:02 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 только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываются
Не должно. Последний else как раз и записывает нормальные значения. Кстати из него $this->setProperty($params['TITLE'],$params['VALUE']); можно убрать. Оно лишнее

Отправлено с моего SM-G850F через Tapatalk
За это сообщение автора DimSun75 поблагодарил:
EvgenyG (Ср фев 01, 2017 2:04 pm)
Рейтинг: 1.16%
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Ср фев 01, 2017 2:05 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
Всё заработало!!!!
Спасибо огромное!
Надо было перезагрузить esp, не понимаю как это связано, но после перезагрузки по питанию esp всё заработало!
Вложения
CO2Фильтрация.png
CO2Фильтрация.png (13.75 КБ) 4922 просмотра
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 » Ср фев 01, 2017 2:11 pm

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

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 то записываем предыдущее значение, пока не получим значение отличное от ошибочных.
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Ср фев 01, 2017 2:18 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 то записываем предыдущее значение, пока не получим значение отличное от ошибочных.
Да именно такой код. По поводу анализа предыдущего значения, то тут мы упираемся в то, что почему-то в ваш метод передаётся странный массив параметров. Может у вас система не обновлена?

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

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

Сообщение EvgenyG » Ср фев 01, 2017 2:24 pm

DimSun75 писал(а):Может у вас система не обновлена?
Вроде всё обновлено?
Вложения
ВерсияСистемы.jpg
ВерсияСистемы.jpg (70.6 КБ) 4904 просмотра
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ответить