Zigbee Sonoff Zigbee Bridge pro: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показаны 42 промежуточные версии этого же участника) | |||
Строка 75: | Строка 75: | ||
==Определение типа платы== |
==Определение типа платы== |
||
− | <code>esptool.py --port /dev/cu.usbserial-A5XK3RJT flash_id</code> |
+ | <code>esptool.py --port /dev/cu.usbserial-A5XK3RJT flash_id</code> (у меня в системе использование /dev/tty.usbserial-A5XK3RJT и /dev/cu.usbserial-A5XK3RJT ведет к одинаковым результатам хотя формально это 2 разных устройства) |
<PRE> |
<PRE> |
||
Строка 98: | Строка 98: | ||
@esp_tool -pCOM5 -b115200 -a0x0000 -s0x100000 -or esp82XX.bin |
@esp_tool -pCOM5 -b115200 -a0x0000 -s0x100000 -or esp82XX.bin |
||
+ | |||
+ | ==Бекап прошивки== |
||
+ | <code>esptool.py -b 115200 --port /dev/tty.usbserial-A5XK3RJT read_flash 0x000000 0x400000 soboff_bridge_pro_original_software.bin</code> |
||
+ | * Адреса <code>0x000000 0x400000</code> ожначают читать все 4М (а размер флеша указан выше) |
||
+ | <PRE> |
||
+ | esptool.py v4.7.0 |
||
+ | Serial port /dev/tty.usbserial-A5XK3RJT |
||
+ | Connecting... |
||
+ | Detecting chip type... Unsupported detection protocol, switching and trying again... |
||
+ | Connecting... |
||
+ | Detecting chip type... ESP32 |
||
+ | Chip is ESP32-D0WD-V3 (revision v3.0) |
||
+ | Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None |
||
+ | Crystal is 40MHz |
||
+ | MAC: 0c:dc:7e:32:81:fc |
||
+ | Stub is already running. No upload is necessary. |
||
+ | 2097152 (100 %) |
||
+ | 2097152 (100 %) |
||
+ | Read 2097152 bytes at 0x00000000 in 196.8 seconds (85.3 kbit/s)... |
||
+ | Hard resetting via RTS pin... |
||
+ | </PRE> |
||
+ | Скачалось 2М, хотя размер флеша выше писал 4М |
||
+ | <PRE> |
||
+ | ls -lsah soboff_bridge_pro_original_software.bin |
||
+ | 4096 -rw-r--r-- 1 mmazur staff 4.0M May 12 17:34 soboff_bridge_pro_original_software.bin |
||
+ | </PRE> |
||
+ | |||
+ | ==Очистка флеша перед записью== |
||
+ | <code>esptool.py --port /dev/tty.usbserial-A5XK3RJT erase_flash</code> |
||
+ | <PRE> |
||
+ | esptool.py v4.7.0 |
||
+ | Serial port /dev/tty.usbserial-A5XK3RJT |
||
+ | Connecting...... |
||
+ | Detecting chip type... Unsupported detection protocol, switching and trying again... |
||
+ | Connecting... |
||
+ | Detecting chip type... ESP32 |
||
+ | Chip is ESP32-D0WD-V3 (revision v3.0) |
||
+ | Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None |
||
+ | Crystal is 40MHz |
||
+ | MAC: 0c:dc:7e:32:81:fc |
||
+ | Uploading stub... |
||
+ | Running stub... |
||
+ | Stub running... |
||
+ | Erasing flash (this may take a while)... |
||
+ | Chip erase completed successfully in 13.8s |
||
+ | Hard resetting via RTS pin... |
||
+ | </PRE> |
||
+ | |||
+ | ==Прошивка== |
||
+ | |||
+ | http://ota.tasmota.com/tasmota32/release/tasmota32-zbbrdgpro.factory.bin |
||
+ | <BR> |
||
+ | (http://ota.tasmota.com/tasmota32/release/) |
||
+ | <BR> |
||
+ | На всякий случай копия той прошивки что заливал я: |
||
+ | <BR> |
||
+ | [[Media:Tasmota32-zbbrdgpro.factory.bin|Tasmota32-zbbrdgpro.factory.bin]] |
||
+ | <PRE> |
||
+ | esptool.py --port /dev/tty.usbserial-A5XK3RJT write_flash 0x0 ~/Downloads/tasmota32-zbbrdgpro.factory.bin |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | esptool.py v4.7.0 |
||
+ | Serial port /dev/tty.usbserial-A5XK3RJT |
||
+ | Connecting.... |
||
+ | Detecting chip type... Unsupported detection protocol, switching and trying again... |
||
+ | Connecting... |
||
+ | Detecting chip type... ESP32 |
||
+ | Chip is ESP32-D0WD-V3 (revision v3.0) |
||
+ | Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None |
||
+ | Crystal is 40MHz |
||
+ | MAC: 0c:dc:7e:32:81:fc |
||
+ | Uploading stub... |
||
+ | Running stub... |
||
+ | Stub running... |
||
+ | Configuring flash size... |
||
+ | Flash will be erased from 0x00000000 to 0x003fffff... |
||
+ | Compressed 4194304 bytes to 1807535... |
||
+ | Wrote 4194304 bytes (1807535 compressed) at 0x00000000 in 160.9 seconds (effective 208.6 kbit/s)... |
||
+ | Hash of data verified. |
||
+ | </PRE> |
||
+ | =Настройка WiFi= |
||
+ | После прошивки бридж создает точку доступа к которой можно подключиться ( без шифрования) и указать сеть к которой подключаться |
||
+ | <BR> |
||
+ | [[Файл:Sonoff zbpro setup wifi 1.png|300px]] |
||
+ | <BR> |
||
+ | После настройки подключиться назад к "своей сети" и зайти по адресу который вернул бридж: |
||
+ | <BR> |
||
+ | [[Файл:Sonoff zbpro setup wifi 2.png|300px]] |
||
+ | |||
+ | (конечно это может быть как отдельный SSID так и другая точка доступа с другой сетью доступная через маршрутизацию) |
||
+ | |||
+ | =Прошивка чипа ZigBee (отдельно от основной платы)= |
||
+ | Отдельно следует прошить чип который реализует собественно протокол Zigbee.<BR> |
||
+ | Сразу после прошивки собственно zigbee часть не работает (это видно по-тому что кнопки на разрешение поджключения серые!) |
||
+ | <BR>[[Файл:Sonoff zbpro flash zigbee chip 1.png|300px]]<BR> |
||
+ | Следующим шагом прошивка - перейти в раздел Tools (а не Console как советуют некоторые руководства) и далее в Berry Scripting Console |
||
+ | <BR>[[Файл:Sonoff zbpro flash zigbee chip 2.png|300px]]<BR> |
||
+ | Далее в консоли выполнить следующий код: |
||
+ | <PRE> |
||
+ | import sonoff_zb_pro_flasher as cc |
||
+ | cc.load("SonoffZBPro_coord_20220219.hex") |
||
+ | cc.check() |
||
+ | </PRE> |
||
+ | Внимание: файл <code>SonoffZBPro_coord_20220219.hex</code> уже присутвует на устройстве (включен в прошивку) и загружать его отдельно на устройство не требуется (но это может измениться в будущих прошивках) |
||
+ | |||
+ | Правильный вывод выглядит так (я прошивал 2 устройства и оба выдали такой результат) |
||
+ | <PRE> |
||
+ | 18:32:05.964 FLH: Starting verification of HEX file |
||
+ | 18:32:15.190 FLH: Verification of HEX file OK |
||
+ | </PRE> |
||
+ | <BR>[[Файл:Sonoff zbpro flash zigbee chip 3.png|300px]]<BR> |
||
+ | |||
+ | '''<big><big>ВАЖНО</big></big>''': далее запускать команду прошивки НЕ ЗАКРЫВАЯ текущую консоль. Если например выйти из консоли и потом вернуться - то НЕ работает, причем никакого сообщения об ошибке не будет. |
||
+ | <BR> |
||
+ | Далее запустить (в той же консоли): |
||
+ | <PRE> |
||
+ | cc.flash() |
||
+ | </PRE> |
||
+ | и оставить устройство на ~10 минут . <BR> |
||
+ | При этом никаких сообщений не было нигде, но тем не менее чип прошился нормально - и через 10 минут, перезагрузив устройство можно видеть активные кнопки (становятся активными не сразу после загрузки а секунд через 10-15) |
||
+ | <BR>[[Файл:Sonoff zbpro flash zigbee chip 4.png|300px]]<BR> |
||
+ | |||
+ | =Подключение к Home Assistant (ZHA или Zigbee2MQTT)= |
||
+ | В целом, подключить к HA можно и без этих шагов, есть 2 или более способов, по этой причине одно из устройств я использую в режиме Tasmota2MQTT а второе - Zigbee2mqtt (z2m) |
||
+ | |||
+ | ==zigbee2mqtt== |
||
+ | По сути: в этом режиме бридж "прикидывается" ком-портом на котром подключен адаптер zigbee |
||
+ | <BR> |
||
+ | Для этог в настройках темплейта указать таие "магические" настройки (у меня потребовалось указать их, хотя по умолчанию так и было указано, но не работало) |
||
+ | <BR> |
||
+ | Configuration --> Configure Other --> Template |
||
+ | <PRE> |
||
+ | {"NAME":"TCP ZBBridge Pro", "GPIO":[0,0,576,0,480,0,0,0,0,1,1,5792,0,0,0,5472,0,320,5793,5504,0,640,608,32,0,0,0,0,0,1,0,0,0,0,0,0],"FLAG":0,"BASE":1} |
||
+ | </PRE> |
||
+ | После чегов консоли запустить |
||
+ | |||
+ | <PRE> |
||
+ | backlog rule1 on system#boot do TCPStart 8888 endon ; rule1 1 ; TCPStart 8888 |
||
+ | </PRE> |
||
+ | Эта команда передаст "отвяжет" управление чипом zigbee от собственно Tasmota запущенной на бридже, и выставит доступ к чипу на порту 8888 - что бы к нему можно было подключить внешний софт. |
||
+ | <BR> |
||
+ | <BR> |
||
+ | <big>'''После выполнение этой команды пропадет кнопка управления Permit Join и Map - теперь управление доступно только внешнему (выполняющемуся НЕ на бридже! - например крнтейнеру с zigbee2mqtt запущенному на компьютере, с доступом по tcp) софту'''</big> |
||
+ | <BR> |
||
+ | </BR> |
||
+ | Минимальная конфигурация zigbee2mqtt |
||
+ | <PRE> |
||
+ | permit_join: true |
||
+ | mqtt: |
||
+ | base_topic: zigbee2mqtt |
||
+ | server: mqtt://mqtt.home:1883 |
||
+ | user: имя пользователя |
||
+ | password: пароль |
||
+ | serial: |
||
+ | port: tcp://192.168.31.246:8888 |
||
+ | </PRE> |
||
+ | * <code>tcp://192.168.31.246:8888</code> это и есть собственно адрес бриджа и порт на котором он дает доступ к управлению чипом zigbee |
||
+ | * (заметка) - если бы чип пыл достуен локально то было бы что то вроде <code>/dev/ttyUSB0</code> |
||
+ | |||
+ | ==Tasmota2MQTT== |
||
+ | Альтернативный вариант - это когда трансляцией из Zigbee в MQTT занимается прошивка Tasmota <BR> |
||
+ | Это дает больше контроля - но требует и больше знаний, и пока что у меня нет устройств которые не работали бы через <code>z2m</code>, этот режим пока отложен "на потом" |
||
+ | |||
+ | =Ссылки= |
||
+ | * Tasmota2mqtt https://thehelpfulidiot.com/how-to-use-zigbee2tasmota-with-home-assistant |
||
+ | * Прошивка https://zigbee.blakadder.com/Sonoff_ZBBridge-P.html |
Текущая версия на 11:39, 27 мая 2024
Sonoff Zigbee Bridge Pro
Задача - отвязать от всяких облаков, вся работа должна проходить локально
Что нужно
- паяльник/припой/флюс
- переходнтк на TTL (5 вольт спалит нахуй все) )(https://microcontrollerslab.com/ftdi-usb-to-serial-converter-cable-use-linux-windows/)
- Провода/гребенки если хочется сделать разборное соединение
Пайка
Распаять гребенку что бы было проще жить (конечно надо было обточить но руки-крюки)
Подключение
У меня вот такой (плюс/минус) конвертер с USB на 3.3/5v Serial
В случае с ESP требуется уровеь 3.3V - выбрать на плате джампером, проверить вольтметром
Подключаю вот так:
На что тут смотреть:
- Синими стрелками помечена земля - важно что бы GPIO0 был подключен к земле, это переводит плату в режим прошивки. Если это не сделать, то загрузится текущая прошивка
- RX/TX подключается крест на крест, выход RX одной платы к TX другой (очевидно конечно)
- Земля общая (тут она включена в макетную плату и от нее на 2 точки - GPIO0 и GRN на бридже)
- Питание у меня подается отдельно от ноута на конвертер и отдельно от блока питания на бридж. Есть инструкции где советуют брать питание 3.3V с конвертера, но у меня в таком режиме бридж уходит в циклическю перезагрузку
Проверка
Если плата работает в обычном режиме то в minicom (имя порта /dev/tty.usbserial-A5XK3RJT
будет отличаться от системы к системе и похоже зависит от серийника конвертера)
то при загрузке покажет что-то вот такое, светодилот мигает
Welcome to minicom 2.8 OPTIONS: Compiled on Nov 18 2022, 07:58:18. Port /dev/tty.usbserial-A5XK3RJT, 16:23:45 Press CTRL-A Z for help on special keys ets Jul 29 2019 12:21:46 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3fff0030,len:4 load:0x3fff0034,len:6976 ho 0 tail 12 room 4 load:0x40078000,len:13072 load:0x40080400,len:3896 entry 0x40080688 {V���c��Vj���k{�����j{��WBj{��W�c��FZc�����c��vc��B�Bn��c��B�NBJB�"��Bv�JZJj{�҇�NBBB�"��B�BJJj?{��B�OBCJԦ��B҄BJjj{V�vc�����j{���J�Rfnj�{����V�fBK�{���j�JfO��{�����r?Jj�{����VJfJJ�{�����J�b[��{V���Ncj�����jZ�������ets Jul
Если все сделано верно и плата в режиме прошивки то в миникоме видно что-то такое (светодиод горит постоянно)
rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2)) waiting for download
Софт
- Установить из brew:
brew install esptool
- или руками https://github.com/espressif/esptool/releases
Определение типа платы
esptool.py --port /dev/cu.usbserial-A5XK3RJT flash_id
(у меня в системе использование /dev/tty.usbserial-A5XK3RJT и /dev/cu.usbserial-A5XK3RJT ведет к одинаковым результатам хотя формально это 2 разных устройства)
esptool.py v4.7.0 Serial port /dev/cu.usbserial-A5XK3RJT Connecting....... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 0c:dc:7e:32:81:fc Uploading stub... Running stub... Stub running... Manufacturer: 5e Device: 4016 Detected flash size: 4MB Hard resetting via RTS pin...
@esp_tool -pCOM5 -b115200 -a0x0000 -s0x100000 -or esp82XX.bin
Бекап прошивки
esptool.py -b 115200 --port /dev/tty.usbserial-A5XK3RJT read_flash 0x000000 0x400000 soboff_bridge_pro_original_software.bin
- Адреса
0x000000 0x400000
ожначают читать все 4М (а размер флеша указан выше)
esptool.py v4.7.0 Serial port /dev/tty.usbserial-A5XK3RJT Connecting... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 0c:dc:7e:32:81:fc Stub is already running. No upload is necessary. 2097152 (100 %) 2097152 (100 %) Read 2097152 bytes at 0x00000000 in 196.8 seconds (85.3 kbit/s)... Hard resetting via RTS pin...
Скачалось 2М, хотя размер флеша выше писал 4М
ls -lsah soboff_bridge_pro_original_software.bin 4096 -rw-r--r-- 1 mmazur staff 4.0M May 12 17:34 soboff_bridge_pro_original_software.bin
Очистка флеша перед записью
esptool.py --port /dev/tty.usbserial-A5XK3RJT erase_flash
esptool.py v4.7.0 Serial port /dev/tty.usbserial-A5XK3RJT Connecting...... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 0c:dc:7e:32:81:fc Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 13.8s Hard resetting via RTS pin...
Прошивка
http://ota.tasmota.com/tasmota32/release/tasmota32-zbbrdgpro.factory.bin
(http://ota.tasmota.com/tasmota32/release/)
На всякий случай копия той прошивки что заливал я:
Tasmota32-zbbrdgpro.factory.bin
esptool.py --port /dev/tty.usbserial-A5XK3RJT write_flash 0x0 ~/Downloads/tasmota32-zbbrdgpro.factory.bin
esptool.py v4.7.0 Serial port /dev/tty.usbserial-A5XK3RJT Connecting.... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 0c:dc:7e:32:81:fc Uploading stub... Running stub... Stub running... Configuring flash size... Flash will be erased from 0x00000000 to 0x003fffff... Compressed 4194304 bytes to 1807535... Wrote 4194304 bytes (1807535 compressed) at 0x00000000 in 160.9 seconds (effective 208.6 kbit/s)... Hash of data verified.
Настройка WiFi
После прошивки бридж создает точку доступа к которой можно подключиться ( без шифрования) и указать сеть к которой подключаться
После настройки подключиться назад к "своей сети" и зайти по адресу который вернул бридж:
(конечно это может быть как отдельный SSID так и другая точка доступа с другой сетью доступная через маршрутизацию)
Прошивка чипа ZigBee (отдельно от основной платы)
Отдельно следует прошить чип который реализует собественно протокол Zigbee.
Сразу после прошивки собственно zigbee часть не работает (это видно по-тому что кнопки на разрешение поджключения серые!)
Следующим шагом прошивка - перейти в раздел Tools (а не Console как советуют некоторые руководства) и далее в Berry Scripting Console
Далее в консоли выполнить следующий код:
import sonoff_zb_pro_flasher as cc cc.load("SonoffZBPro_coord_20220219.hex") cc.check()
Внимание: файл SonoffZBPro_coord_20220219.hex
уже присутвует на устройстве (включен в прошивку) и загружать его отдельно на устройство не требуется (но это может измениться в будущих прошивках)
Правильный вывод выглядит так (я прошивал 2 устройства и оба выдали такой результат)
18:32:05.964 FLH: Starting verification of HEX file 18:32:15.190 FLH: Verification of HEX file OK
ВАЖНО: далее запускать команду прошивки НЕ ЗАКРЫВАЯ текущую консоль. Если например выйти из консоли и потом вернуться - то НЕ работает, причем никакого сообщения об ошибке не будет.
Далее запустить (в той же консоли):
cc.flash()
и оставить устройство на ~10 минут .
При этом никаких сообщений не было нигде, но тем не менее чип прошился нормально - и через 10 минут, перезагрузив устройство можно видеть активные кнопки (становятся активными не сразу после загрузки а секунд через 10-15)
Подключение к Home Assistant (ZHA или Zigbee2MQTT)
В целом, подключить к HA можно и без этих шагов, есть 2 или более способов, по этой причине одно из устройств я использую в режиме Tasmota2MQTT а второе - Zigbee2mqtt (z2m)
zigbee2mqtt
По сути: в этом режиме бридж "прикидывается" ком-портом на котром подключен адаптер zigbee
Для этог в настройках темплейта указать таие "магические" настройки (у меня потребовалось указать их, хотя по умолчанию так и было указано, но не работало)
Configuration --> Configure Other --> Template
{"NAME":"TCP ZBBridge Pro", "GPIO":[0,0,576,0,480,0,0,0,0,1,1,5792,0,0,0,5472,0,320,5793,5504,0,640,608,32,0,0,0,0,0,1,0,0,0,0,0,0],"FLAG":0,"BASE":1}
После чегов консоли запустить
backlog rule1 on system#boot do TCPStart 8888 endon ; rule1 1 ; TCPStart 8888
Эта команда передаст "отвяжет" управление чипом zigbee от собственно Tasmota запущенной на бридже, и выставит доступ к чипу на порту 8888 - что бы к нему можно было подключить внешний софт.
После выполнение этой команды пропадет кнопка управления Permit Join и Map - теперь управление доступно только внешнему (выполняющемуся НЕ на бридже! - например крнтейнеру с zigbee2mqtt запущенному на компьютере, с доступом по tcp) софту
Минимальная конфигурация zigbee2mqtt
permit_join: true mqtt: base_topic: zigbee2mqtt server: mqtt://mqtt.home:1883 user: имя пользователя password: пароль serial: port: tcp://192.168.31.246:8888
tcp://192.168.31.246:8888
это и есть собственно адрес бриджа и порт на котором он дает доступ к управлению чипом zigbee- (заметка) - если бы чип пыл достуен локально то было бы что то вроде
/dev/ttyUSB0
Tasmota2MQTT
Альтернативный вариант - это когда трансляцией из Zigbee в MQTT занимается прошивка Tasmota
Это дает больше контроля - но требует и больше знаний, и пока что у меня нет устройств которые не работали бы через z2m
, этот режим пока отложен "на потом"