Blog · 8. března 2026

Shelly 3EM: Jak jsem nahradil originální firmware za ESPHome

ESPHomeShellyEnergie

Shelly 3EM je třífázový měřič energie od Shelly. Originální firmware toho umí dost, přes cloud nebo lokální API. Chtěl jsem víc: přímou integraci s Home Assistantem přes MQTT, vlastní kalibraci, LED signalizaci chyb a žádný cloud.

Tak jsem ho rozebral a přepsal firmware od základu.

Hardware: co je uvnitř

Shelly 3EM je postavený na čipu ESP8266 (Tensilica L106, 80 MHz, 2 MB flash) a měřicím obvodu ADE7880 od Analog Devices. ADE7880 je precizní třífázový energetický měřič s hardwarovými akumulátory energie.

Na desce jsou tři proudové transformátory (CT), napěťové děliče pro měření napětí všech tří fází a relé pro odpojení zátěže.

Záloha originálu a extrakce kalibrace

Než jsem cokoliv měnil, zálohoval jsem originální firmware pomocí esptool.py:

esptool.py --port /dev/ttyUSB0 read_flash 0x0 0x200000 shelly3em_backup.bin

Tohle je zásadní krok. V originálním firmware jsou uloženy kalibrační koeficienty pro každou fázi, hodnoty, které Shelly změřil při výrobní kalibraci. Bez nich by přesnost měření byla špatná.

Koeficienty jsou uloženy v EEPROM oblasti flashe. Extrahoval jsem je binárním parsováním, konkrétně current_gain, voltage_gain a power_gain pro každou ze tří fází.

ESPHome konfigurace

ESPHome podporuje ADE7880 nativně od verze 2023.x. Konfiguraci jsem postavil tak, aby:

Klíčová část YAML konfigurace pro ADE7880:

sensor:
  - platform: ade7880
    irq_pin: GPIO13
    voltage_a:
      name: "Fáze A napětí"
      voltage_gain: 7481
    current_a:
      name: "Fáze A proud"
      current_gain: 3442
    active_power_a:
      name: "Fáze A výkon"
      power_gain: 2573

Hardwarové akumulátory energie

ADE7880 má vlastní hardwarové registry pro akumulaci energie. Čip počítá kWh přímo v hardwaru, bez závislosti na tom, jak často ESP8266 hodnoty čte.

Softwarová integrace (výkon × čas) je nepřesná, když ESP8266 přestane číst, třeba při restartu nebo výpadku Wi-Fi. Hardwarové akumulátory počítají dál i bez ESP.

sensor:
  - platform: ade7880
    energy_a:
      name: "Fáze A energie"

LED signalizace chyb

Originální firmware bliká LED jednoduše. Chtěl jsem vědět, která fáze má problém, bez připojení k Home Assistantu. Vzory jsou:

V ESPHome to řeší komponenta interval s dynamickým vzorem podle stavu senzorů.

Integrace s Home Assistantem

Data jdou přes MQTT do Home Assistantu. Z nich pak počítám odvozené senzory:

Tyto hodnoty slouží jako vstup pro EDC Optimalizátor alokace.