MQTT2+Shelly: erste Konfiguration und template-Entwicklung

Begonnen von miggun, 03 Dezember 2018, 21:05:34

Vorheriges Thema - Nächstes Thema

miggun

#75
Noch mal ein paar Info's von der Website des Herstellers:


Shelly2
http://shelly-api-docs.shelly.cloud/#shelly2-mqtt
Raspberry Pi 3 B+
MapleCUN
Shelly1, Shelly2, Shelly4pro, FS20

Beta-User

Zitat von: miggun am 06 Dezember 2018, 18:08:16
Noch mal ein paar Info's von der Website des Herstellers:


Shelly2
http://shelly-api-docs.shelly.cloud/#shelly2-mqtt
Damit bist du uns jetzt geprüfte templates schuldig für shelly1, shelly2 im "normalen" mode, shelly2 im "roller" mode und shelly4pro :P
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

miggun

Ähh, wer, ich???
Ich habe doch keine Ahnung.

Für die Rolladen werde ich den Shelly4Pro verwenden, weil der in der Verteilung hängt. Da wird der eine Theben DCF-Zeitschaltuhr abgelöst.
Steuern werde ich das ganze dann über sunset und sunrise plus Offset lösen. Hoffentlich bekomme ich das diesmal ohne Hilfe hin.
Werde das ganze natürlich mit Euch teilen, wenn es funktioniert.
Raspberry Pi 3 B+
MapleCUN
Shelly1, Shelly2, Shelly4pro, FS20

Beta-User

Zitat von: miggun am 06 Dezember 2018, 19:27:22
Ähh, wer, ich???
Ich habe doch keine Ahnung.
Ja wer denn sonst?!?

Ich habe keinen der shelly daliegen, und selbst wenn Rudi alles hätte, könntest du ihm (und allen shelly-mqtt-Interessierten gleich mit) helfen!

Also erst mal das vorhandene template für shelly2 nehmen, die Anregung von Rudi aufgreifen, reload durchführen und dann (nach einem Backup der bestehenden Konfiguration) das template anwenden, berichten und den fertigen Code posten.

Dann versuchst du es mit dem shelly1 nach ganz genau demselben Muster vorzugehen...

Dann den shelly4pro (im Normalbetrieb). Da muß nur das deleteattr raus und das entsprechende attr aus dem 1. 2-er geändert werden + das ganze dann erweitert auf 4 Kanäle.

Zum Schluß wird dir dann der roller-Modus leicht fallen!

Just do it!
Have fun...
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

miggun

Passt das so für mqtt2.template?

# shelly2 using original firmware.
# NOTE: a second device will be created for the second channel
name:shelly2
filter:TYPE=MQTT2_DEVICE
par:SHELLY2;Shelly2 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
attr DEVICE setList\
  off:noArg shellies/SHELLY2/relay/0/command off
  on:noArg shellies/SHELLY2/relay/0/command on
attr DEVICE readingList shellies/DEVICE/relay/0:.* state
attr DEVICE getList shellies/DEVICE/relay/power power
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList shellies/DEVICE/relay/1:.* state
attr DEVICE_CH2 comment Channel 2 for DEVICE
attr DEVICE_CH2 setList \
  off:noArg shellies/DEVICE/relay/1/command off
  on:noArg shellies/DEVICE/relay/1/command on
deleteattr DEVICE_CH2 getList


# shelly4pro using original firmware
# NOTE: for each of the second to fourth channel, a new device will be created
name:shelly4pro
filter:TYPE=MQTT2_DEVICE
par:SHELLY4PRO;Shelly4Pro name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
attr DEVICE setList\
  off:noArg shellies/SHELLY4PRO/relay/0/command off
  on:noArg shellies/SHELLY4PRO/relay/0/command on
attr DEVICE readingList shellies/DEVICE/relay/0:.* state
attr DEVICE getList shellies/DEVICE/relay/0/power power \
  shellies/DEVICE/relay/0/energy energy
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList shellies/DEVICE/relay/1:.* state
attr DEVICE_CH2 comment Channel 2 for DEVICE
attr DEVICE_CH2 setList \
  off:noArg shellies/SHELLY4PRO/relay/1/command off
  on:noArg shellies/SHELLY4PRO/relay/1/command on
attr DEVICE getList shellies/DEVICE/relay/1/power power \
  shellies/DEVICE/relay/1/energy energy
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH3
copy DEVICE DEVICE_CH3
attr DEVICE_CH3 readingList shellies/DEVICE/relay/2:.* state
attr DEVICE_CH3 comment Channel 3 for DEVICE
attr DEVICE_CH3 setList \
  off:noArg shellies/SHELLY4PRO/relay/2/command off
  on:noArg shellies/SHELLY4PRO/relay/2/command on
