Shelly Pro - Serie anbinden

Begonnen von vic, 25 Januar 2023, 17:21:49

Vorheriges Thema - Nächstes Thema

Ralli

Ich habe für jeden Kanal meines Pro 3 ein eigenes Device angelegt.

Damit für das Device für Kanal 0  auch nur die dafür bestimmten Informationen verarbeitet, habe ich folgendes in der readingList:

attr ShellyPro3_Heizstab readingList $DEVICETOPIC/events/rpc:.* { return if $EVENT !~ m{switch:0};; $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT,'switch_',$JSONMAP) }\
$DEVICETOPIC/status/switch.0:.* { $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT, 'switch_', $JSONMAP) }\
$DEVICETOPIC/rpc:.* { return if $EVENT !~ m{\"result\":\{\"id\":0};; $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT, 'req_', $JSONMAP)}

Dazu passend folgendes in der setList:

attr ShellyPro3_Heizstab setList toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":0}}\
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}}\
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}}\
status-request:noArg $DEVICETOPIC/rpc {"id":1,"src":"$DEVICETOPIC","method":"Switch.GetStatus","params": {"id":0}}

Selbstredend muss das Attribut devicetopic entsprechend gesetzt sein, damit es in readingList und setList entsprechend verarbeitet wird. Für die Kanäle 1 und 2 müssen die Eintragungen angepasst werden.

Damit geht nicht nur on und off sondern auch on-for-timer, off-for-timer und status-request.
Gruß,
Ralli

Proxmox 8.3 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.79.6.20241122) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

hazelnut

Hallo Ralli,

ok, du übergibst also einen kompletten JSON-String?! darf ich fragen - das "fhem2shelly" ist dein MQTT2_SERVER?

Ich werd wohl was Zeit brauchen das zu verstehen... vielen, vielen Dank aber erst einmal!!

...und ich melde mich :-)

Hazelnut

Ralli

Zitat von: hazelnut am 05 Dezember 2024, 22:43:46darf ich fragen - das "fhem2shelly" ist dein MQTT2_SERVER?

Das ist irgendein Name, mit dem der Absender dieses publish beim MQTT-Server benannt wird.
Gruß,
Ralli

Proxmox 8.3 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.79.6.20241122) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Beta-User

Zitat von: Ralli am 06 Dezember 2024, 07:14:10Absender dieses publish beim MQTT-Server benannt wird.
Es geht nach meiner Erinnerung weniger um den Server, sondern um die Rückmeldeinfo für den Absender, ob sein Befehl angekommen ist. Daher wird in den attrTemplate zu den 2nd gen Shelly dieser Pfad nicht ausgewertet, sondern nur die Schaltinfo, die über einen anderen Topic kommen sollte...
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

hazelnut

Hallo noch einmal,

so, ich hatte am Wochenende etwas Zeit, mich damit zu beschäftigen... und es dauerte nicht lange, bis ich beim Pearl nicht weiterkomme.

Beim Anpassen der readingList hattest du ja (fast) diesen String hier:

