[ANLEITUNG] - Sonoff T1 EU / Tasmota Rollo Steuerung in 2 Schritten

Begonnen von 87insane, 10 März 2019, 12:15:24

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: 87insane am 20 März 2019, 10:44:18
[...] Hast du aber so auch gemeint, glaube ich.
So war es gemeint gewesen, ja :) .
ZitatDie interne FHEM Steuerung geht auch - ABER es wird beim klick auf open oder close usw. in FHEM immer noch kurz auch genau das dann im state angezeigt. [...]
M.E. wird andersrum ein "Schuh" draus: pack "open", "close" und "pct" in die setStateList ;) .
Danach klemmst du den ESP mal ab und schaltest. Ergebnis sollte sein: es steht "set open" usw. im state. Das würde ich dann auch so lassen, denn dann sieht man wegen der Anzeige des Textes, dass ein Kommunikationsproblem von FHEM zum Aktor besteht.
Warum: erhält der Aktor den Befehl, schaltet er eines der Relais an und meldet das zurück. Diese Info landet dann ...? (Genau! Jetzt darfst du das Teil wieder ins Netzwerk holen ;D ).
ZitatFür die Geschichte mit den Icons von webcmd hatte ich mir geholfen indem ich ein ":" davor gemacht habe. [...]
Versuche das mal mit dem devStateStyle-Attribut (style="text-align:right").
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

87insane

Hey,

hab das Template angepasst und getestet.

- sleep klappt so nicht. Habe es auch umgestellt oder erhöht oder mit {fhem("")} usw.
- Die Icons, wie schon gesagt passen (bei Fahrt)
- Die Icons aus webcmd bekomme ich so nicht geändert. Ich glaube ich lasse einfach ":" vor dem ersten Befehl. Es klappt ja so...

Bleibt also nur noch das Script irgendwie zu stoppen und es warten zu lassen das der Schalter aus seinem Reboot kommt. Ich würde hier aber >10 Sekunden nehmen. Nicht immer sind die Schalter so schnell wieder da. Geht hier nicht sowas, was ich noch aus Batch Zeiten kenne?
Also in etwa:
:Programm
if Ping == 1 Dann mach dies und das
else
goto Programm


So bräuchte man keine Zeit, die variieren kann.

Welche Fragen sind noch offen, außer das mit dem restart -> sleep? Glaube das war dann alles oder?
Kannst mir schon mal sagen, was du gerne alles als Doku hättest. Würde das dann gern anfangen bei Zeit und direkt mit bereitstellen.

Anbei noch das laufende Template. Bis auf den Sleep Teil:
# tasmota 2ch as shutter device.
name:A_02b_tasmota_2ch_shutter
filter:TYPE=MQTT2_DEVICE
desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a>
par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef }
attr DEVICE comment SHUTTEROPENDURATION: Time for a complete shutter up. SHUTTERCLOSEDURATION: Time for a complete shutter down.
par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")}
set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1
set IO_DEV publish cmnd/DEVNAME/Backlog SetOption80 1; SetOption14 1; SetOption81 1; switchmode1 3; switchmode2 3; SaveData 1;
set IO_DEV publish cmnd/DEVNAME/Restart 1;;sleep 15;;set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20; SHUTTERCLOSEDURATION 20; SHUTTERINVERT 1; GROUPTOPIC Rollos; SaveData 1;
attr DEVICE setList \
   close:noArg cmnd/DEVNAME/SHUTTERCLOSE\
   open:noArg cmnd/DEVNAME/SHUTTEROPEN\
   half:noArg cmnd/DEVNAME/shutterposition 50\
   pct:slider,0,1,100 cmnd/DEVNAME/shutterposition1 $EVTPART1\
   stop:noArg cmnd/DEVNAME/SHUTTERSTOP\
   resetClose:noArg cmnd/DEVNAME/SHUTTERSETCLOSE\
   x_configuration cmnd/DEVNAME/$EVTPART1 $EVTPART2\
   x_invert:select,0,1 cmnd/DEVNAME/SHUTTERINVERT $EVTPART1
