Shelly 3EM auf Tasmota flashencongenio
Vorab: Alle hier beschriebenen Modifikationen erfolgen auf eigene Gefahr. Wir übernehmen keine Verantwortung für etwaige Schäden!

* Das Gerät

Shelly bietet mit der 3EM einen Energiemonitor an, der alle drei Phasen eines Hausanschlusses messen kann. Gemeint ist hier die alte Version:



nicht die neue, für die noch keine Erfahrungen vorliegen:




Leider trat das Problem auf, dass mit der Original-Firmware das Gerät zeitweise nicht im Netz erreichbar war - bzw. nur von bestimmten IPs aus. Offenbar reagierte die Shelly nicht mehr auf ARP-Requests.

* Ziel: Tasmota

Auch unter dem Gesichtspunkt, nur quelloffene Software im eigenen LAN zu betreiben, bietet es sich an, auch dieses Gerät mit -> Tasmota zu flashen.

Der Status ist aktuell noch nicht wirklich produktiv, der benötigte Treiber für den verwendeten Baustein (-> ADE7880) ist nicht im Standardimage vorhanden und muss einkompiliert werden. Die dazu notwendigen Schritte sind komplex und in ihrer Gesamtheit nicht wirklich sauber dokumentiert.

* Notwendige Schritte

  • Zuerst muss man sich die Kalibrierungsdaten des eigenen Exemplars beschaffen, da die Tasmota-Version keine Kalibrierung zulässt. Dazu ruft man die URL
    http://<shelly-ip>/calib.dat
    auf und speichert diese Datei sicher ab.
  • Nun ist es Zeit, die Original-Firmware mit Tasmota zu ersetzen. Ich habe dazu ein -> vorgefertigtes Image verwendet, dass aus -> diesem Beitrag stammt und erstmalig Mongoose-OS durch Tasmota ersetzt (siehe -> hier).

    Man muss dazu das Image auf einem Web-Server ablegen, der von der Shelly aus erreichbar ist und dann im Browser folgende URL aufrufen:
    http://<shelly-ip>/ota?url=http://<webserver>/shellyem3-esp8266-0.4.6.zip
    Nach dem Flashen ist zunächst die aktuelle Tasmota-Version auf der Shelly. Diese bedarf aber noch einiger Nacharbeit.
  • Zuerst muss man sich an dem neu aufgezogenen WLAN "tasmota-xxxxxxx" anmelden und dann die URL
    http://192.168.4.1
    aufrufen, um die Shelly im eigenen WLAN anzumelden. Hierbei bitte keine Tippfehler machen, sonst gibt es Probleme!
  • Nach einem Neustart kann man sich an der Web-GUI der Shelly anmelden und muss dann das Template so abändern und aktivieren (-> Quelle):
    {"NAME":"Shelly 3EM","GPIO":[1,1,288,1,32,8065,0,0,640,8064,608,224,8096,0],"FLAG":0,"BASE":18}
  • Der Inhalt der früher abgespeicherten Datei calib.dat wird so angepasst, dass eine einzeilige Version einer Regel für Tasmota dabei herauskommt, die etwa so aussieht:
    rule3 on file#calib.dat do {"rms":{"current_a":3210147,"current_b":3231331,"current_c":3190378,"current_n":1973269,"current_s":267130637,"voltage_a":-718333,"voltage_b":-734397,"voltage_c":-721143},"angles":{"angle0":184,"angle1":180,"angle2":164},"powers":{"totactive":{"a":-1441705,"b":-1436723,"c":-1432827}}} endon
    Bitte auf korrekte JSON-Syntax achten! Diese Regel gibt man in der Tasmota-Console ein.
  • Trotzdem werden die Verbrauchswerte noch nicht angezeigt, da wie erwähnt, die Standardversion von Tasmota noch nicht die richtigen Treiber enthält. Am einfachsten ist es, sich mit dem -> Tasmocompiler ein eigenes Image zu erzeugen. Dazu folgt man der dortigen Anleitung und installiert den Tasmocompiler z.B. unter Docker.

    Für das Shelly 3EM Image benötigt man diese Einstellungen:



    Außerdem folgende zusätzliche Parameter: #define USE_I2C #define USE_ENERGY_SENSOR #define USE_ADE7880 #define ADE7880_AIGAIN_INIT 3158193 // rms, current_a #define ADE7880_BIGAIN_INIT 3105107 // rms, current_b #define ADE7880_CIGAIN_INIT 3123917 // rms, current_c #define ADE7880_NIGAIN_INIT 1713149 // rms, current_s !! #define ADE7880_AVGAIN_INIT -733808 // rms, voltage_a #define ADE7880_BVGAIN_INIT -778120 // rms, voltage_b #define ADE7880_CVGAIN_INIT -751443 // rms, voltage_c #define ADE7880_APHCAL_INIT 156 // angles, angle0 #define ADE7880_BPHCAL_INIT 148 // angles, angle1 #define ADE7880_CPHCAL_INIT 152 // angles, angle2 #define ADE7880_APGAIN_INIT -1346041 // powers, totactive, a #define ADE7880_BPGAIN_INIT -1346784 // powers, totactive, b #define ADE7880_CPGAIN_INIT -1352652 // powers, totactive, c Danach kann das Image kompiliert und - falls fehlerfrei - als firmware.bin.gz heruntergeladen werden. Wir haben ein entsprechendes -> Image für Tasmota 13.4.0 erzeugt.
  • Das entstandene Image ist vermutlich zu groß, um es direkt zu flashen (es gibt dann beim Hochladen eine Fehlermeldung). Man lädt sich deshalb eine -> Minimal-Firmware, die zuerst geflasht wird und die dann im zweiten Schritt erlaubt, die selbst kompilierte Firmware zu flashen (siehe -> hier).
  • Auch nach all diesen Schritten ist es noch möglich, dass die Anzeige der Messwerte nicht erfolgt. Oft muss mach dem Flashen die Shelly erst einmal komplett stromlos gemacht werden, ehe das korrekt funktioniert und etwa so aussieht: