Страница 11 из 139

Re: [Модуль] Xiaomi miIO

Добавлено: Сб янв 13, 2018 10:47 pm
Dicont
Вот что удалось протестировать. Команды работают! Но это еще не все скорее всего.
Пример брал вот отсюда https://github.com/rytilahti/python-miio/issues/69
Это немного другая колонка попроще Mi Internet Speaker, но прошли.

Для Mi Wifi Speaker (mdz-16-da):
СпойлерПоказать
В режиме ожидания подключение через Bt

22:31:34 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=get_prop&dopt=["umi"]
22:31:34 {"result":["{ \"DeviceName\": \"???????(580005070)\", \"channel_title\": \"??????\", \"current_state\": \"PAUSED_PLAYBACK\", \"hardware_version\": \"S602\",
\"play_mode\": \"REPEAT_ALL\", \"track_artist\": \"\", \"track_duration\": \"00:00:00\", \"track_title\": \"\", \"transport_channel\": \"BT\" }"],"id":1515871894}

В режиме PLAY Bt

16:7:35 command = get_prop
16:7:35 properties = ["umi"]
16:7:35 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=get_prop&dopt=["umi"]
16:7:35 {"result":["{ \"DeviceName\": \"小米互联网音箱(580005070)\", \"channel_title\": \"Billboard精选专辑\", \"current_state\": \"PLAYING\", \"hardware_version\": \"S602\", \"play_mode\": \"REPEAT_ALL\", \"track_artist\": \"\", \"track_duration\": \"00:00:00\", \"track_title\": \"\", \"transport_channel\": \"BT\" }"],"id":1515935256}

16:7:50 command = get_prop
16:7:50 properties = ["rel_time"]
16:7:50 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=get_prop&dopt=["rel_time"]
16:7:50 {"result":["NOT_IMPLEMENTED"],"id":1515935270}

Интернет радио режиме PLAY

16:2:47 command = get_prop
16:2:47 properties = ["umi"]
16:2:47 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.102&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=get_prop&dopt=["umi"]
16:2:47 {"result":["{ \"DeviceName\": \"小米互联网音箱(580005070)\", \"channel_title\": \"Billboard精选专辑\", \"current_state\": \"PLAYING\", \"hardware_version\": \"S602\", \"play_mode\": \"REPEAT_ALL\", \"track_artist\": \"Owl City&Yuna\", \"track_duration\": \"00:03:26\", \"track_title\": \"Shine Your Way\", \"transport_channel\": \"PLAYLIST\" }"],"id":1515934967}

POWER On\Off

22:29:15 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=power&dopt=
22:29:15 {"result":"ok","id":1515871755}

PLAY

22:33:13 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=play&dopt=
22:33:13 {"result":"ok","id":1515871993}

PAUSE

22:41:35 command = pause
22:41:35 properties =
22:41:35 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=pause&dopt=
22:41:35 {"result":"ok","id":1515872495}

toggle (Работает как кнопка включить выключить музыку, имитация Play\Pause)

23:13:45 command = toggle
23:13:45 properties =
23:13:45 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=toggle&dopt=
23:13:45 {"result":"ok","id":1516133627}

VOL UP

command = vol_up
properties = [5] - на сколько увеличить громкость,

В приложении:
this.mVolumeView.setMaxVolume(100);
this.mVolumeView.setMinVolume(0);

22:36:16 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=vol_up&dopt=[5]
22:36:16 {"result":"ok","id":1515872176}

VOL DW

22:35:50 command = vol_down
22:35:50 properties = [5]
22:35:50 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=vol_down&dopt=[5]
22:35:50 {"result":"ok","id":1515872150}


NEXT CH (Выбор радиоканала из списка в приложении)

22:40:14 command = next_channel
22:40:14 properties =
22:40:14 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=next_channel&dopt=
22:40:14 {"result":"ok","id":1515872414}

PREV CH (Выбор радиоканала из списка в приложении)

14:33:47 command = previous_channel
14:33:47 properties =
14:33:47 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=previous_channel&dopt=
14:33:47 {"result":"ok","id":1515929627}

PREV TR

22:37:0 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=previous_track&dopt=
22:37:0 {"result":"ok","id":1515872220}

NEXT TR

22:38:0 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=next_track&dopt=
22:38:0 {"result":"ok","id":1515872280}

Показывает время звучания текущего трека в секундах, только когда играет transport_channel\": \"PLAYLIST\

15:28:11 command = get_prop
15:28:11 properties = ["rel_time"]
15:28:11 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=get_prop&dopt=["rel_time"]
15:28:11 {"result":["00:00:22"],"id":1515932891}15:28:12 command = get_prop