attr ShellyPro3_Pumpe readingList $DEVICETOPIC/events/rpc:.* { return if $EVENT !~ m{switch:0};; $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT,'switch_',$JSONMAP) }\
$DEVICETOPIC/status/switch.0:.* { $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT, 'switch_', $JSONMAP) }\
$DEVICETOPIC/rpc:.* { return if $EVENT !~ m{\"result\":\{\"id\":0};; $EVENT =~ s/"output":true/"state":"on"/g;; $EVENT =~ s/"output":false/"state":"off"/g;; json2nameValue($EVENT, 'req_', $JSONMAP)}

wie dir vielleicht aufgefallen ist, habe ich den Name geändert. Das Devicetopic ist hinterlegt und sollte passen.

Wenn ich die Reading-List einfügen möchte, schmeißt er mir den folgenden Fehler:

syntax error at (eval 169468) line 1, near "0:"
syntax error at (eval 169468) line 1, near "rpc:"
syntax error at (eval 169468) line 1, near ")}"

zumindest dem Bauch nach kann ich damit nichts anfangen, da das in deinem Quelltext plausibel aussieht und auch die Klammern eigentlich stimmen. Zeilenumbrüche habe ich so, wie sie oben im Attribut sind.

Kann es sein, dass es die es die Readings nicht in der Form gibt? Weil in meiner Ausgabe steht aktuell sowas hier:

params_switch_0_output

false

der zugehörige ReadingList - Eintrag (hat fhem selber angelegt) sieht so aus:

shellypro3_a0dd6ca1bxxx:SP3-P/online:.* online
shellypro3_a0dd6ca1bxxx:SP3-P/events/rpc:.* { json2nameValue($EVENT) }


Kannst du mir da weiterhelfen?

Danke

Hazel

Beta-User

Zitat von: hazelnut am 16 Dezember 2024, 14:42:11Das Devicetopic ist hinterlegt und sollte passen.
Das würde ich bezweifeln, sonst würde nicht der /events/rpc-Topic nochmal automatisch angelegt.
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

passibe

Wo fügst du die denn ein? Das, was da steht muss entweder in die raw definition oder über das Plus-Symbol oben eingefügt werden.

Willst du es direkt in das Attribut reinkopieren brauchst du
$DEVICETOPIC/events/rpc:.* { return if $EVENT !~ m{switch:0}; $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT,'switch_',$JSONMAP) }
$DEVICETOPIC/status/switch.0:.* { $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT, 'switch_', $JSONMAP) }
$DEVICETOPIC/rpc:.* { return if $EVENT !~ m{\"result\":\{\"id\":0}; $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT, 'req_', $JSONMAP)}

Ich kriege da jedenfalls direkt beim Einfügen keine Fehlermeldung. Im Betrieb, keine Ahnung – habe keinen Shelly Pro. Der Perl-Code an sich ist aber korrekt.

Falls es immer noch nicht funktioniert: Gib uns bitte mal ein List vom ShellyPro3_Pumpe device.

hazelnut

#22
So ihr lieben,

@Beta-User: du hattest recht. Beim Device-Topic lag letztendlich auch der Fehler. Habe die noch mal völlig neu angelegt (im Gerät und dann auch so übernommen) und dann hat es fast wie von allein funktioniert. Wie genau? ;-)

Ok, also,
(1) erst mal im FHEM alles wegputzen, was da bisher an nicht funktionierenden Spielerein da war.
(2) das Device-Topic im Shelly (in meinem Fall neu) hinterlegen.
(3) FHEM erkennt das Device ...
(4) Template zuordnen (bei mir gab es auf dem Raspi ein Template für "shellypro4pm", was ich verwendet habe)
(5) nach dem magische Dinge passieren sind 3 Kanäle neu angelegt: *_CH4, *_CH3, *_CH2, die sich auch schon (z.T.) schalten lassen
(6) beim Schalten von *_CH4 passiert nichts - klar - der ShellyPro 3 hat ja auch nur 3 Kanäle (offensichtlich wird bei Kanal 4 angefangen und dann runtergezählt) also sind ein paar Attribute anzupassen:

Im Attribut jsonMap ist
*_switch_3_* in
*_switch_0_* zu ändern. Ähnlich ist es in den Attributen readingList und setList. Auch hier ist die jeweilige 3 durch eine 0 zu ersetzen. Ich hab auch den Kommentar (Attribut comment) noch angepasst und natürlich auch ein rename auf *_CH1 durchgeführt

Damit läuft es :-)

Vielen Dank an euch und eure Geduld!!!

Der Fehler saß also mal wieder vor dem Bildschirm, hat aber dazu gelernt und ich hoffe, meine Beschreibung hier hilft dem Einen oder der Anderen

Hazel