Shelly 3EM je třífázový měřič energie od Shelly. Originální firmware toho umí dost – přes cloud nebo lokální API. Jenže já chtěl víc: přímou integraci s Home Assistantem přes MQTT, vlastní kalibraci, LED signalizaci chyb a hlavně – žá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 obvodem ADE7880 od Analog Devices. ADE7880 je precizní třífázový energetický měřič s hardwarovými akumulátory energie – to je důležité detail, ke kterému se vrátím.
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 samozřejmě 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 pomocí binárního parsování – konkrétně hodnoty 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:
- Zachovala originální kalibrační koeficienty z firmware zálohy
- Používala hardwarové akumulátory energie v ADE7880 (přesnější než softwarová integrace)
- Publikovala data přes MQTT každých 15 sekund
- LED dioda signalizovala stav pomocí dynamických vzorů
Klíčová část YAML konfigurace pro ADE7880:
sensor:
- platform: ade7880
irq_pin: GPIO13
voltage_a:
name: "Fáze A napětí"
voltage_gain: 7481 # z originální kalibrace
current_a:
name: "Fáze A proud"
current_gain: 3442 # z originální kalibrace
active_power_a:
name: "Fáze A výkon"
power_gain: 2573 # z originální kalibrace
Hardwarové akumulátory energie
Tohle byl jeden z nejdůležitějších rozhodnutí. ADE7880 má vlastní hardwarové registry pro akumulaci energie – čip počítá kWh přímo v hardwaru, bez závislosti na frekvenci čtení z ESP8266.
Softwarová integrace (výkon × čas) je nepřesná pokud ESP8266 přestane číst – třeba při restartu nebo WiFi výpadku. Hardwarové akumulátory počítají dál i bez ESP.
V ESPHome to vypadá takto:
sensor:
- platform: ade7880
energy_a:
name: "Fáze A energie"
# Čte se z hardwarového akumulátoru AWATTHR registru
LED signalizace chyb
Originální firmware bliká LED jednoduše. Já chtěl vědět která fáze má problém bez připojení k HA. Implementoval jsem Morse-like vzory:
- Jedna rychlá bliknutí = problém fáze A
- Dvě rychlá bliknutí = problém fáze B
- Tři rychlá bliknutí = problém fáze C
- Kombinace = více fází
V ESPHome přes interval komponentu s dynamickým vzorem podle stavu senzorů.
Integrace s Home Assistantem
Data jdou přes MQTT na Home Assistant. Z nich pak počítám odvozené senzory:
sensor.edc_export_15min_max– export FVE do sítě za 15 minutsensor.edc_byt_15min_max– spotřeba bytu za 15 minut
Tyto hodnoty pak slouží jako vstup pro EDC Optimalizátor alokace.
Výsledek
Měřič funguje přesně, data vidím v HA v reálném čase, žádný cloud, žádné předplatné. Kalibrační koeficienty z výroby jsou zachovány, takže přesnost je stejná jako u originálního firmware.
Celý projekt ukázal, že i uzavřené IoT zařízení jde rozumně otevřít – stačí záloha před flashováním a trocha trpělivosti s binárními formáty.