Спасибо за участие.
По порядку:
skysilver писал(а):
Какая розетка - вайфай или зигби?
Розетка ZeegBee - qbcz11lm
skysilver писал(а):
Что значит "запустил процедуру, которая слушает по порту 4321"? Что за процедура такая? И что за порт? Первый раз такой вижу. Какие данные там тебе приходят?
Лучше раз увидеть, тем более что процедура очень простая:
Код: Выделить всё
<?php
//Reduce errors
error_reporting(~E_WARNING);
//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP))) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if ( !socket_bind($sock, "0.0.0.0" , 9898) ) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
$grpparms = array("group"=>"224.0.0.50","interface"=>"eth0");
if (!socket_set_option($sock,IPPROTO_IP,MCAST_JOIN_GROUP,$grpparms)) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not set option: [$errorcode] $errormsg \n");
}
//Do some communication, this loop can handle multiple clients
while(1){
echo "=>";
//Receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf . "\n";
}
socket_close($sock);
Получаю результат:
admin@Va-nas:/apps/phpr6/web/php-miio-master$ php socket.php
Socket created
Socket bind OK
=>192.168.1.40 : 4321 -- {"cmd":"heartbeat","model":"gateway","sid":"7811dc64e1f6","short_id":"0","token":"n9LckKTKJQ1MsIMd","data":"{\"ip\":\"192.168.1.40\"}"}
=>192.168.1.40 : 4321 -- {"cmd":"heartbeat","model":"gateway","sid":"7811dc64e1f6","short_id":"0","token":"UWQNfqAl3bs7Vfsj","data":"{\"ip\":\"192.168.1.40\"}"}
=>192.168.1.40 : 4321 -- {"cmd":"heartbeat","model":"gateway","sid":"7811dc64e1f6","short_id":"0","token":"3amC77Rfz4akelVz","data":"{\"ip\":\"192.168.1.40\"}"}
=>192.168.1.40 : 4321 -- {"cmd":"heartbeat","model":"gateway","sid":"7811dc64e1f6","short_id":"0","token":"6sm41nnTBUGvM1X4","data":"{\"ip\":\"192.168.1.40\"}"}
сейчас даже попал на отчет от GateWay:
=>192.168.1.40 : 4321 -- {"cmd":"report","model":"gateway","sid":"7811dc64e1f6","short_id":0,"data":"{\"rgb\":0,\"illumination\":422}"}
=>192.168.1.40 : 4321 -- {"cmd":"heartbeat","model":"gateway","sid":"7811dc64e1f6","short_id":"0","token":"4ES0WVTccFwd2wDP","data":"{\"ip\":\"192.168.1.40\"}"}
=>192.168.1.40 : 4321 -- {"cmd":"report","model":"gateway","sid":"7811dc64e1f6","short_id":0,"data":"{\"rgb\":0,\"illumination\":426}"}
=>192.168.1.40 : 4321 -- {"cmd":"heartbeat","model":"gateway","sid":"7811dc64e1f6","short_id":"0","token":"X20Uwr1cJNoOlXA3","data":"{\"ip\":\"192.168.1.40\"}"}
но ни каких сообщений от розетки нет, хотя только что ее включил/выключил.
Еще что накопал:
На команду '{"cmd" : "get_id_list"}'
получаю ответ:
{"cmd":"get_id_list_ack","sid":"7811dc64e1f6","token":"DCwyA8neQvoFIUY8","data":"[\"158d0001dad197\",\"158d0001d541b5\",\"158d00016da5d8\",\"158d0001f51a4d\"]"}
И судя по всему - последняя - розетка (т.к. 158d00016da5d8 - "model":"ctrl_neutral2", 158d0001d541b5 - ,"model":"motion" и 158d0001dad197 - "model":"sensor_magnet.aq2"), но запрос: '{"cmd" : "read","sid":"158d0001f51a4d"}'
дает ответ: {"cmd":"read_ack","model":"","sid":"158d0001f51a4d","short_id":32475,"data":"{\"voltage\":3600}"}
Хотя судя по документации, что давал выше, должны быть параметры:
status
load_voltage
load_power
power_consumed
Собственно их я и хочу считывать.
И странно - что модель не дает. А все остальные устройства - дают модель, выше указал.
Вот что есть. Пока только одна мысль - посниферить, как общается приложение. Но пока не занялся этим, т.к. снифер не установлен ни какой.