при transport_channel\": \"BT\"
command = get_prop
properties = ["rel_time"]
результат: result":["NOT_IMPLEMENTED"]

Текущий уровень громкости

20:15:19 command = get_prop
20:15:19 properties = ["volume"]
20:15:19 /ajax/xiaomimiio.html?op=test_api_cmd&dip=192.168.0.12&dtoken=4xxxxxxxxxxxxxxxxxxxxxa&dcmd=get_prop&dopt=["volume"]
20:15:19 {"result":[29],"id":1516209319}

Re: [Модуль] Xiaomi miIO

Добавлено: Вс янв 14, 2018 10:16 pm
skysilver
Dicont писал(а):Вот что удалось протестировать. Команды работают!
Отличная работа. Постараюсь запилить в следующем обновлении.

П.с. Все команды/методы (М), которые идут с пустыми свойствами (Р) будут работать через привязку метода-свойства к command в модуле. Можно проверить уже сейчас.

Re: [Модуль] Xiaomi miIO

Добавлено: Пн янв 15, 2018 9:53 pm
Dicont
Если что то еще получиться найти, добавлю в тот же спойлер.

А нет ничего для miIO типа SNMP walk, чтобы все команды вытащить?

или еще какие нибудь варианты, какой нибудь китайский форум по miIO
или придется как то прошивку ломать, но ее где то брать- не видел в открытом доступе,
может еще какой нибудь ресурс.
Пока поиски не дали результата, только github но там все вроде перебрал..

Re: [Модуль] Xiaomi miIO

Добавлено: Вт янв 16, 2018 9:36 am
skysilver
Dicont писал(а):А нет ничего для miIO типа SNMP walk, чтобы все команды вытащить?
Подозреваю, что нет. Это ж закрытый протокол.
Dicont писал(а):или еще какие нибудь варианты, какой нибудь китайский форум по miIO
Я ищу на гитхабе и исходниках других систем УД - iobroker, hass, openhab, Homegear, Jeedom, Homey.
Dicont писал(а):или придется как то прошивку ломать, но ее где то брать- не видел в открытом доступе
Прошивку устройств расковырять, думаю, нереально. Вот декомпильнуть приложение Михом и его плагины на конкретные девайсы еще можно попробовать. Но я бы так зарываться не стал. Выяснить апи-команды можно, перехватив wireshark-ом трафик между Михом и устройством.

Re: [Модуль] Xiaomi miIO

Добавлено: Вт янв 16, 2018 10:34 pm
Dicont
Перехватил пакеты - они зашифрованы от xiaomi.wifispeaker.
Нормально только от lumi.gateway.v3 приходят.

На 4PDA нашел кучу плагинов для MiHOME - https://drive.google.com/drive/folders/ ... 3RvbTZjUGc

Скачал
55. папка 421 | файл 6945.apk | назначение - Xiaomi Mi Smart Network Speaker

Далее декомпиляция APK.
Получил исходники, в них много интересного. Нужно проверять.

Re: [Модуль] Xiaomi miIO

Добавлено: Вт янв 16, 2018 10:41 pm
skysilver
Dicont писал(а):Перехватил пакеты - они зашифрованы от xiaomi.wifispeaker.
Аха, так и есть. Дальше этот дамп в wireshark-ке надо экспортировать в json формат и скормить расшифровщику вместе с токеном. Для этого дела я использую miio под nodejs (развернул на тестовой виртуалке) отсюда https://github.com/aholstenson/miio
Команда в консоли такая:

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

miio --token b31c928032e6a4afc898c5c8768a518f --json-dump e:\cap5.json

Re: [Модуль] Xiaomi miIO

Добавлено: Сб янв 20, 2018 7:01 pm
Dicont
skysilver писал(а):
Dicont писал(а):Перехватил пакеты - они зашифрованы от xiaomi.wifispeaker.
Аха, так и есть. Дальше этот дамп в wireshark-ке надо экспортировать в json формат и скормить расшифровщику вместе с токеном. Для этого дела я использую miio под nodejs (развернул на тестовой виртуалке) отсюда https://github.com/aholstenson/miio
Команда в консоли такая:

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

miio --token b31c928032e6a4afc898c5c8768a518f --json-dump e:\cap5.json
Поставил node.js поставил модуль miio
но в списке node_modules/miio/lib/devices/ нет xiomi wifi или internet speaker,
при выполнении команды выше, пишет ошибка, и использует devices/gateway/subdevice.js

Из приложения MiHome (модуль для Xiaomi Mi Smart Network Speaker) добавил все что нашел в исходниках в сообщение выше.

Хотелось проверить работу кнопки CH, как вы написали- с помощью расшифровки трейса из wireshark экспортированном в json.
Надеялся ее использовать как микрофон для передачи команд МЖД,
но микрофон работает только когда ее нажимаешь на колонке и далее запрос поиска через китайское облако (,
а из приложения работает только как next_chanel к сожалению.

Но можно включать выключать и запускать музыку, и думаю выводить на колонку звук, если колонка подключена по BT к серверу МЖД!
Что очень хорошо!

Возможно, что то не так сделал при дешифровке пакетов, ранее опыта не было.
СпойлерПоказать
В файле /home/dicont/mich, пакеты от Колонки до Андроид с установленным приложением MiHOME.

nodejs miio --token 4xxxxxxxxxxxxxxxxxxxxxa --json-dump /home/dicont/mich

/usr/src/miio-master/node_modules/miio/lib/devices/gateway/subdevice.js:52
return this._parent.call('get_device_prop_exp', [ [ 'lumi.' + this.id, ...this._propertiesToMonitor ]])
^^^

SyntaxError: Unexpected token ...
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/usr/src/miio-master/node_modules/miio/lib/devices/gateway.js:11:19)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
root@Dexter:/usr/src/miio-master/node_modules# ls /usr/src/miio-master/node_modules/miio/lib/devices/
air-purifier.js chuangmi.plug.v1.js gateway humidifier.js power-outlet.js power-strip.js vacuum.js yeelight.js yeelight.mono.js
capabilities eyecare-lamp2.js gateway.js philips-light-bulb.js power-plug.js power-switch.js yeelight.color.js yeelight.lamp.js
root@Dexter:/usr/src/miio-master/node_modules# ls /usr/src/miio-master/node_modules/miio/lib/devices/ -l
итого 84
-rw-rw-r-- 1 dicont dicont 4284 янв 3 23:01 air-purifier.js
drwxrwxr-x 2 dicont dicont 4096 янв 19 23:32 capabilities
-rw-rw-r-- 1 dicont dicont 755 янв 3 23:01 chuangmi.plug.v1.js
-rw-rw-r-- 1 dicont dicont 2523 янв 3 23:01 eyecare-lamp2.js
drwxrwxr-x 2 dicont dicont 4096 янв 19 23:32 gateway
-rw-rw-r-- 1 dicont dicont 10013 янв 3 23:01 gateway.js
-rw-rw-r-- 1 dicont dicont 2722 янв 3 23:01 humidifier.js
-rw-rw-r-- 1 dicont dicont 1301 янв 3 23:01 philips-light-bulb.js
-rw-rw-r-- 1 dicont dicont 536 янв 3 23:01 power-outlet.js
-rw-rw-r-- 1 dicont dicont 534 янв 3 23:01 power-plug.js
-rw-rw-r-- 1 dicont dicont 810 янв 3 23:01 power-strip.js
-rw-rw-r-- 1 dicont dicont 542 янв 3 23:01 power-switch.js
-rw-rw-r-- 1 dicont dicont 5035 янв 3 23:01 vacuum.js
-rw-rw-r-- 1 dicont dicont 1268 янв 3 23:01 yeelight.color.js
-rw-rw-r-- 1 dicont dicont 2988 янв 3 23:01 yeelight.js
-rw-rw-r-- 1 dicont dicont 173 янв 3 23:01 yeelight.lamp.js
-rw-rw-r-- 1 dicont dicont 173 янв 3 23:01 yeelight.mono.js
root@Dexter:/usr/src/miio-master/node_modules#

Re: [Модуль] Xiaomi miIO

Добавлено: Сб янв 20, 2018 10:27 pm
skysilver
Dicont писал(а):Возможно, что то не так сделал при дешифровке пакетов, ранее опыта не было.
Да, тут явно что-то пошло не так. Скинь в личку этот дамп и токен, попробую расшифровать у себя на компе.

Re: [Модуль] Xiaomi miIO

