Shelly über Cloud API anbinden

Liebe Communitiy,

ich bin so langsam am Verzweifeln, weil ich meine Shelly Geräte, welche sich an einem Standort ohne HomeAssistant - WLAN befinden, aber mit der Shelly Cloud verbunden sind, nicht einlesen kann.

Ich habe verschiedene Shelly in einem externen WLAN laufen (Uni, 1PM, 3EM usw.). Ich habe es irgendwie geschafft, die Strommessung vom 3EM zu integrieren, möchte nun aber den Relaiskontakt über meine HA automatisieren und auch den Status der Shelly überwachen (ob sie online sind). Habe versucht aus diversen Youtube Videos etwas zusammen zu basteln. Klappt leider nicht. Vielleicht kann mir hier jemand helfen:

Diese Konfig funktionier und die Stromwerte auszulesen:

rest:
  - resource: https://shelly-48-eu.shelly.cloud/device/status
    method: POST
    payload: "auth_key=MTMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxA61BEA0F249B202709263EC4C2174061B8E&id=3xxxxxxxxxxxxxxxxx"
    headers:
      User-Agent: Home Assistant
      Content-Type: application/x-www-form-urlencoded
    scan_interval: 5
    sensor:
      - name: "Hundeschule Leistung"
        unique_id: "Hundeschule Leistung"
        value_template: "{{ value_json.data.device_status.emeters[0].power | round (0) }}"
        state_class: measurement
        unit_of_measurement: W
        device_class: power
      - name: "Hundeschule Energie"
        unique_id: "Hundeschule Energie"
        value_template: "{{ value_json.data.device_status.emeters[0].total | round (0) }}"
        state_class: total_increasing
        unit_of_measurement: Wh
        device_class: energy

Aber hier scheitere ich:

switch:
  - platform: rest
    method: POST
    name: "Ziggelpumpe Switch"
    scan_interval: 5
    resource: https://shelly-48-eu.shelly.cloud/device/status
    body_on: "turn=on"
    body_off: "turn=off"
    is_on_template: "{{value_json.data.device_status.relays[0].ison == true}}"
    headers:
      User-Agent: Home Assistant
      content-type: application/x-www-form-urlencoded
      Authorization: "auth_key=MTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx61BEA0F249B202709263EC4C2174061B8E&id=4xxxxxxxxxxxxxxxxxxxxx"

Würde mich sehr freuen, wenn mir jemand einen Tipp geben kann. Die API schaut so aus:

{
  "isok": true,
  "data": {
    "online": true,
    "device_status": {
      "uptime": 240697,
      "wifi_sta": {
        "connected": true,
        "ssid": "xxxxxxxxxxxx",
        "ip": "xxxxxxx",
        "rssi": -69
      },
      "fs_size": 233681,
      "time": "09:08",
      "v_data": 1,
      "cfg_changed_cnt": 0,
      "unixtime": 1681280252,
      "total_power": 18.33,
      "ram_free": 32456,
      "has_update": false,
      "fs_mounted": true,
      "relays": [
        {
          "ison": true,
          "has_timer": false,
          "timer_started": 0,
          "timer_duration": 0,
          "timer_remaining": 0,
          "overpower": false,
          "is_valid": true,
          "source": "cloud"
        }
      ],
      "ct_calst": 0,
      "serial": 9800,
      "emeters": [
        {
          "power": 10.37,
          "pf": 0.37,
          "current": 0.12,
          "voltage": 230.77,
          "is_valid": true,
          "total": 41028.7,
          "total_returned": 0
        },
        {
          "power": 10.73,
          "pf": 0.58,
          "current": 0.08,
          "voltage": 230.79,
          "is_valid": true,
          "total": 22811.5,
          "total_returned": 0
        },
        {
          "power": -2.77,
          "pf": -0.19,
          "current": 0.06,
          "voltage": 230.82,
          "is_valid": true,
          "total": 17807.7,
          "total_returned": 751.7
        }
      ],
      "_updated": "2023-04-12 07:08:30",
      "actions_stats": {
        "skipped": 0
      },
      "cloud": {
        "enabled": true,
        "connected": true
      },
      "emeter_n": {
        "current": 0,
        "ixsum": 0.21,
        "mismatch": false,
        "is_valid": false
      },
      "update": {
        "status": "idle",
        "has_update": false,
        "new_version": "20221027-110030/v1.12.1-ga9117d3",
        "old_version": "20221027-110030/v1.12.1-ga9117d3",
        "beta_version": "20230329-163507/v1.13.0-rc2-g1b3e5af"
      },
      "fs_free": 154114,
      "mqtt": {
        "connected": false
      },
      "ram_total": 49928,
      "mac": "485519DC8DCB"
    }
  }
}

Die einzige Lösung die mir einfällt ist mqtt…

Aber MQTT aus einem anderen Wlan an HA schicken ist auch nicht gerade ein einfaches Unterfangen. Es geht sicher über Rest Api, nur habe ich eben keinen Plan wie…

Für die Erreichbarkeit musst bei jeder Konstationen sorgen. mqtt-Anbindung ist bei Shelly mit eingebaut… muss aber für die Shellys und Home Assistent erreichbar sein.

hat wirklich noch niemand ein Shelly Gerät über die Cloud angebunden und kann mir weiterhelfen?

@Kurt_W — der Thread ist schon älter, aber falls du noch mitliest (oder jemand über die Suche hier landet): Für genau dieses Problem — Shellys in einem fremden WLAN, erreichbar nur über die Cloud — gibt es inzwischen eine Lösung.

Ich habe eine HACS-Integration gebaut, Shelly Cloud DIY, die die Geräte über die Shelly Cloud Control API mit deinem eigenen auth_key einliest — ohne VPN und ohne dass HA im selben Netz wie die Shellys sein muss. Die von dir genannten Typen (Uni, 1PM, 3EM) kommen als Entities rein; die Energiewerte landen in der Langzeitstatistik.

Einordnung: Es ist Cloud-Polling (~1 Request/s pro Konto), also für Monitoring und Energiedaten gedacht, nicht für sub-sekunden-Steuerung. Wo ein Shelly im eigenen LAN hängt, bleibt die native shelly-Integration die erste Wahl — das hier ist das Overlay für alles, was lokal nicht erreichbar ist.

Zu finden im HACS-Default-Store unter dem Namen Shelly Cloud DIY. Ich bin der Autor und pflege es aktiv — über Feedback freue ich mich.

Ich finde die “Werbung” hier mittlerweile äußerst penetrant. Sogar die ältesten Leichen werden aus dem Keller wieder hoch geholt.