Доброго дня!
Есть у меня небольшая хотелка - корректировать показания с датчиков, но пока нет мыслей как это реализовать. Может уже есть готовое решение?
Суть проблемы следующая: есть несколько ESPшек, с которых прилетают GET-запросы и обрабатываются сценарием "espdata". Этот сценарий уже раскладывает GET-запрос на составляющие и записывает значение с датчика в SQL.
Есть, например, два датчика температуры, которые стоят в одном и том же месте, но показания различаются на 0,5 градуса. Как мне скорректировать показания одного из датчиков? (В функционале прошивки ESP от wifi-iot.com коррекция есть, но не для всех датчиков (на AM2320 нету) и можно только добавлять/вычитать определённое значение, а может понадобиться и умножать значение на коэффициент).
Корректировка значений датчиков
Модератор: immortal
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Корректировка значений датчиков
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Re: Корректировка значений датчиков
Добрый день.
Вопрос похоже не по теме форума. Необходимо добиться идентичной работы датчиков, это всегда правильней. Если хочется корректировать в системе, то как вариант пишете значение в переменную 1, вешаете обработчик, там по своей формуле пересчитываете и пишете в переменную2 по которой и ведете архив+графики.
Удачи
Вопрос похоже не по теме форума. Необходимо добиться идентичной работы датчиков, это всегда правильней. Если хочется корректировать в системе, то как вариант пишете значение в переменную 1, вешаете обработчик, там по своей формуле пересчитываете и пишете в переменную2 по которой и ведете архив+графики.
Удачи
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Re: Корректировка значений датчиков
Добиться идентичной работы датчиков нереально, всегда есть разброс хоть на 0,01 градуса. Вот и хочется этот разброс скорректировать. А вопрос был как раз по теме - как программно реализовать корректировку значений с датчиков? Я понимаю что надо:
Понятно что можно в скрипте прописать:Но какое-то топорное решение. Хочется чего-то оригинального и изящного. Вот поэтому и спрашиваю - кто как реализовал это?
Вопрос в том - как это сделать? Если в скрипте "espdata" - то корректироваться будут сразу вся серия датчиков каждой ESPшки (например, все датчики dsw1), а нужна выборочная корректировка.пишете значение в переменную 1, вешаете обработчик, там по своей формуле пересчитываете и пишете в переменную2
Понятно что можно в скрипте прописать:
Код: Выделить всё
если (IDшник = "ESP_1") то {ESP_1.значение температуры_1 = ESP_1.значение температуры_1 + 0,5};
если (IDшник = "ESP_2") то {ESP_2.значение температуры_1 = ESP_2.значение температуры_1 + 0,01};
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Корректировка значений датчиков
Зима пришла.....Ответ простой - просто после получения значения с датчика отнять или прибавить 0.01 градуса. Я даже не поднимаю вопрос - зачем ??? Вопрос в другом - кому Вы верите - тому , кто показывает 23.4 или 23.5 ??? Сейчас в одной комнате 4 далласа и разница в показаниях 10 градусов ! Когда начал разбираться - один касается стены возле двери на улицу, другой на подоконнике над батареей и остальные на столе в середине комнаты. Когда Вы поставите градусники в одну точку - тогда можно говорить о какой то калибровке.Ko/|xo3HUk писал(а):Добиться идентичной работы датчиков нереально, всегда есть разброс хоть на 0,01 градуса.... Вот поэтому и спрашиваю - кто как реализовал это?
Как это реализовать в МД я не знаю , а в АМС просто отнять или прибавить к полученному значению ту разницу , какую хотите.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Корректировка значений датчиков
1. а нельзя добавить каждому датчику свойство Корректировка и эту дельту прибавлять к результату?
2. а в базу когда пишется, там можно корректировать? или лучше поле "Значение с учетом корректировки" завести, апдейтить и оттуда брать?
ps. Мой конкретный случай с коррекцией значения (не знаю, поможет?):
У меня погодная станция возвращает абсолютное давление, мне интересно видеть относительное.
Я переназвал файл, где идет обработка данных от погодной станции, из cumulus.php на cumulus_my.php (чтобы при обновлении не затирался). Поменял соотв. ссылку на него.
В нём уже и поставил коррекцию (-0,3 мм рт ст)
2. а в базу когда пишется, там можно корректировать? или лучше поле "Значение с учетом корректировки" завести, апдейтить и оттуда брать?
ps. Мой конкретный случай с коррекцией значения (не знаю, поможет?):
У меня погодная станция возвращает абсолютное давление, мне интересно видеть относительное.
Я переназвал файл, где идет обработка данных от погодной станции, из cumulus.php на cumulus_my.php (чтобы при обновлении не затирался). Поменял соотв. ссылку на него.
В нём уже и поставил коррекцию (-0,3 мм рт ст)
Код: Выделить всё
if ($updated['pressure'])
{
setGlobal('ws.pressureRt', round((((float)getGlobal('ws.pressure'))/1.33322)-0.3,2));
}
Последний раз редактировалось xor Сб дек 03, 2016 10:06 pm, всего редактировалось 1 раз.
- За это сообщение автора xor поблагодарил:
- Ko/|xo3HUk (Пн дек 05, 2016 6:59 pm)
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Корректировка значений датчиков
Что касается МД тут не подскажу - просто не представляю как это работает((((
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 160
- Зарегистрирован: Ср окт 07, 2015 9:36 am
- Благодарил (а): 51 раз
- Поблагодарили: 27 раз
Re: Корректировка значений датчиков
По этому пути и решил пойти. Т.к. хотелось сделать корректировку не только сложением. но и умножением на коэффициент - решил делать по формуле:xor писал(а):1. а нельзя добавить каждому датчику свойство Корректировка и эту дельту прибавлять к результату?
Код: Выделить всё
скорректированное значение с датчика = текущее значение с датчика * коэффициент умножения + коэффициент сложения

СпойлерПоказать
Код: Выделить всё
//Создаём алиасы для уже знакомых ESP-шек
if ($params['idesp']=="ESP826600f5хххх")
{$params['idesp'] = "ESP8266_Outside" ;
// DebMes("espdata request: ".$_SERVER['REQUEST_URI']); // После этого в XRay во вкладке debug можно смотреть результат.
}
if ($params['idesp']=="ESP826600f5хххх") {$params['idesp'] = "ESP8266_Hall" ; }
if ($params['idesp']=="ESP826600f4хххх") {$params['idesp'] = "ESP8266_Kitchen" ; }
if ($params['idesp']=="ESP8266000aхххх") {$params['idesp'] = "ESP8266_Bathroom" ; }
if ($params['idesp']=="ESP8266000aхххх") {$params['idesp'] = "ESP8266_Server" ; }
if ($params['idesp']=="ESP82660017хххх")
{$params['idesp'] = "ESP8266_Garage" ;
// DebMes("espdata request: ".$_SERVER['REQUEST_URI']); // После этого в XRay во вкладке debug можно смотреть результат.
}
if ($params['idesp']=="") { return; } //Если ID устройства отсутствует, то перестаем отрабатывать сценарий
addClass('ESP8266'); //Создаем класс ESP8266
addClassObject('ESP8266',$params['idesp']); //Создаем в классе ESP8266 объект где в качестве имени
addClassProperty('ESP8266', 'vdd', 90); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 90 дней
addClassProperty('ESP8266', 'updated', 1); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 1 дней
addClassProperty('ESP8266', 'updatedTime', 1); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 1 дней
addClassProperty('ESP8266', 'alive', 1); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 1 дней
addClassProperty('ESP8266', 'bmpp_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmpp_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmpt_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmpt_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmep_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmep_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmet_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmet_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmeh_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'bmeh_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'amt_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'amt_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'amh_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'amh_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhth1_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhth1_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhth2_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhth2_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhtt1_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhtt1_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhtt2_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dhtt2_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw1_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw1_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw2_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw2_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw3_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw3_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw4_multiplier', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
addClassProperty('ESP8266', 'dsw4_addition', 0); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 0 дней
if (gg($params['idesp'].".bmpp_multiplier")=="") { sg(($params['idesp'].".bmpp_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".bmpp_addition")=="") { sg(($params['idesp'].".bmpp_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".bmpt_multiplier")=="") { sg(($params['idesp'].".bmpt_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".bmpt_addition")=="") { sg(($params['idesp'].".bmpt_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".bmep_multiplier")=="") { sg(($params['idesp'].".bmep_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".bmep_addition")=="") { sg(($params['idesp'].".bmep_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".bmet_multiplier")=="") { sg(($params['idesp'].".bmet_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".bmet_addition")=="") { sg(($params['idesp'].".bmet_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".bmeh_multiplier")=="") { sg(($params['idesp'].".bmeh_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".bmeh_addition")=="") { sg(($params['idesp'].".bmeh_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".amt_multiplier")=="") { sg(($params['idesp'].".amt_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".amt_addition")=="") { sg(($params['idesp'].".amt_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".amh_multiplier")=="") { sg(($params['idesp'].".amh_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".amh_addition")=="") { sg(($params['idesp'].".amh_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dhth1_multiplier")=="") { sg(($params['idesp'].".dhth1_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dhth1_addition")=="") { sg(($params['idesp'].".dhth1_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dhth2_multiplier")=="") { sg(($params['idesp'].".dhth2_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dhth2_addition")=="") { sg(($params['idesp'].".dhth2_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dhtt1_multiplier")=="") { sg(($params['idesp'].".dhtt1_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dhtt1_addition")=="") { sg(($params['idesp'].".dhtt1_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dhtt2_multiplier")=="") { sg(($params['idesp'].".dhtt2_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dhtt2_addition")=="") { sg(($params['idesp'].".dhtt2_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw1_multiplier")=="") { sg(($params['idesp'].".dsw1_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw1_addition")=="") { sg(($params['idesp'].".dsw1_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw2_multiplier")=="") { sg(($params['idesp'].".dsw2_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw2_addition")=="") { sg(($params['idesp'].".dsw2_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw3_multiplier")=="") { sg(($params['idesp'].".dsw3_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw3_addition")=="") { sg(($params['idesp'].".dsw3_addition"),0); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw4_multiplier")=="") { sg(($params['idesp'].".dsw4_multiplier"),1); } //Инициализация коэффициента
if (gg($params['idesp'].".dsw4_addition")=="") { sg(($params['idesp'].".dsw4_addition"),0); } //Инициализация коэффициента
//Распихиваем всё по свойствам. Если полученное значение пустое, то свойство не записываем
if ($params['bmpp']!="") { sg(($params['idesp'].".bmpp"),$params['bmpp']*gg($params['idesp'].".bmpp_multiplier")+gg($params['idesp'].".bmpp_addition")); } //Данные с датчика BMP (давление)
if ($params['bmpt']!="") { sg(($params['idesp'].".bmpt"),$params['bmpt']*gg($params['idesp'].".bmpt_multiplier")+gg($params['idesp'].".bmpt_addition")); } //Данные с датчика BMP (температура)
if (($params['bmep']!="") && ($params['bmep']!="_BMEP_")) { sg(($params['idesp'].".bme_pressure"),$params['bmep']*gg($params['idesp'].".bmep_multiplier")+gg($params['idesp'].".bmep_addition")); } //Данные с датчика BME280 (давление)
if (($params['bmet']!="") && ($params['bmet']!="_BMET_")) { sg(($params['idesp'].".bme_temper"),$params['bmet']*gg($params['idesp'].".bmet_multiplier")+gg($params['idesp'].".bmet_addition")); } //Данные с датчика BME280 (температура)
if (($params['bmeh']!="") && ($params['bmeh']!="_BMEH_")) { sg(($params['idesp'].".bme_humidity"),$params['bmeh']*gg($params['idesp'].".bmeh_multiplier")+gg($params['idesp'].".bmeh_addition")); } //Данные с датчика BME280 (влажность)
if ($params['counter']!="") { sg(($params['idesp'].".counter"),$params['counter']); } //Количество импульсов со счетчика
if (($params['amt']!="") && ($params['amt']!="255.0")) { sg(($params['idesp'].".am2320_temper"),$params['amt']*gg($params['idesp'].".amt_multiplier")+gg($params['idesp'].".amt_addition")); } //Данные с I2C датчика AM232x (температура)
if (($params['amh']!="") && ($params['amh']!="255.0")) { sg(($params['idesp'].".am2320_humidity"),$params['amh']*gg($params['idesp'].".amh_multiplier")+gg($params['idesp'].".amh_addition")); } //Данные с I2C датчика AM232x (влажность)
if ($params['dhth1']!="") { sg(($params['idesp'].".dhth1"),$params['dhth1']*gg($params['idesp'].".dhth1_multiplier")+gg($params['idesp'].".dhth1_addition")); } //Данные с первого датчика DHT (влажность)
if ($params['dhth2']!="") { sg(($params['idesp'].".dhth2"),$params['dhth2']*gg($params['idesp'].".dhth2_multiplier")+gg($params['idesp'].".dhth2_addition")); } //Данные со второго датчика DHT (влажность)
if ($params['dhtt1']!="") { sg(($params['idesp'].".dhtt1"),$params['dhtt1']*gg($params['idesp'].".dhtt1_multiplier")+gg($params['idesp'].".dhtt1_addition")); } //Данные с первого датчика DHT (температура)
if ($params['dhtt2']!="") { sg(($params['idesp'].".dhtt2"),$params['dhtt2']*gg($params['idesp'].".dhtt2_multiplier")+gg($params['idesp'].".dhtt2_addition")); } //Данные со второго датчика DHT (температура)
if (($params['dsw1']!="") && ($params['dsw1']!="255.0")) { sg(($params['idesp'].".Temper_1"),$params['dsw1']*gg($params['idesp'].".dsw1_multiplier")+gg($params['idesp'].".dsw1_addition")); } //Данные с датчика DS18B20 №1
if (($params['dsw2']!="") && ($params['dsw2']!="255.0")) { sg(($params['idesp'].".Temper_2"),$params['dsw2']*gg($params['idesp'].".dsw2_multiplier")+gg($params['idesp'].".dsw2_addition")); } //Данные с датчика DS18B20 №2
if (($params['dsw3']!="") && ($params['dsw3']!="255.0")) { sg(($params['idesp'].".Temper_3"),$params['dsw3']*gg($params['idesp'].".dsw3_multiplier")+gg($params['idesp'].".dsw3_addition")); } //Данные с датчика DS18B20 №3
if (($params['dsw4']!="") && ($params['dsw4']!="255.0")) { sg(($params['idesp'].".Temper_4"),$params['dsw4']*gg($params['idesp'].".dsw4_multiplier")+gg($params['idesp'].".dsw4_addition")); } //Данные с датчика DS18B20 №4
if (($params['dsw5']!="") && ($params['dsw5']!="255.0")) { sg(($params['idesp'].".Temper_5"),$params['dsw5']); } //Данные с датчика DS18B20 №5
if ($params['freemem']!="") { sg(($params['idesp'].".freemem"),$params['freemem']); } //Объем свободной памяти модуля
if ($params['hostname']!="") { sg(($params['idesp'].".hostname"),$params['hostname']); } //Имя модуля
if ($params['light']!="") { sg(($params['idesp'].".light"),$params['light']); } //Данные с датчика BH1750
if ($params['uptime']!="") { sg(($params['idesp'].".uptime"),$params['uptime']); } //Время непрерывной работы модуля
if ($params['vdd']!="") { sg(($params['idesp'].".vdd"),$params['vdd']); } //Напряжение на модуле
if ($params['ver']!="") { sg(($params['idesp'].".ver"),$params['ver']); } //Версия прошивки
if ($params['wanip']!="") { sg(($params['idesp'].".wanip"),$params['wanip']); } //IP-адрес
sg(($params['idesp'].".idesp"),$params['idesp']); //
Код: Выделить всё
<form name="test" method="post" action="input1.php">
<input type="text" size="40">
</form>
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)