shelly duo bulb gen3 über mqtt schalten

Begonnen von the ratman, 04 September 2026, 16:51:43

Vorheriges Thema - Nächstes Thema

Beta-User

(Diese Firmware ist die Pest, ich frag mich jedes Mal, warum man da nicht zu Tasmota wechselt)

Vermutlich eher"status_update" wie hier am Ende beschrieben: https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Mqtt/#configuration
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

the ratman

#91
leider nein ....

in beiden fällen:
status_update
status.update

{"id":1,"src":"shellypstripg4-206ef10295f4","error":{"code":404,"message":"No handler for status_update"}}

und BITTE!
schreibts mir immer vollständige befehlszeilen oder so - ich weiß ja ned, wo und wie ich was einfügen muss.
→do↑p!dnʇs↓shit←

Beta-User

Das musst du als MQTT-Kommando selbst zusammenbasteln, Topic-Endpunkt (payload im Klartext, kein JSON), wie es in der verlinkten Anleitung steht: command.

Und nein, ich habe wenig Neigung, mir irgendeinen Shelly zu beschaffen, um sowas nicht nur per Theorie-Trockenübung durchzuexerzieren.
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

the ratman

#93
dachte, die ganzen bastelübungen hier machen wir, weil ich die devices hab, und ihr das wissen dazu.
lieg' ich da falsch?
weil ich kann keine kommandos zusammenbasteln. die info brauch ich dann schon von jemanden, ders weiß. ich lasse mich gerne "fernsteuern" von euch, aber mehr hab' ich halt nicht drauf.

fazit: ich wart jetzt amal darauf, das mir wer sagt, was ich wo eingeben soll, dann gibts infos, was dabei raus kommt.
auf sinnlos rumprobieren und dieses forum dann mit ergebnissen, die keiner braucht, voll zu müllen, hab ich nämlich auch keine lust.
→do↑p!dnʇs↓shit←

TomLee

Ohne mich selbst damit zu beschäftigen, hier die Essenz meines Agenten:

Was du brauchst, ist genau eine Kette: der Plug muss homeassistant/<component>/<object_id>/config in den Broker legen, dann greift MQTT2_Discovery von allein.

1. Im Shelly (Settings → MQTT)

Notiere dir den topic_prefix, brauchst du gleich zum Mitlesen.

Nichts weiter umstellen: enable_control, rpc_ntf und enable_rpc stehen ab Werk richtig. status_ntf (Generic status update over MQTT) schaltest du an, damit die State-Topics existieren, auf die die Discovery-Configs später zeigen.

2. Skript auf dem Gerät

Das ist der eigentliche fehlende Baustein, die Firmware bringt den Zweig nicht mit
(im Gen2+-Changelog kommt "Home Assistant" kein einziges Mal vor).

Abhilfe: das Skript michal-bartak/shelly-scripts,
davon konkret mqtt-discovery-self. Im Shelly unter Scripts anlegen, starten,
Autostart an. Es publiziert beim Start, bei MQTT-Reconnect und bei Config-Aenderungen.

Wichtig vorher in den MQTT-Einstellungen des Shelly:
Generic status update over MQTT einschalten. Das Skript traegt als state_topic
<topic_prefix>/status/<component:id> ein - ohne diesen Schalter entstehen die Entities
zwar, bleiben aber dauerhaft leer.

Kontrolle, bevor du FHEM anfasst:

mosquitto_sub -h <ip_MQTT2_SERVER> -u <user> -P <pw> -t 'homeassistant/#' -v
Kommt hier nichts, ist alles Weitere sinnlos.

Retained sind die Discovery-Nachrichten uebrigens nicht (qos 1, retain=false).
Das ist hier aber unkritisch: Beim FHEM-Neustart geht der Broker mit, alle Shellys
verbinden neu, und das Skript schickt die Discovery automatisch erneut.

3. In FHEM

define mqttDiscovery MQTT2_DISCOVERY
attr mqttDiscovery IODev MQTT2_Server

Der Default discoveryPrefixes = homeassistant,tasmota/discovery,sonos2mqtt passt, da ist nichts zu setzen.

Stolpersteine

- autocreate im MQTT2_SERVER. Der legt dir aus den homeassistant/...-Topics womöglich selbst ein Müll-Device an, parallel zu dem, das MQTT2_Discovery baut. Vor Schritt 2 kurz schauen, ob autocreate am MQTT2_Server auf simple/complex steht, und ggf. die Discovery-Topics per ignoreRegexp ausnehmen.
- Erst testen, dann scharf schalten. autoDelete erst aktivieren, wenn die Erkennung sauber läuft.
- Der Plug S G3 steht nicht auf der getesteten Liste des Skripts. Wenn Schritt 2 nichts liefert, liegt es wahrscheinlich daran, und dann lohnt der ganze Weg für eine Steckdose nicht.

Ob sich der Aufwand rechnet, hängt daran, ob noch mehr Gen3-Geräte kommen. Für den einen Plug bleibt das attrTemplate die kürzere Strecke

Beta-User

Das sollte u.A. mit einem einfachen "publish" am io gehen - ganz ohne Script -Workaround...

Discovery ist nicht meine eigene Baustelle...
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee


Beta-User

Ohne Script. Die von mir verlinkte Doku meint:
export MQTT_SERVER="broker.hivemq.com"
export MQTT_PORT=1883
export SHELLY_ID="shellyplus1-a8032abe54dc" # The <shelly-id> of your device
mosquitto_pub -h ${MQTT_SERVER} -p ${MQTT_PORT} -t ${SHELLY_ID}/command -m status_update
Das in eine publish-Anweisung am fhem mqtt io umzusetzen ist doch keine überirdische Erwartung, oder?

Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

Und was soll da deiner Meinung nach dann zurückkommen?

Ein discovery Zweig? Oder nur die Informationen um im MQTT2_Discovery Modul einen "Adapter" zu bauen.

Ich bleib dabei, es gibt default keinen discovery Zweig bei den Shellys.

Wegen Dir/euch hab ich jetzt den Mini Gen3 ausgekramt den ich vor ein paar Monaten gekauft und doch nicht zurückgegeben hatte.

set <MQTT2_SERVERNAME> publish shelly1minig3-e4b3231cf8a8/command status_update
shelly1minig3-e4b3231cf8a8/command status_update
shelly1minig3-e4b3231cf8a8/status {"ble":{},"bthome":{},"cloud":{"connected":false},"input:0":{"id":0,"state":null},"knx":{},"matter":{"num_fabrics":0,"commissionable":false},"mqtt":{"connected":true},"script:1":{"id":1,"running":true,"mem_used":1092,"mem_peak":2366,"mem_free":24094,"cpu":0},"switch:0":{"id":0,"source":"init","tag":null, "output":false,"counts":{"on_time":0,"on_time_rst_ts":0,"switch_on":0,"switch_on_rst_ts":0},"temperature":{"tC":58.5, "tF":137.4}},"sys":{"mac":"E4B3231CF8A8","restart_required":false,"time":"14:49","unixtime":1789303753,"last_sync_ts":1789302751,"uptime":4778,"ram_size":276136,"ram_free":148244,"ram_min_free":123776,"fs_size":917504,"fs_free":446464,"cfg_rev":68,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"btrelay_rev":0,"bthc_rev":2,"available_updates":{"beta":{"version":"2.0.1-beta2"}},"reset_reason":3,"utc_offset":7200},"wifi":{"sta_ip":"192.168.188.238","status":"got ip","ssid":"bli","channel":6,"rssi":-61,"bssid":"x:ec:da:fd:26:x","sta_ip6":["fe80::e6b3:23ff:fe1c:x","2003:cd:1737:d800:e6b3:23ff:fe1c:x"]},"ws":{"connected":false}}
shelly1minig3-e4b3231cf8a8/status/ble {}
shelly1minig3-e4b3231cf8a8/status/bthome {}
shelly1minig3-e4b3231cf8a8/status/cloud {"connected":false}
shelly1minig3-e4b3231cf8a8/status/input:0 {"id":0,"state":null}
shelly1minig3-e4b3231cf8a8/status/knx {}
shelly1minig3-e4b3231cf8a8/status/matter {"num_fabrics":0,"commissionable":false}
shelly1minig3-e4b3231cf8a8/status/mqtt {"connected":true}
shelly1minig3-e4b3231cf8a8/status/script:1 {"id":1,"running":true,"mem_used":1092,"mem_peak":2366,"mem_free":24094,"cpu":0}
shelly1minig3-e4b3231cf8a8/status/switch:0 {"id":0,"source":"init","tag":null, "output":false,"counts":{"on_time":0,"on_time_rst_ts":0,"switch_on":0,"switch_on_rst_ts":0},"temperature":{"tC":58.5, "tF":137.4}}
shelly1minig3-e4b3231cf8a8/status/sys {"mac":"E4B3231CF8A8","restart_required":false,"time":"14:49","unixtime":1789303753,"last_sync_ts":1789302751,"uptime":4778,"ram_size":276020,"ram_free":145900,"ram_min_free":123776,"fs_size":917504,"fs_free":446464,"cfg_rev":68,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"btrelay_rev":0,"bthc_rev":2,"available_updates":{"beta":{"version":"2.0.1-beta2"}},"reset_reason":3,"utc_offset":7200}
shelly1minig3-e4b3231cf8a8/status/wifi {"sta_ip":"192.168.188.238","status":"got ip","ssid":"bli","channel":6,"rssi":-61,"bssid":"x:ec:da:fd:26:x","sta_ip6":["fe80::e6b3:23ff:fe1c:x","2003:cd:1737:d800:e6b3:23ff:fe1c:x"]}
shelly1minig3-e4b3231cf8a8/status/ws {"connected":false}

the ratman

→do↑p!dnʇs↓shit←

Guybrush

shellies haben kein klassisches discovery, was man passiv aus dem mqtt broker bekommen kann. man muss das aktiv abfragen. das macht MQTT2_DISCOVERY schon. Shelly ist da neben Homeassistant, Sonos usw ein eigenes backend. In der nächsten Version sind auch die Blu Devices drin. Dann kann ratman testen...

TomLee

Zitatnur damit ichs versteh: is das nicht so ungefähr das selbe wie der curl?

Nee.

Zitatcurl -X POST -d '{"id":1, "method":"Shelly.GetConfig"}' http://192.168.178.22/rpc
liefert Konfiguration

Zitatcurl -X POST -d '{"id":1,"method":"Shelly.GetStatus"}' http://192.168.178.22/rpc

liefert Status


Guck dir die Rückmeldungen bei mir an:


set <MQTT2_SERVERNAME> publish shelly1minig3-e4b3231cf8a8/rpc {"id":1,"src":"fhem","method":"Shelly.GetConfig"}
shelly1minig3-e4b3231cf8a8/rpc {"id":1,"src":"fhem","method":"Shelly.GetConfig"}
fhem/rpc {"id":1,"src":"shelly1minig3-e4b3231cf8a8","dst":"fhem","result":{"ble":{"rpc":{"enable":false}},"bthome":{},"cloud":{"enable":false,"server":"iot.shelly.cloud:6012/jrpc"},"input:0":{"id":0,"name":null,"type":"button","enable":true,"invert":false,"factory_reset":true},"knx":{"enable":false,"ia":"15.15.255","routing":{"addr":"224.0.23.12:3671"}},"matter":{"enable":false},"mqtt":{"enable":true,"server":"192.168.188.26:1883","client_id":"shelly1minig3-e4b3231cf8a8","user":"bla","ssl_ca":null,"topic_prefix":"shelly1minig3-e4b3231cf8a8","rpc_ntf":true,"status_ntf":true,"use_client_cert":false,"enable_rpc":true,"enable_control":true},"script:1":{"id":1, "name":"script_1", "enable":false},"switch:0":{"id":0, "name":null,"in_mode":"detached","in_locked":false,"initial_state":"restore_last", "auto_on":false, "auto_on_delay":60.00, "auto_off":false, "auto_off_delay":60.00,"counts":{"enable":true}},"sys":{"device":{"name":null,"mac":"E4B3231CF8A8","fw_id":"20260710-101122/2.0.0-g87fbfa4","discoverable":true,"eco_mode":false,"tls_check_cert_validity_time":true,"enhanced_security":false},"location":{"tz":"Europe/Berlin","lat":49.484100,"lon":8.374000},"debug":{"level":2,"file_level":null,"mqtt":{"enable":false},"websocket":{"enable":true},"file_log":{"enable":false},"udp":{"addr":null}},"ui_data":{"device_revision":"0-65"},"rpc_udp":{"dst_addr":null,"listen_port":null},"sntp":{"server":"time.cloudflare.com"},"cfg_rev":68},"wifi":{"ap":{"ssid":"Shelly1MiniG3-E4B3231CF8A8","is_open":false, "enable":false, "range_extender": {"enable":false}},"sta":{"ssid":"bli","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":"ca.pem"}}}



set <MQTT2_SERVERNAME> publish shelly1minig3-e4b3231cf8a8/rpc {"id":1,"src":"fhem","method":"Shelly.GetStatus"}
shelly1minig3-e4b3231cf8a8/rpc {"id":1,"src":"fhem","method":"Shelly.GetStatus"}
fhem/rpc {"id":1,"src":"shelly1minig3-e4b3231cf8a8","dst":"fhem","result":{"ble":{},"bthome":{},"cloud":{"connected":false},"input:0":{"id":0,"state":null},"knx":{},"matter":{"num_fabrics":0,"commissionable":false},"mqtt":{"connected":true},"script:1":{"id":1,"running":true,"mem_used":1092,"mem_peak":2366,"mem_free":24094,"cpu":0},"switch:0":{"id":0,"source":"init","tag":null, "output":false,"counts":{"on_time":0,"on_time_rst_ts":0,"switch_on":0,"switch_on_rst_ts":0},"temperature":{"tC":58.4, "tF":137.1}},"sys":{"mac":"E4B3231CF8A8","restart_required":false,"time":"17:47","unixtime":1789314437,"last_sync_ts":1789313197,"uptime":15462,"ram_size":276124,"ram_free":147832,"ram_min_free":123372,"fs_size":917504,"fs_free":446464,"cfg_rev":68,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"btrelay_rev":0,"bthc_rev":2,"available_updates":{"beta":{"version":"2.0.1-beta2"}},"reset_reason":3,"utc_offset":7200},"wifi":{"sta_ip":"192.168.188.238","status":"got ip","ssid":"bli","channel":6,"rssi":-64,"bssid":"x:ec:da:fd:26:x","sta_ip6":["fe80::e6b3:23ff:fe1c:x","2003:cd:1737:d800:e6b3:23ff:fe1c:x"]},"ws":{"connected":false}}}

TomLee

Es hat unnötig viel Zeit verplempert, aber es hat mich heute gepackt mal wieder mit FHEM (und diesem Thema) zu beschäftigen, nachdem ich den Mini schon rausgeholt hatte.

Der input ist die Tage dran, für heute reichts mir:


define shelly1minig3_e4b3231cf8a8 MQTT2_DEVICE shelly1minig3_e4b3231cf8a8
attr shelly1minig3_e4b3231cf8a8 readingList shelly1minig3_e4b3231cf8a8:shelly1minig3-e4b3231cf8a8/online:.* { my %map=(true=>"online",false=>"offline");;return { lwt=>$map{$EVENT}||$EVENT } }\
shelly1minig3_e4b3231cf8a8:shelly1minig3-e4b3231cf8a8/status/input_0:.* { }\
shelly1minig3_e4b3231cf8a8:shelly1minig3-e4b3231cf8a8/status/switch_0:.* { my $ret=json2nameValue($EVENT, '', $JSONMAP, 'output');;my $value = delete $ret->{output};;$ret->{state} = $value eq 'true' ? 'on' : 'off';;   return $ret;;}\
shelly1minig3_e4b3231cf8a8:shelly1minig3-e4b3231cf8a8/status/(ble|bthome|cloud|knx|matter|ws|sys|wifi|mqtt):.* {}
attr shelly1minig3_e4b3231cf8a8 room MQTT2_DEVICE
attr shelly1minig3_e4b3231cf8a8 setList on:noArg shelly1minig3-e4b3231cf8a8/command/switch:0 on\
off:noArg shelly1minig3-e4b3231cf8a8/command/switch:0 off\
toggle:noArg shelly1minig3-e4b3231cf8a8/command/switch:0 toggle
#   CFGFN     
#   CID        shelly1minig3_e4b3231cf8a8
#   DEF        shelly1minig3_e4b3231cf8a8
#   FUUID      6aa6dc2b-f33f-c86b-28ac-560fde13b034937b
#   IODev      MQTT2_Server
#   LASTInputDev MQTT2_Server
#   MQTT2_Server_CONN MQTT2_Server_192.168.188.238_51700
#   MQTT2_Server_MSGCNT 338
#   MQTT2_Server_TIME 2026-09-13 21:47:00
#   MSGCNT     338
#   NAME       shelly1minig3_e4b3231cf8a8
#   NR         838
#   STATE      off
#   TYPE       MQTT2_DEVICE
#   eventCount 229
#   .DT:
#     DEVICETOPIC shelly1minig3_e4b3231cf8a8
#   .attraggr:
#   .attrminint:
#   OLDREADINGS:
#   READINGS:
#     2026-09-13 21:14:36   lwt             online
#     2026-09-13 21:47:00   state           off
#
setstate shelly1minig3_e4b3231cf8a8 off
setstate shelly1minig3_e4b3231cf8a8 2026-09-13 21:14:36 lwt online
setstate shelly1minig3_e4b3231cf8a8 2026-09-13 21:47:00 state off

Ekelhaft ist weiterhin dieses minütliche update des "switch_0" Zweig.

Weiß wer wie man das unterbinden kann?