Страница 17 из 24

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Вт янв 09, 2018 9:58 am
skysilver
sigment писал(а):Если не сложно, объясни как пользоваться, какие параметры выставить? Потыкал ни чего не получается. А кредиты там заканчиваются.
1. Открываем ссылку http://aes.online-domain-tools.com/
2. В Input type выбираем Text
3. В Input text вставляем зашифрованный 96-значный токен, который достали из бекапа, и выбираем тип Hex.
4. В Function выбираем алгоритм шифрования AES.
5. В Mode ставим режим ECB.
6. В Key в качестве ключа расшифровки пишем 00000000000000000000000000000000 (32 ноля), и также выбираем тип Hex.
7. Жмем Decrypt> и ниже в Decrypted text: в правой его части забираем нужный 32-значный токен устройства.

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Вт янв 09, 2018 5:47 pm
sigment
skysilver спасибо огромное. Я в key не знал что нужно прописать. ))) Теперь мои мучения окончены с токенами.

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Пн янв 22, 2018 12:25 pm
woow
Если я запрошу у своего Raspberry на которм стоит МД по этому пункту, я получу токены?

"1. Поиск устройств в сети (handshake discover)
Для поиска miIO-устройств необходимо на компьютере с установленным PHP и подключенном к локальной сети выполнить в консоли команду:
php miio-cli.php --discover all
Результатом команды будет список найденных устройств и в случае успеха их токенов. Если устройство не транслирует свой токен, то значение будет заполнено нулями, и в таком случае выяснять токен придется другими способами."

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Пн янв 22, 2018 12:29 pm
skysilver
woow писал(а):Если я запрошу у своего Raspberry на которм стоит МД по этому пункту, я получу токены?
Этот функционал уже есть в модуле. Нет необходимости ковыряться с консольными командами. Ничего нового она не даст.

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Ср янв 24, 2018 10:39 pm
VaShe
Приветствую всех!!!

Если кто сможет, подскажите почему у меня не сработали php классы miio.class.php и mipacket.class.php и их вызовы через miio-cli.php.
Точнее не все сработало.
--discover all - сработало и был найден gateway, а команды info и sendcmd не сработали.
Для того что бы они заработал sendcmd, я покурил: https://aqara.gitbooks.io/lumi-gateway- ... tions.html (случайно наткнулся)
и сделал вызовы на порт 9898 - тогда заработало. Но сначала ответ был пустой, пока не догадался отключить формирование пакета и шифрацию и не стал просто гнать команды.

Собственно я не понял, почему мой gateway (сам о себе он пишет: model:lumi.gateway.v3 hw_ver:MW300) общается не на miiO а на "Lumi Gateway Lan Communication API". Есть что изучить на эту тему?

И если кто подскажет, как опросить розетку на предмет напряжения, загрузки, статуса и т.д. то буду благодарен!

Валера

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Ср янв 24, 2018 10:44 pm
skysilver
VaShe писал(а):Есть что изучить на эту тему? И если кто подскажет, как опросить розетку на предмет напряжения, загрузки, статуса и т.д. то буду благодарен! Валера
Привет. Чет я не понял твоей цели. )) Не проще готовым модулем воспользоваться?

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Чт янв 25, 2018 10:37 pm
VaShe
Привет! Спасибо за ответ!
skysilver писал(а): Не проще готовым модулем воспользоваться?
У меня сейчас есть устройство (Gateway и розетка) и возможность написать код на php на NAS-e NetGear. И надо снять потребление за определенный период времени. Программа MiHome дает не понятный немного результат, поэтому хочу сам снять данные. Поэтому я и взял за основу твою библиотечку на php.

Так же есть желание разобраться, что дает эта элементная база, а не то, что умеют модули работы с этими устройствами. Поэтому я пошел по длинному пути :-)

Можно поставить систему на ноут и наверно смогу мониторить и решу первую часть задачи. Но разобраться с возможностями элементной базы мне такой подход не поможет.

Я к стати запустил процедуру, которая слушает "heartbeat" по порту 4321 и gateway она "слышит", но розетка почему-то молчит, даже после того как я ее включу и выключу - ничего не получаю.

Есть версии - как снять показания с розетки?

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Чт янв 25, 2018 11:02 pm
nick7zmail
Можно на NAS МД воткнуть при желании =D...это так, к слову,...

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Пт янв 26, 2018 4:22 pm
skysilver
VaShe, ситуацию понял. Давай разбираться по порядку.

Какая розетка - вайфай или зигби?

Что значит "запустил процедуру, которая слушает по порту 4321"? Что за процедура такая? И что за порт? Первый раз такой вижу. Какие данные там тебе приходят?

Re: miIO - протокол для Xiaomi (Mi Home) устройств

Добавлено: Сб янв 27, 2018 1:02 am
VaShe
Спасибо за участие.
По порядку:
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
Собственно их я и хочу считывать.

И странно - что модель не дает. А все остальные устройства - дают модель, выше указал.

Вот что есть. Пока только одна мысль - посниферить, как общается приложение. Но пока не занялся этим, т.к. снифер не установлен ни какой.