Задача: Хочу перепрошить реле Sonoff TH10 чтобы взаимодействовать с ним можно было не через облако производителя, а через свою собственную локальную сеть, ну а после я уже прикручу его к Home Assistant на Ubuntu 18.04 Server которая будет на моем домашнем сервере HP MicroServer Gen8 (ESXi 6.0). И никакой одноплатный компьютер в лице Raspberry Pi 3 Model B+ и выше (облако производителя) для этих целей я не приемлю.

Итак, для реализации задуманного мне понадобится:

рабочая станция в лице Ubuntu 18.04 Lubuntu Desktop

PL2303 USB UART Board (mini), Преобразователь USB-UART на базе PL2303 с разъемом USB mini-AB

  • Кабель miniUSB на USB
  • Sonoff Model: TH10
  • Провода типа «Мама-Папа»
  • Паяльник не потребуется.
  • Выход в интернет

Шаг №1: Разбираю реле Sonoff TH10 до состояния когда вижу внутренности, к примеру как на представленном скриншоте ниже:

Внутренности реле Sonof TH10

 

Шаг №2: Проверяю, как моя система Lubuntu 18.04 Desktop опознала преобразователь подключенный к ней через USB:

ekzorchik@srv-dbionic:~$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 1.158396] tty ttyS9: hash matches
[ 699.655747] usb 5-1: pl2303 converter now attached to ttyUSB0
[ 768.209218] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[ 772.114834] usb 5-1: pl2303 converter now attached to ttyUSB0

Шаг №3: Чтобы учетная запись ekzorchik могла взаимодействовать с устройством ttyUSB ее нужно включить в группу dialout:

ekzorchik@srv-dbionic:~$ sudo usermod -aG dialout ekzorchik
ekzorchik@srv-dbionic:~$ sudo apt-get install -y setserial
ekzorchik@srv-dbionic:~$ sudo setserial -g /dev/ttyUSB0
/dev/ttyUSB0, UART: 16654, Port: 0x0000, IRQ: 0
ekzorchik@srv-dbionic:~$
ekzorchik@srv-dbionic:~$ sudo reboot

Шаг №4: Далее соединяем Преобразователь USB-UART на базе PL2303 и реле Sonoff TH10 проводами и выставляем переключатель на преобразователе, что работа должна вестись по питанию 3.3V:

USB-UART PL2303 Sonoff TH10
VCC VCC
GND GND
TXD E-RX
RXD E-TX

Подключение USB-UART + Sonoff TH10

Шаг №5: На рабочей станции Lubuntu 18.04 Desktop устанавливаю виртуальное окружение для Python и скачиваю утилиту esptool:

ekzorchik@srv-bionic:~$ sudo apt-get install python3-pip build-essential libssl-dev libffi-dev python3-dev python3-venv ipython3 -y
ekzorchik@srv-dbionic:~$ python3 -m venv /home/ekzorchik/esptool-env
ekzorchik@srv-dbionic:~$ source /home/ekzorchik/esptool-env/bin/activate
(esptool-env) ekzorchik@srv-dbionic:~$
(esptool-env) ekzorchik@srv-dbionic:~$ python3 -m pip install setuptools wheel esptool
(esptool-env) ekzorchik@srv-dbionic:~$ cd ./esptool-env/bin/

Шаг №6: Теперь чтобы взаимодействовать с реле Sonoff TH 10 через преобразователь нужно:

  • проверить что реле и преобразователь соединены правильно
  • Выставлен джампер на 3.3V
  • На реле нажимаем кнопку и держим (обязательно)
  • USB кабелем соединения преобразователь и систему (Рабочий компьютер или ноутбук, у меня ноутбук Sony VAIO)
  • Затем взаимодействуем через консоль

Шаг №7: Проверяем, что можем считать MAC адрес реле:

