если заменить 'PROPERTY' на "TITLE' то начинают появляться дублирующие значения'NEW_VALUE' на 'VALUE' (или на 'value' не знаю чем они отличаются) и 'PROPERTY' на "TITLE'
Фильтрация значений получаемых от датчиков
Модератор: immortal
-
- Сообщения: 220
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 57 раз
- Поблагодарили: 1 раз
Re: Фильтрация значений получаемых от датчиков
пробовал разные комбинации:
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
-
- Сообщения: 220
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 57 раз
- Поблагодарили: 1 раз
Re: Фильтрация значений получаемых от датчиков
условия начали работать вроде
но переменные не заменяются
для чего пишется?
но переменные не заменяются
для чего
Код: Выделить всё
$this->
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
-
- Сообщения: 318
- Зарегистрирован: Вс янв 01, 2017 8:32 pm
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 44 раза
Re: Фильтрация значений получаемых от датчиков
Указатель на текущий объектEvgenyG писал(а):условия начали работать вроде
но переменные не заменяются
для чегопишется?Код: Выделить всё
$this->
-
- Сообщения: 318
- Зарегистрирован: Вс янв 01, 2017 8:32 pm
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 44 раза
Re: Фильтрация значений получаемых от датчиков
Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.
Код: Выделить всё
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']);
}
-
- Сообщения: 220
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 57 раз
- Поблагодарили: 1 раз
Re: Фильтрация значений получаемых от датчиков
Создал свойство CO2SpBol.CO2f только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываютсяDimSun75 писал(а):Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.Код: Выделить всё
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']); }
- Вложения
-
- CO2Переменные.png (12.04 КБ) 4934 просмотра
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
-
- Сообщения: 318
- Зарегистрирован: Вс янв 01, 2017 8:32 pm
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 44 раза
Re: Фильтрация значений получаемых от датчиков
Не должно. Последний else как раз и записывает нормальные значения. Кстати из него $this->setProperty($params['TITLE'],$params['VALUE']); можно убрать. Оно лишнееEvgenyG писал(а):Создал свойство CO2SpBol.CO2f только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываютсяDimSun75 писал(а):Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.Код: Выделить всё
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']); }
Отправлено с моего SM-G850F через Tapatalk
- Рейтинг: 1.16%
-
- Сообщения: 220
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 57 раз
- Поблагодарили: 1 раз
Re: Фильтрация значений получаемых от датчиков
Всё заработало!!!!DimSun75 писал(а):Не должно. Последний else как раз и записывает нормальные значения. Кстати из него $this->setProperty($params['TITLE'],$params['VALUE']); можно убрать. Оно лишнееEvgenyG писал(а):Создал свойство CO2SpBol.CO2f только, похоже, что в неё записываются только исправленные значения. Если значения в нормальном диапазоне, то они в эту переменную не записываютсяDimSun75 писал(а):Полазил немного по исходником. Там похоже действительно сначала история сохраняется, а потом вызывается метод ONCHANGE. В В нем мы опять вызывает setProperty и оно записывает еще одно значение в историю. Тут нужно или из метода ONCHANGE лезть в таблицу истории и там подправлять. Либо добавить к классу еще одно свойство, включить у него историю и складывать туда отфильтрованные значения. Метод parm_change должен выглядеть примерно так:
При этом в класс нужно добавить новое свойство "co2f" и включить у него историю. В нем и будут нормальные значения. В текущем значении свойства "co2" тоже будет нормальное значение, а вот в истории будут дубликаты.Код: Выделить всё
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']); }
Отправлено с моего SM-G850F через Tapatalk
Спасибо огромное!
Надо было перезагрузить esp, не понимаю как это связано, но после перезагрузки по питанию esp всё заработало!
- Вложения
-
- CO2Фильтрация.png (13.75 КБ) 4924 просмотра
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
-
- Сообщения: 220
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 57 раз
- Поблагодарили: 1 раз
Re: Фильтрация значений получаемых от датчиков
Код: Выделить всё
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)
-
- Сообщения: 318
- Зарегистрирован: Вс янв 01, 2017 8:32 pm
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 44 раза
Re: Фильтрация значений получаемых от датчиков
Да именно такой код. По поводу анализа предыдущего значения, то тут мы упираемся в то, что почему-то в ваш метод передаётся странный массив параметров. Может у вас система не обновлена?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
-
- Сообщения: 220
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 57 раз
- Поблагодарили: 1 раз
Re: Фильтрация значений получаемых от датчиков
Вроде всё обновлено?DimSun75 писал(а):Может у вас система не обновлена?
- Вложения
-
- ВерсияСистемы.jpg (70.6 КБ) 4906 просмотров
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)