FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: romakrau am 19 November 2021, 18:02:29

Titel: gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 18:02:29
Hallo zusammen,
ich versuche meinen Shelly Plus 1PM per MQTT2 ein- und auszuschalten. Leider gelingt mir dies nicht und ich brauche Hilfe.
Anbei das List des Devices:
Internals:
   CFGFN     
   CID        shellyplus1pm_a8032abe179c
   DEF        shellyplus1pm_a8032abe179c
   DEVICETOPIC MQTT2_shellyplus1pm_a8032abe179c
   FUUID      6197d5c8-f33f-e93f-d43c-da313fabf5089409
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     14
   NAME       MQTT2_shellyplus1pm_a8032abe179c
   NR         427
   STATE      ???
   TYPE       MQTT2_DEVICE
   myBroker_MSGCNT 14
   myBroker_TIME 2021-11-19 17:53:10
   READINGS:
     2021-11-19 17:50:16   IODev           myBroker
     2021-11-19 17:50:16   mqtt_connected  true
     2021-11-19 17:50:16   online          true
     2021-11-19 17:53:10   rpc_dst         shellyplus1pm-a8032abe179c/events
     2021-11-19 17:53:10   rpc_method      NotifyStatus
     2021-11-19 17:50:16   rpc_params_mqtt_connected true
     2021-11-19 17:53:10   rpc_params_switch_0_aenergy_by_minute_1 0.000
     2021-11-19 17:53:10   rpc_params_switch_0_aenergy_by_minute_2 0.000
     2021-11-19 17:53:10   rpc_params_switch_0_aenergy_by_minute_3 0.000
     2021-11-19 17:53:10   rpc_params_switch_0_aenergy_minute_ts 1637340778
     2021-11-19 17:53:10   rpc_params_switch_0_aenergy_total 271.561
     2021-11-19 17:53:10   rpc_params_switch_0_id 0
     2021-11-19 17:50:16   rpc_params_switch_0_temperature_tC 52.00
     2021-11-19 17:50:16   rpc_params_switch_0_temperature_tF 125.60
     2021-11-19 17:50:16   rpc_params_switch_0_voltage 234.09
     2021-11-19 17:50:26   rpc_params_sys_available_updates_beta_version 0.9.0-beta2
     2021-11-19 17:53:10   rpc_params_ts   1637340780.19
     2021-11-19 17:50:16   rpc_params_wifi_rssi -47
     2021-11-19 17:50:16   rpc_params_wifi_ssid Finger von die Box
     2021-11-19 17:50:16   rpc_params_wifi_sta_ip 192.168.187.246
     2021-11-19 17:50:16   rpc_params_wifi_status got ip
     2021-11-19 17:53:10   rpc_src         shellyplus1pm-a8032abe179c
     2021-11-19 17:52:59   switch_0_aenergy_by_minute_1 0.000
     2021-11-19 17:52:59   switch_0_aenergy_by_minute_2 0.000
     2021-11-19 17:52:59   switch_0_aenergy_by_minute_3 0.000
     2021-11-19 17:52:59   switch_0_aenergy_minute_ts 1637340778
     2021-11-19 17:52:59   switch_0_aenergy_total 271.561
     2021-11-19 17:52:59   switch_0_apower 0.000
     2021-11-19 17:52:59   switch_0_id     0
     2021-11-19 17:52:59   switch_0_output true
     2021-11-19 17:52:59   switch_0_source init
     2021-11-19 17:52:59   switch_0_temperature_tC 52.1
     2021-11-19 17:52:59   switch_0_temperature_tF 125.8
     2021-11-19 17:52:59   switch_0_voltage 233.790
     2021-11-19 17:50:26   sys_available_updates_beta_version 0.9.0-beta2
     2021-11-19 17:50:26   sys_fs_free     258781
     2021-11-19 17:50:26   sys_fs_size     414401
     2021-11-19 17:50:26   sys_mac         A8032ABE179C
     2021-11-19 17:50:26   sys_ram_free    181036
     2021-11-19 17:50:26   sys_ram_size    250040
     2021-11-19 17:50:26   sys_restart_required false
     2021-11-19 17:50:26   sys_time        17:50
     2021-11-19 17:50:26   sys_unixtime    1637340626
     2021-11-19 17:50:26   sys_uptime      15
Attributes:
   alias      Trockner
   readingList shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/online:.* online
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/events/rpc:.* { json2nameValue($EVENT, 'rpc_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/status/switch_0:.* { json2nameValue($EVENT, 'switch_0_', $JSONMAP) }
   room       MQTT2_DEVICE

Bisher habe ich diese SetList ausprobiert :

on shellies/shellyplus1pm_a8032abe179c/relay/0/command on
off shellies/shellyplus1pm_a8032abe179c/relay/0/command off

auch ein

off shellies/shellyplus1pm_a8032abe179c/rpc {"method":"Switch.Set","params":{"id":0,"on":false}}

hat nicht funktioniert.

Gruß
Roman

EDIT: Falscher Type im Betreff, geändert
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 19 November 2021, 19:07:29
Hallo Roman,

schon ein Template  (https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#attrTemplate_2)probiert?

Gruß Otto
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 20:34:05
Hallo Otto,
ja das Shelly1 Template. Es listet mir auch die angezeigten Readings auf. Leider enthält es keine setList's.
Gruß
Roman
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 19 November 2021, 20:51:18
Das glaube ich nicht, bei mir ist es komplett. Ich sehe bei Dir auch kein Reading attrTemplateVersion  ::)
ist dein attrTemplate aktuell?
{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }Das steht bei mir im template im setList:
attr DEVICE setList\
  off:noArg shellies/DEVNAME/relay/0/command off\
  on:noArg shellies/DEVNAME/relay/0/command on\
  x_update:noArg shellies/DEVNAME/command update_fw\
  x_mqttcom shellies/DEVNAME/command $EVTPART1
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 21:38:47
Hallo Otto,
das scheint es zu sein. Das MQTT-Template ist nicht aktuell. Wie werden denn die Templates aktualisiert. Update all mit nachfolgendem shutdown restart hatte ich gemacht.
Gruß
Roman
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 19 November 2021, 21:45:21
Wie werden denn die Templates aktualisiert.
Hab ich doch geschrieben!? Die erste Codezeile im Post in die FHEM Kommandozeile werfen und ausführen
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 21:58:16
Hatte ich durchgeführt aber keine Änderung in der Template Auswahl.
2021.11.19 21:57:12 1: SVN download of FHEM/lib/AttrTemplate/mqtt2.template to FHEM/lib/AttrTemplate/mqtt2.template finished
2021.11.19 21:57:12 2: AttrTemplates: got 232 entries
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: TomLee am 19 November 2021, 22:15:24
Hast du irgendwie was am Topic-Pfad in den Einstellungen des Shelly geändert ?

Das Template erwartet in ReadingList shellies am Anfang des Topic-Pfad, das bei dir irgendwie nicht der Fall .

Also bspw. so:

shellyplus1pm_a8032abe179c:shellies/shellyplus1pm-a8032abe179c/status/mqtt:.*
und nicht so:

shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/status/mqtt:.*
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 19 November 2021, 22:25:50
Es geht vielleicht auch nicht um die Auswahl, Du hast gesagt Du hast shelly1 angewendet - aber aus deinem List geht das nicht hervor - was ist wenn Du das Template shelly1 nochmal anwendest?
Wenn Du shelly1 auswählst bekommst Du den Inhalt des Templates angezeigt, da solltest Du sehen, was das Template macht.
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 22:28:22
Tut mir leid, aus irgendeinem Grund werden bei mir nicht die Shelly Templates angezeigt (A_10...,A_11...).
Ich sehe nur das shelly1 template. Dieses generiert gelegentlich ein von dir beschriebenes setlist (shellies...).
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: TomLee am 19 November 2021, 22:30:00
Schonmal ohne shellies versucht ?

on shellyplus1pm_a8032abe179c/relay/0/command on
off shellyplus1pm_a8032abe179c/relay/0/command off
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 22:35:50
Hallo Tom,
alle Varianten schon versucht. Danke
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 22:37:13
Ich denke das Kernproblem ist das fhem mir nicht die Shelly Templates anbietet. Irgendetwas ist da faul.
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: TomLee am 19 November 2021, 22:49:38
Nochmal, weil das shellies am Anfang des Topic fehlt:

filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
aber selbst wenn sie zur Auswahl hast passt doch nach dem anwenden der Topicpfad nicht, das Template erstellt mit shellies und deine ReadingList oben sagt ohne muss es sein.

Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 22:51:34
Hi Tom,
hatte ich im ersten Beitrag geschrieben das ich es schon ausprobiert hatte.
Danke
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: TomLee am 19 November 2021, 22:53:13
ReadingList nicht setList

Zitat
readingList shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/online:.* online
shellyplus1pm_a8032abe179c:shellies/shellyplus1pm-a8032abe179c/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellies/shellyplus1pm-a8032abe179c/events/rpc:.* { json2nameValue($EVENT, 'rpc_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellies/shellyplus1pm-a8032abe179c/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellies/shellyplus1pm-a8032abe179c/status/switch_0:.* { json2nameValue($EVENT, 'switch_0_', $JSONMAP) }
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 22:53:30
Hier noch mal das aktuelle list ohne Nutzung eines templates:

Internals:
   CFGFN     
   CID        shellyplus1pm_a8032abe179c
   DEF        shellyplus1pm_a8032abe179c
   DEVICETOPIC MQTT2_shellyplus1pm_a8032abe179c
   FUUID      619817e8-f33f-e93f-72e5-f09ec1cca830d1ce
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     63
   NAME       MQTT2_shellyplus1pm_a8032abe179c
   NR         290
   STATE      off
   TYPE       MQTT2_DEVICE
   myBroker_MSGCNT 63
   myBroker_TIME 2021-11-19 22:52:02
   READINGS:
     2021-11-19 22:32:24   IODev           myBroker
     2021-11-19 22:32:24   mqtt_connected  true
     2021-11-19 22:32:24   online          true
     2021-11-19 22:52:02   rpc_dst         shellyplus1pm-a8032abe179c/events
     2021-11-19 22:52:02   rpc_method      NotifyStatus
     2021-11-19 22:32:24   rpc_params_mqtt_connected true
     2021-11-19 22:52:02   rpc_params_switch_0_aenergy_by_minute_1 0.000
     2021-11-19 22:52:02   rpc_params_switch_0_aenergy_by_minute_2 0.000
     2021-11-19 22:52:02   rpc_params_switch_0_aenergy_by_minute_3 0.000
     2021-11-19 22:52:02   rpc_params_switch_0_aenergy_minute_ts 1637358719
     2021-11-19 22:52:02   rpc_params_switch_0_aenergy_total 271.561
     2021-11-19 22:50:04   rpc_params_switch_0_apower 0
     2021-11-19 22:52:02   rpc_params_switch_0_id 0
     2021-11-19 22:50:06   rpc_params_switch_0_output true
     2021-11-19 22:50:06   rpc_params_switch_0_source WS_in
     2021-11-19 22:52:02   rpc_params_ts   1637358721.70
     2021-11-19 22:52:02   rpc_src         shellyplus1pm-a8032abe179c
     2021-11-19 22:48:05   state           off
     2021-11-19 22:52:01   switch_0_aenergy_by_minute_1 0.000
     2021-11-19 22:52:01   switch_0_aenergy_by_minute_2 0.000
     2021-11-19 22:52:01   switch_0_aenergy_by_minute_3 0.000
     2021-11-19 22:52:01   switch_0_aenergy_minute_ts 1637358719
     2021-11-19 22:52:01   switch_0_aenergy_total 271.561
     2021-11-19 22:52:01   switch_0_apower 0.000
     2021-11-19 22:52:01   switch_0_id     0
     2021-11-19 22:52:01   switch_0_output true
     2021-11-19 22:52:01   switch_0_source WS_in
     2021-11-19 22:52:01   switch_0_temperature_tC 52.3
     2021-11-19 22:52:01   switch_0_temperature_tF 126.2
     2021-11-19 22:52:01   switch_0_voltage 240.668
Attributes:
   readingList shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/online:.* online
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/events/rpc:.* { json2nameValue($EVENT, 'rpc_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }
shellyplus1pm_a8032abe179c:shellyplus1pm-a8032abe179c/status/switch_0:.* { json2nameValue($EVENT, 'switch_0_', $JSONMAP) }
   room       MQTT2_DEVICE
   setList    off shellies/shellyplus1pm_a8032abe179c/relay/0/command off
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: TomLee am 19 November 2021, 22:55:31
Siehe oben, hab editiert
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 23:08:18
Hallo Tom,
die readings werden gemäß der readinglist eingelesen (siehe list). Es geht um das Schalten !
GrußRoman
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 19 November 2021, 23:36:53
Hallo Tom,
ich muss Abbitte leisten. Nachdem ich das template file gelesen habe glaube ich zu wissen was du mit den .*shellies.* meinst. Es bezieht sich auf den Filter zur Auflistung der gefilterten Templates. Werde Morgen weitermachen.
Gruß Roman
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: TomLee am 19 November 2021, 23:45:55
Genau.

Was ich eben hatte war, das ich ein update eines Shelly 1 machte und gar nichts mehr danach per MQTT ging, erst ein Neustart des Shelly hat Abhilfe geschafft.
Hast du schonmal zwischendurch rebooted ?
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: Beta-User am 20 November 2021, 04:58:17
Die API für die neuen Shelly ist anders, da muss man erst mal noch vieles zu Fuß machen.

Hotfix für's erste: https://forum.fhem.de/index.php/topic,123980.msg1185403.html#msg1185403
Titel: Antw:MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 20 November 2021, 09:29:02
Dank Euch beiden. Hat mir sehr geholfen.
Gruß
Roman
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: romakrau am 20 November 2021, 09:36:55
Nachtrag: In meinem Fall braucht das altbekannte shellies nicht verwendet zu werden :

off trockner/rpc {"id":0, "src":"trockner/status", "method":"Switch.Set", "params":{"id":0,"on":false}}
on  trockner/rpc {"id":0, "src":"trockner/status", "method":"Switch.Set", "params":{"id":0,"on":true}}

Reicht vollkommen zum Schalten.
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: limes1337 am 21 November 2021, 17:43:42
Hallo zusammen,

wie schon geschrieben wurde hat sich die MQTT Topic Struktur bei den neuen Shellies (meines Wissens bisher Shelly Plus Modelle und Shelly Pro 4PM) wesentlich geändert. U.a. für die Set Befehle werden die Methodenaufrufe nun nicht mehr als MQTT Topic(-struktur) übergeben sondern als Payload. Die Grundlage der Dokumentation sind dafür die RPC Befehle aus der Shelly Gen2 Device API (https://shelly-api-docs.shelly.cloud/gen2/Overview/CommonServices/Shelly#shellyupdate). Damit funktionieren die bisher vorhandenen Shelly MQTT Templates nicht bzw. nur teilweise. Dafür sind die Steuermöglichkeiten über MQTT aber deutlich umfangreicher geworden.

Für die Set Befehle lautet die Topic Adressierung grundsätzlich <shelly-device>/rpc + payload
<shelly-device> ist dabei davon abhängig was ihr in der MQTT Definition des Shellies angegeben habt. Nachfolgend das Beispiel von einem Shelly Plus 1, der bei mir die Lichter in einem Badezimmerschrank steuert.

Die MQTT Definition des Shellies findet ihr im beigefügten Screenshot.

Die passenden Befehle aus der Set List lauten dann wie folgt. Neben Toggle, On, Off, Update habe ich mal noch einen Reboot und einen On-for-Timer eingefügt. Letzteres wird meines Wissen so nativ von den Gen1 Shellies per MQTT nicht unterstützt (den on-for-timer gibt es zwar in FHEM auch bei den bisherigen Shellies, der Timer wird hier aber von FHEM verwaltet - in der neuen Variante direkt im Shelly).

toggle:noArg shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Switch.Toggle","params": {"id":0}}
  off:noArg shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":false}}
  on:noArg shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true}}
  on-for-timer shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}
  x_update:noArg shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Shelly.Update","params": {"stage":"stable"}}
  x_reboot:noArg shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Shelly.Reboot"}

Faktisch kann man noch sehr viel mehr Set Befehle ergänzen und die Readings müssen auch noch besser ausgewertet werden. Aus meiner Sicht macht es Sinn dafür ein eigenes Template zu erstellen. Sofern ich dazu komme, werde ich es gerne mit Euch teilen.

Grüße,
limes



Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: limes1337 am 21 November 2021, 18:26:31
Ergänzend zum vorhergehenden Eintrag habe ich auf Grundlage von den MQTT shelly1 und shelly1_w_energy_measuring Templates, die devStateIcon Definition für Shelly Plus 1 und Shelly Plus 1PM überarbeitet.
Ich habe bisher nichts an der ReadingList Definition überarbeitet - die Grundlage ist also die ReadingsList aus dem jeweiligen Template + das was die Shelly Plus Devices zusätzlich per MQTT senden.

devStateIcon  Definition für Shelly Plus 1:
{my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen"; my $light = ReadingsVal($name,"state","off"); my $show = '<a href="';$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">'; $show .= FW_makeImage("10px-kreis-".$onl)."</a>"; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>" }

devStateIcon  Definition für Shelly Plus 1PM:
{my $onl = ReadingsVal($name,"online","false") eq "false"?"10px-kreis-rot" : ReadingsVal($name,"new_fw","false") eq "true" ?
"10px-kreis-gelb" : "10px-kreis-gruen";
my $light = ReadingsVal($name,"output","false") eq "false"?"off" : "on";
my $cons = ReadingsVal($name,"params_switch_0_apower","unknown");
my $total = ReadingsVal($name,"params_switch_0_aenergy_total","unknown") eq "unknown"?"unknown" : round(ReadingsVal($name,"params_switch_0_aenergy_total","unknown")/1000,1);
my $temp = ReadingsVal($name,"temperature_tC","-100");
"<a href=\"http://".ReadingsVal($name,"params_wifi_sta_ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a>
<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a>
<div>Verbrauch: $cons W / Total: $total kwh / Temp: $temp °C</div>"}
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Beta-User am 22 November 2021, 15:46:37
Irgendwie gibt es jetzt an verschiedenen Stellen diverse "Häppchen", aber das sinnstiftend zusammenzubasteln, ist irgendwie schwierig.

Hier mal ein erster Wurf zum Thema als Diskussionsgrundlage, mit "ein bißchen von hier und ein bißchen von da".

Irgendwie werde ich den Verdacht nicht los, dass man da manches noch streamlinen kann und sollte, v.a. wg. dieses "true"=>"on"-Themas, aber dazu fehlt irgendwie auch etwas "Futter" (also der vollst. MQTT-Verkehr für diverse Fälle)...

###########################################
# SHELLY plus section
#
# shelly devices using the V2 MQTT API https://shelly-api-docs.shelly.cloud/gen2/Overview/RPCChannels#mqtt
# Shelly Plus 1PM using original firmware.
name:shellyPlus_1pm
filter:TYPE=MQTT2_DEVICE
par:DEV_TOPIC;Shelly name in the topic;{ AttrVal('DEVICE','devicetopic',AttrVal('DEVICE','readingList','')) =~ m<(shellies/[^/]+/|shellyplus[^/:_]{4,}+)> ? $1 : undef }
par:CALLSPEECHRECOGN;Set this to 0 to not set any speech recogn. related attributes;{ 1 }
order:A_20
par:ICON;ICON as set, defaults to message_socket;{ AttrVal('DEVICE','icon','message_socket') }
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE icon ICON
attr DEVICE devicetopic DEV_TOPIC
attr DEVICE setList\
  toggle:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Toggle","params": {"id":0}}\
  off:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":false}}\
  on:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true}}\
  on-for-timer shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\
  x_update:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Shelly.Update","params": {"stage":"stable"}}\
  x_reboot:noArg $\DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Shelly.Reboot"}
attr DEVICE readingList $\DEVICETOPIC/online:.* online\
  $\DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  $\DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }\
  $\DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }\
  $\DEVICETOPIC/status/switch_0:.* { json2nameValue($EVENT, 'switch_0_', $JSONMAP) }
attr DEVICE devStateIcon {my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot': ReadingsVal($name,'new_fw','false') eq 'true' ? '10px-kreis-gelb' : '10px-kreis-gruen'; $onl = FW_makeImage($onl); my $light = ReadingsVal($name,'output','false') =~ m{false|off}?'off':'on'; $light = FW_makeImage($light); my $cons = ReadingsNum($name,'apower',0); my $total = round(ReadingsNum($name,'aenergy_total',0)/1000,1); my $temp = ReadingsVal($name,'temperature','-100'); my $ip = ReadingsVal($name,'ip','none'); qq(<a href="http://$ip"target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a><div>Verbrauch: $cons W / Total: $total kwh / Temp: $temp °C</div>)}
attr DEVICE jsonMap params_switch_0_aenergy_total:aenergy_total params_switch_0_apower:apower temperature_tC:temperature temperature_tF:0 params_wifi_sta_ip:ip
attr DEVICE model shellyPlus_1pm
setreading DEVICE attrTemplateVersion 20211122
option:{ CALLSPEECHRECOGN }
set DEVICE attrTemplate speechcontrol_type_switch

Merkzettel für mich selbst: evtl. kann auch hashKeyRename() weiterhelfen.
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 03 Januar 2022, 07:48:42
Mir sticht im ersten Wurf diese Zeile ins Auge ;)
Zitat
on-for-timer shellies/light_bath_cabinet/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\

Mich irritiert ja in der API der RPC Begriff - der macht in meinem Kopf immer was unangenehmes - aber scheinbar ist das hier einfach ein einheitlicher json String der "egal" über welchen Weg (MQTT HTTP) wirkt?
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Beta-User am 03 Januar 2022, 08:59:32
Mir sticht im ersten Wurf diese Zeile ins Auge ;)
Der "erste Wurf" wurde zwischenzeitlich überarbeitet, wir sollten also daher über den aktuellen attrTemplate-Satz diskutieren. Dazu gehören aktuell zwei templates...

Zitat
Mich irritiert ja in der API der RPC Begriff - der macht in meinem Kopf immer was unangenehmes - aber scheinbar ist das hier einfach ein einheitlicher json String der "egal" über welchen Weg (MQTT HTTP) wirkt?
Die Art und Weise, wie die "plus"-Shelly "ticken", ist unangenehm, ich hätte sofort den Impuls, die firmware runterzuwerfen...

Aber ja, das Interface scheint einheitlich zu sein, und die korrekte Antwort auf
muss da noch sowas davor "id":0, "src":"trockner/status", - da ist mir der benötigte Inhalt von src nicht klar. Das sieht in den Beispielen für mich bisher wie "egal" aus.
kenne ich auch noch nicht. Scheinbar muss da "irgendwas" hin, und zu allem Überfluss bekommt man diesen Mist auch direkt wieder zurück...
Weiß nicht recht, das ist unschön, v.a., weil das "unendlich" ist: mqttexplorer/rpc
Mein Eindruck ist weiter, dass das nicht richtig durchdacht ist.

Im Moment neige ich eher dazu, den "fhem"-Zweig mit einem leeren Perl ins Nirvana zu schicken bzw. ggf. fhem2shelly daraus zu machen, damit man das direkt mit einer ignoreRegexp am IO rausfiltern kann. Wenn man den originalen Topic nehmen würde, hat man eine Doppelung von Senden und Empfangen auf demselben Topic, und das geht gefühlt gar nicht.

Vermutlich wäre alles etwas einfacher, wenn man die Hardware hätte, aber mein Impuls ist einfach: Bäh...
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 03 Januar 2022, 09:18:06
Zitat
Scheinbar muss da "irgendwas" hin, und zu allem Überfluss bekommt man diesen Mist auch direkt wieder zurück...
Oder es muss nur dahin wenn man etwas zurück haben will?
Versteh ich zumindest hier so: https://shelly-api-docs.shelly.cloud/gen2/Overview/RPCChannels/#mqtt

Ich meine die Hardware: ein vierfach Relais für die Hutschiene mit Ethernet Anschluss - liest sich nicht schlecht ;)
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Beta-User am 03 Januar 2022, 09:23:01
Oder es muss nur dahin wenn man etwas zurück haben will?
nope. Das ging bei Testen ja bereits schief, und lt. Doku ist es "required": https://shelly-api-docs.shelly.cloud/gen2/Overview/RPCProtocol#request-frame
Zitat
Ich meine die Hardware: ein vierfach Relais für die Hutschiene mit Ethernet Anschluss - liest sich nicht schlecht ;)
Aha. Kabel. Das macht es in der Tat interessanter, aber die firmware ist imo trotzdem "bäh"...
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 03 Januar 2022, 09:50:03
Ok - man darf nicht in ein Thema in der Doku einsteigen, man muss von vorne lesen. Und dann muss man das wichtige für mqtt und den Anwendungsfall im Kopf sortieren  :-[

Die Firmware naja ... da hatte halt jemand die Idee: nehmen wir json-rpc https://www.jsonrpc.org/ und machen es einheitlich egal über welchen Weg.
Zitat
It is designed to be simple! ;D
Das war ja bisher auch nervig bei den Gen 1 Shelly: über HTTP ging dies über mqtt ging jenes ...
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Beta-User am 03 Januar 2022, 10:12:55
Die Firmware naja ... da hatte halt jemand die Idee: nehmen wir json-rpc https://www.jsonrpc.org/ (https://www.jsonrpc.org/) und machen es einheitlich egal über welchen Weg. Das war ja bisher auch nervig bei den Gen 1 Shelly: über HTTP ging dies über mqtt ging jenes ...
Aha, es gibt also eine Beschreibung dessen, was sich da jemand anscheinend gedacht hat. Immerhin...
Dass "on-for-timer" jetzt auch direkt via MQTT geht, ist schon mal ein Fortschritt, aber dass die "Anweisung" unter diesem src-Topic zurückkommt, ist und bleibt für mich erst mal "bäh", ich verstehe nicht, was das soll, aber ich bin a auch kein Informatiker (oder wie hatte Rudi bzgl. des Erfinders dieser Schreibweise getippt: Elektriker).

Bleibt erst mal die Frage, ob man eine eigene lib dafür bauen sollte, die dann ggf. auch das Modul "Shelly" nutzen kann? Die sollte dann die Transformationen für true=>"on" etc. machen, aber selbstredend dann nur für das, was in "state" landet... Oder eine "simple myUtils"-file, die "extended json2nameValue()" kann...?
Ich würde fast dazu neigen, erst mal mit letzterem anzufangen und dabei die ganze Komplexität (jsonMap, Transformationen bestimmter Werte) vor dem User zu verstecken?
Titel: Antw:gelöst: MQTT Befehle für Shelly Plus 1PM
Beitrag von: Otto123 am 03 Januar 2022, 10:26:58
Ich würde fast dazu neigen, erst mal mit letzterem anzufangen und dabei die ganze Komplexität (jsonMap, Transformationen bestimmter Werte) vor dem User zu verstecken?
Den Satz würde ich unterschreiben ;) und das Shelly Gen2 Modul könnte dann auch eine Art HTTP(MOD)2_DEVICE  ;D oder JSON(MOD)2_DEVICE sein?  8)