Shelly Plus 2 PM

Begonnen von tomleitner, 23 Juni 2022, 09:31:53

Vorheriges Thema - Nächstes Thema

tomleitner

Hallo,

Ich habe basierend auf dem attrTemplate des Shelly Plus 1 PM eine Rollosteuerung mit dem Shelly Plus 2 PM implementiert. Auch modelliert nach der Shelly 2.5 Rollo Steuerung.

Vielleicht ist es ja für den einen oder anderen hilfreich.

Schöne Grüße.

Tom


defmod RolloWohnzimmerSeite MQTT2_DEVICE
attr RolloWohnzimmerSeite DbLogExclude .*
attr RolloWohnzimmerSeite cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
attr RolloWohnzimmerSeite comment Shelly Plus 2 PM in Roller-Mode. 100=opened / 0=closed
attr RolloWohnzimmerSeite devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red true:10px-kreis-gruen false:10px-kreis-rot 0:fts_shutter_100 100:fts_shutter_10 9\d:fts_shutter_10 8\d:fts_shutter_20 7\d:fts_shutter_30 6\d:fts_shutter_40 5\d:fts_shutter_50 4\d:fts_shutter_60 3\d:fts_shutter_70 2\d:fts_shutter_80 1\d:fts_shutter_90 0\d:fts_shutter_100 set_.*:fts_shutter_updown
attr RolloWohnzimmerSeite devicetopic shellyplus2pm-48551999067c
attr RolloWohnzimmerSeite genericDeviceType blind
attr RolloWohnzimmerSeite group Rollo
attr RolloWohnzimmerSeite homebridgeMapping clear CurrentPosition=pct TargetPosition=CurrentPosition,cmd=pct
attr RolloWohnzimmerSeite icon fts_shutter
attr RolloWohnzimmerSeite jsonMap status_state:state status_current_pos:pct status_temperature_tC:temperature
attr RolloWohnzimmerSeite model shellyPlus_2.5pm
attr RolloWohnzimmerSeite readingList $DEVICETOPIC/online:.* online\
$DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }\
$DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }\
$DEVICETOPIC/status/cover_0:.* { json2nameValue($EVENT, 'status_', $JSONMAP) }
attr RolloWohnzimmerSeite room Homekit,MQTT,Wohnzimmer
attr RolloWohnzimmerSeite setList open:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Cover.Open","params": {"id":0}}\
close:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Cover.Close","params": {"id":0}}\
half:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Cover.GoToPosition","params": {"id":0,"pos":50}}\
stop:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Cover.Stop","params": {"id":0}}\
pct:slider,0,1,100 $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Cover.GoToPosition","params": {"id":0,"pos":$EVTPART1}}\
x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Update","params": {"stage":"stable"}}\
x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Reboot"}\
x_eco:true,false $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Sys.SetConfig","params": {"config": {"device": {"eco_mode": $EVTPART1}}}}
attr RolloWohnzimmerSeite setStateList open close half stop pct
attr RolloWohnzimmerSeite stateFormat online\
pct
attr RolloWohnzimmerSeite webCmd :open:close:half:stop:pct

Beta-User

Danke für den Input, ich habe eben eine erste Variante von deinem Code als attrTemplate eingecheckt.

Wäre super, wenn du das (ggf. mit einem Klon) testen könntest.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

tomleitner

Hab das neue attrTemplate ausprobiert -- klappt hervorragend.
Danke!

Beta-User

Vielen Dank für's testen und die Rückmeldung!

Hast du zufällig auch funktionierenden Code für den 2Plus pm als "normalen" 2-fach-Aktor (am besten "split")? Der fehlt nämlich noch in unserer Sammlung :) ... (und das würde dann auch komplett dem Thread-Titel entsprechen ;D ).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

spi3845

#4
Hallo zusammen,

teste gerade auch einen Plus 2PM. Als gen2 Gerät schickt der keine Announces mehr. Damit sehe ich in den readings z. B. die möglichen Firmware-Updates, aber nicht die aktuell installierte.

Ich musste announces so umständlich nachbauen - geht das auch einfacher mit gen2 Geräten?