attr DEVICE readingList \
   tele/DEVNAME/LWT:.* LWT\
   cmnd/DEVNAME/POWER:.* POWER\
   stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   stat/DEVNAME/POWER1:.* POWER1\
   stat/DEVNAME/POWER1:on {{'state' => 'opening'}}\
   stat/DEVNAME/POWER2:.* POWER2\
   stat/DEVNAME/POWER2:on {{'state' => 'closing'}}\
   stat/DEVNAME/SHUTTER1:.* state\
   stat/DEVNAME/SHUTTER1:.* pct\
   tele/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/INFO1:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/INFO2:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/INFO3:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/LWT:.* LWT\
   cmnd/DEVNAME_fb/POWER:.* POWER\
   stat/DEVNAME_fb/RESULT:.* { json2nameValue($EVENT) }\
   stat/DEVNAME_fb/POWER1:.* POWER1\
   stat/DEVNAME_fb/POWER1:on {{'state' => 'opening'}}\
   stat/DEVNAME_fb/POWER2:.* POWER2\
   stat/DEVNAME_fb/POWER2:on {{'state' => 'opening'}}\
   stat/DEVNAME_fb/SHUTTER1:.* state\
   stat/DEVNAME_fb/SHUTTER1:.* pct\
   tele/DEVNAME_fb/RESULT:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/STATE:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/SENSOR:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/INFO1:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/INFO2:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/INFO3:.* { json2nameValue($EVENT) }\
   tele/DEVNAME_fb/UPTIME:.* { json2nameValue($EVENT) }
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red 100:fts_shutter_100 0:fts_shutter_10 9\d.*:fts_shutter_90 8\d.*:fts_shutter_80 7\d.*:fts_shutter_70 6\d.*:fts_shutter_60 5\d.*:fts_shutter_50 4\d.*:fts_shutter_40 3\d.*:fts_shutter_30 2\d.*:fts_shutter_20 1\d.*:fts_shutter_10 \b\d\b.*:fts_shutter_10 set_.*:fts_shutter_updown
attr DEVICE cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
attr DEVICE webCmd :open:close:half:stop:pct
attr DEVICE stateFormat LWT\
state\
<br>\
<a href="http://IP-Address" target="_blank">Webinterface</a>
deleteReading DEVICE .*
attr DEVICE setStateList open close
attr DEVICE model A_02b_tasmota_2ch_shutter

Beta-User

 :)
Sieht doch schon mal sehr gut aus!

Anmerkungen:
- Wenn sleep so nicht geht, können wir entweder ein "Wegwerf-at" definieren, oder müßten eine param:-Anweisung mißbrauchen. Wäre für das at, das ist zwar auch nicht schön, aber müßte funktionieren
- Die fallback-Topics würde ich weglassen- Dafür alles, was set-Befehle sind auch in state schreiben (zum Aufdecken von Kommunikationsproblemen; kann natürlich sein, dass dann der pct-slider an die falsche Stelle zurückspringt?)
- die Invertierung raus, oder?

Dann als comment die Konfigurationsbefehle etwas mehr erläutern.

Könnte auf die Schnelle in etwa so aussehen:
# tasmota 2ch as shutter device.
name:A_02b_tasmota_2ch_shutter
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).*
desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a>
par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef }
par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")}
set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1
set IO_DEV publish cmnd/DEVNAME/Backlog SetOption80 1; SetOption14 1; SetOption81 1; switchmode1 3; switchmode2 3; SaveData 1;
set IO_DEV publish cmnd/DEVNAME/Restart 1
defmod configure_DeviceattrTemplate_at at +00:00:15 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20; SHUTTERCLOSEDURATION 20; SHUTTERINVERT 1; GROUPTOPIC Rollos; SaveData 1;
attr DEVICE setList \
   close:noArg cmnd/DEVNAME/SHUTTERCLOSE\
   open:noArg cmnd/DEVNAME/SHUTTEROPEN\
   half:noArg cmnd/DEVNAME/shutterposition 50\
   pct:slider,0,1,100 cmnd/DEVNAME/shutterposition1 $EVTPART1\
   stop:noArg cmnd/DEVNAME/SHUTTERSTOP\
   resetClose:noArg cmnd/DEVNAME/SHUTTERSETCLOSE\
   x_configuration cmnd/DEVNAME/$EVTPART1 $EVTPART2
attr DEVICE readingList \
   tele/DEVNAME/LWT:.* LWT\
   cmnd/DEVNAME/POWER:.* POWER\
   stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   stat/DEVNAME/POWER1:.* POWER1\
   stat/DEVNAME/POWER1:on {{'state' => 'opening'}}\
   stat/DEVNAME/POWER2:.* POWER2\
   stat/DEVNAME/POWER2:on {{'state' => 'closing'}}\
   stat/DEVNAME/SHUTTER1:.* state\
   stat/DEVNAME/SHUTTER1:.* pct\
   tele/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red 100:fts_shutter_100 0:fts_shutter_10 9\d.*:fts_shutter_90 8\d.*:fts_shutter_80 7\d.*:fts_shutter_70 6\d.*:fts_shutter_60 5\d.*:fts_shutter_50 4\d.*:fts_shutter_40 3\d.*:fts_shutter_30 2\d.*:fts_shutter_20 1\d.*:fts_shutter_10 \b\d\b.*:fts_shutter_10 set_.*:fts_shutter_updown
attr DEVICE cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
attr DEVICE webCmd :open:close:half:stop:pct
attr DEVICE stateFormat LWT\
state\
<br>\
<a href="http://IP-Address" target="_blank">Webinterface</a>
deleteReading DEVICE .*
attr DEVICE setStateList open close half stop pct
attr DEVICE comment SHUTTEROPENDURATION: Time for a complete shutter up. SHUTTERCLOSEDURATION: Time for a complete shutter down.<br>Hier bitte weitere Hinweise aufnehmen, wie man die duration-Befehle absetzt und wie die 50%-Position kalibriert
attr DEVICE model A_02b_tasmota_2ch_shutter
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

87insane

Guten Morgen,

das at scheint auch nicht zu laufen. Im Log sehe ich nicht was schief gelaufen sein könnte.
Die FallbackTopics tun ja nicht weh und im Notfall wären sie da, weswegen ich die lassen würde. Aber auch das kann ja jeder selber entscheiden.
Die Invertierung würde ich in jedem Fall lassen. Alles ist darauf angepasst. Hinzu wäre das, wie es aktuell ist der linke Knopf zum hoch fahren und rechts runter. Das entspricht GIRA oder sonstigen Standards.

Kommentierung mache ich sauber und heute Abend / am WE. Muss schauen wie die Zeit es zulässt. An sich kann man dort zusätzlich auch die github Links einfügen.

Deine Idee, alles mit in die setStateList aufzunehmen, finde ich eher semi. Ich hatte die ganz rauß gelöscht. Aber gut. Besser mehr einfügen und die Personen können es selber löschen wenn es nicht benötigt wird als zu wenig (fallback topics / setStateList). Ich selber werde Verbindungsprobleme via Push an mich senden. Also würde ich das so nicht brauchen. Mit dem Template hat man tatsächlich unendlich viele Möglichkeiten :)

Beta-User

Zitat von: 87insane am 21 März 2019, 09:52:32
das at scheint auch nicht zu laufen. Im Log sehe ich nicht was schief gelaufen sein könnte.
Da könntest du dei Zeit mal verlängern, dann sollte das at im unsorted-Raum auftauchen und überprüfbar sein, ob es die richtigen Inhalte hat.

ZitatDie FallbackTopics tun ja nicht weh und im Notfall wären sie da, weswegen ich die lassen würde. Aber auch das kann ja jeder selber entscheiden.
Wäre das erste mal innerhalb der tasmota-Templates. Klar sind sie im Notfall dann da, aber dafür wird die template-Datei deutlich länger.
Vielleicht kann mir jemand erklären, was diese fallback-Sache für Vorteile hat...

Zitat
Die Invertierung würde ich in jedem Fall lassen.
Sorry, Mißverständnis:- Das template darf gerne insgesamt einen invertierten Stand wiedergeben, das ist ok.
- Es geht nur darum, ob es ein "set" für die _Änderung in "nicht invertiert"_ geben sollte. Und das finde ich eher suboptimal. Dann können wir lieber ein weiteres template für nicht-Invertiert erstellen/bereitstellen. Dort wären dann nur die Dinge zu ändern, die abweichen (also intern erst das invertierte template aufrufen und dann nur die abweichenden Attribute und SetOptions für nicht-Invertiert setzen (oder die interne Reihenfolge anders herum machen...)

Aber wie schreibst du so schön:
Zitat von: 87insane am 21 März 2019, 09:52:32
Mit dem Template hat man tatsächlich unendlich viele Möglichkeiten :)
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

87insane

#20
Hey,

das at klappt. Die ";" müssen nur gedoppelt sein. Ansonsten führt at immer nur den ersten Befehl aus.

ZitatDie FallbackTopics tun ja nicht weh und im Notfall wären sie da, weswegen ich die lassen würde. Aber auch das kann ja jeder selber entscheiden.
I then introduced a unique, non-configurable topic which I call fallback topic that allows me to always change the MQTT configurable topic to a new unique topic. This fallback topic is just what it is meant to be: A FALLBACK TOPIC in case of emergency.

Mir ist das Thema egal....

ZitatSorry, Mißverständnis:- Das template darf gerne insgesamt einen invertierten Stand wiedergeben, das ist ok.
- Es geht nur darum, ob es ein "set" für die _Änderung in "nicht invertiert"_ geben sollte. Und das finde ich eher suboptimal. Dann können wir lieber ein weiteres template für nicht-Invertiert erstellen/bereitstellen. Dort wären dann nur die Dinge zu ändern, die abweichen (also intern erst das invertierte template aufrufen und dann nur die abweichenden Attribute und SetOptions für nicht-Invertiert setzen (oder die interne Reihenfolge anders herum machen...)
Es ist ja alles da. Könnte man natürlich machen. Du meinst wenn man dann auf x_invert 1 klickt, wird dann set DEVICE attrTemplate WIE_AUCH_IMMER_DAS_DANN_HEIßEN_WIRD ausgeführt?
Was wäre hier dann anders rum?
- shutterinvert 0
- devStateIcon
- readingList

Ist gerade das einzige was mir da in den Kopf kommt...


Könnte so aussehen (getestet!):
...kommt gleich...

Beta-User

Wenn das at mit gedoppelten ;; funktioniert: kannst du dasselbe mit dem ursprünglichen sleep nochmal testen? Ist vermutlich derselbe Mechanismus dahinter... Ein sleep wäre m.E. hier besser, da für den user nicht sichtbar.

Emergency-Funktionen (fallback) würde ich rauslassen; ginge im Notfall ja immer noch direkt als publish am IO.

Ich würde gar keinen "x_invert" vorsehen. Wer eine andere (invertierte) Funktionsweise will, soll den tasmota gleich anders konfigurieren, also z.B. ein anderes template anwenden. Das geht aber über die allgemeine attrTemolate-Funktionalität, die immer da ist, egal, ob es da jetzt noch einen x_invert-setter gibt oder nicht. (Der ist also gut gemeint, aber eben überflüssig und führt im Zweifel nur zu Rückfragen, die nicht weiterführen...).

Wenn du Lust hast, dann auch das 2., nicht-invertierte template zu machen, kannst du z.B. mal A_01a_tasmota_basic_state_power1 ansehen. Das ruft auch zu Beginn erst mal ein anderes template auf. Die Änderungsliste ist m.E. bis auf "model" vollständig.
Wenn im Hintergrund aber ggf. noch ein timer (at oder sleep) laufen sollte, mußt du darauf achten, dass sich das nicht in die Quere kommt. Da wir vermutlich den timer brauchen, müßte entweder defmod auf dasselbe at "zielen" oder cancel mit benanntem sleep genutzt werden (steht kurz was dazu in der commandref, müßte ich auch testen, ob und wie das in einem template ginge).
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

87insane

#22
Sieht dann so (getestet) aus. Die Benamung darfst du bitte übernehmen. Will euch da nicht die Ordnung durcheinander bringen...
Schalter sind nun genauso nur die PCT ist eben anders rum. (links ist hoch / rechts ist runter)

# tasmota 2ch as shutter device.
name:A_02b_tasmota_2ch_shutter
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).*
desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a>
par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef }
par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")}
set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1
set IO_DEV publish cmnd/DEVNAME/Backlog LedState 2; SetOption80 1; SetOption14 1; SetOption81 1; switchmode1 3; switchmode2 3; SaveData 1;
set IO_DEV publish cmnd/DEVNAME/Restart 1
defmod configure_DeviceattrTemplate_at at +00:00:20 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 1;; GROUPTOPIC Rollos;; SaveData 1;;
attr DEVICE setList \
   close:noArg cmnd/DEVNAME/SHUTTERCLOSE\
   open:noArg cmnd/DEVNAME/SHUTTEROPEN\
   half:noArg cmnd/DEVNAME/shutterposition 50\
   pct:slider,0,1,100 cmnd/DEVNAME/shutterposition1 $EVTPART1\
   stop:noArg cmnd/DEVNAME/SHUTTERSTOP\
   resetClose:noArg cmnd/DEVNAME/SHUTTERSETCLOSE\
   x_configuration cmnd/DEVNAME/$EVTPART1 $EVTPART2
