Страница 1 из 2
Как выборочно сохранять свойства (sensor temp)
Добавлено: Пт дек 06, 2019 6:55 pm
Kirch
Датчики периодически выдают нереальные значения по причине нестабильного питания или ещё чего.
Графики ужасно масштабируются и трудно пользоваться.
Хочется проверять значения перед сохранением, и если не в диапазоне, то не сохранять.
Например, сейчас сохранение датчиков сделано через веб-переменные.
Но я хочу переделать на сценарий в будущем.
подскажите, если webvars шаблоном поиска находит температуру в url, то как обратиться к этому значению из кода Действие при изменении: ?
$value пустое (проверял через DebMes)
Код: Выделить всё
$name="Sensor_temp17";
$sens=0.005;
if ($value==85.00 or $value>120) {
sg('$name.alive',0);
}
else {
if (gg('$name.alive')==0) {
sg('$name.alive',1);
}
$old_temp=gg('$name.value');
if ($value>$old_temp*(1+$sens) or $value<$old_temp(1-$sens)) {
sg('$name.value',$value);
CallMethod('$name.valueUpdated');
}
}
И надо ли вызывать методы объекта внутри после записи значений?
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Вт дек 10, 2019 1:59 pm
Jilber
У меня сделано так:
![1.jpg](./download/file.php?id=16426&sid=7ffd6267bd44e6c7dfa32c63eddd3f2b)
- 1.jpg (88.63 КБ) 4392 просмотра
Метод "InputChanged":
Код: Выделить всё
$newvalue = $this->getProperty('Input');
$oldvalue = $this->getProperty('value');
if ($newvalue > '0' && $newvalue <> $oldvalue) $this->setProperty('value',$newvalue);
Проверяется, чтобы новое значение было больше 0 и при этом отличалось от предыдущего значения (чтобы не сохранять в базу несколько одинаковых значений подряд).
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Вт дек 10, 2019 4:15 pm
Kirch
Jilber писал(а): ↑Вт дек 10, 2019 1:59 pm
Метод "InputChanged":
Благодарю.
Предложенный код нельзя переложить на методы веб-переменных. Так можно поступить, если отказаться от веб-переменных и сделать отдельный код и повесить на таймер. У меня десятки 1ware датчиков температуры на одном проводе на одном порту МЕгаД.
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Вт дек 10, 2019 4:51 pm
Logrus
Jilber писал(а): ↑Вт дек 10, 2019 1:59 pm
У меня сделано так:
Метод "InputChanged":
Код: Выделить всё
$newvalue = $this->getProperty('Input');
$oldvalue = $this->getProperty('value');
if ($newvalue > '0' && $newvalue <> $oldvalue) $this->setProperty('value',$newvalue);
Проверяется, чтобы новое значение было больше 0 и при этом отличалось от предыдущего значения (чтобы не сохранять в базу несколько одинаковых значений подряд).
у вас стандартная ошибка новичка, привязывать желательно или в свойство или в метод, оба сразу не желательно, в метод обычно передается в параметрах либо текущее, либо старое новое значения, так же можно прочитать и из свойства
в бз скайсильвер писал про фильтацию (там простые примеры были)
в последних обновах при записи в свойство тоже можно реализовать фильтрацию/конвертацию и пр. смотрите в настройках свойства на уровне класса
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Ср дек 11, 2019 5:44 pm
Jilber
Я вас правильно понял ?
![Value.jpg](./download/file.php?id=16447&sid=7ffd6267bd44e6c7dfa32c63eddd3f2b)
- Value.jpg (60.61 КБ) 4302 просмотра
Метод ValueUpdated:
Код: Выделить всё
/* begin injection of {SDevices} */
require(DIR_MODULES.'devices/SSensors_valueUpdated.php');
/* end injection of {SDevices} */
if ($this->getProperty('NEW_VALUE') > '0' && $NEW_VALUE <> $OLD_VALUE) $this->setProperty('value',$NEW_VALUE);
![WiFi-Iot.jpg](./download/file.php?id=16448&sid=7ffd6267bd44e6c7dfa32c63eddd3f2b)
- WiFi-Iot.jpg (50.77 КБ) 4302 просмотра
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Ср дек 11, 2019 7:25 pm
Logrus
нет, если в свойство, то :
![Снимок.PNG](./download/file.php?id=16451&sid=7ffd6267bd44e6c7dfa32c63eddd3f2b)
- Снимок.PNG (31.77 КБ) 4282 просмотра
если через метод, то свой
![Снимок2.PNG](./download/file.php?id=16452&sid=7ffd6267bd44e6c7dfa32c63eddd3f2b)
- Снимок2.PNG (39.74 КБ) 4282 просмотра
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Ср дек 11, 2019 7:33 pm
Jilber
А это не на альфе случаем появилось ? У меня нет такого.
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Ср дек 11, 2019 8:26 pm
Logrus
значит появится как с мастером сольют
п.с. кстати,
viewtopic.php?f=4&t=2096
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Ср дек 11, 2019 8:34 pm
Jilber
Т.е. пока в мастер не добавили я привязываю только метод без свойства ?
![WiFi-Iot.jpg](./download/file.php?id=16454&sid=7ffd6267bd44e6c7dfa32c63eddd3f2b)
- WiFi-Iot.jpg (16.32 КБ) 4253 просмотра
А в методе InputChanged пишу:
Код: Выделить всё
if ($this->getProperty('NEW_VALUE') > '0' && $NEW_VALUE <> $OLD_VALUE) $this->setProperty('value',$NEW_VALUE);
Re: Как выборочно сохранять свойства (sensor temp)
Добавлено: Ср дек 11, 2019 8:42 pm
Logrus
https://kb.mjdm.ru/filtraciya-i-okrugle ... majordomo/
выше говорил, здесь простые способы Скайсильвер подробно расписал
и в методы значения параметрами передаются, у вас синтаксис не верный и код не имеет смысла
те же сяоми, простой пример метода выше
Код: Выделить всё
//при низком значении емкости аккамулятора, сенсоры сяоми шлют предупреждение (значение выходящее за разумный порог) и влед за ним нормальное, что б не ломать графики - фильтруем
if ($params['temperature'] < -5000) {
DebMes($params['ORIGINAL_OBJECT_TITLE'] . ' error');
return;
}
$value = round($params['temperature']/100, 1);
//проверка перед записью на повтор
if ($this->getProperty('value') != $value) {
$this->setProperty('value', $value);
$this->callMethod('heartbeat');
}