Идея умных домов, овладевшая широкими массами, у меня как-то не зашла.
Тем не менее — ее гонишь в дверь, а она лезет в окно.
Первым пролезло кухонное освещение TRÅDFRI под шкафами Ikea — внутри этого освещения скрывался интерфейс Zigbee. Делал он это как-то ненавязчиво, скрываясь под видом обычного дистанционного управления. Тем более, что когда покупалась кухня, старый и, видимо, неудачный Zigbee шлюз сняли с продаж, а новый еще не разработали. Так что никаких облаков и управлений через смартфон не просматривалось.
Спрашивается — ну и куда от всего этого бедному пенсионеру бечь? Тем более, что умный дом умные люди придумывали вовсе не для того, чтобы облегчить жизнь простому человеку, а очень даже наоборот. Ну да читайте дальше и делайте выводы сами.
После Икеевских недоразумений, через некоторое время привезли всякую ерунду в магазин Лидл — вроде как совсем не дорого для фанатов умных домов, но ощутимо для того, чтобы поиграться и выбросить. Каждая фирма норовит умный дом делать только под свои устройства, всячески игнорируя устройства конкурентов. Так и у Лидла есть свое приложение, которое работает только с Лидловскими устройствами — но это не точно :).
С Лидловскими приложениями я уже научен — как-то по хорошей уценке купил там камеру видеонаблюдения — авось понадобится. И настал таки день, когда она понадобилась. Прочитал инструкцию — камера подключалась к специальному приложению, но это приложение уже исчезло. И не факт, что те самые облака, обслуживающие его, еще существовали. Значит, у народа, купившего эти камеры и не установившего вовремя приложение или поменявшего телефон, камера превратилась в тыкву. Кроме того, мне нужно было видеонаблюдение на компьютере, а не на телефоне, что в инструкции вообще начисто отсутствовало. С помощью лома и какой-то матери задача была решена, но осадочек остался.
Когда в Лидле хитродомный шлюз предложили за 17 евро — я все-таки не удержался и купил. Как выяснилось позже — дико переплатил. Еще недели через 2-3 они распродавали остатки хлама за полцены. Народ активно расхватывал.
Но это уже позже было, теперь посмотрим, как я издевался над этим шлюзом.
Для начала, естественно, разобрал.
На плате обнаружилось следующее добро:
RealTek RTL8196E CPU
16MB SPI Flash (GD25Q127)
32MB SDRAM, EM6AA160
TuYa ZigBee модуль (TYZS4) на базе Silicon Labs ARM-M4 CPU с интегрированным RF стеком (EFR32MG1B232)
И контактные площадки, любезно подписанные с обратной стороны платы. Естественно, я к ним тут же и подпаял USB/UART преобразователь. Поигравшись со скорость передачи (заработало на 38400) обнаружил, что передо мной изделие сумрачного китайского гения, не имевшего никакого отношения к немцам.
…
Please press Enter to activate this console. Tuya Gateway Application Normal Srart /tuya/tuya_start.sh UserAppRunDir:
set defult run_dir:/tuya
TY_ENV_APP_RUN_DIR=/tuya
get user cfg file error, load defult cfg file
load platform configure file:/tuya/def.cfg
start.conf is exist
udhcpc (v1.13.4) started
current run dir:/tuya/tuya_user1
Sending discover...
Sending select for 192.168.0.106…
...
Было бы очень странно, если его кто-то не расковырял до меня — нашлась страница одного товарища, который сделал это с немецкой аккуратностью.
Он написал программу для вычисления пароля (который у каждого шлюза свой), и программу, которая позволяет отвязать шлюз от Лидловского приложения и использовать в безоблачных системах, типа Home Assistant. Это сейчас я кратенько и опишу с небольшими дополнениями — я умудрился наступить на все возможные грабли и пришлось лазить в те места, которые в интернетах или не описаны, или я плохо искал.
Итак, подключаем наш шлюзик к компьютеру через последовательный порт. Включаем питание и в терминальной программе изо всех сил жамкаем ESC, чтобы остановить загрузку (не всякая терминалка это умеет).
При этом шлюз переходит в режим, когда можно читать его память безо всяких паролей.
...
---Escape booting by user
P0phymode=01, embedded phy
---Ethernet init Okay!
<RealTek>?
----------------- COMMAND MODE HELP ------------------
HELP (?) : Print this help message
DB <Address> <Len>
DW <Address> <Len>
EB <Address> <Value1> <Value2>...
EW <Address> <Value1> <Value2>...
CMP: CMP <dst><src><length>
IPCONFIG:<TargetAddress>
AUTOBURN: 0/1
LOADADDR: <Load Address>
…
Теперь считываем области флеш-памяти, где хранятся ключи от квартиры, в RAM и оттуда распечатываем их:
FLR 80000000 401802 16
DW 80000000 4
и второй заход
FLR 80000000 402002 32
DW 80000000 8
Получается что-то типа такого:
<RealTek>FLR 80000000 401802 16
Flash read from 00401802 to 80000000 with 00000016 bytes ?
(Y)es , (N)o ? --> Y
Flash Read Successed!
<RealTek>DW 80000000 4
80000000: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
<RealTek>
<RealTek>FLR 80000000 402002 32
Flash read from 00402002 to 80000000 with 00000032 bytes ?
(Y)es , (N)o ? --> Y
Flash Read Successed!
<RealTek>DW 80000000 8
80000000: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
80000010: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
<RealTek>
XXXXXXXX — это нужные вам номерки.
Копируем эти строки и скармливаем их программе lidl_auskey_decode.py на Python, которая лежит тут:
$ python3 lidl_auskey_decode.py
Enter KEK hex string line>80000000: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
Encoded aus-key as hex string line 1>80000000: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
Encoded aus-key as hex string line 2>80000010: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
Auskey: your_auskey
Root password: your_root password
Не знаю, кому нужен Auskey, а пароль определенно очень понадобится дальше.
Теперь шлюз надо перезагрузить, чтобы он загрузил все нужное программное обеспечение.
Для начала можно попробовать войти в систему через последовательный терминал, вроде как пароль проверим
Please press Enter to activate this console.
tuya-linux login: root
Password:
Tuya Linux version 1.0
Jan 1 00:02:49 login[316]: root login on 'console'
#
При загрузке на терминале виден IP адрес, он понадобится. У меня адрес 192.168.0.106
При желании можно убедиться пингом с компьютера:
ping 192.168.0.106
PING 192.168.0.106 (192.168.0.106) 56(84) bytes of data.
64 bytes from 192.168.0.106: icmp_seq=1 ttl=64 time=2.63 ms
64 bytes from 192.168.0.106: icmp_seq=2 ttl=64 time=1.81 ms
64 bytes from 192.168.0.106: icmp_seq=3 ttl=64 time=1.41 ms
Теперь зайдем через SSH
ssh -oHostKeyAlgorithms=+ssh-dss root@192.168.0.106 -p 2333
Для захода понадобится пароль. Ошибиться можно один раз — после второго устройство окирпичивается.
Мне повезло — я ошибся 2 раза, после чего SSH работать перестал вообще.
К счастью, последовательный терминал продолжал работать.
При разборках выяснилось, что в каталоге /tuya/ssh заводится счетчик, его просто надо прибить:
# cd /tuya/ssh
# ls
cnt
# cat cnt
2
#
rm cnt
После перегрузки все заработало, как ни в чем не бывало.
Это была присказка, теперь у нас есть возможность отвязать шлюз от Лидловских заморочек.
Копируем программу Serial Gateway отсюда
и загружаем ее в шлюз
cat serialgateway.bin | ssh -p2333 root@192.168.1.106 "cat >/tuya/serialgateway"
Модифицируем загрузочный скрипт:
if [ ! -f /tuya/tuya_start.original.sh ]; then cp /tuya/tuya_start.sh /tuya/tuya_start.original.sh; fi
cat >/tuya/tuya_start.sh <<EOF
#!/bin/sh
/tuya/serialgateway &
EOF
chmod 755 /tuya/serialgateway
После следующих команд SSH будет работать через стандартный порт 22:
if [ ! -f /tuya/ssh_monitor.original.sh ]; then cp /tuya/ssh_monitor.sh /tuya/ssh_monitor.original.sh; fi
echo "#!/bin/sh" >/tuya/ssh_monitor.sh
Еще одна проблема — динамический IP. При перегрузке системы шлюз может отвалиться от Home Assistant из-за того, что адрес поменялся. Установим статический адрес где нибудь в конце адресного пространства, чтобы ни с кем не конфликтовать.
Создадим где-нибудь на компьютере файл tuya_start.sh со следующим содержимым
#!/bin/sh
/tuya/serialgateway &
killall udhcpc
ifconfig eth1 192.168.0.254 netmask 255.255.255.0
и копируем его с помощью SSH, заменяя оригинальный файл
cat tuya_start.sh | ssh -p22 -oHostKeyAlgorithms=+ssh-rsa root@192.168.0.106 "cat >/tuya/tuya_start.sh"
После перезагрузки шлюз будет всегда откликаться на адрес 192.168.0.254, хотя при старте он получит динамический адрес и выдаст его в распечатке. Может, можно и более умно сделать, но и так сойдет.
Теперь можно и к Home Assistant подключаться. Есть несколько вариантов установки Home Assistant — на Raspberry Pi, виртуальную машину и еще какие-то варианты. Для попробовать я поставил его на виртуалку, для реальной жизни Raspberry все-таки получше. Цены на нее в последнее время задрали безумно, но в шкафчике нашлась одна лишняя — во время одной шабашки товарищ наступил на кабель, подключенный к ней и выломал разъем USB. Для Home Assistant USB без надобности, так что все замечательно срослось.
Скачиваем образ Home Assistant и записываем на SD. Устанавливаем в Raspberry, включаем и идем пить чай — минут 20 малинка будет заниматься своими делами.
Потом с любого компьютера, подключенного к той же сети, что и Raspberry, заходим в веб-интерфейс Home Assistant — homeassistant.local:8123
Да, Home Assistant не любит беспроводных сетей, поэтому Raspberry надо проводком подключить. Беспроводную сеть я потом подключу, но это будет сеть для вещей, безо всякого доступа в интернет.
Home Assistant загружен, при первом запуске требует установить имя пользователя и пароль.
Потом идем на вкладку Settings → Devices and services и добавляем Integration — это и будет наш шлюз, Zigbee Home Automation. Выбираем ручную установку и вводим адрес — socket://192.168.0.254:8888.
Если все прошло удачно — во вкладке Devices можно добавить новые устройства. У меня под рукой оказалась Икеевская розетка и пульт управления.
Их нужно перевести в режим снюхивания и запустить поиск устройств. При этом устройство должно находится очень близко к шлюзу — сантиметров 5. Пульт переводится в режим поиска 4-кратным нажатием кнопки сзади в течении 5 секунд, а розетка — нажатием скрепкой кнопки сброса секунд на 5. Больше ничего не надо, устройство будет найдено и подключено к системе.
Сейчас я вам скажу один умный вещь, только вы не обижайтесь, ладно? Малинку от шлюза нужно разнести хотя бы сантиметров на 20, и это очень критично. До меня эта, казалась бы очевидная вещь, доходила, как минимум, полдня — то устройства Zigbee отпадали, когда их заставишь работать — отпадали устройства, подключенные к Wi-Fi. Когда в конце-концов дошло и поставил Raspberry и шлюз на разные концы DIN-рейки — все стало работать более-менее стабильно. Хотя временами все-таки Zigbee отпадает, приходится шлюз относить на полметра от источников помех — все начинает работать снова.
В Лидле я все-таки купил абсолютно ненужную мне лампочку из любопытства — зацепится или нет? Зацепилась влет, правда, никаких опознавательных знаков Лидла или Livarno не наблюдалось. На второй день, при попытке поиграться, она сдохла при подключении к сети (вполне себе проводной на 230 Вольт), волшебный дым из нее вышел и впридачу сгорели предохранители в щитке. Понесу сдавать ее взад — заменить вряд ли получится, во время скидок разобрали самую ненужную ерунду. А Лидл — штука одноразовая, если там что-то интересное появилось в продаже — это будет разобрано за дни или даже за часы. А второй раз может появится через годы или вообще никогда.
Но мне свезло — нашлась в лавке еще одна лампа по дешевке, правда, цоколь не очень удобный.
С чем еще можно поиграться, чтобы дешево и сердито? Дешевле ESP8266 вряд ли что-то существует под луной в настоящее время. Его и будем цеплять, но потом — если захотите и кому-то интересно.
Большинство устройст проектируется не просто, а очень просто. А вот если захочется батарейного питание с заменой батарейки раз в год — это придется помучиться.
Очередная жертва появилась, когда в магазине неподалеку продавали недорого Wi-Fi лампы.
При рассмотрении дома оказалось, что лампа тоже родом из Китая и управляется приложением Tuya Smart. Замечательное дело — если что-то случилось с доступом в интернет или телефона под рукой нет, то имеем очередную тыкву?
Дальше ставил в Home Assistant HACS, LocalTuya. Нужно было зайти на сайт Tuya и пройти квест с получением заветных номерков для подключения. Слоны идут в баню, а Штирлиц живет этажом выше — мне терпения не хватило, 2 нужных номерка выдавил, еще 2 так и не добыл. И все равно, для того, чтобы подключить лампу к сети без выхода в интернет, нужны были дополнительные телодвижения — на какое-то время сделать доступ из этой сети. Разбирать лампу, чтобы перепрошить ее на что-то более приемлемое не очень хотелось — вид после разборки вряд ли улучшится. Несколько лет назад народ прошивал устройства Tuya через Wi-Fi, но в последних версиях эту дыру прикрыли.
Больше я с Tuya Wi-Fi не связываюсь, это как стрижка свиньи: визга много, шерсти мало.
Пока игрался, пришли посылки с Китая — датчик температуры и влажности с Zigbee интерфейсов и популярный термометр от Xiaomi с интерфейсом BLE. Но о них в другой раз.
Кому показалось не совсем понятным — не обижайтесь, я и сам ничего не понимаю. А если вдруг понадобится — вы найдете в статье немало полезного, нарытого в интернете и своими руками. А что под рукой нет Лидла — так ведь это просто этикетка, возможно, и другие устройства ломаются примерно также.