Zigbee Sonoff Zigbee Bridge pro: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 38 промежуточных версий этого же участника)
Строка 124: Строка 124:
 
4096 -rw-r--r-- 1 mmazur staff 4.0M May 12 17:34 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>
 
</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

Задача - отвязать от всяких облаков, вся работа должна проходить локально

Что нужно

Пайка

Распаять гребенку что бы было проще жить (конечно надо было обточить но руки-крюки)

Sonoff bridge rx tx gpio power.jpg

Подключение

У меня вот такой (плюс/минус) конвертер с USB на 3.3/5v Serial

FTDI-USB-to-serial-converter.png

В случае с ESP требуется уровеь 3.3V - выбрать на плате джампером, проверить вольтметром


Подключаю вот так:

How to connect sonoff bridge to usb.JPG

На что тут смотреть:

  • Синими стрелками помечена земля - важно что бы 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

Софт

Определение типа платы

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

После прошивки бридж создает точку доступа к которой можно подключиться ( без шифрования) и указать сеть к которой подключаться
Sonoff zbpro setup wifi 1.png
После настройки подключиться назад к "своей сети" и зайти по адресу который вернул бридж:
Sonoff zbpro setup wifi 2.png

(конечно это может быть как отдельный SSID так и другая точка доступа с другой сетью доступная через маршрутизацию)

Прошивка чипа ZigBee (отдельно от основной платы)

Отдельно следует прошить чип который реализует собественно протокол Zigbee.
Сразу после прошивки собственно zigbee часть не работает (это видно по-тому что кнопки на разрешение поджключения серые!)
Sonoff zbpro flash zigbee chip 1.png
Следующим шагом прошивка - перейти в раздел Tools (а не Console как советуют некоторые руководства) и далее в Berry Scripting Console
Sonoff zbpro flash zigbee chip 2.png
Далее в консоли выполнить следующий код:

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


Sonoff zbpro flash zigbee chip 3.png

ВАЖНО: далее запускать команду прошивки НЕ ЗАКРЫВАЯ текущую консоль. Если например выйти из консоли и потом вернуться - то НЕ работает, причем никакого сообщения об ошибке не будет.
Далее запустить (в той же консоли):

cc.flash()

и оставить устройство на ~10 минут .
При этом никаких сообщений не было нигде, но тем не менее чип прошился нормально - и через 10 минут, перезагрузив устройство можно видеть активные кнопки (становятся активными не сразу после загрузки а секунд через 10-15)
Sonoff zbpro flash zigbee chip 4.png

Подключение к 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, этот режим пока отложен "на потом"

Ссылки