Christians Webseite        << zurueck        vor >>

Shelly

Diese niedlichen, kleinen Boxen sind aktuell sehr populär und beliebt zum Schalten von elektrischen Geräten und z.B. zur Leistungsmessung in Solaranlagen. Es gibt ein ganzes "Universum" an unterschiedlichen HW-Ausführungen und Softwareunterstützung für alle gängigen Systeme. Typischerweise sind sie in das häusliche WiFi eingebunden und werden darüber kontrolliert. Eine der simpelsten Boxen ist die Shelly 1 Mini Gen3:
shelly shelly

Erste Inbetriebnahme

Der Shelly baut einen eigenen WiFi-Access-Point auf und wartet auf Kontaktaufnahme. In dieses neue Netz muss man sich (mit einem Smartphone) vorübergehend einbuchen und dann in einem Browser die folgende Adresse aufrufen:

  • http://192.168.33.1

Dies ist die universell gültige Default-Startseite aller neuen Shellys.
Das Shelly hat ein eingebautes Web-Interface. Dort die Konfiguration und Zugangsdaten für das heimische WiFi setzen und aktivieren. Danach den Shelly-WiFi-Access-Point verlassen und zurück ins heimische WiFi einbuchen.
Der Shelly bekommt vom Heim-Router eine neue IP zugewiesen über die er ab jetzt im Heim-Wifi ansprechbar ist. Die IP muss man in der Geräteliste des Routers nachschauen.
Diese ganze Prozedur kann man auch schnell und bequem mit der Shelly-App auf einem Smartphone erledigen.

Internals

Die Elektronik basiert auf einem ESP32-C3 von Espressif der auf 8MB Flash und 512KB RAM erweitert wurde. Er stellt eine WiFi und Bluetooth Verbindung bereit. Ein simples Netzteil ist ebenfalls enthalten. Achtung Bastler, die Elektronik ist NICHT galvanisch vom Netz getrennt!
shelly shelly

Die beiden Schaltkontakte des eingebauten Relais (HF32FA-G 12V) sind auf den Klemmenblock geführt (Kontakte "O" und "I"). Sie sind elektrisch sicher und vollständig vom Rest der Elektronik isoliert und können beliebig eingesetzt werden.
Das Relais sitzt um 90° gedreht auf einer Hilfsplatine.
shelly shelly shelly

Am Netz-Eingang sitzt ein Schutz-Varistor und eine 500mA Sicherung. Darauf folgen eine simple Gleichrichtung und 2 Kondensatoren (3.3uF/400V). Das Netzteil ist zweistufig aufgebaut. Ein BP2522 (buck-converter) setzt die Netzspannung auf 12V herunter (wird vermutlich nur für das Relais benötigt). Abweichend zum Datenblatt-Vorschlag wird am Eingang nur eine einzige Diode an Stelle eines Brückengleichrichters eingesetzt. Am Ausgang ist ein 330uF/16V Elko. Es folgt ein STI3470 der die 12V auf 3.3V für den Prozessor herabsetzt.

shelly shelly

Neben dem On-Chip Temperatursensor scheint es noch einen weiteren 10kOhm NTC auf der Platine zu geben. Der wird aber in keiner Dokumentation erwähnt und seine Funktion ist mir unklar.
Auf der Rückseite der Antennenstruktur sitzt ein fetter Keramik-Kondensator. Er ist auf beiden Seiten mit Masse verbunden und scheinbar nur eine mechanische Stütze um für einen definierten Abstand des Relais zu sorgen.

Die Platine ist 1.0mm dick und hat 4 Kupferlagen mit normalen gebohrten und auch Micro-Laser-Vias.
shelly

12V-Betrieb und Pinout

Direktes Arbeiten an der Elektronik ist lebensgefährlich weil das Netzteil nicht galvanisch getrennt ist.

Zum sicheren Basteln, oder auch für dauernden Betrieb, kann man die 12V auch direkt über ein externes Labornetzteil einspeisen. Ein geeigneter Einspeisepunkt ist parallel zum Ausgangskondensator des BP2522 (C26).
shelly

Am Rand der Platine befinden sich Testpads für einen (USB-)UART und zum Programmieren des ESP. Die 3.3V kann man alternativ auch über den entsprechenden Testpunkt einspeisen. Die externe 12V-Einspeisung darf aber NICHT gleichzeitig aktiv sein.
shelly
Eine externe 12V zu verwenden ist sehr zu empfehlen. Die 3.3V aus einem USB-UART Umsetzer sind möglicherweise nicht in der Lage den Peak-Strombedarf zu liefern.

Die Shelly-Firmware plappert im normalen Betrieb bereits fleissig und ständig über seine serielle Schnittstelle (115200,8,1,N) und sendet ihren Status und Infos zu gerade laufenden Aktionen.

Viele der Prozessorpins können mit alternativen Funktionen belegt werden. Die folgende Skizze zeigt die Ausgangskonfiguration:
shelly

Die Pegel einiger Pins werden beim Boot-Vorgang abgefragt und steuern ob der Download-Modus gestartet werden soll. Diese Pins sollte man nicht verwenden oder entsprechend umsichtig beschalten.
Der Shelly verwendet die folgenden IOs:

Pin # IO Funktion
4 GPIO0 LED
5 GPIO1 Taster
8 ADC1_CH3 NTC
13 GPIO7 Relay
16 GPIO10 Schalter


UART und Programmieren

Als Programmieradapter sind ein simpler USB-UART und 2 Taster ausreichend. Der Betrieb ist halbautomatisch. Zum Starten des Bootloaders den Taster FLASH gedrückt halten und kurz RESET drücken. Die Pin-Belegung des Steckverbinders im Beispiel ist für ein ESP-01S-Modul ausgelegt, die Signalnamen sind beim Shelly aber identisch.
shelly

Mit angeschlossenem USB-UART-Adapter kann man die Monitor-Daten auf der seriellen Schnittstelle (115200,8,1,N) mitlesen. Nach einem normalen Reset meldet sich der Shelly mit den folgenden Daten (gekürzt):

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x1 (POWERON),boot:0xd (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5820,len:0x11a8
load:0x403cc710,len:0x148c
load:0x403ce710,len:0x28c0
entry 0x403cc71a
boot: Shelly OS loader 1.0.0 (Oct 11 2024 11:45:33 IDF 5.2.1-s2)
boot: chip revision: v0.4
boot.esp32c3: SPI Speed      : 80MHz
boot.esp32c3: SPI Mode       : DIO
boot.esp32c3: SPI Flash Size : 8MB
boot: Enabling RNG early entropy source...
...

Das Bild ändert sich wenn GPIO9/[15]/"FLASH" während des Reset auf Masse liegt. Der Bootloader wird aktiviert und der Programmiermodus gestartet. Das Gerät wartet auf neue Firmware:
ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x1 (POWERON),boot:0x5 (DOWNLOAD(USB/UART0/1))
waiting for download

PlatformIO

PlatformIO ist eine der aktuell gängigsten Programmierungebungen. Üblicherweise beginnt man dort mit der Angabe des verwendeten Board-Typs. Dadurch werden alle für die SW-Erstellung wesentlichen Details (z.B. Port-Belegungen und Speichergrössen) gesetzt. Leider sind "die Shellys" dort unbekannt. Eine schnelle und einfache Lösung ist es ein primitives/generisches Board mit dem gleichen Prozessor als Basis zu nehmen und die Abweichungen händisch in der "platformio.ini" aufzulisten. Für den ESP32-C38F ist das insbesondere die Speicherkonfiguration:

[env:esp32-c3-devkitc-02]
platform = espressif32
board = esp32-c3-devkitc-02
board_upload.flash_size = "8MB"
board_upload.maximum_size = 8388608
board_upload.maximum_ram_size = 512000
board_build.partitions = default_8MB.csv
framework = arduino
monitor_speed = 115200

WiFi Reichweite und Signalstärke

Ein kritischer Punkt ist die Signalstärke des Home-Wifi am Einbauort des Shelly. Eine dicke Wand in der Verbindungslinie zum Router kann bereits eine Verbindung verhindern. Auf der Status-Seite des Routers kann man prüfen ob der Shelly überhaupt "gesehen" wird. Falls nicht dann muss man das zuerst "irgendwie ändern"..

Die Stärke des Empfangssignals kann man aus dem Shelly auslesen (wenn eine Verbindung zum Router etabliert wurde..). Die aktuelle IP-Adresse des Shelly findet man im Router. Diese Adresse in einen Browser eingeben und durch das Menü zum passenden Unterpunkt wandern:

  • http://192.169.178.169 (Shelly-Startseite) -> Settings -> Wi-Fi -> Wi-Fi status -> Status: RSSI


Je höher dieser Wert desto besser ist der Empfang (-60 ist besser als -80). Der im Shelly hinterlegte Grenzwert ist -80dBm. Bei kleineren Pegeln wird automatisch ein Scan gestartet um ein besseres Netzwerk zu finden. Eine halbwegs brauchbare Verbindung konnte ich bis ca. -90dBm aufbauen.
shelly

Alternativ gibt es auf der Shelly-Startseite noch den Punkt "Diagnostics". Mit "Download device data" werden alle relevanten Daten in eine Protokolldatei geschrieben. In der Sektion "status":"wifi" wird der "rssi"-Wert ausgegeben.
shelly shelly

Jedesmal eine Datei herunterzuladen ist natürlich super lästig. Es geht aber auch viel einfacher und direkter.
Der an die IP-Adresse angehängte Parameter

  • http://192.168.178.169/rpc/Wifi.GetStatus

fragt die Statusdaten des WiFi ab und zeigt sie direkt im Browser an.

shelly

Mit Hilfe des RSSI-Wertes kann man dann die Ausrichtung des Shelly und der Router-Antennen für besten Empfang optimieren. Weitere Details zu den Daten und alle sonst noch verfügbaren Services sind auf der Shelly Dokumentationsseite zu finden.

Empfang und Antenne optimieren

Im Haus hatte ich einige Ecken ohne ausreichende Signalstärke. Dieser Zustand ist Anfangs sehr irritierend weil man nicht erkennen kann ob es nicht doch ein Konfigurationsfehler ist oder eine falsche IP-Adresse.

Die WiFi-Antenne ist auf der Platine integriert, die Mäander-Struktur in der unteren Ecke:
shelly

Die Antenne ist kein Rundstrahler und wird eine leichte Vorzugsrichtung haben (keine Ahnung welche..). Gewinn und Effizienz werden auch sehr begrenzt sein. Aber für die Umstände funktioniert sie ganz ordentlich.

Als "alter Funker" habe ich sofort versucht eine bessere Antenne anzuschliessen. Die Antennenzuleitung auf der Platine ist leicht zugänglich. Ich habe sie unterbrochen, die Isolierschicht abgekratzt und ein Antennenkabel angelötet. Diese Arbeit ist sehr fummelig und ohne passendes Werkzeug und Können überhaupt nicht zu empfehlen.
Mit dem langen Kabel wollte ich weiterhin versuchen die neue Antenne aus dem Funkschatten heraus zu bringen.
shelly shelly shelly

Die Ergebnisse waren leider sehr bescheiden und diese Modifikation ist nicht wirklich zu empfehlen..

  • Der RSSI-Wert ist niedriger als vorher. Vermutlich ist die Kabeldämpfung (2m Länge) grösser als der zusätzliche Gewinn der Antenne. Die neue Antenne hatte ich mit mehr als -10dB Anpassung bei 2,4GHz gemessen, sie sollte daher eigentlich okay sein.
  • Die Signalstärke ist generell (auch mit der integrierten Antenne) extrem wackelig und stark von der Umgebung abhängig. Kleinste Standortänderungen können das Signal um mehrere dB schwanken lassen. Man kann bestenfalls eine grobe, gemittelte Schätzung über den Zustand abgeben.
  • Eine weitere Unbekannte ist der aktuell verwendete WiFi-Funkkanal. Der wird vom Router festgelegt und ist kaum beeinflussbar. Die Eigenschaften der Antennen und der Funkstrecke variieren mit der Frequenz.


Eine optimale Antennen-/Gehäuseposition findet man nur wenn man den RSSI-Wert dabei fortlaufend beobachtet. Reflexionen der Signale an der Umgebung spielen eine sehr grosse Rolle und sind nicht wirklich offensichtlich oder vorhersagbar.

  • Den Shelly in kleinen Schritten (ein paar cm) im Raum bewegen
  • An brauchbaren/guten Punkten zusätzlich das Gehäuse um alle Achsen rotieren
  • Der Shelly sollte dabei "schweben" und nicht durch eine Hand oder sonstige nahe Objekte abgeschattet werden


Glücklicherweise ist das alles nur für schlechte und grenzwertige Empfangssituationen relevant. Ansonsten spielt es keine Rolle ob der Pegel um 20dB wackelt. Die Menge der zu übertragenen Daten ist minimal und die Geschwindigkeit spielt dabei keine Rolle.

Temperatur auslesen

Ein weiterer interessanter Statuswert ist die interne Chip-Temperatur. Sie wird in den Einheiten Celsius ("tC") und Fahrenheit ("tF") ausgegeben:
shelly

Die Übertemperatursicherung des Prozessors wird bei 95°C aktiv. Die Temperatur ist proportional zur Arbeitslast des Prozessors. Das Abfragen selbst führt bereits zu einem spürbaren Temperatursprung. Die interne Temperatur ist immer wesentlich höher als die Gehäusetemperatur und i.a. kein Grund zur Besorgnis.

Für die Lebensdauer, und auch die der umgebenden Komponenten (z.B. Netzteil-Elkos), ist es aber vorteilhaft die Temperatur so niedrig wie möglich zu halten. Mögliche Massnahmen wären:

  • Nicht benötigte Funktionen abschalten (z.B. Bluetooth)
  • Netzwerkzugriffe und regelmässige Abfragen minimieren
  • Eine "gute" Funkverbindung um häufige WiFi-Scans zu vermeiden
  • Den ECO-Mode aktivieren


Mit diesen Massnahmen konnte ich die Übertemperatur bis auf ca 10°K verringern.

Range Extender

Eine weitere interessante Eigenschaft der Shellys ist der sog. "Range Extender" Modus. Der Shelly fungiert in dieser Betriebsart als Signal-Relais. Er ist dabei gleichzeitig Access-Point und Client um eine Brücke für das Router-Signal zu bilden. So kann man Teilnehmer erreichen die zu weit vom Router entfernt sind. Erfreulicherweise ist diese Funktion nicht exklusiv und das Shelly kann parallel als ganz normaler Schalter weiterarbeiten.

Der passende Eintrag findet sich unter:

  • Home -> Settings -> Connectivity settings -> Range extender


shelly

In dieser Betriebart muss der "Access Point" aktiviert werden und einen (SSID-)Namen und ein Passwort bekommen.
shelly

Im entfernten Shelly werden SSID+PW unter "Wi-Fi 2" hinzugefügt und aktiviert.

Um das Shelly ansprechen zu können benötigt man seine neue IP-Adresse. Dazu muss man zurück zur Startseite des Range-Extender-Shelly. Dort ist es jetzt als neues Client-Device gelistet:

  • Home -> Advanced -> Device Clients -> External IPv4

shelly

In diesem Beispiel erreicht man das Web-Interface über

  • http://192.168.178.191:13344


Alternativ kann man die Infos zu den Clients auch im Range-Extender über einen Service per HTML abfragen:

  • http://192.168.178.191/rpc/Wifi.ListAPClients

Die Port-Adresse (in diesem Beispiel :13344) wird in der Sektion "mport" aufgelistet.


Der Range-Extender-Modus funktioniert prinzipiell überraschend gut.

Bevor man sich jetzt aber darüber freut auch das entlegenste Shelly mit WiFi zu versorgen zu können sollte man die Besonderheiten und Einschränkungen im Auge behalten.

  • Das weit entfernte Shelly benötigt eine gute Funkverbindung zum Range-Extender. Oft ist diese Verbindung aber nur marginal besser als die direkte zum Router.
  • Gleichzeitig benötigt der Range-Extender eine gute Verbindung zum Router.
  • Die Range-Extender Betriebsart ist in der Benutzung des Funkkanals sehr ineffizient. Der Datendurchsatz im gesamten Netz leidet darunter.
  • Alle Daten müssen durch den Prozessor "geschleusst" werden. Das benötigt Zeit und Resourcen. Die werden vermutlich (hoffentlich) nirgendwo fehlen.


In meinem Szenario konnte ich keinen der vorhandenen Shellys als Range-Extender mitbenutzen. Die Funkverbindungen waren alle grenzwertig und halfen nicht weiter. Ich habe deshalb einen separaten Shelly als nur-Range-Extender konfiguriert und an einer optimalen Position montiert. Das erschien mir wesentlich ökonomischer als das ganze WiFi durch eine zusätzliche "fette Box" aufzurüsten.

Sonstiges

Ein paar zusätzliche Anmerkungen

  • Die Shellys funken nur im 2,4GHz WiFi Band, basierend auf den üblichen Standards 802.11b/g/n.
  • 5GHz-WiFi wird nicht unterstützt.
  • Bluetooth 4.2 wird unterstützt.


Links


Die Homepage von Shelly mit dem kompletten Produkt-Lineup.

Eine Getting Started Seite mit Hilfe zur Inbetriebnahme.

Eine Übersicht der Components and Services der RPCs (Remote Procedure Calls) zur einfachen Abfrage von z.B. Statusdaten per HTML GET. Das typische Format dieser Abfragen ist:
http://192.168.33.1/rpc/Shelly.GetStatus

Eine Übersicht aller Shelly-Varianten und ihrer Spezifikationen.

Die Produktseite des ESP32-C3 von Espressif. Shelly soll eine Customized-Variante (ESP32-C38F) mit mehr Speicher verwenden.
https://devices.esphome.io/devices/shelly-1pm-gen3/
https://community.shelly.cloud/topic/661-shelly-c3f8-specification/