Skip to content
Andy Blackburn edited this page Dec 6, 2020 · 61 revisions

Updating from stock firmware

  • Watch a 2 minute video.

  • Use the following URLs depending on the device model:

    • Shelly 1: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-Shelly1.zip
    • Shelly 1L: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-Shelly1L.zip
    • Shelly 1PM: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-Shelly1PM.zip
    • Shelly 2: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-Shelly2.zip
    • Shelly 2.5: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-Shelly25.zip
    • Shelly I3: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-ShellyI3.zip
    • Shelly Plug: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-ShellyPlug.zip
    • Shelly Plug S: http://A.B.C.D/ota?url=http://rojer.me/files/shelly/shelly-homekit-ShellyPlugS.zip
  • If everything goes well, after 30 seconds or so you will see LED blinking (see LED indication section here) and a different web interface at the same device address.

  • Script for an automated way to update your devices (see below).

    • ./flash_shelly.py hostname (for single device)
    • ./flash_shelly.py -a (for all devices on the network)

Reverting to stock firmware

It is possible to revert back to stock firmware.


Script

There is a Python script works with macOS / Linux / Windows. It can be downloaded here, simply download the zip, unpack and in terminal navigate to the tools folder and run the command.

  • i.e ./flash_script.py -a will scan your network for all available devices and ask you if you wish to flash the found device(s) to homekit firmware.

Requirements: Python 3.6 or later, Firmware version 2.1

You can do various things with the script see bellow:

usage: flash-shelly.py [-h] [-m {homekit,keep,revert}] [-a] [-l] [-e [EXCLUDE ...]] [-n] [-y] [-V VERSION] [-c HAP_SETUP_CODE] [--variant VARIANT] [-v {0,1}] [hosts ...]

Shelly HomeKit flashing script utility

positional arguments:
  hosts

optional arguments:
  -h, --help            show this help message and exit
  -m {homekit,keep,revert}, --mode {homekit,keep,revert}
                        Script mode.
  -a, --all             Run against all the devices on the network.
  -l, --list            List info of shelly device.
  -e [EXCLUDE ...], --exclude [EXCLUDE ...]
                        Exclude hosts from found devices.
  -n, --assume-no       Do a dummy run through.
  -y, --assume-yes      Do not ask any confirmation to perform the flash.
  -V VERSION, --version VERSION
                        Force a particular version.
  -c HAP_SETUP_CODE, --hap-setup-code HAP_SETUP_CODE
                        Configure HomeKit setup code, after flashing.
  --variant VARIANT     Prerelease variant name.
  -v {0,1}, --verbose {0,1}
                        Enable verbose logging level.

macOS / Linux example:

  • ./flash_shelly.py -la this will list all available shelly devices and report the current firmware version that is available.
  • ./flash_shelly.py -am keep this will update all available shelly devices on the current firmware type (Stock or HomeKit) to latest version.
  • ./flash_shelly.py hostname this will update the device hostname to current firmware version that is available.
  • ./flash_shelly.py -m revert hostname this will revert the device hostname to latest stock firmware version that is available (this can also be used with -a ./flash_shelly.py -am revert to revert all devices on the network).

Windows example:

  • python3 flash_shelly.py -la this will list all available shelly devices and report the current firmware version that is available.
  • python3 flash_shelly.py -am keep this will update all available shelly devices on the current firmware type (Stock or HomeKit) to latest version.
  • python3 flash_shelly.py hostname this will update the device hostname to current firmware version that is available.
  • python3 flash_shelly.py -m revert hostname this will revert the device hostname to latest stock firmware version that is available (this can also be used with -a python3 flash_shelly.py -am revert to revert all devices on the network).

Script Fails to run

If the script fails to run becasue of 'Failed to lookup version information' try running following commands in a Terminal session to fix the issue.

  • python3 -c 'import ssl; print(ssl.get_default_verify_paths())'
  • ls -l /etc/ssl/