Как выборочно сохранять свойства (sensor temp)

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

Модератор: immortal

Kirch
Сообщения: 51
Зарегистрирован: Чт июл 26, 2018 4:50 pm
Благодарил (а): 12 раз
Поблагодарили: 7 раз

Как выборочно сохранять свойства (sensor temp)

Сообщение Kirch » Пт дек 06, 2019 6:55 pm

Датчики периодически выдают нереальные значения по причине нестабильного питания или ещё чего.
Графики ужасно масштабируются и трудно пользоваться.

Хочется проверять значения перед сохранением, и если не в диапазоне, то не сохранять.
Например, сейчас сохранение датчиков сделано через веб-переменные.
Но я хочу переделать на сценарий в будущем.

подскажите, если 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');
		} 
    }
И надо ли вызывать методы объекта внутри после записи значений?
Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Jilber » Вт дек 10, 2019 1:59 pm

У меня сделано так:
СпойлерПоказать
1.jpg
1.jpg (88.63 КБ) 4224 просмотра
Метод "InputChanged":

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

$newvalue = $this->getProperty('Input');
$oldvalue = $this->getProperty('value');
if ($newvalue > '0' && $newvalue <> $oldvalue) $this->setProperty('value',$newvalue);
Проверяется, чтобы новое значение было больше 0 и при этом отличалось от предыдущего значения (чтобы не сохранять в базу несколько одинаковых значений подряд).
За это сообщение автора Jilber поблагодарил:
Kirch (Вт дек 10, 2019 4:11 pm)
Рейтинг: 1.16%
Kirch
Сообщения: 51
Зарегистрирован: Чт июл 26, 2018 4:50 pm
Благодарил (а): 12 раз
Поблагодарили: 7 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Kirch » Вт дек 10, 2019 4:15 pm

Jilber писал(а):
Вт дек 10, 2019 1:59 pm
Метод "InputChanged":
Благодарю.
Предложенный код нельзя переложить на методы веб-переменных. Так можно поступить, если отказаться от веб-переменных и сделать отдельный код и повесить на таймер. У меня десятки 1ware датчиков температуры на одном проводе на одном порту МЕгаД.
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Logrus » Вт дек 10, 2019 4:51 pm

Jilber писал(а):
Вт дек 10, 2019 1:59 pm
У меня сделано так:
СпойлерПоказать
1.jpg
Метод "InputChanged":

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

$newvalue = $this->getProperty('Input');
$oldvalue = $this->getProperty('value');
if ($newvalue > '0' && $newvalue <> $oldvalue) $this->setProperty('value',$newvalue);
Проверяется, чтобы новое значение было больше 0 и при этом отличалось от предыдущего значения (чтобы не сохранять в базу несколько одинаковых значений подряд).
у вас стандартная ошибка новичка, привязывать желательно или в свойство или в метод, оба сразу не желательно, в метод обычно передается в параметрах либо текущее, либо старое новое значения, так же можно прочитать и из свойства
в бз скайсильвер писал про фильтацию (там простые примеры были)

в последних обновах при записи в свойство тоже можно реализовать фильтрацию/конвертацию и пр. смотрите в настройках свойства на уровне класса
За это сообщение автора Logrus поблагодарил:
Jilber (Ср дек 11, 2019 5:28 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Jilber » Ср дек 11, 2019 5:44 pm

Я вас правильно понял ?
СпойлерПоказать
Value.jpg
Value.jpg (60.61 КБ) 4134 просмотра
Метод 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
WiFi-Iot.jpg (50.77 КБ) 4134 просмотра
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Logrus » Ср дек 11, 2019 7:25 pm

нет, если в свойство, то :
Снимок.PNG
Снимок.PNG (31.77 КБ) 4114 просмотров
если через метод, то свой
Снимок2.PNG
Снимок2.PNG (39.74 КБ) 4114 просмотров
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Jilber » Ср дек 11, 2019 7:33 pm

А это не на альфе случаем появилось ? У меня нет такого.
СпойлерПоказать
Изображение
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Logrus » Ср дек 11, 2019 8:26 pm

значит появится как с мастером сольют
п.с. кстати, viewtopic.php?f=4&t=2096
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Jilber » Ср дек 11, 2019 8:34 pm

Т.е. пока в мастер не добавили я привязываю только метод без свойства ?
СпойлерПоказать
WiFi-Iot.jpg
WiFi-Iot.jpg (16.32 КБ) 4085 просмотров
А в методе InputChanged пишу:

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

if ($this->getProperty('NEW_VALUE') > '0' && $NEW_VALUE <> $OLD_VALUE) $this->setProperty('value',$NEW_VALUE);
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Как выборочно сохранять свойства (sensor temp)

Сообщение Logrus » Ср дек 11, 2019 8:42 pm

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');
}
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить