Глупые вопросы новичка

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Глупые вопросы новичка

Сообщение Chainik » Вс дек 23, 2018 7:04 pm

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]);
Последний раз редактировалось Chainik Вс дек 23, 2018 10:41 pm, всего редактировалось 1 раз.
За это сообщение автора Chainik поблагодарил:
DiminatorDK (Пн дек 24, 2018 11:50 pm)
Рейтинг: 1.16%
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: Глупые вопросы новичка

Сообщение hc2hunter » Вс дек 23, 2018 7:06 pm

подскажите, а можно как-то из истории команд вытянуть, какая была в системе последняя команда?
может есть какой-то встроенный метод у command.php ?

спасибо!
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Глупые вопросы новичка

Сообщение tarasfrompir » Вс дек 23, 2018 10:29 pm

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']);
Ну где то так...
Спасибо нажимать обязательно! :oops:
ПС
Пришлось дополнять ответ ибо непонятно что нужно толи команду пользователя толи ответ системы
За это сообщение автора tarasfrompir поблагодарил:
hc2hunter (Пн дек 24, 2018 9:09 am)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
DiminatorDK
Сообщения: 104
Зарегистрирован: Сб фев 20, 2016 12:19 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: Глупые вопросы новичка

Сообщение DiminatorDK » Вс дек 23, 2018 11:39 pm

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 или есть какой-то другой, более удобный интерфейс?
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Re: Глупые вопросы новичка

Сообщение Lerych » Пн дек 24, 2018 1:42 am

Посмотри как сделал я viewtopic.php?f=8&t=5898&start=40#p93271
Будут вопросы пиши, отвечу.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Глупые вопросы новичка

Сообщение Chainik » Пн дек 24, 2018 8:46 am

DiminatorDK писал(а):
Вс дек 23, 2018 11:39 pm
Да, мне именно групповое обновление нужно. Одиночное не имеет смысла так как мне приходится обращаться к оборудованию а не наоборот. Странно но именно так я и пробовал $index = $index + 1; но получил ошибку. Странно. В любом случае спасибо огромное за помощь. Буду дальше пробовать. В классе все сделал именно так как вы описали.
Тоже странно, что вылезает ошибка. Я попробовал запустить скриптом у себя код с $index = $index + 1; и ошибки не возникло (взял пример ответа от контроллера, который вы приводили в первом посте).
DiminatorDK писал(а):
Вс дек 23, 2018 11:39 pm
Подскажите, а вы код пишете в MD или есть какой-то другой, более удобный интерфейс?
Пишу в MD, потому что здесь сразу можно все оперативно запустить, проверить и отладить. Еще иногда, если очень большой код, пользуюсь NotePad++ (там есть подсветка функций, группировка уровней), но для проверки все равно приходится все переносить в MD.
Помимо нас, "чайников" сюда иногда заходят их превосходительство программеры. Может они подскажут, где еще удобно писать и отлаживать код.
Последний раз редактировалось Chainik Пн дек 24, 2018 10:01 am, всего редактировалось 1 раз.
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: Глупые вопросы новичка

Сообщение hc2hunter » Пн дек 24, 2018 9:26 am

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-ключей нигде не наблюдается...
DiminatorDK
Сообщения: 104
Зарегистрирован: Сб фев 20, 2016 12:19 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: Глупые вопросы новичка

Сообщение DiminatorDK » Пн дек 24, 2018 3:38 pm

Lerych писал(а):
Пн дек 24, 2018 1:42 am
Посмотри как сделал я viewtopic.php?f=8&t=5898&start=40#p93271
Будут вопросы пиши, отвечу.
Спасибо, посмотрел. Но для меня это пока очень сложно. И главное отличие заключается в том что ваше устройство умеет сообщать о себе, мое к сожалению нет. И вы, если я правильно понял, основной упор делали на что чтобы обновлять только те переменные, которые изменились, чтобы повысить производительность. Или я ошибаюсь? Я в php очень слаб, вынужденно взялся за изучение, поэтому многое еще не понятно.
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: Глупые вопросы новичка

Сообщение hc2hunter » Пн дек 24, 2018 5:10 pm

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";
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: Глупые вопросы новичка

Сообщение hc2hunter » Пн дек 24, 2018 7:21 pm

Подумав... изобразил так:

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

$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']);
Последний раз редактировалось hc2hunter Пн дек 24, 2018 7:44 pm, всего редактировалось 2 раза.
Ответить