Habe mir mit einem Skript direkt auf dem Shelly geholfen - das habe ich irgendwo bei Shelly gefunden und um den 2. MQTT-publish ergänzt
let deviceInfo = null;

Shelly.call(
  "Shelly.GetDeviceInfo",
  {},
  function (result, error_code, error_message) {
    if (error_code) return;
    deviceInfo = result;
  }
);

MQTT.subscribe(
  "shellies/command",
  function (topic, message, ud) {
    if (deviceInfo === null) return;
    if (message === "announce") {
      MQTT.publish("shellies/announce", JSON.stringify(deviceInfo), 0, false);
      MQTT.publish("shellies/shelly-eg03/announce", JSON.stringify(deviceInfo), 0, false);
    }
    print(message);
  },
  null
);


Zusätzlich musste ich in readingsList noch ein
shellies/shelly-eg03/announce:.* { json2nameValue($EVENT) }
definieren. Jetzt sehe ich zusätzliche Details in den Readings, z. B.
fw_id           20220722-090230/0.11.0-beta2-g54f3094

Im shellies/announce:.* "Sammeldevice" musste ich die readingList der gen1 für gen2 Shellies anpassen.

shellies/announce:.* { $EVENT =~ m,gen..2, ? ($EVENT =~ m,name...([^"]+), ? json2nameValue($EVENT,$1."_") : json2nameValue($EVENT)) : ($EVENT =~ m,id...([^"]+), ? json2nameValue($EVENT,$1."_") : json2nameValue($EVENT)) }

eg01 und eg02 sind gen1 Geräte, eg03 ist ein Plus 2PM.

Ergebnis:
READINGS:
     2022-07-12 09:55:45   IODev           mqtt_broker
     2022-07-27 19:26:50   shelly-eg01_fw_ver 20220209-094317/v1.11.8-g8c7bb8d
     2022-07-27 19:26:50   shelly-eg01_id  shelly-eg01
     2022-07-27 19:26:50   shelly-eg01_ip  192.168.241.20
     2022-07-27 19:26:50   shelly-eg01_mac xxx
     2022-07-27 19:26:50   shelly-eg01_model SHSW-PM
     2022-07-27 19:26:50   shelly-eg01_new_fw false
     2022-07-27 19:26:50   shelly-eg02_fw_ver 20211109-131033/v1.11.7-g682a0db
     2022-07-27 19:26:50   shelly-eg02_id  shelly-eg02
     2022-07-27 19:26:50   shelly-eg02_ip  192.168.241.21
     2022-07-27 19:26:50   shelly-eg02_mac xxx
     2022-07-27 19:26:50   shelly-eg02_model SHDM-2
     2022-07-27 19:26:50   shelly-eg02_new_fw false
     2022-07-27 19:26:50   shelly-eg03_app Plus2PM
     2022-07-27 19:26:50   shelly-eg03_auth_en false
     2022-07-27 19:26:50   shelly-eg03_fw_id 20220722-090230/0.11.0-beta2-g54f3094
     2022-07-27 19:26:50   shelly-eg03_gen 2
     2022-07-27 19:26:50   shelly-eg03_id  shellyplus2pm-xxx
     2022-07-27 19:26:50   shelly-eg03_mac xxx
     2022-07-27 19:26:50   shelly-eg03_model SNSW-002P16EU
     2022-07-27 19:26:50   shelly-eg03_name shelly-eg03
     2022-07-27 19:26:50   shelly-eg03_profile cover
     2022-07-27 19:26:50   shelly-eg03_ver 0.11.0-beta2



SamNitro

Hey gibt es hier was neues oder kann ich was dazu beitragen? Habe mir auch so ein Gerät zugelegt.
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

fstefan1960

Zitat von: Beta-User am 24 Juni 2022, 10:02:10
Vielen Dank für's testen und die Rückmeldung!

Hast du zufällig auch funktionierenden Code für den 2Plus pm als "normalen" 2-fach-Aktor (am besten "split")? Der fehlt nämlich noch in unserer Sammlung :) ... (und das würde dann auch komplett dem Thread-Titel entsprechen ;D ).

Hallo,
gibt es da inzwischen wohl ein passendes Template?
Wäre toll. Danke
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Beta-User

Habe eben ins svn das "shellyPlus_2pm_split" eingecheckt, basierend auf der Info aus https://forum.fhem.de/index.php/topic,131162.msg1254140.html#msg1254140, dass (im Prinzip) das 4-er pro passen würde.
Allerdings habe ich etwas den Überblick verloren, um welches Modell im Detail dass es ging, und war ebenfalls etwas irritiert, dass die Beschreibung zum 4-er sagt, es würden nur die ersten beiden Kanäle gehen...

Vielleicht kann jemand dazu was sagen, der hier zufällig mitliest und sowas hat...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

fstefan1960

#8
Vielen Dank,

wenn ich das Template nutze, kann ich nur das erste Relais schalten. Ich habe mir jetzt mit Copy-and-paste folgende Lösung gebastelt. Sie funktioniert, wenn auch sicher noch Luft nach oben ist:
defmod MQTT2_HzgPumpe MQTT2_DEVICE shellyplus2pm_xxxxxxxxxxx
attr MQTT2_HzgPumpe DbLogExclude .*
attr MQTT2_HzgPumpe comment Shelly Plus 2 PM in Relais-Mode
attr MQTT2_HzgPumpe devicetopic shellyplus2pm-xxxxxxxxxxxxxxxx
attr MQTT2_HzgPumpe genericDeviceType switch
attr MQTT2_HzgPumpe getList in_mode:noArg in_mode $DEVICETOPIC/rpc {"id": 1,"src":"$DEVICETOPIC", "method": "Switch.GetConfig", "params": {"id": 0}}
attr MQTT2_HzgPumpe jsonMap switch_state:state switch_aenergy_total:aenergy_total switch_apower:apower switch_temperature_tC:temperature switch_temperature_tF:0 params_wifi_sta_ip:ip params_switch_0_temperature_tC:temperature params_switch_0_temperature_tF:0 result_in_mode:in_mode
attr MQTT2_HzgPumpe model shellyPlus_2pm
attr MQTT2_HzgPumpe 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:.* { $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT, 'switch_', $JSONMAP) }\
  $DEVICETOPIC/status/cloud:.* {}\
  $DEVICETOPIC/rpc:.* { json2nameValue($EVENT, 'req_', $JSONMAP, 'in_mode')}\
  $DEVICETOPIC/status/input_0:.* { json2nameValue($EVENT, 'input_', $JSONMAP) }\
  fhem2shelly/rpc:.* {}\
shellyplus2pm_xxxxxxxxxx:shellyplus2pm-xxxxxxxxxx/status/switch_1:.* { json2nameValue($EVENT) }
attr MQTT2_HzgPumpe room MQTT2_DEVICE
attr MQTT2_HzgPumpe setList toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":0}}\
  toggle1:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":1}}\
  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false}}\
  on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true}}\
  off1:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":false}}\
  on1:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":true}}\
  on-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\
  off-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false,"toggle_after":$EVTPART1}}\
  on-for-timer1 $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":true,"toggle_after":$EVTPART1}}\
  off-for-timer1 $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":false,"toggle_after":$EVTPART1}}\
  in_mode:toggle,flip,detached {fhem("sleep 0.2;; get $NAME in_mode");; my $val = $EVTPART1 ne 'toggle' ? $EVTPART1 : ReadingsVal($NAME,'in_mode','flip') eq 'flip' ? 'detached':'flip';; qq($DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.SetConfig","params": {"id":0, "config": {"in_mode": "$val"}}})}\
  x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Update","params": {"stage":"stable"}}\
  x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Reboot"}\
  x_eco:true,false $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Sys.SetConfig","params": {"config": {"device": {"eco_mode": $EVTPART1}}}}
attr MQTT2_HzgPumpe setStateList on off toggle on-for-timer off-for-timer on1 off1 toggle1 on-for-timer1 off-for-timer1
attr MQTT2_HzgPumpe stateFormat params_switch_0_current Amp / params_switch_1_current Amp / params_switch_0_output / params_switch_1_output
attr MQTT2_HzgPumpe webCmd on:off:on1:off1:toggle:toggle1

setstate MQTT2_HzgPumpe 0 Amp / 0 Amp / false / false
setstate MQTT2_HzgPumpe 2022-12-29 17:12:32 IODev myMQTT
...


Vielleicht hilft es ja jemandem.

Liebe Grüße
Frank
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

SamNitro

Ich muss das neue nachher mal testen wenn ich zuhause bin, aber normalerweise sollte er 2 Geräte erstellen für jeweils 1 Relay.
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Beta-User

Da war/ist noch ein Typo bei on-for-timer im Kanal 1.

Wenn ich das richtig sehe, ist der wesentliche Unterschied zwischen dem "unified"-Beispiel hier und dem aktuellen attrTemplate in Kanal 1 die Frage, ob die "Haupt-Id" die "0" ist oder die "1".

Also:
  off1:noArg $DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":false}}\

vs.  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":1,"on":false}}\

Falls das korrekt ist, fixe ich das gerne (für alle künfitgen template-Anwender)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Zitat von: Beta-User am 30 Dezember 2022, 12:02:31
Falls das korrekt ist, fixe ich das gerne (für alle künfitgen template-Anwender)...
Hat dazu bitte jemand eine Info, damit ich das einchecken und gedanklich vollends abhaken kann?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

flummy1978

Guten Morgen,

ich habe das vorgegebene "template" aus #8 übernommen und bei mir getestet und kann es für weitesgehend funktionierend bestätigen. Kann jetzt (noch) nicht ins Detail jede Funktion der Messungen etc testen, kann das aber gern machen, wenn irgendwo ein Test notwendig ist. Allerdings wäre auch ich ein Befürworter von beiden Volagen. Den 2PlusPM sowohl als Einzelmodul (z.B. für Motor links / rechtslauf) als auch jeder Kanal separat für einzelne Kreisläufe - Je nachdem was sich da machen lässt.

Zitat von: Beta-User am 03 Januar 2023, 17:09:01
Falls das korrekt ist, fixe ich das gerne (für alle künfitgen template-Anwender)...

Hat dazu bitte jemand eine Info, damit ich das einchecken und gedanklich vollends abhaken kann?

Was genau möchtest Du da wissen? Ich hab die Vorlage jetzt nur an meinen Shelly angepasst und sie funktioniert.
Lässt sich die Vorlage dann beim attrTemplate im jeweiligen Device finden, oder wo anders?

VG
Andreas

Beta-User

Also: zu testen wäre eigentlich "shellyPlus_2pm_split".

Da ist aktuell noch ein Typo drin, der aber nur das on-for-timer in Kanal 1 (also 2. Relay) betrifft. Meine Frage ist jetzt, ob das so wie eingecheckt (bis auf den Typo) funktioniert mit on/off für beide Kanäle, einschließlich der "Rückwärtsauswertung" desseb, was der Shelly dann liefert.

Der wesentliche Unterschied scheint zu sein, was "vorne" als Id angegeben wird (es gibt in jedem set-JSON zwei Mal die Angabe "Id", wobei mich grade auch schon irritiert, dass man anscheinend für Kanal 0 auch schon vorne die "1" hat; das ist irgendwie nicht wirklich stringent...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

flummy1978

Zitat von: Beta-User am 04 Januar 2023, 11:03:30
Also: zu testen wäre eigentlich "shellyPlus_2pm_split".

Sorry da stehe ich ein wenig auf dem Schlauch -.-
Bisher konnte ich immer alles was ich an MQTT brauchte direkt im Device finden und mit attrTemplate setzen. Das "shellyPlus_2pm_split" finde ich dort nicht. Es ist aber sehr wohl in der "mqtt2.template" Datei - Wie kann ich die denn aufrufen und testen?

Sorry für meine Unwissenheit, aber ich hab keine Plan, wie man dieses Template nutzen kann  :-\

VG
Andreas