Обработка ответа от устройства в PHP

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

Модератор: immortal

Ответить
Kalm45
Сообщения: 2
Зарегистрирован: Пн фев 11, 2019 1:29 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Обработка ответа от устройства в PHP

Сообщение Kalm45 » Пн фев 11, 2019 1:47 pm

Есть устройство реле, URL запрос на проверку состояния выхода :
http://192.168.17.120/control?cmd=Status,GPIO,12 проверка статуса, ответ будет такого типа :
{
"log": "",
"plugin": 1,
"pin": 12,
"mode": "output",
"state": 1
}
Какую команду использовать в РНР чтобы получить значение "slate" ? для контроля состояния выхода.
Пытался через file_get_contents , но не получилось, не слишком силен в програмировании,т.ч не пинайте сильно )
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Обработка ответа от устройства в PHP

Сообщение Chainik » Пн фев 11, 2019 2:43 pm

Видно, что вам нужен последний символ ответа (если, конечно, им не является "}"). Последний символ можно получить так:

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

$state = file_get_contents("http://192.168.17.120/control?cmd=Status,GPIO,12");
$state = substr($state,-1);
Ну а, например, третий символ с конца, так:

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

$state = substr($state,-3,1);
А еще надежней, думаю, так:

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

$state = substr($state,strpos($state,'"state": ')+9,1);
За это сообщение автора Chainik поблагодарил:
Kalm45 (Пн фев 11, 2019 4:16 pm)
Рейтинг: 1.16%
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Обработка ответа от устройства в PHP

Сообщение skysilver » Пн фев 11, 2019 3:09 pm

Это JSON.

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

$res = json_decode(file_get_contents("http://192.168.17.120/control?cmd=Status,GPIO,12"));

echo $res->pin;
echo $res->mode;
echo $res->state;

За это сообщение автора skysilver поблагодарил:
Kalm45 (Пн фев 11, 2019 4:15 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Обработка ответа от устройства в PHP

Сообщение woow » Вс мар 31, 2019 11:12 pm

если запрашивать сервер http://192.168.1.61, он вываливает состояние всех реле:

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

{"Relay_0":1 ,"Relay_1":0 ,"Relay_2":0 ,"Relay_3":0 ,"Relay_4":0 ,"Relay_5":0 ,"Relay_6":0 ,"Relay_7":0 }
для свойства первого реле мне надо расшифровать эту строку:
создаю метод decode:

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

$res = json_decode(file_get_contents("http://192.168.1.61"));
echo $res->Relay_0;
создаю свойство status для Реле1 и в нём отмечаю запускать метод decode при изменении
но не чего не происходит
При тесте метода, Метод даёт такую осечку:

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

Warning: file_get_contents(http://192.168.1.61): failed to open stream: HTTP request failed! {"Relay_0":0 ,"Relay_1":0 ,"Relay_2":0 ,"Relay_3":0 ,"Relay_4":0 ,"Relay_5":0 ,"Relay_6":0 ,"Relay_7":0 } in /var/www/html/modules/objects/objects.class.php(570) : eval()'d code on line 1
Raspberry Pi 3B+
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Обработка ответа от устройства в PHP

Сообщение xor » Пн апр 01, 2019 5:31 pm


woow писал(а):если запрашивать сервер http://192.168.1.61, он вываливает состояние всех реле:

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

{"Relay_0":1 ,"Relay_1":0 ,"Relay_2":0 ,"Relay_3":0 ,"Relay_4":0 ,"Relay_5":0 ,"Relay_6":0 ,"Relay_7":0 }
для свойства первого реле мне надо расшифровать эту строку:
создаю метод decode:

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

$res = json_decode(file_get_contents("http://192.168.1.61"));
echo $res->Relay_0;
создаю свойство status для Реле1 и в нём отмечаю запускать метод decode при изменении
но не чего не происходит
При тесте метода, Метод даёт такую осечку:

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

Warning: file_get_contents(http://192.168.1.61): failed to open stream: HTTP request failed! {"Relay_0":0 ,"Relay_1":0 ,"Relay_2":0 ,"Relay_3":0 ,"Relay_4":0 ,"Relay_5":0 ,"Relay_6":0 ,"Relay_7":0 } in /var/www/html/modules/objects/objects.class.php(570) : eval()'d code on line 1
Есть Реле 1, у него есть статус, при изменении статуса вызывается метод, который должен узнать, какой у реле статус и напечатать статус реле0?
Кто меняет статус Реле1, чтобы запустился метод декоде?

Отправлено с моего Redmi 4X через Tapatalk

Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Обработка ответа от устройства в PHP

Сообщение woow » Пн апр 01, 2019 9:46 pm

xor писал(а):
Пн апр 01, 2019 5:31 pm
Кто меняет статус Реле1, чтобы запустился метод декоде?
для начала как-то нужно вытащить контент
Raspberry Pi 3B+
Ответить