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

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

Модератор: immortal

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

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

Сообщение Kalm45 »

Есть устройство реле, 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
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am

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

Сообщение Chainik »

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

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

$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);
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

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

Сообщение skysilver »

Это 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;

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

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

Сообщение 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
Raspberry Pi 3B+
Аватара пользователя
xor
Сообщения: 2044
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

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

Сообщение xor »


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

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

Сообщение woow »

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