NEWS
[gelöst] Waschmaschine/Trockner fertig
-
Hallo Community, mal wieder ein Thema, welches schon h
ä
ufiger aufkam. Leider komme ich auch mit den bestehenden Beitr
ä
gen nicht weiter.
Ziel war es ein Blockly Skript zu erstellen, das mich informiert, wenn Ger
ä
te wie die Waschmaschine fertig ist. Also im Prinzip Standard nur mit einer Verz
ö
gerung f
ü
r kurze Pausen, die die Ger
ä
te
ü
blicherweise manchmal machen. Trotzdem werden w
ä
hrend des Betriebs massenhaft Nachrichten (abwechselnd WaMa wurde gestartet, WaMa ist fertig) versendet. Ich hoffe so sehr, dass jemand von euch den Fehler findet. Es w
ü
rde den WAF f
ü
r weitere Projekte dienen 

-
Hallo Community, mal wieder ein Thema, welches schon h
ä
ufiger aufkam. Leider komme ich auch mit den bestehenden Beitr
ä
gen nicht weiter.
Ziel war es ein Blockly Skript zu erstellen, das mich informiert, wenn Ger
ä
te wie die Waschmaschine fertig ist. Also im Prinzip Standard nur mit einer Verz
ö
gerung f
ü
r kurze Pausen, die die Ger
ä
te
ü
blicherweise manchmal machen. Trotzdem werden w
ä
hrend des Betriebs massenhaft Nachrichten (abwechselnd WaMa wurde gestartet, WaMa ist fertig) versendet. Ich hoffe so sehr, dass jemand von euch den Fehler findet. Es w
ü
rde den WAF f
ü
r weitere Projekte dienen 

@init5 So ist es bei mir in Betrieb.

Ich frage die Stromaufnahme der Maschine im Minutentakt ab, der Messwert als Trigger hat bei mir nur unn
ö
tig viele Ereignisse ausgel
ö
st.
Die Grenzwerte m
ü
ssen ggf. angepasst werden. Variable Z
ä
hler_L < (maximal Pausenzeit im Waschprogramm in Minuten +1)
Die Info
ü
ber das beendete Waschprogramm erfolgt bei mir
ü
ber Alexa.Den Takt erzeuge ich hiermit.

Mit solchen zentralen Takten lassen sich Scripte einfach synchronisieren.
-
@init5 So ist es bei mir in Betrieb.

Ich frage die Stromaufnahme der Maschine im Minutentakt ab, der Messwert als Trigger hat bei mir nur unn
ö
tig viele Ereignisse ausgel
ö
st.
Die Grenzwerte m
ü
ssen ggf. angepasst werden. Variable Z
ä
hler_L < (maximal Pausenzeit im Waschprogramm in Minuten +1)
Die Info
ü
ber das beendete Waschprogramm erfolgt bei mir
ü
ber Alexa.Den Takt erzeuge ich hiermit.

Mit solchen zentralen Takten lassen sich Scripte einfach synchronisieren.
@ITCrowd das blockly w
ü
rde ich gerne mal ausprobieren. W
ü
rdest du es mir zur Verf
ü
gung stellen? 

-
@ITCrowd das blockly w
ü
rde ich gerne mal ausprobieren. W
ü
rdest du es mir zur Verf
ü
gung stellen? 

@Phantomkommander ```
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="2KlqHZ;4GC+4e}]=n2">Lautstärke</variable> <variable id="AtH_kFvL]@aM;j?F;vw|">O_V_Alexa1</variable> <variable type="interval" id="Tick_1m">Tick_1m</variable> <variable id="(-92ai~xO3+X[TCGX0_">O_V_Alexa2</variable> <variable id="ROXk:)ndsMeX9csWRILz">Meldung_L</variable> <variable id=",J;nOmMBh{zSVR%,-6UX">O_S_Alexa1</variable> <variable id="|IZMxer2;YdsNXVuD=">Zähler_L</variable> <variable id="3GF+g~hD+u{;xNrDO@h6">O_S_Alexa2</variable> </variables> <block type="comment" id="C1TS:F;JeN4f-~ef%/#Y" x="13" y="13"> <field name="COMMENT">Tick_1m</field> <next> <block type="timeouts_setinterval" id="vZy@)c%*@9qOL0h%@;,G"> <field name="NAME">Tick_1m</field> <field name="INTERVAL">1</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="toggle" id="(_qzVDP.wG-u2b)9D1ow"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.DP_Allgemein.Tick_1m</field> <field name="WITH_DELAY">FALSE</field> </block> </statement> </block> </next> </block> <block type="variables_set" id="JmwzY/SJq@)TukF#p]uZ" x="13" y="138"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> <value name="VALUE"> <block type="math_number" id="{1N!?ISTYf)kf9k|aUh"> <field name="NUM">35</field> </block> </value> <next> <block type="variables_set" id="BOg;eMsB7w7E$kWWM?nV"> <field name="VAR" id="AtH_kFvL]@aM;j?F;vw|">O_V_Alexa1</field> <value name="VALUE"> <block type="field_oid" id="F](b^V6/TP]hFo17G5?^"> <field name="oid">alexa2.0.Echo-Devices.G090P308915205CX.Commands.speak-volume</field> </block> </value> <next> <block type="variables_set" id="sPX*VP9@O51lS69WoD"> <field name="VAR" id="(-92ai~xO3+X[TCGX0_">O_V_Alexa2</field> <value name="VALUE"> <block type="field_oid" id="Ha#I4)#iWQ#RESgPkwSI"> <field name="oid">alexa2.0.Echo-Devices.G090U509848603VC.Commands.speak-volume</field> </block> </value> <next> <block type="variables_set" id="S;|g(q.As|bdJ01N@%P"> <field name="VAR" id=",J;nOmMBh{zSVR%,-6UX">O_S_Alexa1</field> <value name="VALUE"> <block type="field_oid" id="zv:4McKr3:}uoTr9Dt?t"> <field name="oid">alexa2.0.Echo-Devices.G090P308915205CX.Commands.speak</field> </block> </value> <next> <block type="variables_set" id="T9p1^6~9[UiqA$baMmZ"> <field name="VAR" id="3GF+g~hD+u{;xNrDO@h6">O_S_Alexa2</field> <value name="VALUE"> <block type="field_oid" id="HsBE;#}tBtrtn%wk#!F"> <field name="oid">alexa2.0.Echo-Devices.G090U509848603VC.Commands.speak</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="schedule" id="FNPHMI4k%oWmRd+~B,:l" x="13" y="313"> <field name="SCHEDULE">0 9 * * </field> <statement name="STATEMENT"> <block type="variables_set" id="BMev:L38.d-nq%^4~CQ?"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> <value name="VALUE"> <block type="math_number" id=",eT4uxBCoE7a01h=~BC"> <field name="NUM">35</field> </block> </value> </block> </statement> <next> <block type="schedule" id=":;azAAnVS}-9%Qs@dK"> <field name="SCHEDULE">0 21 * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="w$Y.,29T4cUP;OfG-?3"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> <value name="VALUE"> <block type="math_number" id="ff/sOazFBuf9Y#CI)?(f"> <field name="NUM">30</field> </block> </value> </block> </statement> </block> </next> </block> <block type="on_ext" id="oA36h6vbN8|i1PnKU{P" x="13" y="538"> <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="F}{o)*z$;u(kmrr=fdl+"> <field name="oid">0_userdata.0.DP_Allgemein.Tick_1m</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="3PE2ma]/f_03(um[t~Eu"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="k3{j9Umw?iy#?LIxJ[/J"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="?I;.nBHX@-,)[[Qx#FTR"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_DBB6B4.ENERGY_Current</field> </block> </value> <value name="B"> <block type="math_number" id="f,M)V4Wd_1F3TS7|A84F"> <field name="NUM">0.5</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="_sm~y.(OrH-5?GMx!Iv"> <field name="VAR" id="ROXk:)ndsMeX9csWRILz">Meldung_L</field> <value name="VALUE"> <block type="logic_boolean" id="9!he:ZmJOCmxdWM/J?F"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="=FIPC?2F0?PMy(WlnbuF"> <field name="VAR" id="|IZMx*er2;YdsNXVuD=">Zähler_L</field> <value name="VALUE"> <block type="math_number" id="G|foxL/Un3=}lxJyVfqD"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="n2}7jR7LDu4,mY]Ibc." inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="{c|47|voMaD,plPNw@N0"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="R]{Q+8vLT(d)$?bhwvDR"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_DBB6B4.ENERGY_Current</field> </block> </value> <value name="B"> <block type="math_number" id="k.GQOs{83K+fIvu:2k_K"> <field name="NUM">0.1</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="ttfcY$oxpJx^m(%VHct}"> <field name="VAR" id="ROXk:)ndsMeX9csWRILz">Meldung_L</field> </block> </value> </block> </value> <statement name="DO1"> <block type="controls_if" id="N[taU#Tnkyf6:VIUO09x"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="RxRzmEK6Q$^=i;kFW0n0"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="1]@T]Y.{{h?1OX5Te1XI"> <field name="VAR" id="|IZMxer2;YdsNXVuD=">Zähler_L</field> </block> </value> <value name="B"> <block type="math_number" id="$8SYvFCwE-(0ybO/hULD"> <field name="NUM">5</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="EM$p37vj5Q{{C]jsWs/9"> <field name="VAR" id="|IZMx*er2;YdsNXVuD=">Zähler_L</field> <value name="DELTA"> <shadow type="math_number" id="azoK3iowe][Qlq+FhH~w"> <field name="NUM">1</field> </shadow> </value> </block> </statement> <statement name="ELSE"> <block type="debug" id="T=jI+0y-REES}/gXetd"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="IUws6Mur{1Nm{lTvk{f."> <field name="TEXT">### Waschmaschine links fertig.</field> </shadow> </value> <next> <block type="control" id="vA1CGC:$c/le=FU!wf)7"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.DP_Allgemein.DP_StatusListe</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="i!Z5qx:R6Pa+W5gyO|+"> <field name="TEXT">= Waschmaschine links fertig.</field> </block> </value> <next> <block type="control_ex" id="{oLr6R[Q]#fqHF_-EE_J" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="z+28]gjEW4z!S^9wvBO"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="wlLlWszvDF3qCGsn9EN"> <field name="VAR" id="AtH_kFvL]@aM;j?F;vw|">O_V_Alexa1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="qP7si6f*A{[nxyj|R}-d"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="4g(r/}q$2ipQg?X+FfA*"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="(i,_PgIW==|IdJ/.HdEq"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="EqVK@S4zs/^LwnP1X5Kt" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="h@$Pq[qjb#1%)jt^]oFp"> <field name="VAR" id="(-92ai~xO*3+X[TCGX0_">O_V_Alexa2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="L1K-VBSA{nk~_Lu~]xYr"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="y6WtA#!XOhre%0Vt9d.u"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="C5miROO@/(LT=f^ZYqLh" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="0ZS(Th(0i#Wa9Eif]4Ho"> <field name="VAR" id=",J;nOmMBh{zSVR%,-6UX">O_S_Alexa1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="jN=nu2H1c#J}Zw[xh~eG"> <field name="BOOL">TRUE</field> </shadow> <block type="text" id="V$Zd/$}Q18Jy}faaz{+O"> <field name="TEXT">Das Waschprogramm der linken Waschmaschine wurde beendet.</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="7PUi_Z|Z=dS_ej]y#*#"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="SW90#+3@Raj7vSb(+KHN" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="JiHpn96#vmfbXUAZ#;pf"> <field name="VAR" id="3GF+g~hD+u{;xNrDO@h6">O_S_Alexa2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="text" id="FU)nu(WD6a{6Zocl8Hs"> <field name="TEXT">Das Waschprogramm der linken Waschmaschine wurde beendet.</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id=":,L[FXsr=M]I!yBpOF#="> <field name="NUM">0</field> </shadow> </value> <next> <block type="variables_set" id="G=Kf3z3NKQBY7^x83$v9"> <field name="VAR" id="ROXk:)ndsMeX9csWRILz">Meldung_L</field> <value name="VALUE"> <block type="logic_boolean" id="2D|_djAMg6)-9Y+%u^E0"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id=";@t{ux@#cl+IWv^:#:LD"> <field name="VAR" id="|IZMxer2;YdsN`XVuD=">Zähler_L</field> <value name="VALUE"> <block type="math_number" id="%Q!-JYQ=3K;FQ[tn3tWl"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> </xml> [/s] -
@Phantomkommander ```
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="2KlqHZ;4GC+4e}]=n2">Lautstärke</variable> <variable id="AtH_kFvL]@aM;j?F;vw|">O_V_Alexa1</variable> <variable type="interval" id="Tick_1m">Tick_1m</variable> <variable id="(-92ai~xO3+X[TCGX0_">O_V_Alexa2</variable> <variable id="ROXk:)ndsMeX9csWRILz">Meldung_L</variable> <variable id=",J;nOmMBh{zSVR%,-6UX">O_S_Alexa1</variable> <variable id="|IZMxer2;YdsNXVuD=">Zähler_L</variable> <variable id="3GF+g~hD+u{;xNrDO@h6">O_S_Alexa2</variable> </variables> <block type="comment" id="C1TS:F;JeN4f-~ef%/#Y" x="13" y="13"> <field name="COMMENT">Tick_1m</field> <next> <block type="timeouts_setinterval" id="vZy@)c%*@9qOL0h%@;,G"> <field name="NAME">Tick_1m</field> <field name="INTERVAL">1</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="toggle" id="(_qzVDP.wG-u2b)9D1ow"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.DP_Allgemein.Tick_1m</field> <field name="WITH_DELAY">FALSE</field> </block> </statement> </block> </next> </block> <block type="variables_set" id="JmwzY/SJq@)TukF#p]uZ" x="13" y="138"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> <value name="VALUE"> <block type="math_number" id="{1N!?ISTYf)kf9k|aUh"> <field name="NUM">35</field> </block> </value> <next> <block type="variables_set" id="BOg;eMsB7w7E$kWWM?nV"> <field name="VAR" id="AtH_kFvL]@aM;j?F;vw|">O_V_Alexa1</field> <value name="VALUE"> <block type="field_oid" id="F](b^V6/TP]hFo17G5?^"> <field name="oid">alexa2.0.Echo-Devices.G090P308915205CX.Commands.speak-volume</field> </block> </value> <next> <block type="variables_set" id="sPX*VP9@O51lS69WoD"> <field name="VAR" id="(-92ai~xO3+X[TCGX0_">O_V_Alexa2</field> <value name="VALUE"> <block type="field_oid" id="Ha#I4)#iWQ#RESgPkwSI"> <field name="oid">alexa2.0.Echo-Devices.G090U509848603VC.Commands.speak-volume</field> </block> </value> <next> <block type="variables_set" id="S;|g(q.As|bdJ01N@%P"> <field name="VAR" id=",J;nOmMBh{zSVR%,-6UX">O_S_Alexa1</field> <value name="VALUE"> <block type="field_oid" id="zv:4McKr3:}uoTr9Dt?t"> <field name="oid">alexa2.0.Echo-Devices.G090P308915205CX.Commands.speak</field> </block> </value> <next> <block type="variables_set" id="T9p1^6~9[UiqA$baMmZ"> <field name="VAR" id="3GF+g~hD+u{;xNrDO@h6">O_S_Alexa2</field> <value name="VALUE"> <block type="field_oid" id="HsBE;#}tBtrtn%wk#!F"> <field name="oid">alexa2.0.Echo-Devices.G090U509848603VC.Commands.speak</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="schedule" id="FNPHMI4k%oWmRd+~B,:l" x="13" y="313"> <field name="SCHEDULE">0 9 * * </field> <statement name="STATEMENT"> <block type="variables_set" id="BMev:L38.d-nq%^4~CQ?"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> <value name="VALUE"> <block type="math_number" id=",eT4uxBCoE7a01h=~BC"> <field name="NUM">35</field> </block> </value> </block> </statement> <next> <block type="schedule" id=":;azAAnVS}-9%Qs@dK"> <field name="SCHEDULE">0 21 * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="w$Y.,29T4cUP;OfG-?3"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> <value name="VALUE"> <block type="math_number" id="ff/sOazFBuf9Y#CI)?(f"> <field name="NUM">30</field> </block> </value> </block> </statement> </block> </next> </block> <block type="on_ext" id="oA36h6vbN8|i1PnKU{P" x="13" y="538"> <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="F}{o)*z$;u(kmrr=fdl+"> <field name="oid">0_userdata.0.DP_Allgemein.Tick_1m</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="3PE2ma]/f_03(um[t~Eu"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="k3{j9Umw?iy#?LIxJ[/J"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="?I;.nBHX@-,)[[Qx#FTR"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_DBB6B4.ENERGY_Current</field> </block> </value> <value name="B"> <block type="math_number" id="f,M)V4Wd_1F3TS7|A84F"> <field name="NUM">0.5</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="_sm~y.(OrH-5?GMx!Iv"> <field name="VAR" id="ROXk:)ndsMeX9csWRILz">Meldung_L</field> <value name="VALUE"> <block type="logic_boolean" id="9!he:ZmJOCmxdWM/J?F"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="variables_set" id="=FIPC?2F0?PMy(WlnbuF"> <field name="VAR" id="|IZMx*er2;YdsNXVuD=">Zähler_L</field> <value name="VALUE"> <block type="math_number" id="G|foxL/Un3=}lxJyVfqD"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="n2}7jR7LDu4,mY]Ibc." inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="{c|47|voMaD,plPNw@N0"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="R]{Q+8vLT(d)$?bhwvDR"> <field name="ATTR">val</field> <field name="OID">sonoff.0.DVES_DBB6B4.ENERGY_Current</field> </block> </value> <value name="B"> <block type="math_number" id="k.GQOs{83K+fIvu:2k_K"> <field name="NUM">0.1</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="ttfcY$oxpJx^m(%VHct}"> <field name="VAR" id="ROXk:)ndsMeX9csWRILz">Meldung_L</field> </block> </value> </block> </value> <statement name="DO1"> <block type="controls_if" id="N[taU#Tnkyf6:VIUO09x"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="RxRzmEK6Q$^=i;kFW0n0"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="1]@T]Y.{{h?1OX5Te1XI"> <field name="VAR" id="|IZMxer2;YdsNXVuD=">Zähler_L</field> </block> </value> <value name="B"> <block type="math_number" id="$8SYvFCwE-(0ybO/hULD"> <field name="NUM">5</field> </block> </value> </block> </value> <statement name="DO0"> <block type="math_change" id="EM$p37vj5Q{{C]jsWs/9"> <field name="VAR" id="|IZMx*er2;YdsNXVuD=">Zähler_L</field> <value name="DELTA"> <shadow type="math_number" id="azoK3iowe][Qlq+FhH~w"> <field name="NUM">1</field> </shadow> </value> </block> </statement> <statement name="ELSE"> <block type="debug" id="T=jI+0y-REES}/gXetd"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="IUws6Mur{1Nm{lTvk{f."> <field name="TEXT">### Waschmaschine links fertig.</field> </shadow> </value> <next> <block type="control" id="vA1CGC:$c/le=FU!wf)7"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.DP_Allgemein.DP_StatusListe</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="i!Z5qx:R6Pa+W5gyO|+"> <field name="TEXT">= Waschmaschine links fertig.</field> </block> </value> <next> <block type="control_ex" id="{oLr6R[Q]#fqHF_-EE_J" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="z+28]gjEW4z!S^9wvBO"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="wlLlWszvDF3qCGsn9EN"> <field name="VAR" id="AtH_kFvL]@aM;j?F;vw|">O_V_Alexa1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="qP7si6f*A{[nxyj|R}-d"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="4g(r/}q$2ipQg?X+FfA*"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="(i,_PgIW==|IdJ/.HdEq"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="EqVK@S4zs/^LwnP1X5Kt" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="h@$Pq[qjb#1%)jt^]oFp"> <field name="VAR" id="(-92ai~xO*3+X[TCGX0_">O_V_Alexa2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="L1K-VBSA{nk~_Lu~]xYr"> <field name="VAR" id="2KlqHZ;4GC+4e}]=n2">Lautstärke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="y6WtA#!XOhre%0Vt9d.u"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="C5miROO@/(LT=f^ZYqLh" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="0ZS(Th(0i#Wa9Eif]4Ho"> <field name="VAR" id=",J;nOmMBh{zSVR%,-6UX">O_S_Alexa1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="jN=nu2H1c#J}Zw[xh~eG"> <field name="BOOL">TRUE</field> </shadow> <block type="text" id="V$Zd/$}Q18Jy}faaz{+O"> <field name="TEXT">Das Waschprogramm der linken Waschmaschine wurde beendet.</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="7PUi_Z|Z=dS_ej]y#*#"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="SW90#+3@Raj7vSb(+KHN" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="JiHpn96#vmfbXUAZ#;pf"> <field name="VAR" id="3GF+g~hD+u{;xNrDO@h6">O_S_Alexa2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="text" id="FU)nu(WD6a{6Zocl8Hs"> <field name="TEXT">Das Waschprogramm der linken Waschmaschine wurde beendet.</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id=":,L[FXsr=M]I!yBpOF#="> <field name="NUM">0</field> </shadow> </value> <next> <block type="variables_set" id="G=Kf3z3NKQBY7^x83$v9"> <field name="VAR" id="ROXk:)ndsMeX9csWRILz">Meldung_L</field> <value name="VALUE"> <block type="logic_boolean" id="2D|_djAMg6)-9Y+%u^E0"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id=";@t{ux@#cl+IWv^:#:LD"> <field name="VAR" id="|IZMxer2;YdsN`XVuD=">Zähler_L</field> <value name="VALUE"> <block type="math_number" id="%Q!-JYQ=3K;FQ[tn3tWl"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> </xml> [/s] -
Hallo Community, mal wieder ein Thema, welches schon h
ä
ufiger aufkam. Leider komme ich auch mit den bestehenden Beitr
ä
gen nicht weiter.
Ziel war es ein Blockly Skript zu erstellen, das mich informiert, wenn Ger
ä
te wie die Waschmaschine fertig ist. Also im Prinzip Standard nur mit einer Verz
ö
gerung f
ü
r kurze Pausen, die die Ger
ä
te
ü
blicherweise manchmal machen. Trotzdem werden w
ä
hrend des Betriebs massenhaft Nachrichten (abwechselnd WaMa wurde gestartet, WaMa ist fertig) versendet. Ich hoffe so sehr, dass jemand von euch den Fehler findet. Es w
ü
rde den WAF f
ü
r weitere Projekte dienen 

@init5 sagte in Waschmaschine/Trockner fertig:
Ich hoffe so sehr, dass jemand von euch den Fehler findet. Es w
ü
rde den WAF f
ü
r weitere Projekte dienenDen Fehler.. so einfach ist das nicht. Fangen wir mal vorne an:
- Du Triggerst auf "wurde aktualisiert", sprich das Skript springt auch dann an wenn sich die Leistungsaufnahme nicht
ä
ndert - Du nutzt f
ü
r "WaMa_running" einen Datenpunkt. Da w
ä
re eine Variable sinnvoller. - Du setzt den Z
ä
hler nur bei jedem Skriptstart auf 0. - Jede Sekunde den Wert Abfragen ist Unsinn. Insbesondere da der Wert von dem Skript bei jedem Trigger, sprich jeder Aktualisierung des Stromwertes bereits 3x abgefragt wird (neben 3x abfrage auf den Datenpunkt "WaMa_running"
Das Thema synchronisieren mit einem "heartbeat" (wie @ITCrowd es nutzt) sollte zwar funktionieren, ist aber eigentlich unn
ö
tig. Insbesondere erzeugt es (wenn es viele Skripte synchronisiert) regelm
ä
ssige Spikes weil alle Skripte gleichzeitig losrennen) Notwendig ist nur ein sauberes "entprellen" des Messwertes. Zu dem Thema gibt es einige Beispiele im Forum, trotzdem aber noch einmal hier als "pseudocode" zum nachbauen.Mit der Folgenden Logik sollte es gehen:
- Eine Variable f
ü
r "WaMa running", bei Skript start auf falsch setzen - Ein Trigger auf "power", triggern auf "wurde ge
ä
ndert" (NICHT wurde aktualisiert) - Im Trigger als erstes die Abfrage falls Wert > 100 (Hinweis zum "wert" Baustein siehe Bild - der Baustein in dem Objekt ID steht l
ä
sst sich auf Wert umstellen - er beinhaltet immer den Wert des Objektes welchen den Trigger ausgel
ö
st hat.
- im Falls-Zweig: falls nicht "WaMa running" -> WaMa running auf wahr setzen, Telegramm Nachricht senden.
- sonst Falls "Wert" < 5 und "letzter Wert" >= 5 ("letzter Wert" ist der gleiche Baustein wie "Wert", der kann auch auf den Wert des Objektes direkt bevor der Trigger aktiviert wurde gesetzt werden) - Dadurch wird dieser Zweig nur angesprochen wenn der Wert von >- 5 auf kleiner 5 wechselt
- timeout 60 sekunden - im Timeout: falls "wert von Objekt ID Power" (Hier wirklich den Datenpunktwert NEU holen, sonst wird das nichts) -> Nachricht an Telegramm, WaMa Running = falsch setzen.
- im sonst Zweig (von dem oben angegebenen "sonst Falls" : Timeout l
ö
schen.
Noch ein Nachtrag zum Thema "variable oder State" f
ü
r "WaMa running". Eine Variable macht mehr sinn f
ü
r den Einsatzzweck, sofern du diese nicht zus
ä
tzlich irgendwo nutzen willst (Anzeige das die WaMa l
ä
uft, etc.). Sollte also ein Datenpunkt genutzt werden, dann macht es sinn als ERSTES im Trigger den Datenpunkt zu lesen und in eine lokale Variable zu
ü
bernehmen. Diese kannst du dann im Trigger mehrfach abfragen ohne jedesmal in den Objektbaum zu schauen.A.
p.s. ich geb das lieber als Pseudocode raus - selber bauen und nachvollziehen ist besser als kopieren und hoffen es passt. - Du Triggerst auf "wurde aktualisiert", sprich das Skript springt auch dann an wenn sich die Leistungsaufnahme nicht
-
@init5 sagte in Waschmaschine/Trockner fertig:
Ich hoffe so sehr, dass jemand von euch den Fehler findet. Es w
ü
rde den WAF f
ü
r weitere Projekte dienenDen Fehler.. so einfach ist das nicht. Fangen wir mal vorne an:
- Du Triggerst auf "wurde aktualisiert", sprich das Skript springt auch dann an wenn sich die Leistungsaufnahme nicht
ä
ndert - Du nutzt f
ü
r "WaMa_running" einen Datenpunkt. Da w
ä
re eine Variable sinnvoller. - Du setzt den Z
ä
hler nur bei jedem Skriptstart auf 0. - Jede Sekunde den Wert Abfragen ist Unsinn. Insbesondere da der Wert von dem Skript bei jedem Trigger, sprich jeder Aktualisierung des Stromwertes bereits 3x abgefragt wird (neben 3x abfrage auf den Datenpunkt "WaMa_running"
Das Thema synchronisieren mit einem "heartbeat" (wie @ITCrowd es nutzt) sollte zwar funktionieren, ist aber eigentlich unn
ö
tig. Insbesondere erzeugt es (wenn es viele Skripte synchronisiert) regelm
ä
ssige Spikes weil alle Skripte gleichzeitig losrennen) Notwendig ist nur ein sauberes "entprellen" des Messwertes. Zu dem Thema gibt es einige Beispiele im Forum, trotzdem aber noch einmal hier als "pseudocode" zum nachbauen.Mit der Folgenden Logik sollte es gehen:
- Eine Variable f
ü
r "WaMa running", bei Skript start auf falsch setzen - Ein Trigger auf "power", triggern auf "wurde ge
ä
ndert" (NICHT wurde aktualisiert) - Im Trigger als erstes die Abfrage falls Wert > 100 (Hinweis zum "wert" Baustein siehe Bild - der Baustein in dem Objekt ID steht l
ä
sst sich auf Wert umstellen - er beinhaltet immer den Wert des Objektes welchen den Trigger ausgel
ö
st hat.
- im Falls-Zweig: falls nicht "WaMa running" -> WaMa running auf wahr setzen, Telegramm Nachricht senden.
- sonst Falls "Wert" < 5 und "letzter Wert" >= 5 ("letzter Wert" ist der gleiche Baustein wie "Wert", der kann auch auf den Wert des Objektes direkt bevor der Trigger aktiviert wurde gesetzt werden) - Dadurch wird dieser Zweig nur angesprochen wenn der Wert von >- 5 auf kleiner 5 wechselt
- timeout 60 sekunden - im Timeout: falls "wert von Objekt ID Power" (Hier wirklich den Datenpunktwert NEU holen, sonst wird das nichts) -> Nachricht an Telegramm, WaMa Running = falsch setzen.
- im sonst Zweig (von dem oben angegebenen "sonst Falls" : Timeout l
ö
schen.
Noch ein Nachtrag zum Thema "variable oder State" f
ü
r "WaMa running". Eine Variable macht mehr sinn f
ü
r den Einsatzzweck, sofern du diese nicht zus
ä
tzlich irgendwo nutzen willst (Anzeige das die WaMa l
ä
uft, etc.). Sollte also ein Datenpunkt genutzt werden, dann macht es sinn als ERSTES im Trigger den Datenpunkt zu lesen und in eine lokale Variable zu
ü
bernehmen. Diese kannst du dann im Trigger mehrfach abfragen ohne jedesmal in den Objektbaum zu schauen.A.
p.s. ich geb das lieber als Pseudocode raus - selber bauen und nachvollziehen ist besser als kopieren und hoffen es passt.@Asgothian Vielen Dank f
ü
r das Feedback. Ich brauchte ein bisschen um zu sehen wie weit ich damit komme.
Ich ben
ö
tige einen Datenpunkt f
ü
r die Weiterverarbeitung. Dieser wird zum einen in VIS angezeigt und zum Anderen in History geloggt.
Ich check es leider nicht ganz, bzw. nur die ersten Punkte. Im unteren Teil steige ich aus.- Eine Variable f
ü
r "WaMa running", bei Skript start auf falsch setzen - Ein Trigger auf "power", triggern auf "wurde ge
ä
ndert" (NICHT wurde aktualisiert) - Im Trigger als erstes die Abfrage falls Wert > 100 (Hinweis zum "wert" Baustein siehe Bild - der Baustein in dem Objekt ID steht l
ä
sst sich auf Wert umstellen - er beinhaltet immer den Wert des Objektes welchen den Trigger ausgel
ö
st hat. - im Falls-Zweig: falls nicht "WaMa running" -> WaMa running auf wahr setzen, Telegramm Nachricht senden.
- sonst Falls "Wert" < 5 und "letzter Wert" >= 5 ("letzter Wert" ist der gleiche Baustein wie "Wert", der kann auch auf den Wert des Objektes direkt bevor der Trigger aktiviert wurde gesetzt werden) - Dadurch wird dieser Zweig nur angesprochen wenn der Wert von >- 5 auf kleiner 5 wechselt
- timeout 60 sekunden - im Timeout: falls "wert von Objekt ID Power" (Hier wirklich den Datenpunktwert NEU holen, sonst wird das nichts) -> Nachricht an Telegramm, WaMa Running = falsch setzen.
- im sonst Zweig (von dem oben angegebenen "sonst Falls" : Timeout l
ö
schen.
Das ist der Stand, den ich verstanden habe


Kommt das etwa hin?
Der Tipp mit dem Objekt ID Block, der sich auf das Objekt im Trigger bezieht ist echt hilfreich!
- Du Triggerst auf "wurde aktualisiert", sprich das Skript springt auch dann an wenn sich die Leistungsaufnahme nicht
-
Ich bin am Ende bei dieser Keep-it-simple Variante in Verbindung mit einer Fritz DECT Steckdose gelandet.
Vielleicht funktioniert es ja auch bei Dir?!
Unsere Waschmaschine verbraucht am Ende weniger als 5 Watt f
ü
r den Knitterschutz und wenn dazwischen unter 1 Watt. Ggf. musst Du das f
ü
r Deine Waschmaschine anpassen... -
@Asgothian Vielen Dank f
ü
r das Feedback. Ich brauchte ein bisschen um zu sehen wie weit ich damit komme.
Ich ben
ö
tige einen Datenpunkt f
ü
r die Weiterverarbeitung. Dieser wird zum einen in VIS angezeigt und zum Anderen in History geloggt.
Ich check es leider nicht ganz, bzw. nur die ersten Punkte. Im unteren Teil steige ich aus.- Eine Variable f
ü
r "WaMa running", bei Skript start auf falsch setzen - Ein Trigger auf "power", triggern auf "wurde ge
ä
ndert" (NICHT wurde aktualisiert) - Im Trigger als erstes die Abfrage falls Wert > 100 (Hinweis zum "wert" Baustein siehe Bild - der Baustein in dem Objekt ID steht l
ä
sst sich auf Wert umstellen - er beinhaltet immer den Wert des Objektes welchen den Trigger ausgel
ö
st hat. - im Falls-Zweig: falls nicht "WaMa running" -> WaMa running auf wahr setzen, Telegramm Nachricht senden.
- sonst Falls "Wert" < 5 und "letzter Wert" >= 5 ("letzter Wert" ist der gleiche Baustein wie "Wert", der kann auch auf den Wert des Objektes direkt bevor der Trigger aktiviert wurde gesetzt werden) - Dadurch wird dieser Zweig nur angesprochen wenn der Wert von >- 5 auf kleiner 5 wechselt
- timeout 60 sekunden - im Timeout: falls "wert von Objekt ID Power" (Hier wirklich den Datenpunktwert NEU holen, sonst wird das nichts) -> Nachricht an Telegramm, WaMa Running = falsch setzen.
- im sonst Zweig (von dem oben angegebenen "sonst Falls" : Timeout l
ö
schen.
Das ist der Stand, den ich verstanden habe


Kommt das etwa hin?
Der Tipp mit dem Objekt ID Block, der sich auf das Objekt im Trigger bezieht ist echt hilfreich!
- Eine Variable f
-
Ich bin am Ende bei dieser Keep-it-simple Variante in Verbindung mit einer Fritz DECT Steckdose gelandet.
Vielleicht funktioniert es ja auch bei Dir?!
Unsere Waschmaschine verbraucht am Ende weniger als 5 Watt f
ü
r den Knitterschutz und wenn dazwischen unter 1 Watt. Ggf. musst Du das f
ü
r Deine Waschmaschine anpassen...@w00dst0ck Bei der Variante w
ü
rde ich entweder st
ä
ndig Meldungen bekommen, wenn die WaMa eine Pause macht, oder aber ich w
ü
rde gar keine Meldung bekommen, weil die WaMa auch im Standby (wenn sie fertig ist)
ü
ber 2W braucht.@Asgothian Danke, ich habe es jetzt entsprechende angepasst. Der n
ä
chste Waschgang wird zeigen, ob es jetzt funktioniert. Was mir noch etwas komisch erscheint ist dieses "falls nicht WaMa_running". Ich gehe mal davon aus, dass das "falls WaMa_running nicht true" bedeutet, aber die Notation ist wie gesagt komisch. -
@w00dst0ck Bei der Variante w
ü
rde ich entweder st
ä
ndig Meldungen bekommen, wenn die WaMa eine Pause macht, oder aber ich w
ü
rde gar keine Meldung bekommen, weil die WaMa auch im Standby (wenn sie fertig ist)
ü
ber 2W braucht.@Asgothian Danke, ich habe es jetzt entsprechende angepasst. Der n
ä
chste Waschgang wird zeigen, ob es jetzt funktioniert. Was mir noch etwas komisch erscheint ist dieses "falls nicht WaMa_running". Ich gehe mal davon aus, dass das "falls WaMa_running nicht true" bedeutet, aber die Notation ist wie gesagt komisch.@init5 sagte in Waschmaschine/Trockner fertig:
Was mir noch etwas komisch erscheint ist dieses "falls nicht WaMa_running". Ich gehe mal davon aus, dass das "falls WaMa_running nicht true" bedeutet, aber die Notation ist wie gesagt komisch.
Der Falls block erwartet eine "Bedingung", die "wahr" oder "falsch" sein kann. Bei einer Variablen X die selber "wahr" oder "falsch" sein kann ist also "falls X" das gleiche wie "falls X = wahr". Und da ich Faul bin hab ich mir den Logikblock gespart und einfach nur "WaMa_running" statt "WaMa_running = wahr" gesetzt. Dito oben - wie du auch schon richtig erkannt hast.
-
@init5 sagte in Waschmaschine/Trockner fertig:
Was mir noch etwas komisch erscheint ist dieses "falls nicht WaMa_running". Ich gehe mal davon aus, dass das "falls WaMa_running nicht true" bedeutet, aber die Notation ist wie gesagt komisch.
Der Falls block erwartet eine "Bedingung", die "wahr" oder "falsch" sein kann. Bei einer Variablen X die selber "wahr" oder "falsch" sein kann ist also "falls X" das gleiche wie "falls X = wahr". Und da ich Faul bin hab ich mir den Logikblock gespart und einfach nur "WaMa_running" statt "WaMa_running = wahr" gesetzt. Dito oben - wie du auch schon richtig erkannt hast.
@Asgothian es funktioniert leider nicht. Es kommen nach wie vor st
ä
ndig "WaMa l
ä
uft" und "WaMa fertig" Meldungen 
-
@Asgothian es funktioniert leider nicht. Es kommen nach wie vor st
ä
ndig "WaMa l
ä
uft" und "WaMa fertig" Meldungen 
-
@init5 kannst du mal bitte aufzeichnen wie sich der Datenpunkt "power"
ü
ber die Zeit verh
ä
lt ? Ich bin mir sicher das sich da etwas bewegt.A.
@Asgothian Den Datenpunkt habe ich bereits aufgezeichnet. Aber nach was suchen wir da genau?
Das komische ist, dass die Meldungen sogar mehrmals pro Minute kommen. Dabei sollte das Timeout doch zumindest verursachen, dass der Status "WaMa running = true" mindestens die gew
ä
hlte Zeit lang gehalten wird? -
@Asgothian Den Datenpunkt habe ich bereits aufgezeichnet. Aber nach was suchen wir da genau?
Das komische ist, dass die Meldungen sogar mehrmals pro Minute kommen. Dabei sollte das Timeout doch zumindest verursachen, dass der Status "WaMa running = true" mindestens die gew
ä
hlte Zeit lang gehalten wird? -
@Asgothian Und bitte auch das Skript so wie du es gerade laufen hast
Ich hatte leider noch die Eigenschaft "entprellen - nur aufzeichnen, wenn Wert min. 1000ms gleich" aktiviert.
Das Skript sieht aus, wie du es vorgschlagen hast

-
Ich hatte leider noch die Eigenschaft "entprellen - nur aufzeichnen, wenn Wert min. 1000ms gleich" aktiviert.
Das Skript sieht aus, wie du es vorgschlagen hast

@init5 Das mit dem entprellen solltest du noch einmal abschalten und neu aufnehmen. Am Besten dann als Textdatei oder Code hinter Spoiler posten.
Ich gehe davon aus das bei den nicht entstellten Werten sich der Grund versteckt warum das Skript st
ä
ndig "start" und "ende" meldet.Alternativ mal bitte vor jeweils vor dem Telegramm Baustein den Folgenden Baustein einbauen:

und

Dann kannst Du im Log sehen wie die Werte aussehen gestartet und angehalten wird.A.
-
@init5 Das mit dem entprellen solltest du noch einmal abschalten und neu aufnehmen. Am Besten dann als Textdatei oder Code hinter Spoiler posten.
Ich gehe davon aus das bei den nicht entstellten Werten sich der Grund versteckt warum das Skript st
ä
ndig "start" und "ende" meldet.Alternativ mal bitte vor jeweils vor dem Telegramm Baustein den Folgenden Baustein einbauen:

und

Dann kannst Du im Log sehen wie die Werte aussehen gestartet und angehalten wird.A.
@Asgothian Die beiden debug outputs hab ich eingebaut und morgen wird gewaschen. Die Werte aus meinem letzten Post in in einen Spoiler verpackt. Vielen Dank f
ü
r deine Ausdauer!
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden

