Помогите с программированием формулы!
Модератор: immortal
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Помогите с программированием формулы!
ну... я как бы даже пример кода привел.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 44
- Зарегистрирован: Чт апр 09, 2015 8:09 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Помогите с программированием формулы!
И еще вопрос, получаю температуру с переменной $ESP8266009c7f19.dsw1, как взять с этой переменной минимальное и максимальное значение температуры за 1 час. Как будет писаться переменная с мин и макс температурой?
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Помогите с программированием формулы!
Если в переменной каждый раз текущая температура, то никак.
Я бы сделал так:
1. Завел бы таблицу в базе данных и сохранял туда каждый раз температуру и время снятия показаний.
2. Написал бы запрос к этой таблице, чтобы мне возвращалось минимальное, максимальное и даже среднее значение
Я бы сделал так:
1. Завел бы таблицу в базе данных и сохранял туда каждый раз температуру и время снятия показаний.
2. Написал бы запрос к этой таблице, чтобы мне возвращалось минимальное, максимальное и даже среднее значение
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 44
- Зарегистрирован: Чт апр 09, 2015 8:09 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Помогите с программированием формулы!
В переменной каждый раз текущая температура, а как таблицу создать в базе данных, ведь я только начинающий.LutsenkoDenis писал(а):Если в переменной каждый раз текущая температура, то никак.
Я бы сделал так:
1. Завел бы таблицу в базе данных и сохранял туда каждый раз температуру и время снятия показаний.
2. Написал бы запрос к этой таблице, чтобы мне возвращалось минимальное, максимальное и даже среднее значение
-
- Сообщения: 44
- Зарегистрирован: Чт апр 09, 2015 8:09 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Помогите с программированием формулы!
LutsenkoDenis писал(а):Думаю лучше попробовать вот так:СпойлерПоказатьКод: Выделить всё
/** * Вычисляем скорость ветра по импульсам * @param double|int $newImpulseValue Новое значение импульса * @param double|int $oldImpulseValue Предыдущее значение импульса * @return double|int */ function GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue) { $secPerImpulse = 10; // приходят каждые 10 секунд $impulseToWindSpeedCoeff = 0.33; //коэффициент перерасчета импульсов в скорость ветра $windSpeed = ($newImpulseValue - $oldImpulseValue) * $impulseToWindSpeedCoeff / $secPerImpulse; return $windSpeed; } /* * В параметрах метода получаю это: * {s:8:"PROPERTY"; s:7:"counter"; s:9:"NEW_VALUE"; s:7:"214.0"; s:9:"OLD_VALUE"; s:7:"200.0"; s:21:"ORIGINAL_OBJECT_TITLE"; s:15:"ESP8266009c7f19"; } */ // получаем значение свойства counter $counter = $this->getProperty("counter"); if (is_array($counter)) { //проверяем что в $counter есть елементы NEW_VALUE и OLD_VALUE и они числовые, если нет - пишем сообщение об ошибке if ((isset($counter["NEW_VALUE"]) && is_numeric($counter["NEW_VALUE"])) && (isset($counter["OLD_VALUE"]) && is_numeric($counter["NEW_VALUE"]))) { $newImpulseValue = $counter["NEW_VALUE"]; //"214.0"; $oldImpulseValue = $counter["OLD_VALUE"]; //200.0; $windSpeed = GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue); // Результат: 0.462 echo $windSpeed; // записываем значение скорости ветра в свойство wind_speed $this->setProperty("wind_speed", $windSpeed); } else { echo "Не корректно указаны вводные параметры"; } } else { echo "Некорректные показания счётчика импульсов."; print_r($counter); }
Добавил в метод этот код в MD, все равно не считает
А зачем проверять что в $counter есть числовые элементы NEW_VALUE и OLD_VALUE?
Они же приходят судя по картинке
- Вложения
-
- Ведь здесь текущие и предыдущие показания есть?
- Метод wind_Check.png (13.76 КБ) 6556 просмотров
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Помогите с программированием формулы!
Ну во первых я не знаю откуда они приходят и в каком виде.Controer писал(а):А зачем проверять что в $counter есть числовые элементы NEW_VALUE и OLD_VALUE?
Они же приходят судя по картинке
Во вторых я уверен на 100% что они числовые. Поэтому добавлена проверка.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Помогите с программированием формулы!
попробуй вот так:
В коде есть такая конструкция $this->setProperty("wind_speed", $windSpeed);
$this - это к чему относится у тебя?
СпойлерПоказать
Код: Выделить всё
<?php
/**
* Вычисляем скорость ветра по импульсам
* @param double|int $newImpulseValue Новое значение импульса
* @param double|int $oldImpulseValue Предыдущее значение импульса
* @return double|int
*/
function GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue)
{
$secPerImpulse = 10; // приходят каждые 10 секунд
$impulseToWindSpeedCoeff = 0.33; //коэффициент перерасчета импульсов в скорость ветра
$windSpeed = (($newImpulseValue - $oldImpulseValue) * $impulseToWindSpeedCoeff) / $secPerImpulse;
return $windSpeed;
}
/*
* В параметрах метода получаю это:
* {s:8:"PROPERTY"; s:7:"counter"; s:9:"NEW_VALUE"; s:7:"214.0"; s:9:"OLD_VALUE"; s:7:"200.0"; s:21:"ORIGINAL_OBJECT_TITLE"; s:15:"ESP8266009c7f19"; }
*/
// получаем значение свойства counter
$obj = getObject("ESP8266009c7f19");
$newImpulseValue = $obj->getProperty("NEW_VALUE"); //"214.0";
$oldImpulseValue = $obj->getProperty("OLD_VALUE"); //200.0;
//проверяем что в $counter есть елемент NEW_VALUE и OLD_VALUE, если нет - пишем сообщение об ошибке
if (is_numeric($newImpulseValue) && is_numeric($oldImpulseValue))
{
$windSpeed = GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue); // Результат: 0.462
echo $windSpeed;
// записываем значение скорости ветра в свойство wind_speed
$this->setProperty("wind_speed", $windSpeed);
echo "OK";
}
else
{
echo "Некорректные показания счётчика импульсов.";
print_r($obj);
}
?>
$this - это к чему относится у тебя?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Помогите с программированием формулы!
вдогонку к вопросу зачем проверка:
метод getProperty($property) возвращает из таблицы pvalues содержимое поля VALUE, у которого тип TEXT. Т.е это всегда текстовое значение, в не зависимости от того что там внутри.. туда при желании можно содержимое pdf файла записать или еще много чего.
Поэтому проверка нужна всегда.
Таблицу создать как оказалось не надо, в настройках класса можно указать количество дней, за которые будет храниться история. Можно брать данные от туда.
метод getProperty($property) возвращает из таблицы pvalues содержимое поля VALUE, у которого тип TEXT. Т.е это всегда текстовое значение, в не зависимости от того что там внутри.. туда при желании можно содержимое pdf файла записать или еще много чего.
Поэтому проверка нужна всегда.
Таблицу создать как оказалось не надо, в настройках класса можно указать количество дней, за которые будет храниться история. Можно брать данные от туда.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 44
- Зарегистрирован: Чт апр 09, 2015 8:09 am
- Благодарил (а): 2 раза
- Поблагодарили: 1 раз
Re: Помогите с программированием формулы!
К сожалению не работает ваш код, а где переменная $counter, с которой приходят импульсыLutsenkoDenis писал(а):попробуй вот так:В коде есть такая конструкция $this->setProperty("wind_speed", $windSpeed);СпойлерПоказатьКод: Выделить всё
<?php /** * Вычисляем скорость ветра по импульсам * @param double|int $newImpulseValue Новое значение импульса * @param double|int $oldImpulseValue Предыдущее значение импульса * @return double|int */ function GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue) { $secPerImpulse = 10; // приходят каждые 10 секунд $impulseToWindSpeedCoeff = 0.33; //коэффициент перерасчета импульсов в скорость ветра $windSpeed = (($newImpulseValue - $oldImpulseValue) * $impulseToWindSpeedCoeff) / $secPerImpulse; return $windSpeed; } /* * В параметрах метода получаю это: * {s:8:"PROPERTY"; s:7:"counter"; s:9:"NEW_VALUE"; s:7:"214.0"; s:9:"OLD_VALUE"; s:7:"200.0"; s:21:"ORIGINAL_OBJECT_TITLE"; s:15:"ESP8266009c7f19"; } */ // получаем значение свойства counter $obj = getObject("ESP8266009c7f19"); $newImpulseValue = $obj->getProperty("NEW_VALUE"); //"214.0"; $oldImpulseValue = $obj->getProperty("OLD_VALUE"); //200.0; //проверяем что в $counter есть елемент NEW_VALUE и OLD_VALUE, если нет - пишем сообщение об ошибке if (is_numeric($newImpulseValue) && is_numeric($oldImpulseValue)) { $windSpeed = GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue); // Результат: 0.462 echo $windSpeed; // записываем значение скорости ветра в свойство wind_speed $this->setProperty("wind_speed", $windSpeed); echo "OK"; } else { echo "Некорректные показания счётчика импульсов."; print_r($obj); } ?>
$this - это к чему относится у тебя?
Может что то не так в программе. У меня такой принцип получения данных о ветре.
WiFi модуль ESP8266 передает импульсы датчика ветра на Mojordomo в виде переменной $counter.
Создал 2 свойства:
1. counter - количество импульсов с датчика ветра, в поле Запускать метод при изменении wind_check
2. wind_speed - значение скорости ветра
Создал метод:wind_check
Что пишем в коде метода? :
Мне нужно от текущего показания переменной $counter вычесть предыдущее показание $counter, чтобы получилась разница. А дальше я сам формулу рассчитаю.
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Помогите с программированием формулы!
что-то я уже совсем ничего не понимаю
(
Можешь сделать экспорт класса с методами и прислать, чтобы я на своей машине смог протестить?

Можешь сделать экспорт класса с методами и прислать, чтобы я на своей машине смог протестить?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch