Entwicklungs-Thread Modul 36_Shelly.pm

Begonnen von Starkstrombastler, 24 Februar 2024, 12:15:05

Vorheriges Thema - Nächstes Thema

Jojo11

Nach dem neuesten Update scheint Ruhe zu sein  :)  Vielen Dank!

roadrunnner

Hallo zusammen,

ich habe hier einen Ecoflow x Shelly Pro3EM (model_ID EFPEM-003CEBEU120). Ist ein leicht abgewandelter Shelly Pro3EM. Hier der Output des Shelly:

/rpc/Shelly.GetStatus
{"ble":{},"bthome":{"errors":["bluetooth_disabled"]},"cloud":{"connected":false},"em:0":{"id":0,"a_current":4.348,"a_voltage":229.1,"a_act_power":-857.9,"a_aprt_power":995.6,"a_pf":0.86,"a_freq":50.0,"b_current":7.582,"b_voltage":229.3,"b_act_power":-1679.7,"b_aprt_power":1738.1,"b_pf":0.96,"b_freq":50.0,"c_current":5.542,"c_voltage":229.4,"c_act_power":-1247.7,"c_aprt_power":1269.1,"c_pf":0.98,"c_freq":50.0,"n_current":null,"total_current":17.472,"total_act_power":-3785.287,"total_aprt_power":4002.803, "user_calibrated_phase":[]},"emdata:0":{"id":0,"a_total_act_energy":1852.60,"a_total_act_ret_energy":4846.79,"b_total_act_energy":2241.51,"b_total_act_ret_energy":5661.36,"c_total_act_energy":4484.88,"c_total_act_ret_energy":6581.45,"total_act":8579.00, "total_act_ret":17089.60},"eth":{"ip":null,"ip6":null},"modbus":{},"mqtt":{"connected":true},"script:1":{"id":1,"running":true,"mem_used":224,"mem_peak":3738,"mem_free":24962,"cpu":1},"sys":{"mac":"XXXXXXXXXXXX","restart_required":false,"time":"13:23","unixtime":1776425013,"last_sync_ts":1776423932,"uptime":67950,"ram_size":244348,"ram_free":113324,"ram_min_free":85356,"fs_size":524288,"fs_free":184320,"cfg_rev":10,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"btrelay_rev":0,"available_updates":{},"reset_reason":3,"utc_offset":7200},"temperature:0":{"id": 0,"tC":54.6, "tF":130.4},"wifi":{"sta_ip":"192.168.xxx.xxx","status":"got ip","ssid":"XXXXXXXXXX","bssid":"f0:b0:14:9b:74:33","rssi":-51,"sta_ip6":["fe80::eee3:34ff:feeb:fec","2003:c2:df1b:b00:eee3:34ff:feeb:fec","fde0:a89b:ec81:0:eee3:34ff:feeb:fec"]},"ws":{"connected":false}}/rpc/Shelly.GetConfig
{"ble":{"enable":false,"rpc":{"enable":false}},"bthome":{},"cloud":{"enable":false,"server":"iot.shelly.cloud:6012/jrpc"},"em:0":{"id":0,"name":null,"blink_mode_selector":"active_energy","phase_selector":"all","monitor_phase_sequence":false,"ct_type":"120A","reverse":{}},"emdata:0":{},"eth":{"enable":false,"server_mode":false,"ipv4mode":"dhcp","ip":null,"netmask":null,"gw":null,"nameserver":null},"modbus":{"enable":true},"mqtt":{"enable":true,"server":"mqtt-e.ecoflow.com:8883","client_id":"SM3Axxxxxxxxxxxx","user":"device-xxxxxxxxxxxxxxxxxx","ssl_ca":"*","topic_prefix":"/shelly/thing/property/post/SM3Axxxxxxxxxxxx","rpc_ntf":true,"status_ntf":false,"use_client_cert":false,"enable_rpc":true,"enable_control":true},"script:1":{"id":1, "name":"3", "enable":false},"sys":{"device":{"name":null,"mac":"xxxxxxxxxxxx","fw_id":"20260311-095918/1.7.5-g9979d16","discoverable":true,"eco_mode":false,"profile":"triphase","addon_type":null,"sys_btn_toggle":true},"location":{"tz":"Europe/Berlin","lat":x,"lon":x},"debug":{"level":2,"file_level":null,"mqtt":{"enable":false},"websocket":{"enable":false},"udp":{"addr":null}},"ui_data":{},"rpc_udp":{"dst_addr":null,"listen_port":7890},"sntp":{"server":"time.cloudflare.com"},"cfg_rev":10},"temperature:0":{"id":0, "name":null, "report_thr_C": 5.0, "offset_C": 0.0},"wifi":{"ap":{"ssid":"EcoFlowPro3EM-xxxxxxxxxxxx","is_open":true, "enable":false, "range_extender": {"enable":false}},"sta":{"ssid":"xxxxxxxxx","is_open":false, "enable":true, "ipv4mode":"dhcp","ip":null,"netmask":null,"gw":null,"nameserver":null},"sta1":{"ssid":null,"is_open":true, "enable":false, "ipv4mode":"dhcp","ip":null,"netmask":null,"gw":null,"nameserver":null},"roam":{"rssi_thr":-80,"interval":60}},"ws":{"enable":false,"server":null,"ssl_ca":"vendor0.pem,ca.pem"}}/rpc/Shelly.GetDeviceInfo
{"name":null,"id":"ecoflowpro3em-xxxxxxxxxxxx","mac":"xxxxxxxxxxxx","slot":0,"model":"EFPEM-003CEBEU120","gen":2,"fw_id":"20260311-095918/1.7.5-g9979d16","ver":"1.7.5","app":"Pro3EMEF","auth_en":false,"auth_domain":null,"profile":"triphase","provision":"complete"}
Wenn noch weitere Daten nötig sind, kurze Nachricht reicht.  ;)

Gruss roadrunnner

Starkstrombastler

Zitat von: roadrunnner am 17 April 2026, 13:41:02ich habe hier einen Ecoflow x Shelly Pro3EM (model_ID EFPEM-003CEBEU120). Ist ein leicht abgewandelter Shelly Pro3EM.
Was ist denn bei diesem Shelly außer der model_ID noch anders?

Die Einbindung mit dem Shelly-Modul sollte im Grundsatz mit
attr <name> model shellypro3em via FHEM Kommandozeile gelingen.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

roadrunnner

#183
Ich hatte den Shelly bereits mit dem Attribut "shellypro3em" versehen, leider liefert das Modul trotzdem einen Fehler: "404: No handler for EM1.GetStatus". Über die Webadresse des Shelly liefert er jedoch über "/rpc/em.getstatus?id=0" Daten.
Nach meinem Kenntnisstand werden bei der Ersteinrichtung per Script MQTT-Serverdaten hinterlegt. Was darüber hinaus noch anders ist kann ich derzeit noch nicht beurteilen. Der Vorteil der Ecoflow-Variante ist, dass er lokal kommuniziert, während sich die normalen Shellys nur per Cloud anbinden lassen.

Gruss roadrunnner

Update: Ich habe heute das Modul per FHEM-Update aktualisiert. Anschließend habe ich den Shelly neu erstellt. Es wurde alles korrekt erkannt:
model_ID EFPEM-003CEBEU120 2026-04-20 15:40:50
model_family EcoFlow Gen2 2026-04-20 15:40:50
model_function energy meter 2026-04-20 15:40:50
model_name Shelly Pro 3EM 2026-04-20 15:40:50

Er liefert jedoch weiterhin keine Daten, dafür folgende Log-Einträge:
2026-04-20 15:46:33 Shelly Pro3EMxEcoflow error: 404: No handler for EM1.GetStatus
2026-04-20 15:47:01 Shelly Pro3EMxEcoflow error: 404: No handler for EM1Data.GetStatus