attr DEVICE readingList \
   tele/DEVNAME/LWT:.* LWT\
   cmnd/DEVNAME/POWER:.* POWER\
   stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   stat/DEVNAME/POWER1:.* POWER1\
   stat/DEVNAME/POWER1:on {{'state' => 'opening'}}\
   stat/DEVNAME/POWER2:.* POWER2\
   stat/DEVNAME/POWER2:on {{'state' => 'closing'}}\
   stat/DEVNAME/SHUTTER1:.* state\
   stat/DEVNAME/SHUTTER1:.* pct\
   tele/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red 100:fts_shutter_100 0:fts_shutter_10 9\d.*:fts_shutter_90 8\d.*:fts_shutter_80 7\d.*:fts_shutter_70 6\d.*:fts_shutter_60 5\d.*:fts_shutter_50 4\d.*:fts_shutter_40 3\d.*:fts_shutter_30 2\d.*:fts_shutter_20 1\d.*:fts_shutter_10 \b\d\b.*:fts_shutter_10 set_.*:fts_shutter_updown
attr DEVICE cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
attr DEVICE webCmd :open:close:half:stop:pct
attr DEVICE stateFormat LWT\
state\
<br>\
<a href="http://IP-Address" target="_blank">Webinterface</a>
deleteReading DEVICE .*
attr DEVICE setStateList open close half stop pct
attr DEVICE comment SHUTTEROPENDURATION: Time for a complete shutter up. SHUTTERCLOSEDURATION: Time for a complete shutter down.<br>Hier bitte weitere Hinweise aufnehmen, wie man die duration-Befehle absetzt und wie die 50%-Position kalibriert
attr DEVICE model A_02b_tasmota_2ch_shutter

# tasmota 2ch as shutter device.
name:A_02b_tasmota_2ch_shutter_invert0
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).*
desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a>
par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef }
par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")}
set DEVICE attrTemplate A_02b_tasmota_2ch_shutter
defmod configure_DeviceattrTemplate_at at +00:00:20 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 0;; GROUPTOPIC Rollos;; SaveData 1;;
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red 100:fts_shutter_10 0:fts_shutter_100 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 \b\d\b.*:fts_shutter_90
attr DEVICE comment Same as A_02b_tasmota_2ch_shutter but shutter pct are inverted like HM.
attr DEVICE model A_02b_tasmota_2ch_shutter_invert0



PS: Habe sleep in x Varianten getestet. Leider bekomme ich es nicht hin. Sleep ist sehr sehr zickig!

87insane

Ich war mal so frei und habe es fertig gestellt. Wenn der Name nicht passt, bitte anpassen. Habe alles was mir eingefallen ist getestet und kann mit Erfolg bestätigen -> FERTIG :)
Die Kommentare sollten auch ausreichend sein, denke ich. Über mein Englisch brauchen wir besser nicht sprechen ;)

# tasmota 2ch as shutter device.
name:A_02b_tasmota_2ch_shutter_invert_1
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).*
desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a>
par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef }
par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")}
set DEVICE attrTemplate A_01z_tasmota_set_lowercase_texts_and_state1
set IO_DEV publish cmnd/DEVNAME/Backlog LedState 2; SetOption80 1; SetOption14 1; SetOption81 1; switchmode1 3; switchmode2 3; SaveData 1;
set IO_DEV publish cmnd/DEVNAME/Restart 1
defmod configure_DeviceattrTemplate_at at +00:00:20 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 1;; GROUPTOPIC Rollos;; SaveData 1;;
attr DEVICE setList \
   close:noArg cmnd/DEVNAME/SHUTTERCLOSE\
   open:noArg cmnd/DEVNAME/SHUTTEROPEN\
   half:noArg cmnd/DEVNAME/shutterposition 50\
   pct:slider,0,1,100 cmnd/DEVNAME/shutterposition1 $EVTPART1\
   stop:noArg cmnd/DEVNAME/SHUTTERSTOP\
   resetClose:noArg cmnd/DEVNAME/SHUTTERSETCLOSE\
   x_configuration cmnd/DEVNAME/$EVTPART1 $EVTPART2
