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

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Вт янв 09, 2018 9:58 am

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-значный токен устройства.
За это сообщение автора skysilver поблагодарили (всего 2):
sigment (Вт янв 09, 2018 5:32 pm) • directman66 (Чт янв 25, 2018 2:40 pm)
Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
sigment
Сообщения: 138
Зарегистрирован: Вт ноя 14, 2017 6:39 pm
Откуда: Москва
Благодарил (а): 44 раза
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение sigment » Вт янв 09, 2018 5:47 pm

skysilver спасибо огромное. Я в key не знал что нужно прописать. ))) Теперь мои мучения окончены с токенами.
Raspberry Pi3, Xiaomi, BroadLink, ESP8266
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

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

Сообщение woow » Пн янв 22, 2018 12:25 pm

Если я запрошу у своего Raspberry на которм стоит МД по этому пункту, я получу токены?

"1. Поиск устройств в сети (handshake discover)
Для поиска miIO-устройств необходимо на компьютере с установленным PHP и подключенном к локальной сети выполнить в консоли команду:
php miio-cli.php --discover all
Результатом команды будет список найденных устройств и в случае успеха их токенов. Если устройство не транслирует свой токен, то значение будет заполнено нулями, и в таком случае выяснять токен придется другими способами."
Raspberry Pi 3B+
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн янв 22, 2018 12:29 pm

woow писал(а):Если я запрошу у своего Raspberry на которм стоит МД по этому пункту, я получу токены?
Этот функционал уже есть в модуле. Нет необходимости ковыряться с консольными командами. Ничего нового она не даст.
За это сообщение автора skysilver поблагодарил:
directman66 (Чт янв 25, 2018 2:40 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
VaShe
Сообщения: 6
Зарегистрирован: Ср янв 24, 2018 10:07 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение VaShe » Ср янв 24, 2018 10:39 pm

Приветствую всех!!!

Если кто сможет, подскажите почему у меня не сработали 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". Есть что изучить на эту тему?

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

Валера
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Ср янв 24, 2018 10:44 pm

VaShe писал(а):Есть что изучить на эту тему? И если кто подскажет, как опросить розетку на предмет напряжения, загрузки, статуса и т.д. то буду благодарен! Валера
Привет. Чет я не понял твоей цели. )) Не проще готовым модулем воспользоваться?
За это сообщение автора skysilver поблагодарил:
directman66 (Чт янв 25, 2018 2:40 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
VaShe
Сообщения: 6
Зарегистрирован: Ср янв 24, 2018 10:07 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение VaShe » Чт янв 25, 2018 10:37 pm

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

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

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

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

Есть версии - как снять показания с розетки?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Чт янв 25, 2018 11:02 pm

Можно на NAS МД воткнуть при желании =D...это так, к слову,...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пт янв 26, 2018 4:22 pm

VaShe, ситуацию понял. Давай разбираться по порядку.

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

Что значит "запустил процедуру, которая слушает по порту 4321"? Что за процедура такая? И что за порт? Первый раз такой вижу. Какие данные там тебе приходят?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
VaShe
Сообщения: 6
Зарегистрирован: Ср янв 24, 2018 10:07 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение VaShe » Сб янв 27, 2018 1:02 am

Спасибо за участие.
По порядку:
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
Собственно их я и хочу считывать.

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

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