Страница 3 из 5
Re: Глупые вопросы новичка
Добавлено: Вс дек 23, 2018 7:04 pm
Chainik
DiminatorDK писал(а): Вс дек 23, 2018 2:57 pm
Спасибо! Помогло! Осталось с нумерацией индекса разобраться и как-то прибавить к нему единицу

Мне кажется надо ввести отдельную переменную к которой будет прибавляться единица. Что-то типа а=12 а потом в цикле а=а+1. Если такое возможно.
Так что ли?
Код: Выделить всё
$status = file_get_contents('http://192.168.1.21/state.xml');
$ot=$this->object_title;
$status = preg_match("!<iovalue>(.*?)</iovalue>!si", $status, $matches);
$arr = str_split($matches['1']);
echo "Array:". $matches['1'] ." <br>";
echo "ObjectName:". $ot ." <br>";
echo "Position 12= ". $matches['1']['11'] ." <br>";
echo "Arr position 12= ". $arr['11'] ." <br>";
foreach ($arr as $index => $value) {
if ($index >= 11) {
$index = $index + 1;
sg ('"module1.relay".$index.".Status"',$value);
//echo "Номер выхода- " . $index .", значение: " . $value ." <br>";
}
}
Но это пример по групповому выставлению статусов.
Вы же, насколько я понял, хотели выставлять статусы единичным портам, причем классовым методом. Думаю, тут можно поступить таким образом.
В классе добавляем свойства (возможно, часть свойств уже есть):
ipAddress - IP-адрес контроллера;
Port - номер порта, относящийся к конкретному объекту;
Status - отражает состояние порта ("0" или "1").
В классе добавляем метод, с помощью которого будет устанавливаться статус конкретного порта. Можно назвать его как угодно, но пусть будет
GetStatus. Запишем туда код метода:
Код: Выделить всё
$status = file_get_contents("http://".$this->getProperty('ipAddress')."/state.xml");
$ot=$this->object_title;
$Port = $this->getProperty('Port');
$status = preg_match("!<iovalue>(.*?)</iovalue>!si", $status, $matches);
$arr = str_split($matches['1']);
$this->setProperty('Status', $arr[$Port-1]);
Re: Глупые вопросы новичка
Добавлено: Вс дек 23, 2018 7:06 pm
hc2hunter
подскажите, а можно как-то из истории команд вытянуть, какая была в системе последняя команда?
может есть какой-то встроенный метод у command.php ?
спасибо!
Re: Глупые вопросы новичка
Добавлено: Вс дек 23, 2018 10:29 pm
tarasfrompir
hc2hunter писал(а): Вс дек 23, 2018 7:06 pm
подскажите, а можно как-то из истории команд вытянуть, какая была в системе последняя команда?
может есть какой-то встроенный метод у command.php ?
спасибо!
последнее сообщение системы
Код: Выделить всё
$last_msg = SQLSelectOne("SELECT * FROM shouts ORDER BY ID DESC");
DebMes($last_msg['MESSAGE']);
Последняя команда юзера
Код: Выделить всё
$last_msg = SQLSelectOne("SELECT * FROM shouts WHERE MEMBER_ID>=1 ORDER BY ID DESC");
DebMes($last_msg['MESSAGE']);
Ну где то так...
Спасибо нажимать обязательно!

