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

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

Модератор: immortal

DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Вт янв 31, 2017 9:15 am

EvgenyG писал(а): так тоже не работает
не могу разобраться
можете поправить мой код?
Ну есть же рядом с "Запускать метод при изменении (не обязательно)" кнопочка с буковкой "i". Там же все и написано http://majordomo.smartliving.ru/Hints/o ... ?skin=hint А ваш метод должен выглядеть примерно так:

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

If ($params['NEW_VALUE'] <398) {
   $this->setProperty($params['PROPERTY'], 390);
   say('Ошибка CO2<398');
} else 
   If ($params['NEW_VALUE'] ) {
     $this->setProperty($params['PROPERTY'], 1400);
     say('Ошибка CO2>3000');
   } else
    {
       $this->setProperty($params['PROPERTY'],$params['NEW_VALUE']);
    }
 
И да, я бы все-таки такую фильтрацию делал на устройстве, которое опрашивает датчик.
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

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

DimSun75 писал(а):
EvgenyG писал(а): так тоже не работает
не могу разобраться
можете поправить мой код?
Ну есть же рядом с "Запускать метод при изменении (не обязательно)" кнопочка с буковкой "i". Там же все и написано http://majordomo.smartliving.ru/Hints/o ... ?skin=hint А ваш метод должен выглядеть примерно так:

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

If ($params['NEW_VALUE'] <398) {
   $this->setProperty($params['PROPERTY'], 390);
   say('Ошибка CO2<398');
} else 
   If ($params['NEW_VALUE'] ) {
     $this->setProperty($params['PROPERTY'], 1400);
     say('Ошибка CO2>3000');
   } else
    {
       $this->setProperty($params['PROPERTY'],$params['NEW_VALUE']);
    }
И да, я бы все-таки такую фильтрацию делал на устройстве, которое опрашивает датчик.
Спасибо
По ссылке только три строки, не разобрался
Ваш код у меня не работает.
Каждый опрос датчика выводит 'Ошибка CO2<398' на основной странице
Не понятно, где в Вашем коде проверка на условие Ошибка CO2>3000
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 10:15 pm

EvgenyG писал(а): Спасибо
По ссылке только три строки, не разобрался
Ваш код у меня не работает.
Странно. Сейчас специально создал новый объект с методом из моего кода. Создал свойство и привязал этот метод при изменении. Добавил в меню слайдер и привязал его к свойству. Все адекватно реагирует. Ну и да, у меня небольшая ошибочка: во втором if должно быть

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

