Помогите с программированием формулы!

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

Модератор: immortal

Controer
Сообщения: 44
Зарегистрирован: Чт апр 09, 2015 8:09 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Помогите с программированием формулы!

Сообщение Controer » Ср май 27, 2015 10:47 am

LutsenkoDenis писал(а):что-то я уже совсем ничего не понимаю :((
Можешь сделать экспорт класса с методами и прислать, чтобы я на своей машине смог протестить?
При сохранении кода ругается на 1 строку:
Parse error: syntax error, unexpected '<' in C:\_majordomo\htdocs/cached/febe0f66cb34e4e4e8dee10912abaf09.php on line 1

1 <?php
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Помогите с программированием формулы!

Сообщение LutsenkoDenis » Ср май 27, 2015 10:52 am

:) lol
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Controer
Сообщения: 44
Зарегистрирован: Чт апр 09, 2015 8:09 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Помогите с программированием формулы!

Сообщение Controer » Ср май 27, 2015 11:08 am

Controer писал(а):
LutsenkoDenis писал(а):что-то я уже совсем ничего не понимаю :((
Можешь сделать экспорт класса с методами и прислать, чтобы я на своей машине смог протестить?
При сохранении кода ругается на 1 строку:
Parse error: syntax error, unexpected '<' in C:\_majordomo\htdocs/cached/febe0f66cb34e4e4e8dee10912abaf09.php on line 1

1 <?php
Вложения
ESP8266.rar
свойства объектов и методов
(1.37 КБ) 144 скачивания
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Помогите с программированием формулы!

Сообщение LutsenkoDenis » Ср май 27, 2015 1:53 pm

Ну значит вот так:
СпойлерПоказать

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

/**
 * Вычисляем скорость ветра по импульсам
 * @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;
}

/**
 * Возвращает ID заначения 
 * @param mixed $objectID ID объекта
 * @param mixed $propertyID ID свойства объекта
 * @return int
 */
function GetPropertyValueID($objectID, $propertyID)
{
   $propertyValueArr = SQLSelectOne("SELECT * 
                                       FROM pvalues 
                                      WHERE PROPERTY_ID = '" . $propertyID . "' 
                                        AND OBJECT_ID   = '" . $objectID . "'");
   
   $propertyValueID = isset($propertyValueArr["ID"]) ? $propertyValueArr["ID"] : -1;
   
   return (int)$propertyValueID;
}

/**
 * Возвращает предыдущее значение свойства объекта
 * @param mixed $propertyValueID ID свойства
 * @return mixed
 */
function GetPrevPropertyValue($propertyValueID)
{
   $history = SQLSelect("SELECT h.VALUE
                        FROM phistory  h
                       WHERE h.VALUE_ID = '". $propertyValueID . "' 
                         AND h.ID = (select max(ID)-1 
                                       from phistory h2 
                                      where h2.VALUE_ID = h.VALUE_ID
                                    )");
   $prevHistoryValue = isset($history[0]["VALUE"]) ? $history[0]["VALUE"] : null;
   
   return $prevHistoryValue;
}

// название объекта
const objectName = "ESP8266009c7f19"; 
// название свойства объекта
const propertyName = "counter";

// получаем объект
$obj = getObject(objectName);
// получаем ID свойства объекта
$propertyID = $obj->getPropertyByName(propertyName, $obj->class_id, $obj->id);
// получаем ID значения свойства
$propertyValueID = GetPropertyValueID($obj->id, $propertyID);

// если получили -1, то ID не найден. Пишем сообщение об ошибке.
if ($propertyValueID != -1)
{
   // текущее значение свойства
   $counterCurrValue = $obj->getProperty(propertyName);
   // предыдущее значение свойства
   $counterPrevValue = GetPrevPropertyValue($propertyValueID);
   // получаем скорость ветра
   $windSpeed = GetWindSpeedByImpulse($counterCurrValue, $counterPrevValue);
   // записываем значение скорости ветра в свойство windspeed
   $obj->setProperty("windspeed", $windSpeed);
   
   // отладочное сообщение, если не нужно можно удалить
   $message =  "Объект: " . objectName . "<br />Свойство объекта: " . propertyName . "<br />Текущее значение свойства: " . $counterCurrValue;
   $message .= "<br />Предыдущее значение свойства: " . $counterPrevValue;
   $message .= "<br />Скорость ветра: " . $windSpeed;
   
   echo $message;
}
else
{
   echo "Не найдено ID свойства объекта";
} 
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
layet
Сообщения: 78
Зарегистрирован: Чт янв 16, 2014 2:47 pm
Благодарил (а): 4 раза
Поблагодарили: 31 раз

Re: Помогите с программированием формулы!

Сообщение layet » Ср май 27, 2015 2:16 pm

Как-то слишком сложно. Обращаться к параметрам нужно в методе wind_check. Там они будут доступны.
Обращаться так: $params['OLD_VALUE'] и $params['NEW_VALUE']
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Помогите с программированием формулы!

Сообщение LutsenkoDenis » Ср май 27, 2015 2:32 pm

я не знал что можно обращаться из метода $params['OLD_VALUE'].
У меня работает так как я написал.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Controer
Сообщения: 44
Зарегистрирован: Чт апр 09, 2015 8:09 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Помогите с программированием формулы!

Сообщение Controer » Чт май 28, 2015 6:42 am

Ну вот доигрался, загрузил код в метод расчета скорости и завис мой MoDO.
Грузиться, открываешь браузер и долго грузиться стартовая страница MoDO. Процессор загружен на 100 процентов.Комп висит. Появляется такая ошибка
Fatal error: Maximum execution time of 60 seconds exceeded in C:\_majordomo\htdocs\lib\mysql.class.php on line 147
Что делать? Как найти и исправить эту строку.
Какая вообще процедура восстановление базы. В папке \htdocs\backup есть папки с датами. В папке 3 подпапки сms, text, sounds и один текстовый файл db_terminal. Куда копировать эти файлы?
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Помогите с программированием формулы!

Сообщение LutsenkoDenis » Чт май 28, 2015 9:10 am

ну... можно удалить метод из базы например, если дело в нем.
Через phpmyadmin

upd: Изменил у себя значение свойства, метод отработал, ничего не зависло. Скорее всего не из-за него.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Controer
Сообщения: 44
Зарегистрирован: Чт апр 09, 2015 8:09 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Помогите с программированием формулы!

Сообщение Controer » Пт май 29, 2015 9:55 pm

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;
}

/**
 * Возвращает ID заначения 
 * @param mixed $objectID ID объекта
 * @param mixed $propertyID ID свойства объекта
 * @return int
 */
function GetPropertyValueID($objectID, $propertyID)
{
   $propertyValueArr = SQLSelectOne("SELECT * 
                                       FROM pvalues 
                                      WHERE PROPERTY_ID = '" . $propertyID . "' 
                                        AND OBJECT_ID   = '" . $objectID . "'");
   
   $propertyValueID = isset($propertyValueArr["ID"]) ? $propertyValueArr["ID"] : -1;
   
   return (int)$propertyValueID;
}

/**
 * Возвращает предыдущее значение свойства объекта
 * @param mixed $propertyValueID ID свойства
 * @return mixed
 */
function GetPrevPropertyValue($propertyValueID)
{
   $history = SQLSelect("SELECT h.VALUE
                        FROM phistory  h
                       WHERE h.VALUE_ID = '". $propertyValueID . "' 
                         AND h.ID = (select max(ID)-1 
                                       from phistory h2 
                                      where h2.VALUE_ID = h.VALUE_ID
                                    )");
   $prevHistoryValue = isset($history[0]["VALUE"]) ? $history[0]["VALUE"] : null;
   
   return $prevHistoryValue;
}

// название объекта
const objectName = "ESP8266009c7f19"; 
// название свойства объекта
const propertyName = "counter";

// получаем объект
$obj = getObject(objectName);
// получаем ID свойства объекта
$propertyID = $obj->getPropertyByName(propertyName, $obj->class_id, $obj->id);
// получаем ID значения свойства
$propertyValueID = GetPropertyValueID($obj->id, $propertyID);

// если получили -1, то ID не найден. Пишем сообщение об ошибке.
if ($propertyValueID != -1)
{
   // текущее значение свойства
   $counterCurrValue = $obj->getProperty(propertyName);
   // предыдущее значение свойства
   $counterPrevValue = GetPrevPropertyValue($propertyValueID);
   // получаем скорость ветра
   $windSpeed = GetWindSpeedByImpulse($counterCurrValue, $counterPrevValue);
   // записываем значение скорости ветра в свойство windspeed
   $obj->setProperty("windspeed", $windSpeed);
   
   // отладочное сообщение, если не нужно можно удалить
   $message =  "Объект: " . objectName . "<br />Свойство объекта: " . propertyName . "<br />Текущее значение свойства: " . $counterCurrValue;
   $message .= "<br />Предыдущее значение свойства: " . $counterPrevValue;
   $message .= "<br />Скорость ветра: " . $windSpeed;
   
   echo $message;
}
else
{
   echo "Не найдено ID свойства объекта";
}





Переустановил базу заново, записал в метод ваш скрипт, все,равно считает не правильно.
.
Controer
Сообщения: 44
Зарегистрирован: Чт апр 09, 2015 8:09 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Помогите с программированием формулы!

Сообщение Controer » Пт май 29, 2015 10:01 pm

LutsenkoDenis писал(а):я не знал что можно обращаться из метода $params['OLD_VALUE'].
У меня работает так как я написал.
Куда вставлять $params['OLD_VALUE'], можете пример написать?
Получается надо делать так?
// получаем значение свойства counter
$counter['OLD_VALUE']=$this->getProperty("counter");
$counter['NEW_VALUE']=$this->getProperty("counter");
// вычисляем скороcть ветра
$windspeed = (($counter['NEW_VALUE'] - $counter['OLD_VALUE']) * 0.33) / 10;
// записываем значение скорости ветра в свойство wind_speed
$this->setProperty("windspeed", $windspeed);
Ответить