ПС
Пришлось дополнять ответ ибо непонятно что нужно толи команду пользователя толи ответ системы
Re: Глупые вопросы новичка
Добавлено: Вс дек 23, 2018 11:39 pm
DiminatorDK
Chainik писал(а): Вс дек 23, 2018 7:04 pm
Так что ли?
$index = $index + 1;
Но это пример по групповому выставлению статусов.
Вы же, насколько я понял, хотели выставлять статусы единичным портам, причем классовым методом. Думаю, тут можно поступить таким образом.
В классе добавляем свойства (возможно, часть свойств уже есть):
ipAddress - IP-адрес контроллера;
Port - номер порта, относящийся к конкретному объекту;
Status - отражает состояние порта ("0" или "1").
В классе добавляем метод, с помощью которого будет устанавливаться статус конкретного порта. Можно назвать его как угодно, но пусть будет
GetStatus. Запишем туда код метода:
Код: Выделить всё
$status = file_get_contents("http://".$this->getProperty('ipAddress')."/state.xml");
$ot=$this->object_title;
$Port = $this->getProperty('Port');
$status = preg_match("!<iovalue>(.*?)</iovalue>!si", $status, $matches);
$arr = str_split($matches['1']);
$this->setProperty('Status', $arr[$Port-1]);
Да, мне именно групповое обновление нужно. Одиночное не имеет смысла так как мне приходится обращаться к оборудованию а не наоборот. Странно но именно так я и пробовал $index = $index + 1; но получил ошибку. Странно. В любом случае спасибо огромное за помощь. Буду дальше пробовать. В классе все сделал именно так как вы описали.
Подскажите, а вы код пишете в MD или есть какой-то другой, более удобный интерфейс?
Re: Глупые вопросы новичка
Добавлено: Пн дек 24, 2018 1:42 am
Lerych
Посмотри как сделал я
viewtopic.php?f=8&t=5898&start=40#p93271
Будут вопросы пиши, отвечу.
Re: Глупые вопросы новичка
Добавлено: Пн дек 24, 2018 8:46 am
Chainik
DiminatorDK писал(а): Вс дек 23, 2018 11:39 pm
Да, мне именно групповое обновление нужно. Одиночное не имеет смысла так как мне приходится обращаться к оборудованию а не наоборот. Странно но именно так я и пробовал $index = $index + 1; но получил ошибку. Странно. В любом случае спасибо огромное за помощь. Буду дальше пробовать. В классе все сделал именно так как вы описали.
Тоже странно, что вылезает ошибка. Я попробовал запустить скриптом у себя код с $index = $index + 1; и ошибки не возникло (взял пример ответа от контроллера, который вы приводили в первом посте).
DiminatorDK писал(а): Вс дек 23, 2018 11:39 pm
Подскажите, а вы код пишете в MD или есть какой-то другой, более удобный интерфейс?
Пишу в MD, потому что здесь сразу можно все оперативно запустить, проверить и отладить. Еще иногда, если очень большой код, пользуюсь NotePad++ (там есть подсветка функций, группировка уровней), но для проверки все равно приходится все переносить в MD.
Помимо нас, "чайников" сюда иногда заходят их превосходительство программеры. Может они подскажут, где еще удобно писать и отлаживать код.
Re: Глупые вопросы новичка
Добавлено: Пн дек 24, 2018 9:26 am
hc2hunter
tarasfrompir1 писал(а): Вс дек 23, 2018 10:29 pm
последнее сообщение системы
Код: Выделить всё
$last_msg = SQLSelectOne("SELECT * FROM shouts ORDER BY ID DESC");
DebMes($last_msg['MESSAGE']);
Последняя команда юзера
Код: Выделить всё
$last_msg = SQLSelectOne("SELECT * FROM shouts WHERE MEMBER_ID>=1 ORDER BY ID DESC");
DebMes($last_msg['MESSAGE']);
большое спасибо за ответ.
собственно, посмотрев содержимое command.php, я так и понял, что придется нарисовать руками, т.к. никаких встроенных GET-ключей нигде не наблюдается...
Re: Глупые вопросы новичка
Добавлено: Пн дек 24, 2018 3:38 pm
DiminatorDK
Спасибо, посмотрел. Но для меня это пока очень сложно. И главное отличие заключается в том что ваше устройство умеет сообщать о себе, мое к сожалению нет. И вы, если я правильно понял, основной упор делали на что чтобы обновлять только те переменные, которые изменились, чтобы повысить производительность. Или я ошибаюсь? Я в php очень слаб, вынужденно взялся за изучение, поэтому многое еще не понятно.
Re: Глупые вопросы новичка
Добавлено: Пн дек 24, 2018 5:10 pm
hc2hunter
tarasfrompir1 писал(а): Вс дек 23, 2018 10:29 pm
последнее сообщение системы
Код: Выделить всё
$last_msg = SQLSelectOne("SELECT * FROM shouts ORDER BY ID DESC");
DebMes($last_msg['MESSAGE']);
а как можно выбрать последнее сообщение системы, скажем за последние 10 секунд?
ну, понятное дело, если сообщения были раньше - должно вернуться "ничего".
Посмотрел опять же command.php... довольно запутанно. Не поможете, что добавить в WHERE ?
Сейчас последнее сообщение от имени системы я выбираю так:
Код: Выделить всё
$sqlQuery = "SELECT MESSAGE
FROM shouts
WHERE MEMBER_ID = 0
ORDER BY ID DESC
LIMIT 1";
Re: Глупые вопросы новичка
Добавлено: Пн дек 24, 2018 7:21 pm
hc2hunter
Подумав... изобразил так:
Код: Выделить всё
$sqlQuery = "SELECT MESSAGE
FROM shouts
WHERE MEMBER_ID = 0 AND UNIX_TIMESTAMP(ADDED) > ".(time()-10)."
ORDER BY ID DESC
LIMIT 1";
$last_msg = SQLSelectOne($sqlQuery);
echo($last_msg['MESSAGE']);