attr DEVICE getList shellies/DEVICE/relay/2/power power \
  shellies/DEVICE/relay/2/energy energy
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH4
copy DEVICE DEVICE_CH4
attr DEVICE_CH4 readingList shellies/DEVICE/relay/3:.* state
attr DEVICE_CH4 comment Channel 4 for DEVICE
attr DEVICE_CH4 setList \
  off:noArg shellies/SHELLY4PRO/relay/3/command off
  on:noArg shellies/SHELLY4PRO/relay/3/command on
attr DEVICE getList shellies/DEVICE/relay/3/power power \
  shellies/DEVICE/relay/3/energy energy
Raspberry Pi 3 B+
MapleCUN
Shelly1, Shelly2, Shelly4pro, FS20

miggun

#80
So, das habe ich mal gebastelt um die Zeitschaltuhr meiner Rollladen zu ersetzen. Leider schon zu spät um es zu testen, aber die Hoffnung ist gerade groß, dass es funktioniert.

Timer um eine Stunde nach Sonnenaufgang die Rollladen zu öfnen.
Internals:
   CFGFN     
   COMMAND    set Rollladen_auf on-for-timer 60
   DEF        *{sunrise(3600,"5:00","11:00")} set Rollladen_auf on-for-timer 60
   setstate Rollladen_Status on
   NAME       ti_Rollladen_auf
   NR         226
   NTM        08:42:44
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 15:00:00
   TIMESPEC   {sunrise(3600,"5:00","11:00")}
   TRIGGERTIME 1544168564
   TRIGGERTIME_FMT 2018-12-07 08:42:44
   TYPE       at
   READINGS:
     2018-12-06 23:06:55   state           Next: 08:42:44
Attributes:

Internals:
   CFGFN     
   CID        shelly4pro_062065
   DEF        shelly4pro_062065
   DEVICETOPIC Rollladen_auf
   IODev      MQTT2_SERVER
   LASTInputDev MQTT2_SERVER
   MQTT2_SERVER_MSGCNT 4
   MQTT2_SERVER_TIME 2018-12-06 23:18:34
   MSGCNT     4
   NAME       Rollladen_auf
   NR         197
   STATE      off
   TYPE       MQTT2_DEVICE
   READINGS:
     2018-12-06 23:18:34   state           off
Attributes:
   IODev      MQTT2_SERVER
   getList    shellies/shelly4pro-062065/relay/1:.* state
   readingList shelly4pro_062065:shellies/shelly4pro-062065/relay/1:.* state
   room       MQTT2_DEVICE
   setList    off:noArg shellies/shelly4pro-062065/relay/1/command off
on:noArg shellies/shelly4pro-062065/relay/1/command on


Timer um eine Stunde vor Sonnenuntergang die Rollladen zu schließen:
Internals:
   CFGFN     
   COMMAND    set Rollladen_zu on-for-timer 60
   DEF        *{sunset(-3601,"15:00","23:59")} set Rollladen_zu on-for-timer 60
   setstate Rollladen_Status off
   NAME       ti_Rollladen_zu
   NR         260
   NTM        16:08:09
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 16:08:10
   TIMESPEC   {sunset(-3601,"15:00","23:59")}
   TRIGGERTIME 1544195289
   TRIGGERTIME_FMT 2018-12-07 16:08:09
   TYPE       at
   READINGS:
     2018-12-06 23:29:11   state           Next: 16:08:09
Attributes:

Internals:
   CFGFN     
   CID        shelly4pro_062065
   DEF        shelly4pro_062065
   DEVICETOPIC Rollladen_zu
   IODev      MQTT2_SERVER
   LASTInputDev MQTT2_SERVER
   MQTT2_SERVER_MSGCNT 4
   MQTT2_SERVER_TIME 2018-12-06 23:23:50
   MSGCNT     4
   NAME       Rollladen_zu
   NR         255
   STATE      off
   TYPE       MQTT2_DEVICE
   READINGS:
     2018-12-06 23:23:50   state           off
Attributes:
   IODev      MQTT2_SERVER
   getList    shellies/shelly4pro-062065/relay/2:.* state
   readingList shelly4pro_062065:shellies/shelly4pro-062065/relay/2:.* state
   room       MQTT2_DEVICE
   setList    off:noArg shellies/shelly4pro-062065/relay/2/command off
on:noArg shellies/shelly4pro-062065/relay/2/command on


Status Dummy:
Internals:
   CFGFN     
   DEF       
   NAME       Rollladen_Status
   NR         294
   STATE      off
   TYPE       dummy
   READINGS:
     2018-12-07 01:08:39   state           off
Attributes:
   devStateIcon on:fts_shutter_10@red off:fts_shutter_100@green
   room       00_Allgemein,01_Küche,02_Flur
Raspberry Pi 3 B+
MapleCUN
Shelly1, Shelly2, Shelly4pro, FS20

Beta-User

Zitat von: miggun am 06 Dezember 2018, 21:50:58
Passt das so für mqtt2.template?
Sieht für mich plausibel aus. Die Aufgabe an dich war auch, das in der Praxis zu testen, oder?

Wie ist deine Antwort auf die Frage, ob nach einem "set <device> attrTemplate <dein templatename>" was sinnvolles rauskommt....!

Dann wären da noch 2 weitere templates offen und eines für den 4-er "all-in-one" (s.u.).

Da du planst, den 4-er als Rolladenaktor zu nutzen:
a) WiFi ist m.E. ganz allgemein gesagt keine geeignete Technologie für sowas (mußt du selbst wissen, für mich kommt das gleich nach 433MHz-Baumarksteckdosen).
b) Mach noch ein template, mit dem der gesamte Aktor gesteuert werden kann. Für den Rollladeneinsatz brauchst du eigentlich den Aktor nur im Hintergrund, da darf ruhig "all-in-one" sein (s.u.).

Was den Rest angeht:
a) Neues Thema => neuer Thread (das mit dem at ist für den Einstieg ok, später wäre evtl. AutoShuttersControl was, das du ansehen solltest (mit ROLLO als Zwischenschicht)
b) Rolladensteuerung mit 2 Relays => schau mal nach ROLLO
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

miggun

#82
Bin gerade dabei es zu testen.
Ich vergleiche gerade den Shelly2 mit dem Tasmota.
Wäre es nicht sinnvoll, wenn man in der DropDown-Liste direkt auswählen kann, ob man Kanal 1 oder Kanal 2 einrichten möchte.

Internals:
   CFGFN     
   CID        shelly2
   DEF        shelly2
   DEVICETOPIC shelly2_test
   IODev      MQTT2_SERVER
   NAME       shelly2_test
   NR         532
   STATE      ???
   TYPE       MQTT2_DEVICE
Attributes:
   IODev      MQTT2_SERVER
   comment    Channel 1 for shelly2_test, see also shelly2_test_CH2
   getList    shellies/shelly2_test/relay/power power
   readingList shellies/shelly2_test/relay/0:.* state
   setList    off:noArg shellies/shelly2_test/relay/0/command off


Das dann auch beim Shelly4Pro, das ich direkt Kanal1, 2, 3 oder 4 auswählen kann.
Raspberry Pi 3 B+
MapleCUN
Shelly1, Shelly2, Shelly4pro, FS20

rudolfkoenig

ZitatWäre es nicht sinnvoll, wenn man in der DropDown-Liste direkt auswählen kann, ob man Kanal 1 oder Kanal 2 einrichten möchte.
Ich finde nicht, weil dann fuer Kanal 2 du ein MQTT2_DEVICE vorher manuell anlegen musst.
Es ist einfacher, Kanal 2 (oder 1) nachher zu entfernen.

miggun

#84
Ich bin ja bekanntlich noch ganz neu und habe 0 Ahnung. Aber ich bin bemüht das gut zu machen.
Trotzdem lassen sich dumme fragen nicht vermeiden.
Ich habe für den Test den Namen shelly2_test vergeben. Das funktioniert so nicht, ich muss, um den Shelly richtig zu definieren, den korrekten Gerätenamen verwenden. In meinem Fall wäre das, shellyswitch_32B268, da Minus als Zeichen nicht erlaubt ist.
Der Name wird dann ja später für readingList, getList usw. verwendet. Jetzt das Problem, dort müsste folgendes stehen.

shellies/shellyswitch-32B268/relay/

Das kann ich aber als Name nicht vergeben.
Oder mache ich ein Problem auf, wo keins ist?

Gibt es nicht die Möglichkeit in dem Template den vergebenen Namen für DEVICE zu verändern?
Die Länge vor dem Unterstrich ist immer gleich beim shelly2. Somit irgendwie nimm shellyswitch_32B268 mache daraus shellyswitch-32B268 und setze das als DEVICE.
Also alles vor und hinter dem Unterstrich unverändert lassen.


Er meckert an, das er on nicht kennt. Könnte das Problem ein fehlender Backslash sein? Würde es so funktionieren?


# shelly2 using original firmware.
# NOTE: a second device will be created for the second channel
name:shelly2
filter:TYPE=MQTT2_DEVICE
attr DEVICE setList\
  off:noArg shellies/DEVICE/relay/0/command off \
  on:noArg shellies/DEVICE/relay/0/command on
attr DEVICE readingList shellies/DEVICE/relay/0:.* state
attr DEVICE getList shellies/DEVICE/relay/power power
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList shellies/DEVICE/relay/1:.* state
attr DEVICE_CH2 comment Channel 2 for DEVICE
attr DEVICE_CH2 setList \
  off:noArg shellies/DEVICE/relay/1/command off \
  on:noArg shellies/DEVICE/relay/0/command on
attr DEVICE readingList shellies/DEVICE/relay/0:.* state
attr DEVICE getList shellies/DEVICE/relay/power power
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList shellies/DEVICE/relay/1:.* state
attr DEVICE_CH2 comment Channel 2 for DEVICE
attr DEVICE_CH2 setList \
  off:noArg shellies/DEVICE/relay/1/command off \
  on:noArg shellies/DEVICE/relay/1/command on
deleteattr DEVICE_CH2 getList
Raspberry Pi 3 B+
MapleCUN
Shelly1, Shelly2, Shelly4pro, FS20

Beta-User

...bin auch nicht der Perl-Held und mag auch nicht behaupten, dass ich bis ins letzte durchgestiegen bin, wie das im Detail funktioniert, aber versuch mal folgendes bitte:
Füge mal
par:IDENTIFIER;default preset followed by serial number of this ESP chip;{ AttrVal("DEVICE","readingList","") =~ m,shellies/.*_(.*)[/]?:, ? shellyswitch-$1 : undef }

in den template-code für den shelly2 ein (dort oben, wie z.B. in den tasmota-Beispielen) und ersetze dann im eigentlichen attr-code der setList DEVICE durch IDENTIFIER (da wo es jeweils um den Topic geht).

(Ich hoffe, das ist wenigstens nachvollziehbar erklärt). Das müßtest du dann ggf. für die anderen anpassen, die dann was anderes verwenden als den preset "shellyswitch".

Generell noch die Bitte, die Geräte erst noch nicht weiter zu konfigurieren, was die MQTT-Topicstruktur usw. angeht. Das template sollte mit den jeweiligen defaults laufen ;) .
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

Prof. Dr. Peter Henning

Nach meinen Informationen wird sich an der Topic-Struktur im Shelly 2 noch etwas ändern, wenn die neue Firmware endgültig im Release ist.

LG

pah

Beta-User

Danke für die Info.

Wann ist das zu erwarten? Wird das größere Änderungen ergeben, soweit die verschiedenen Beta-Versionen das erkennen lassen?

Aber an sich spräche doch wenig dagegen, das mit dem heutigen Stand fertig zu machen und dann nach den Änderungen eben nachzupflegen, und die derzeitigen Fassungen ggf. mit einem "_old_firmware"-Zusatz eine Zeitlang noch im template drin zu lassen...
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

rudolfkoenig

ZitatDer Name wird dann ja später für readingList, getList usw. verwendet.
Das ist aber nicht notwendig, ich wuerde stattdessen (wie Beta-User das vorgeschlagen hat) ein Parameter definieren.
Das kann man entweder vorbelegen (siehe Beispiel von Beta-User), oder wenn das nicht klappt, dann muss der Benutzer das in einem Dialog eingeben.

Apropos Beispiel:
shellyswitch-$1 in der par: Zeile wird einen Fehler verursachen: der Interpreter wird versuchen eine Funktion shellyswitch aufzurufen.
Ich wuerde nur $1 zurueckliefern, und in setList/getList shellyswitch-IDENTIFIER reinschreiben (da ist kein Perl mehr, sondern einfache Text-Ersetzung).
Statt IDENTIFIER kann man beliebige andere Namen verwenden
readingList zu aendern sollte unnoetig sein, oder ich habe was nicht verstanden.

Beta-User

@miggunHabe mal versucht, das umzusetzen, was Rudi geschrieben hat (und den Backslash ergänzt ;) ). Kannst du das mal versuchen?

# shelly2 using original firmware.
# NOTE: a second device will be created for the second channel
name:shelly2
filter:TYPE=MQTT2_DEVICE
par:CHIPID;serial number of this ESP chip;{ AttrVal("DEVICE","readingList","") =~ m,shellies/.*_(.*)[/]?:, ? $1 : undef }
attr DEVICE setList\
  off:noArg shellies/shellyswitch-CHIPID/relay/0/command off\
  on:noArg shellies/shellyswitch-CHIPID/relay/0/command on
attr DEVICE readingList shellies/shellyswitch-CHIPID/relay/0:.* state
attr DEVICE getList shellies/shellyswitch-CHIPID/relay/power power
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList shellies/shellyswitch-CHIPID/relay/1:.* state
attr DEVICE_CH2 comment Channel 2 for DEVICE
attr DEVICE_CH2 setList\
  off:noArg shellies/shellyswitch-CHIPID/relay/1/command off\
  on:noArg shellies/shellyswitch-CHIPID/relay/1/command on
deleteattr DEVICE_CH2 getList
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