(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py read_mac
esptool.py v3.0
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: cc:50:e3:c7:c0:f4
Uploading stub...
Running stub...
Stub running...
MAC: cc:50:e3:c7:c0:f4
Hard resetting via RTS pin...
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$

На заметку: Я в момент когда идет подключение через esptool кнопку не отжимаю.

Итого, я успешно подключился через преобразователь к реле Sonoff TH10 и считал некоторую информацию.

Шаг №8: Проверяем, что можем считать FLASH_ID адрес реле:

  • отсоединяю usb кабель от компьютера
  • на Sonoff TH10 нажимаю кнопку и держу
  • подключаю usb кабель к компьютеру
  • после в консоли Terminal запускаю команду
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py flash_id
esptool.py v3.0
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: cc:50:e3:c7:c0:f4
Uploading stub...
Running stub...
Stub running...
Manufacturer: 5e
Device: 6014
Detected flash size: 1MB
Hard resetting via RTS pin...
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$

из этого вывода видно, что размер флеш накопителя в реле Sonoff TH10 равняется 1MB

Шаг №9: Выполняю бекап заводской прошивки: (Нажатую кнопку включения я не отпускаю а держу на всем процессе покуда идут проценты с 1 до 100):

  • отсоединяю usb кабель от компьютера
  • на Sonoff TH10 нажимаю кнопку и держу
  • подключаю usb кабель к компьютеру
  • после в консоли Terminal запускаю команду
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py read_flash 0x00000 0x100000 firmware1MB.bin
esptool.py v3.0
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: cc:50:e3:c7:c0:f4
Uploading stub...
Running stub...
Stub running...
1048576 (100 %)
1048576 (100 %)
Read 1048576 bytes at 0x0 in 95.5 seconds (87.8 kbit/s)...
Hard resetting via RTS pin...
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ls -lh firmware1MB.bin
-rw-rw-r-- 1 ekzorchik ekzorchik 1.0M Nov 15 11:54 firmware1MB.bin
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ file firmware1MB.bin
firmware1MB.bin: DOS executable (COM)
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ md5sum firmware1MB.bin
b5e4b4d916accd43fc4b877d91d6d81f firmware1MB.bin
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$

На заметку: Если размер флеш памяти на реле к примеру 4Mb то команда будет другой:

(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py read_flash 0x00000 0x400000 firmware4MB.bin

Шаг №10: Чтобы залить альтернативную прошивку, нужно сперва очистить текущую:

  • отсоединяю usb кабель от компьютера
  • на Sonoff TH10 нажимаю кнопку и держу
  • подключаю usb кабель к компьютеру
  • после в консоли Terminal запускаю команду
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py erase_flash
esptool.py v3.0
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: cc:50:e3:c7:c0:f4
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 3.8s
Hard resetting via RTS pin...
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$

Шаг №11: Записываю прошивку tasmota на Sonoff TH10:

  • отсоединяю usb кабель от компьютера
  • на Sonoff TH10 нажимаю кнопку и держу
  • подключаю usb кабель к компьютеру
  • после в консоли Terminal запускаю команду
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ wget http://ota.tasmota.com/tasmota/release/tasmota.bin
--2020-11-15 12:01:40-- http://ota.tasmota.com/tasmota/release/tasmota.bin
Resolving ota.tasmota.com (ota.tasmota.com)... 52.85.47.80, 52.85.47.2, 52.85.47.13, ...
Connecting to ota.tasmota.com (ota.tasmota.com)|52.85.47.80|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 614656 (600K) [application/octet-stream]
Saving to: ‘tasmota.bin’
tasmota.bin 100%[===================>] 600.25K --.-KB/s in 0.1s
2020-11-15 12:01:40 (5.38 MB/s) - ‘tasmota.bin’ saved [614656/614656]
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py write_flash -fs 1MB -fm dout 0x0 tasmota.bin
esptool.py v3.0
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: cc:50:e3:c7:c0:f4
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Compressed 614656 bytes to 436471...
Wrote 614656 bytes (436471 compressed) at 0x00000000 in 39.1 seconds (effective 125.6 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$

Шаг №12: Отключаюсь от виртуального окружения Python:

(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ deactivate
ekzorchik@srv-dbionic:~/esptool-env/bin$ cd ~/

Шаг №13: После перепрошивки подключаю теперь уже свое реле Sonoff TH10
к своей Wi-Fi сети, для этого отсоединяем USB кабель от компьютера и подключает
снова, ждем 1-3 минуту после чего в эфире радиовещания Wi-Fi сетей появится мое
реле. На смартфоне включаю Wi-Fi модуль и вижу сеть вида: tasmota_C7C0F4-0244 (без защиты)— это мое устройства кликаю по нему и оказываю подключенным к настройкам Sonoff Basic Module где указываю параметры свой Wi-Fi сети

  • AP1 Ssid(): test
  • AP1 Password: Aa1234567
  • Hostname: %s-%04d

после нажимаю Save

После Sonoff реле отключится и подключится к моей домашней сети, а в общем эфире что оно работает как точка доступа исчезнет.

Шаг №14: Проверяю на своем роутере Mikrotik rb2011UiAS-2Hnd-IN, что мое Sonoff реле TH10 подключилось к Wi-Fi сети и ему присвоился IPадрес от DHCPсервиса:

Winbox — IP&DNS:PORT — user&pass — Wireless — вкладка Registration и вижу MAC адрес своего реле:

Проверяю на роутере Mikrotik что реле Sonoff TH10 подключилось по Wi-Fi

 

А теперь какой IP-присвоился:

Winbox — IP&DNS:PORT — user&pass — ip — dhcp server — вкладка Leases и через фильтр по колонке MAC Address нахожу что есть по MAC адресу:

Проверяю какой адрес получило реле Sonoff TH10

итого в моей локальной сети — это адрес 172.33.33.103

Проверяю, что вижу его с Lubuntu 18.04 Desktop

ekzorchik@srv-dbionic:~$ ping 172.33.33.103
PING 172.33.33.103 (172.33.33.103) 56(84) bytes of data.
64 bytes from 172.33.33.103: icmp_seq=1 ttl=255 time=20.2 ms
64 bytes from 172.33.33.103: icmp_seq=2 ttl=255 time=41.6 ms
64 bytes from 172.33.33.103: icmp_seq=3 ttl=255 time=64.1 ms
64 bytes from 172.33.33.103: icmp_seq=4 ttl=255 time=85.4 ms
^C
--- 172.33.33.103 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 20.259/52.857/85.415/24.375 ms
ekzorchik@srv-dbionic:~$

На заметку: Чтобы реле имело постоянный адрес правильнее сделать его статическим.

Шаг №15: Обращаюсь через браузер к Webинтерфейсу своего реле, т. е. Это выглядит так: http://172.33.33.103

 

Обращаюсь через браузер к Web-интерфейсу своего реле

Итого я успешно перепрошил реле Sonoff TH10 и оно уже теперь мое, т. е. Мое в смысле что я могу из своей локальной сети управлять им и более не привязана к облаку производителя.

Шаг №16: Т.к. реле уже мое и подключено к моей ЛВС то я могу выполнить резервное копирование прошивки , дабы не проходить все шаги выше:

ekzorchik@srv-dbionic:~$ source esptool-env/bin/activate
(esptool-env) ekzorchik@srv-dbionic:~$ cd ./esptool-env/bin/
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$
  • отсоединяю usb кабель от компьютера
  • на Sonoff TH10 нажимаю кнопку и держу
  • подключаю usb кабель к компьютеру
  • после в консоли Terminal запускаю команду
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ./esptool.py read_flash
0x00000 0x100000 firmwaretasmotawork.bin
esptool.py v3.0
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: cc:50:e3:c7:c0:f4
Uploading stub...
Running stub...
Stub running...
1048576 (100 %)
1048576 (100 %)
Read 1048576 bytes at 0x0 in 94.8 seconds
(88.5 kbit/s)...
Hard resetting via RTS pin...
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ ls -lh
firmwaretasmotawork.bin
-rw-rw-r-- 1 ekzorchik ekzorchik 1.0M Nov 15 12:24 firmwaretasmotawork.bin
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ file firmwaretasmotawork.bin
firmwaretasmotawork.bin: DOS executable (COM)
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ md5sum firmwaretasmotawork.bin
c036fba66137e0b24dd88052e2042c3b firmwaretasmotawork.bin
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$
(esptool-env) ekzorchik@srv-dbionic:~/esptool-env/bin$ deactivate
ekzorchik@srv-dbionic:~/esptool-env/bin$ cd
~
ekzorchik@srv-dbionic:~$

На заметку: После нужно отключить USB от компьютера и подключиться снова без нажатия кнопки через которую я входил в режим перепрошивки дабы в последствии взаимодействовать с реле через Web-интерфейс.

Шаг №17: Чтобы взаимодействовать с реле из консоли bash это понадобится
когда либо взаимодействовать через скрипты или системы «Умного дома»:

Нашел какими командами через CURL запрос можно включать и выключать реле:

Commands can be executed via web (HTTP) requests, for example:

https://tasmota.github.io/docs/Commands/

Синтаксис:

http://<ip>/cm?cmnd=Power%20TOGGLE http://<ip>/cm?cmnd=Power%20On http://<ip>/cm?cmnd=Power%20off http://<ip>/cm?user=admin&password=joker&cmnd=Power%20Toggle

Включить реле:

ekzorchik@srv-dbionic:~$ sudo apt-get install -y curl
ekzorchik@srv-dbionic:~$ curl http://172.33.33.103/cm?cmnd=Power%20On
{"POWER":"ON"}ekzorchik@srv-dbionic:~$
ekzorchik@srv-dbionic:~$

Выключить реле:

ekzorchik@srv-dbionic:~$ curl http://172.33.33.103/cm?cmnd=Power%20Off

{"POWER":"OFF"}ekzorchik@srv-dbionic:~$

ekzorchik@srv-dbionic:~$

Или так:

ekzorchik@srv-dbionic:~$ curl http://172.33.33.103/cm?cmnd=Power%20TOGGLE
{"POWER":"OFF"}ekzorchik@srv-dbionic:~$
ekzorchik@srv-dbionic:~$
ekzorchik@srv-dbionic:~$ curl http://172.33.33.103/cm?cmnd=Power%20TOGGLE
{"POWER":"ON"}ekzorchik@srv-dbionic:~$
ekzorchik@srv-dbionic:~$
ekzorchik@srv-dbionic:~$

Итого данная заметка полностью работоспособна и я сделал задачу которую долго не мог сделать, т. к. все форумы, консультации в Telegram каналах приводили лишь к фразе: Тебя что в Google забанили, уже сто раз все объясняли. Вообще да пошли все, лучше сделать самим и составить инструкцию для себя и не делиться. Свои наработки
— это свои наработки.

На заметку: Бекап заводской прошивки, на что прошиваю и бекап настроенной прошивки залил к себе в облако OwnCloud 10 с сделал общедоступную
ссылку

https://vpn.ekzorchik.ru/index.php/s/DrTczqgDpSy70M8

На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.