attr DEVICE readingList \
   tele/DEVNAME/LWT:.* LWT\
   cmnd/DEVNAME/POWER:.* POWER\
   stat/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   stat/DEVNAME/POWER1:.* POWER1\
   stat/DEVNAME/POWER1:on {{'state' => 'opening'}}\
   stat/DEVNAME/POWER2:.* POWER2\
   stat/DEVNAME/POWER2:on {{'state' => 'closing'}}\
   stat/DEVNAME/SHUTTER1:.* state\
   stat/DEVNAME/SHUTTER1:.* pct\
   tele/DEVNAME/RESULT:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/STATE:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/SENSOR:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/INFO.:.* { json2nameValue($EVENT) }\
   tele/DEVNAME/UPTIME:.* { json2nameValue($EVENT) }
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red 100:fts_shutter_100 0:fts_shutter_10 9\d.*:fts_shutter_90 8\d.*:fts_shutter_80 7\d.*:fts_shutter_70 6\d.*:fts_shutter_60 5\d.*:fts_shutter_50 4\d.*:fts_shutter_40 3\d.*:fts_shutter_30 2\d.*:fts_shutter_20 1\d.*:fts_shutter_10 \b\d\b.*:fts_shutter_10 set_.*:fts_shutter_updown
attr DEVICE cmdIcon open:fts_shutter_up close:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
attr DEVICE webCmd :open:close:half:stop:pct
attr DEVICE stateFormat LWT\
state\
<br>\
<a href="http://IP-Address" target="_blank">Webinterface</a>
deleteReading DEVICE .*
attr DEVICE setStateList open close half stop pct
attr DEVICE comment Two Templates are available. One act with pct 0% = open shutter\
and the second act with pct 0% = closed shutter, like HM.\
1. A_02b_tasmota_2ch_shutter_invert_1\
2. A_02b_tasmota_2ch_shutter_invert_0\
\
If you have selected your Template, please first set SHUTTEROPEN and CLOSE DURATION.\
\
If you want to set an Option directly to the Switch you can use the\
set x_configuration Option. Example: "set x_configuration SetOptionxx 1"\
\
\
https://github.com/stefanbode/Sonoff-Tasmota/wiki/Shutter-blinds-working-with-two-relays\
\
Calibrating\
Comands available: SHUTTEROPENDURATION, SHUTTERCLOSEDURATION, SHUTTERRELAY, SHUTTER50PERCENT, SHUTTERSETCLOSE, SHUTTERINVERT.\
Set the SHUTTEROPENDURATION to the time the shutter needs to open completely. Set the\
SHUTTERCLOSEDURATION at least to the time the shutter needs to close completely. If your\
shutter does not close completely or run too long on close you can define the CALIBRATION\
point of a closed shutter with SHUTTERSETCLOSE. Move the shutter to the close point and\
execute SHUTTERSETCLOSE command: the SHUTTERPOSITION will be reset to 0 (SHUTTERCLOSE).\
\
50% Calibrating\
If your 50% opening does not correlate with the real physical opening you can adjust this.\
Move manually to physical 50% and write down the result from SHUTTERPOSITION(e.g. 63). CLOSE\
completely and use command SHUTTER50PERCENT 63. Restart.
attr DEVICE model A_02b_tasmota_2ch_shutter_invert_1

# tasmota 2ch as shutter device.
name:A_02b_tasmota_2ch_shutter_invert_0
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*(tele|cmnd).*
desc:Configures a dual chanel tasmota device as shutter; needs a special firmware version to operate.<br><a href="https://forum.fhem.de/index.php/topic,98366.msg917091.html#msg917091">Forum Thread</a>
par:DEVNAME;ESP's name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,tele/([^/]*)/, ? $1 : undef }
par:IO_DEV;Currently used IO;{ AttrVal("DEVICE","IODev","")}
set DEVICE attrTemplate A_02b_tasmota_2ch_shutter_invert_1
defmod configure_DeviceattrTemplate_at at +00:00:20 set IO_DEV publish cmnd/DEVNAME/Backlog SHUTTEROPENDURATION 20;; SHUTTERCLOSEDURATION 20;; SHUTTERINVERT 0;; GROUPTOPIC Rollos;; SaveData 1;;
attr DEVICE devStateIcon opening:fts_shutter_up@red closing:fts_shutter_down@red Online:10px-kreis-gruen@green Offline:10px-kreis-rot@red 100:fts_shutter_10 0:fts_shutter_100 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 \b\d\b.*:fts_shutter_90
attr DEVICE model A_02b_tasmota_2ch_shutter_invert_0

Beta-User

So, jetzt ist es im svn :) .

Habe noch ein paar Kleinigkeiten geändert, hoffe das paßt so ;) .

(Getestet habe ich an einem nicht-invertierten, ohne allerdings irgendwas an den Wemos anzuschließen...)
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

87insane

#25
Kannst du es einmal Posten hier? Kann grade nur übers handy gucken. Würde es gerne sehen. Ist ja so als würde mein baby gerade erwachsen geworden.  ::)

Danke für deine tatkräftige Hilfe :)

Edit: hab im SVN geguckt. Danke. Konnte nicht warten. Werde seite 1 dann später anpassen.

Beta-User

Zitat von: 87insane am 23 März 2019, 12:07:57
Ist ja so als würde mein baby gerade erwachsen geworden.  ::)
Gell, nettes Gefühl, wenn man sowas hinbekommen hat ;D .
Und nochmal: DAS ist ein ziemlich schwieriges Gerät!

Wäre nur noch klasse, wenn der Mod bei Theo Gnade finden würde und in die allg. Code-Base einfließen würde, sonst besteht das große Risiko, dass es eben irgendwann nicht mehr gepflegt oder inkompatibel wird...

Zitat von: 87insane am 23 März 2019, 12:07:57
Edit: hab im SVN geguckt. Danke. Konnte nicht warten. Werde seite 1 dann später anpassen.
Da der code jetzt im svn ist, ist es eine gute Idee, den Post anzupassen und den Code ganz rauszunehmen; so muß man das bei eventuellen zukünftigen Anpassungen nicht doppelt pflegen.

Du kannst aber gerne deine Varianten weiter posten (z.B. mit dem extra "Webinterface"-Text, ich habe den link jetzt schlicht über das onlien-Symbol realisiert), aber dann bitte nur jeweils den relevanten Auszug da belassen, sonst ist das für Interessierte schwierig nachzuvollziehen, was denn jetzt _geändert_ werden muß.

Anregung noch: Schau dir die Modifikationen bei Gelegenheit in Ruhe an und versuche dabei auch, "in echt" auch mal beide Varianten zu betreiben (reichen ja zwei Wemos oä. und das Umbenennen deiner template-Variante in der mqtt2.template-File (oder extra-file)). Würde schätzen, das hilft dir beim weiteren Verständnis der Kommunikation zwischen Gerät und FHEM nochmal ein gutes Stück weiter.
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

87insane

#27
Was mache ich denn nun als nächstes? Bin jetzt quasi angefixt. Brauche Ideen :)

Schiebe nachher erst mal das aktuelle template über meinen Test Schalter. Vom code her, hat sich ja wenig geändert. Aber du hast recht. Das Verständnis aufbessern, macht Sinn.

Gesendet von meinem LG-H850 mit Tapatalk

Beta-User

Mach' langsam...

Nach der Beherzigung meiner Empfehlung kannst du ja als erstes dafür sorgen, dass der Code bei Theo Eingang findet. (Vielleicht gleich in einer optionalen multi-shutter-Variante, dann kannst du deinen Bekannten erst mal mit einer Lösung für Arme beglücken...)

Dann geh' mit deiner Liebsten mal ins nächstgelegene Theater.

Kauf zwei Bücher:
Eines für das Sofa, das andere: Perl lernen...

Dann schön diese drei Dinge gleichmäßig abwechseln, dann wird dir nicht langweilig, denn dann weitest du deinen Horizont und findest immer wieder was, was noch besser werden kann, in FHEM und anderswo 8) .
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

87insane

#29
Steht nicht drin aber der mod kann Multi shutter. Bis zu acht Stück gehen gleichzeitig. Es gibt in den tiefen eine Erklärung wie man das einstellt und wie man die 16 relays miteinander in den korrekten verbund setzt. Eigentlich sehr komplex aber habe keinen Anwendungsfall bei mir, dafür.

Schreibe den ersteller mal an. Ggf nimmt er es ja mit auf. Kümmere ich mich später eben drum.

Ps: bei dem was er für das haus hinlegt, wird es eher direkt eine vernünftige lösung. Hab mich schon darauf eingestellt alles zu verkabeln. Fand die idee mit dem Klingeldraht ganz gut. Einfach zu verlegen, günstig und zentral gesteuert. Meine sonoff geschichte ist ja auch nur, da es bei mir nicht anders geht. Also zumindest nicht ohne die Wände wieder alle auf zu reißen.


Gesendet von meinem LG-H850 mit Tapatalk