Falls jemand noch das Thema verfolgt oder auch das Problem hat, dass der manuelle Input über den Wandschalter die Ansicht in der ios Home App durcheinander bringt:
Ich konnte ein Blockly-Skript erstellen, dass dem Ganzen Abhilfe schafft. Ich schätze, dass der Code nicht so kompakt oder effizient, wie möglich ist, aber mein Wissen über's Codieren, Blockly etc. ist beschränkt. Falls jemand den Code optimieren kann, gerne!
Code:
Spoiler
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable type="timeout" id="timeout">timeout</variable>
<variable type="timeout" id="timeout2">timeout2</variable>
</variables>
<block type="create" id="QjY0ukh0=t6v|T6y.k*t" x="113" y="-463">
<field name="NAME">WUNSCHNAME_TargetPosition</field>
<next>
<block type="create" id="t;x8wz[mNFBB~hp;lT|F">
<field name="NAME">WUNSCHNAME_Position</field>
<next>
<block type="create" id="lm^!),m:Ow5?(lGDkf4u">
<field name="NAME">WUNSCHNAME_Status</field>
</block>
</next>
</block>
</next>
</block>
<block type="on_ext" id="s{)XG`[uGGic2bR?WxPf" x="113" y="12">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="K[p:_r`=T{.7#9F3WKvw">
<field name="oid">shellyplus2pm.Cover0.Status</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="controls_if" id="n0,88JV1J6V`:P%%9lV-">
<mutation elseif="2"></mutation>
<value name="IF0">
<block type="logic_compare" id="DihvAeD*E_2vO73m=N!m">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="s;vs]Rp=#eyr)EI^Qf~:">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="text" id="#M@RY67mwv0tI~`J2u/1">
<field name="TEXT">closing</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="update" id="iBQU0$Z-F4.eYf`@(R$.">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Status</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="text" id="yNOQb@t$Zg{e!5K670r7">
<field name="TEXT">closing</field>
</block>
</value>
</block>
</statement>
<value name="IF1">
<block type="logic_compare" id="s+`u?F$Ie)S*J:`q$OR`">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="aNb+;CT6@V0(m3XgS|?B">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="text" id="!{GeT.q}iBIa)c}5PNwH">
<field name="TEXT">opening</field>
</block>
</value>
</block>
</value>
<statement name="DO1">
<block type="update" id="f;F`A.s$VX950m25KyCL">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Status</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="text" id="2OrmdDVaxS@BUgXCgatP">
<field name="TEXT">opening</field>
</block>
</value>
</block>
</statement>
<value name="IF2">
<block type="logic_operation" id=",tfM4N~3ESNI%v_LS?0M" inline="false">
<field name="OP">OR</field>
<value name="A">
<block type="logic_operation" id="hbL.@^)OB~i3y_YZOZ)|" inline="false">
<field name="OP">OR</field>
<value name="A">
<block type="logic_compare" id="qq_vX?@[`?tBcaw0[MZx">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="yG{K87j$(Pyx5+JA`6Bp">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="text" id="g!e`q2NxSu6B-wQKQbMW">
<field name="TEXT">open</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="?lQzXli5+d;;k9;m|8iz">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="s.)4QOGC`+kA*ci2J)6m">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="text" id="ixN4S{]-,7T#_:LPb[Qf">
<field name="TEXT">closed</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="G1j1HNmvyaLE_WVM@YlX">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="{i3`lO%;TmqU86gz.*r%">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="text" id="R!57y#]ci`V[7$D=d|{8">
<field name="TEXT">stopped</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="DO2">
<block type="update" id="stt@TpRlAwXS#`N1LJ*F">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Status</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="text" id="S]+d5#Z#4=_.EhwEx9u0">
<field name="TEXT">stopped</field>
</block>
</value>
<next>
<block type="controls_if" id="MtEm^jd=ed_=fceVwqwc">
<value name="IF0">
<block type="logic_operation" id="f6(+sRi~bfWkJElk#!8l" inline="false">
<field name="OP">AND</field>
<value name="A">
<block type="logic_compare" id="../GN7jSy$6ZP@|7gceX">
<field name="OP">EQ</field>
<value name="A">
<block type="get_value" id="r3)~-?zN6j[gR@TozSw=">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Input0.Status</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="%=Zm;bA7lz+1U5}3za|[">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id=")kv:P{[THPe?bK4{HKfh">
<field name="OP">EQ</field>
<value name="A">
<block type="get_value" id="?9{9xsoU1$9Bjru_teGx">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Input1.Status</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="A_N8z-$D=6Az,7Qh-Z|o">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="update" id="AGXz:l]_;;atG$nJ0V4C">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Position</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="get_value" id="skz-C9?-x}ZW2%3fR`@n">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Cover0.Position</field>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
<block type="on_ext" id="c3K,~!}yI}|]veUh:pc7" x="113" y="613">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="mrB7dB.brwhIR#6Lk96H">
<field name="oid">javascript.0.WUNSCHNAME_TargetPosition</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="controls_if" id="kitN8y@ndYjEmwXj`i#[">
<value name="IF0">
<block type="logic_operation" id="En),xD:(,Z`=dgl/Ee{z" inline="false">
<field name="OP">AND</field>
<value name="A">
<block type="logic_compare" id="+gt.*]-|0UA(9WVL=WMZ">
<field name="OP">EQ</field>
<value name="A">
<block type="get_value" id="Eu=5f_C%+k$|5~Syo@ry">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Input0.Status</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="s?5#tKU)1~Ydou!K{|S=">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="=]cm~;.!66U~|v?5sYaS">
<field name="OP">EQ</field>
<value name="A">
<block type="get_value" id="_1}:kdFsq=_v6A@(|,(*">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Input1.Status</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id=".Xnfs=aqj3]1m8HH0dWg">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="control" id="rw`J`%mEy%{Ioy18{^8D">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">shellyplus2pm.Cover0.Position</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="get_value" id="x?]g~TPhJrU_[fE=H3kB">
<field name="ATTR">val</field>
<field name="OID">javascript.0.WUNSCHNAME_TargetPosition</field>
</block>
</value>
</block>
</statement>
</block>
</statement>
</block>
<block type="comment" id=".@6P|j@b^l*(*(ByLszz" x="113" y="887">
<field name="COMMENT">Schalter runter</field>
<next>
<block type="on_ext" id="CA@,@pxV}%gZ$C0:H]#(">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="wM#9{j]3d4yu6P3xH{PA">
<field name="oid">shellyplus2pm.Input0.Status</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="timeouts_cleartimeout" id="DPcxRE|okhF-s|Iu%1]s">
<field name="NAME">timeout</field>
<next>
<block type="timeouts_cleartimeout" id="sT0AApjz?DVGnu`o){J(">
<field name="NAME">timeout2</field>
<next>
<block type="controls_if" id="cf]UUYtd/sYu`J%qa4y8">
<mutation elseif="1"></mutation>
<value name="IF0">
<block type="logic_compare" id="k]z~F/fjMO9$^N3=p-IO">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="l%yLdPi0_:Jju`KL`}D}">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="!d^Ws/vTZ3$ka;:f]J?E">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="update" id="/WrN-_6H]}zG+~)s6fcb">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_TargetPosition</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="~bT{+A]3mZKZ%IbNUPT-">
<field name="NUM">0</field>
</block>
</value>
</block>
</statement>
<value name="IF1">
<block type="logic_compare" id="6Q3lXI4jBlc4QzV+}Ooq">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="$2OK2~_mzCMU0+ZMOs8v">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="}@uez},yABCyRj!9XBWl">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<statement name="DO1">
<block type="update" id="{QFpgdqm-FBR;}5(PwDT">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Status</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="text" id="UR?n[ZBl)M0$$%Ne)PeN">
<field name="TEXT">stopped</field>
</block>
</value>
<next>
<block type="timeouts_settimeout" id="KJZGivw5UHWH4*mu].ow">
<field name="NAME">timeout</field>
<field name="DELAY">2</field>
<field name="UNIT">sec</field>
<statement name="STATEMENT">
<block type="controls_if" id="CWB*V)/U-UO|Es;cLReF">
<value name="IF0">
<block type="logic_compare" id="D-_N,n|QP~5|c8J2p8{~">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="Zu1e^T}K!HV~]]tVVZ^G">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="!buJ]sLhkeZP-?G5~!QW">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="update" id="x!ZQ./Eop)~WKCbxA~Ow">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Position</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="get_value" id="V5{`d{z;6iYX0U-kW~L5">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Cover0.Position</field>
</block>
</value>
<next>
<block type="update" id="+M_Va?.A%`y5jp~Gwo{8">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_TargetPosition</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="get_value" id="R:;|g?,_?}JQ%(nJeH0A">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Cover0.Position</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
<block type="comment" id="@Y*V,;=q9)]mj7~MlLM^" x="113" y="1463">
<field name="COMMENT">Schalter hoch</field>
<next>
<block type="on_ext" id="Lh1LM/,18RU^t#fLpPx?">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="3WHn2bTT,Z8T5@=#6yoA">
<field name="oid">shellyplus2pm.Input1.Status</field>
</shadow>
</value>
<statement name="STATEMENT">
<block type="timeouts_cleartimeout" id="JTkm7UaCVyXtU/p?ny6?">
<field name="NAME">timeout</field>
<next>
<block type="timeouts_cleartimeout" id="O~h0^J4-TqUE:O4_VXM`">
<field name="NAME">timeout2</field>
<next>
<block type="controls_if" id="Q$^VlH+=+s9h2^)!$!g]">
<mutation elseif="1"></mutation>
<value name="IF0">
<block type="logic_compare" id="N[UbyOc_a:z1b!Up7HhI">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="(zv);OHG|U|JpfdA;Tuz">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="Ir3@-iI]u]3:H?O(CI{_">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="update" id="h)c6]-523VJoQ::=~N8o">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_TargetPosition</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="math_number" id="`4B]d:JgEB$`|zM2w1=4">
<field name="NUM">100</field>
</block>
</value>
</block>
</statement>
<value name="IF1">
<block type="logic_compare" id="}cpg_VlO|T2O;erv.vQ=">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="!L[IF55kgm8Fu`TN?M3G">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="Xcu!6D#f3jP.ty6Qfzd5">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<statement name="DO1">
<block type="update" id="f=uV8bk9(_OTqUY!L,^!">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Status</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="text" id="BB{c{RV%O)gH[@Ww~qqJ">
<field name="TEXT">stopped</field>
</block>
</value>
<next>
<block type="timeouts_settimeout" id="GtOJ^UkQsS1{qE_BeFW,">
<field name="NAME">timeout2</field>
<field name="DELAY">2</field>
<field name="UNIT">sec</field>
<statement name="STATEMENT">
<block type="controls_if" id="N7O)FyH)81-.qExj*(DY">
<value name="IF0">
<block type="logic_compare" id=".P,:Xfh4g${]HuIS5Dh7">
<field name="OP">EQ</field>
<value name="A">
<block type="on_source" id="tM$2_hbq+wilI=@B%6PL">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="B">
<block type="logic_boolean" id="T*.6K9*W?g,]zf6W8`V8">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="update" id="$0uw4Z}zQN$h]/Wy.%B)">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_Position</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="get_value" id="#Gp?!,FbSAZ#pa2/?5b!">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Cover0.Position</field>
</block>
</value>
<next>
<block type="update" id="u!uK?gO`Rd(Jd$!QJ5qE">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
<field name="OID">javascript.0.WUNSCHNAME_TargetPosition</field>
<field name="WITH_DELAY">FALSE</field>
<value name="VALUE">
<block type="get_value" id="i1*UpLt?u4HjW-]}6LB(">
<field name="ATTR">val</field>
<field name="OID">shellyplus2pm.Cover0.Position</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</xml>
Es ist ein wenig mühselig, den Code anzupassen. Die wichtigsten Datenpunkte sind:
Shelly > Cover0 > Position
Shelly > Cover0 > Cover Status
Shelly > Input0 > Status (unbedingt prüfen, ob Schalter hoch und Schalter runter korrespondieren)
Shelly > Input1 > Status (unbedingt prüfen, ob Schalter hoch und Schalter runter korrespondieren)
Praktisch ist es aber in Yahka, da die Datenpunkte des Skriptes nur übernommen werden müssen: