05.12.2023, 23:05 | #1 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Xiaomi air purifier работа без облака
Долго мучался, не хочу заводить аккаунт в китайском облаке. Наверное нужно куда-то на github написать, например в home assistant, но мне времени не хватает правильно сформулировать.Пока изложу сумбур тут, чтоб не забыть.
Итак, у меня версия Pro. Начинаем со сброса зажав обе кнопки на 10 сек. потом включаем, устройство создает свою сеть wi-fi. Я подключился к ней с openwrt-роутера, сбив все маршруты (роутер посчитал, что фильтр - это новый gateway), поправил настройки, нашел новую сеть, попинговал air purifier: Код:
64 bytes from 192.168.13.1: seq=1 ttl=255 time=3.537 ms Код:
user@OpenWrt:~# echo -ne '\x21\x31\x00\x20\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' |nc -u 192.168.13.1 54321 > ./asnwer user@OpenWrt:~#hexdump -s 16 -e '"token: " 16/1 "%02x" "\n"' ./asnwer token: c6...mysecrettoken...f2b У меня в Openwrt установлен debootstrap с HomeAssistant, поэтому есть python с кучей библиотек, почитав api python-miio родилось следующее: Код:
homeassistant@OpenWrt:/$ cd /srv/homeassistant homeassistant@OpenWrt:/$ source bin/activate (homeassistant) homeassistant@OpenWrt:/srv/homeassistant$ python >>> import miio >>> puri=miio.device.Device('192.168.13.1','c6...mysecrettoken...f2b') >>> puri.configure_wifi('SSID','password') 'ok' >>> exit() На сегодня этого хватит. Нашел забавное пока мучалсяhttps://dontvacuum.me/talks/DEFCON26...IoT-Xiaomi.pdf интересный документ, посвященный сетевой безопасности умных устройств. И перепрошивка esp32 внутри похожего устройства https://www.flamingo-tech.nl/2021/05...-3-esp32-dump/ [свернуть] P.S. Пока искал в чем проблема, нашел и описание того что я делал выше. https://www.vanwerkhoven.org/blog/20...mi-smart-plug/ Последний раз редактировалось Tohin; 15.12.2023 в 22:19. Причина: Синтаксис |
13.12.2023, 10:55 | #2 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Странное. После подключения к основной Wi-Fi сети на полученный токен идет ругань:
miio.exceptions.DeviceException: Got checksum error which indicates use of an invalid token. Please check your token! Новый токен, без сброса к заводским настройкам не приходит: Код:
# echo -ne '\x21\x31\x00\x20\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' |nc -u 192.168.1.206 54321 > ./asnwer # hexdump -s 16 -e '"token: " 16/1 "%02x" "\n"' ./asnwer token: 00000000000000000000000000000000 UPD: Попробовал еще через node.js . После сброса девайс находится, токен определяется, но miio configure id-or-address --ssid network-ssid --passwd network-password отрабатывает впустую, очиститель не переподключается на основную сеть. Сменив сеть через питон уже нельзя подключится со старым токеном и новый токен не определяется. Пробовал запустить miio discover в момент смены сети - бесполезно, нет срабатываний UPD2: Почитал вот тут и расстроился: -Does the token change after pairing the device? -Yes, the token gets changed during provisioning <...> Unfortunately the device does not report the token back, and there is no known way to request it afterwards either. Странно, если устройство меняет токен при переподключении к другой сети Wi-Fi, то менять оно его должно по строго определенному алгоритму, либо получать новый от приложения при изменении Wi-Fi, иначе китайский сервер не сможет идентифицировать устройство. Опять же, при включении устройство должно сообщать о себе и в этом сообщении должен быть токен. Последний раз редактировалось Tohin; 13.12.2023 в 14:29. |
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
|
|