Laut der technischen Dokumentation von Shelly stellt jedoch nur der ShellyProEM Daten über EM1.GetStatus zur Verfügung, beim ShellyPro3EM läuft dies über EM.GetStatus. Liegt hier möglicherweise der Fehler?

Starkstrombastler

Zitat von: roadrunnner am 19 April 2026, 13:55:48Laut der technischen Dokumentation von Shelly stellt jedoch nur der ShellyProEM Daten über EM1.GetStatus zur Verfügung, beim ShellyPro3EM läuft dies über EM.GetStatus.
Das stimmt so nicht ganz. Der ShellyPro3EM kann in monophase und triphase Mode betrieben werden, entsprechend erfolgen die Abfragen mit EM* bzw EM1*.

Zitat von: roadrunnner am 19 April 2026, 13:55:48Liegt hier möglicherweise der Fehler?
Im Modul habe ich noch eine weitere Stelle an den EcoFlow-Shelly angepasst, sollte damit laufen.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

roadrunnner

Hab das Modul aktualisiert und den Shelly neu angelegt: jetzt funktioniert alles :) Vielen Dank für Deine Mühe!

Gruss roadrunnner

daheim

Hallo Starkstrombastler,

mir sind in den letzten Monaten div. HM Aktoren kaputt gegangen und ich habe diese durch Shellys ersetzt. Bei HomeMatic war es möglich das beim Schalten ein state auf set_on / set_off gesetzt wurde, bis zur Rückmeldung.

Ich habe das Problem, dass meine Frau zu hecktisch ist und des öfteren das Shelly mehrmals schaltet, da keine Rückmeldung kommt, bis das Shelly geschaltet hat. (Ich hoffe du verstehst mich)

Mit Hilfe der KI, habe ich deinen Code erweitert um die Funktion set_on / set_off. Die ersten Tests sind positiv verlaufen und ich wollte dich fragen, ob du die Erweiterung mit in deinen Code aufnehmen würdest?

Konkret ist ab der Codezeile 2969 hinter
Log3 $name,4,"[Shelly_Set] switching channel $channel for device $name with command $cmd";#4
   # Log3 $name,0,"[Shelly_Set] $name ".$hash->{props}{namespace}."  ".($hash->{props}{gen}?1:0);

Die folgenden Zeilen eingefügt worden

my $state_preview;
    if( $cmd =~ /turn=on/ || $cmd =~ /on=true/ ){
        $state_preview = "set_on";
    }elsif( $cmd =~ /turn=off/ || $cmd =~ /on=false/ ){
        $state_preview = "set_off";
    }
    if( defined($state_preview) ){
        readingsBeginUpdate($hash);
        readingsBulkUpdate($hash, "state", $state_preview);
        if( defined($channel) && $channel =~ /^\d+$/ ){
            readingsBulkUpdate($hash, "relay_$channel", $state_preview);
        }
        readingsEndUpdate($hash, 1);
    }

Wenn Du das nicht möchtest, ist das für mich auch ok...

Viele Grüße
Daniel

Starkstrombastler

Zitat von: daheim am 05 Mai 2026, 19:42:01Bei HomeMatic war es möglich das beim Schalten ein state auf set_on / set_off gesetzt wurde, bis zur Rückmeldung.
Bisher hat das aber hier noch keiner vermisst.

Das müsste dann aber auch konsequenterweise auf andere Schaltvorgänge ausgedehnt werden, wie z.B. Dimmwerte oder Farbwerte setzen....

Wie auch immer, es wird nicht einfacher. Ich würde mal abwarten, was die Community dazu meint.

Es gibt aber eine Alternative zu dieser Code-Erweiterung: Erstelle passende Actions auf dem Shelly, damit er sich bei Fhem bei entsprechenden Änderungen meldet. Damit bekommst du die Rückmeldung nahezu in Echtzeit.
Beispiel für eine URL, die unter Action einzutragen ist:
http://192.168.178.63:8083/fhem?cmd=set+myShelly+out_on
Für das Anlegen/Verwalten von Actions gibt es im Modul auch einige Hilfsfunktionen, siehe Commandref.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200