Добавлено: Сб янв 20, 2018 10:36 pm
shawk
итак, лампа yeelink.light.bslamp1
--info выдает такое:
СпойлерПоказать
{"result":{"life":22126,"token":"d.......2","mac":"78:11:DC:8F:AA:AA","fw_ver":"1.5.4_160","hw_ver":"MTK7697","uid":"1594400630","model":
"yeelink.light.bslamp1","wifi_fw_ver":"4.3.0","ap":{"rssi":-73,"ssid":"XXXX","bssid":"AA:AA:AA:AA:AA:AA"},"netif":{"localIp":"192.168.1.67","mask":"255.255.255.
0","gw":"192.168.1.1","gw_mac":"AA:AA:AA:AA:AA:AA"},"mmfree":68968},"id":2}
вот немного трафика:
СпойлерПоказать
{"id":8316,"method":"get_prop","params":["power","color_mode","bright","ct","rgb","flowing","pdo_status","hue","sat","save_state","flow_params","nl_br","nighttime","miband_sleep"]}
{"result":["off","1","1","4000","16750592","0","","36","100","1","0,0,1000,1,16711680,100,1000,1,65280,100,1000,1,255,100","0","enable|220000|060000|00","1"],"id":8316}
{"result":[],"id":8317}
{"result":[],"id":8318}
{"result":["off","1","1","4000","16750592","0","","36","100","1","0,0,1000,1,16711680,100,1000,1,65280,100,1000,1,255,100","0","enable|220000|060000|00","1"],"id":8319}
{"result":["off","1","1","4000","16750592","0","","36","100","1","0,0,1000,1,16711680,100,1000,1,65280,100,1000,1,255,100","0","enable|220000|060000|00","1"],"id":8320}
{"result":["on","1","1","4000","16750592","0","","36","100","1","0,0,1000,1,16711680,100,1000,1,65280,100,1000,1,255,100","0","enable|220000|060000|00","1"],"id":8322}
{"id":8323,"method":"set_power","params":["on","smooth",500,1]}
{"result":["ok"],"id":8323}
{"result":["ok"],"id":8324}
{"result":["ok"],"id":8325}
{"result":["ok"],"id":8326}
{"result":["ok"],"id":8327}
{"result":["ok"],"id":8328}
{"result":["ok"],"id":8329}
{"id":8330,"method":"set_power","params":["off"]}
{"result":["ok"],"id":8330}
{"result":["off","1","1","4000","16750592","0","","36","100","1","0,0,1000,1,16711680,100,1000,1,65280,100,1000,1,255,100","0","enable|220000|060000|00","1"],"id":8331}
Перехватывал через WiFi, так что не все пакеты поймал...
Трафик шифруется.
На лампе через блютус висит 4 гидротермографа, их признаков в трафике пока не увидел. Присутствует трафик с китайским сервером, по большей части дублирует имеющийся, но на другом ключе, так что не расшифровался.
Еще, наверное, это нужно?
devicetype: 047e
serial: 2d87

Re: [Модуль] Xiaomi miIO

Добавлено: Вс янв 21, 2018 3:36 am
skysilver
Обновление. Версия 1.1-beta.
  • Добавлена базовая поддержка Mi Internet Speaker [НЕ ПРОВЕРЕНО]:
    • получение текущего статуса и параметров (channel_title, current_state, hardware_version, play_mode, track_artist, track_duration, track_title, transport_channel, volume, rel_time);
    • команды (power, play, pause, toggle, next_channel, previous_channel, next_track, previous_track);
    • управление громкостью (vol_up и vol_down).
  • Добавлена базовая поддержка Yeelight Bedside Lamp [НЕ ПРОВЕРЕНО]:
    • получение текущего статуса и параметров (power, bright, ct, rgb, hue, sat, color_mode, flowing, pdo_status, save_state, flow_params, nl_br, nighttime, miband_sleep);
    • включение/выключение (power);
    • регулировка яркости (bright);
    • регулировка цветовой температуры (ct);
    • регулировка цвета (rgb).
  • Дополнены типы zigbee-устройств.
  • Обновлены изображения zigbee-устройств.
  • Добавлена проверка серийного номера и кода устройства на валидность.
  • Исправлен диапазон регулировки громкости радио на шлюзе (от 0 до 100).
yeelink.light.bslamp1.png
yeelink.light.bslamp1.png (3.87 КБ) 6081 просмотр
xiaomi.wifispeaker.v1.png
xiaomi.wifispeaker.v1.png (3.97 КБ) 6081 просмотр
Управление колонкой производится через привязку к параметру command свойства объекта и передачи ему через setGlobal следующих значений:
- power - включить/выключить (режим standby),
- play - запуск проигрывания,
- pause - остановка проигрывания,
- toggle - переключить состояние проигрывания,
- next_channel - следующая радиостанция,
- previous_channel - предыдущая радиостанция,
- next_track - следующий трек в плейлисте,
- previous_track - предыдущий трек в плейлисте.

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

P.S. Не стесняемся подкинуть разработчику "на пиво", чтобы дело шло веселее. ;)