If ($params['NEW_VALUE'] > 3000) { 
Каждый опрос датчика выводит 'Ошибка CO2<398' на основной странице
Что у вас в X-Ray на это метод пишется?
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

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

DimSun75 писал(а): Что у вас в X-Ray на это метод пишется?
Из X-Ray
CO2SpBol.parm_change
Проверка и замена "глючных" значений


a:4:{s:5:" TITLE" ; s:3:" co2" ; s:5:" VALUE" ; s:3:" 682" ; s:5:" value" ; s:3:" 682" ; s:21:" ORIGINAL_OBJECT_TITLE" ; s:8:" CO2SpBol" ; } 2017-01-31 22:38:20
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 10:48 pm

EvgenyG писал(а):
DimSun75 писал(а): Что у вас в X-Ray на это метод пишется?
Из X-Ray
CO2SpBol.parm_change
Проверка и замена "глючных" значений


a:4:{s:5:" TITLE" ; s:3:" co2" ; s:5:" VALUE" ; s:3:" 682" ; s:5:" value" ; s:3:" 682" ; s:21:" ORIGINAL_OBJECT_TITLE" ; s:8:" CO2SpBol" ; } 2017-01-31 22:38:20
Хм, интересно, у меня другие параметры передает. Но можно попробовать в моем коде поменять 'NEW_VALUE' на 'VALUE' (или на 'value' не знаю чем они отличаются) и 'PROPERTY' на "TITLE'
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

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

DimSun75 писал(а):
EvgenyG писал(а):
DimSun75 писал(а): Что у вас в X-Ray на это метод пишется?
Из X-Ray
CO2SpBol.parm_change
Проверка и замена "глючных" значений


a:4:{s:5:" TITLE" ; s:3:" co2" ; s:5:" VALUE" ; s:3:" 682" ; s:5:" value" ; s:3:" 682" ; s:21:" ORIGINAL_OBJECT_TITLE" ; s:8:" CO2SpBol" ; } 2017-01-31 22:38:20
Хм, интересно, у меня другие параметры передает. Но можно попробовать в моем коде поменять 'NEW_VALUE' на 'VALUE' (или на 'value' не знаю чем они отличаются) и 'PROPERTY' на "TITLE'
Так:

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

If ($params['VALUE'] < 398) {
   $this->setProperty($params['TITLE'], 390);
   say('Ошибка CO2<398');
} else 
If ($params['VALUE'] > 3000) {
     $this->setProperty($params['TITLE'], 1400);
     say('Ошибка CO2>3000');
   } else
    {
       $this->setProperty($params['TITLE'],$params['VALUE']);
    } 
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:04 pm

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

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

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

DimSun75 писал(а):Да
Если открыть переменную, то вот какие значения:
2017-01-31 23:05:53: 400 X
2017-01-31 23:05:43: 400 X
2017-01-31 23:05:33: 390 X
2017-01-31 23:05:33: 5 X
2017-01-31 23:05:29: 390 X
2017-01-31 23:05:29: 5 X
2017-01-31 23:05:19: 390 X
2017-01-31 23:05:19: 128 X
2017-01-31 23:04:51: 916 X
2017-01-31 23:04:51: 916 X
2017-01-31 23:04:41: 914 X

значения в одинаковые промежутки времени
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:17 pm

EvgenyG писал(а):
DimSun75 писал(а):Да
Если открыть переменную, то вот какие значения:
2017-01-31 23:05:53: 400 X
2017-01-31 23:05:43: 400 X
2017-01-31 23:05:33: 390 X
2017-01-31 23:05:33: 5 X
2017-01-31 23:05:29: 390 X
2017-01-31 23:05:29: 5 X
2017-01-31 23:05:19: 390 X
2017-01-31 23:05:19: 128 X
2017-01-31 23:04:51: 916 X
2017-01-31 23:04:51: 916 X
2017-01-31 23:04:41: 914 X

значения в одинаковые промежутки времени
Очень похоже, что метод работает и работает правильно. Происходит похоже следующее: при получении значения оно записывается в базу. после этого вызывается метод CO2SpBol.parm_change, который фильтрует и новое значение опять попадает в базу.
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

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

DimSun75 писал(а):
EvgenyG писал(а):
DimSun75 писал(а):Да
Если открыть переменную, то вот какие значения:
2017-01-31 23:05:53: 400 X
2017-01-31 23:05:43: 400 X
2017-01-31 23:05:33: 390 X
2017-01-31 23:05:33: 5 X
2017-01-31 23:05:29: 390 X
2017-01-31 23:05:29: 5 X
2017-01-31 23:05:19: 390 X
2017-01-31 23:05:19: 128 X
2017-01-31 23:04:51: 916 X
2017-01-31 23:04:51: 916 X
2017-01-31 23:04:41: 914 X

значения в одинаковые промежутки времени
Очень похоже, что метод работает и работает правильно. Происходит похоже следующее: при получении значения оно записывается в базу. после этого вызывается метод CO2SpBol.parm_change, который фильтрует и новое значение опять попадает в базу.
Да, похоже.
Упростил код вроде ничего не изменилось))

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

If ($params['VALUE'] < 398) {
   $this->setProperty($params['TITLE'], 390);
   say('Ошибка CO2<398');
} 
If ($params['VALUE'] > 3000) {
     $this->setProperty($params['TITLE'], 1400);
     say('Ошибка CO2>3000');
   } 
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ответить