ZB-GW03 eWeLink Ethernet Zigbee Gateway now hacked with ESPHome and Tasmota so can be used via MQTT or as a remote Zigbee Coordinator LAN adapter with Home Assistant's ZHA integration or Zigbee2MQTT

Hi all,
Thank you for this great thread.
I recently bought also a ZB-GW03 v1.4 gateway.
Inspired by @syssi and @tube0013 GitHub repo I connected a Z-Wave module (zooz ZAC93) to the ZB-GW03 … and it’s working :smiley:.

Also modified the case a bit by cutting some parts away so the additional PCB will fit and adding some magnets to the bottom side.

Here some screenshots:





Here the EspHome yaml:

substitutions:
  name: "ZB-GW03 Coordinator"
  device_description: "ZB-GW03 v1.4 (SM-011) eWeLink Ethernet Zigbee Gateway based Zigbee Coordinator"
  mdns_name: "zb-gw03-coordinator"

  pin_zw_tx: GPIO1
  pin_zw_rx: GPIO3
  pin_zb_tx: GPIO2
  pin_zb_rx: GPIO4
  pin_bsl: GPIO12
  pin_rst: GPIO13
  pin_led_green: GPIO14
  pin_led_red: GPIO15
  pin_eth_power: GPIO16
  pin_eth_mdio: GPIO18
  pin_eth_mdc: GPIO23
  pin_scl: GPIO32
  pin_sda: GPIO33
  pin_btn: GPIO34

esphome:
  name: ${mdns_name}
  friendly_name: ${name}
  comment: ${device_description}
  min_version: 2024.6.0
  project:
    name: "syssi.esphome-zb-gw03"
    version: 2.1.0
  on_boot:
    priority: 600
    then:
      - switch.turn_off: download_mode
      - switch.turn_on: zigbee_reset
      - lambda: |-
          id(mdns0).add_extra_service({
            "_zigbee-coordinator",
            "_tcp",
            6638,
            {
              {"name", "ZB-GW03"},
              {"serial_number", get_mac_address()},
              {"radio_type", "ezsp"}
            }
          });
          id(mdns0).add_extra_service({
            "_zwave",
            "_tcp",
            6639,
            {
              {"version", "1.0"},
              {"name", "ZB-GW03"},
              {"serial_number", get_mac_address()}
            }
          });

esp32:
  board: esp-wrover-kit
  framework:
    type: esp-idf

external_components:
  - source: github://oxan/esphome-stream-server@master

mdns:
  id: mdns0

ota:
  platform: esphome
  password: !secret ota_password
  id: ota_pass

api:
  encryption:
    key: !secret ha_api_key

web_server:
  port: 80
  auth:
    username: !secret webserver_username
    password: !secret webserver_password

logger:
  level: INFO
  hardware_uart: UART1

debug:
  update_interval: 5s

i2c:
  - id: i2c_bus
    sda: $pin_sda
    scl: $pin_scl
    scan: true

uart:
  - id: uart_zigbee
    rx_pin: $pin_zb_rx
    tx_pin: $pin_zb_tx
    baud_rate: 115200

  - id: uart_zwave
    rx_pin: $pin_zw_rx
    tx_pin: $pin_zw_tx
    baud_rate: 115200

stream_server:
  - id: server_zigbee
    uart_id: uart_zigbee
    port: 6638

  - id: server_zwave
    uart_id: uart_zwave
    port: 6639

ethernet:
  type: LAN8720
  mdc_pin: $pin_eth_mdc
  mdio_pin: $pin_eth_mdio
  clk_mode: GPIO17_OUT
  phy_addr: 1
  power_pin: $pin_eth_power

status_led:
  pin:
    number: $pin_led_red
    inverted: true

light:
  - platform: monochromatic
    name: "Green LED"
    output: output_led

output:
  - platform: ledc
    pin: $pin_led_green
    id: output_led
    inverted: true

button:
  - platform: restart
    name: "Restart"

switch:
  - platform: template
    id: zigbee_reset
    name: "Zigbee Reset"
    turn_on_action:
      - switch.turn_on: zigbee_rst
      - delay: 10ms
      - switch.turn_off: zigbee_rst

  # SM-011 V1.0 nRST
  - platform: gpio
    id: zigbee_rst
    pin: $pin_rst
    name: "Zigbee nRST"
    inverted: true
    internal: true
    restore_mode: ALWAYS_OFF

  # SM-011 V1.0 PA00
  - platform: gpio
    id: download_mode
    pin: $pin_bsl
    name: "Zigbee Download Mode"
    inverted: true
    restore_mode: ALWAYS_OFF

binary_sensor:
  - platform: gpio
    name: "Zigbee Reset Button"
    pin:
      number: $pin_btn
      inverted: true
    on_press:
      - switch.turn_off: download_mode
      - switch.turn_on: zigbee_reset

  - platform: stream_server
    stream_server: server_zigbee
    connected:
      name: "Zigbee Serial Connected"

  - platform: stream_server
    stream_server: server_zwave
    connected:
      name: "Z-Wave Serial Connected"

text_sensor:
  - platform: version
    hide_timestamp: true
    name: "ESPHome Version"

  - platform: ethernet_info
    ip_address:
      name: "IP Address"
    dns_address:
      name: "DNS Address"
    mac_address:
      name: "MAC Address"
4 Likes