NEWS
[gelöst] Waschmaschine/Trockner fertig
-
@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!
-
@Asgothian Heute liefen einige Waschgänge und was soll ich sagen ... es funktioniert. Dein Skript läuft und tut was es soll. Das Problem lag woanders. Und zwar habe ich beim vielen rumtesten immer mal den aktuellen Stand dupliziert. Scheinbar bin ich in der Zeile verrutscht und es lief nicht das aktuelle.
Hier fehlte im Sonst Zweig die Bedingung "und vorheriger Wert >5". Zudem waren die Werte noch vom Typ Text und nicht aus dem Mathematik-Block, wie bei dir. Bei letzterem weiß ich nicht ob es einen Unterschied macht.
Jetzt passt es auf jeden Fall und ich kann anfangen den Trockner mit zu überwachen und solche Späße wir den Verbrauch mit einzubauen. Vielen Dank!
-
@init5 sagte in Waschmaschine/Trockner fertig:
Zudem waren die Werte noch vom Typ Text und nicht aus dem Mathematik-Block, wie bei dir. Bei letzterem weiß ich nicht ob es einen Unterschied macht.
Das macht auf jeden Fall einen entsprechenden Unterschied. Textvergleich und numerischer Vergleich liefern nicht immer die gleichen Werte.
Ansonsten, fein das es läuft. Ich hatte schon irgendwas komisches im Verdacht.
A.
-
Moin,
ich weiß das Thema ist theoretisch gelöst und @Asgothian hat zu einem funktionsfähigen blockly verholfen, jedoch für alle vielleicht nicht ganz klar, so hat mich @Phantomkommander angeschrieben und gefragt ob ich ihm helfen kann.
Ich selber hab so etwas nicht am laufen und nur mit den infos gearbeitet die mir von Phantomkommander gegeben wurden.
Wenn ich das richtig verstanden habe, gibt es ein Objekt, dass den Wert des Stromverbrauchs der Waschmaschine angibt, die Waschmaschine macht zum Ende mehrere Pausen und läuft wieder an (Knitterschutz), in den Pausen liegt der Wert zwischen 2-5, die Pausen gehen 21 sekunden.
Ich habe hier ganz einfach ein trigger auf diesen Wert gesetzt, der erkennt wenn der Wert unter 10 liegt und startet einen 30s timeout (ich empfehle 60s), sollte der Wert innerhalb der 30s wieder auf über 10 steigen, wird der timeout gestoppt, sollten die 30s verstreichen, wird das „fertig“ Signal übermittelt.
(Genau was oben schon als bild gepostet wurde, nur für aussenstehende direkt einfügbar und ich hoffe besser zu verstehen)
(Edit nach Test: Der schwellwert für den timeout musste reduziert werden da weitere längere Pausen sonst dafür sorgen, das dass fertig Signal abgegeben wird, hier wurde 5w erfolgreich getestet, kommt aber immer auf die jeweilige Waschmaschine an!)Außerdem hab ich eine Funktion eingebaut, die es ermöglicht, Alexa zu fragen: „wie lange läuft die Waschmaschine noch“, die Antwort ist nur eine gute Schätzung da nur erkannt wird wann sie gestartet ist, hier hab ich eine Zeit von 120min (2std) festgelegt, die ein normales program braucht, muss von jedem selber angepasst werden und ist im blockly kommentiert!
Zusätzlich wird erkannt zu welchem Echo gesprochen wurde und antwortet auch dort, hier muss eventuell noch die Lautstärke und Uhrzeit angepasst werden.Hier sollte eine Routine in der Alexa App angelegt werden, als Start die Frage „wie lange läuft die Waschmaschine noch“ und als Antwort „moment“ an den angesprochen Echo.
So gibt es auch eine sauber Antwort und nicht „es wurde kein Timer gefunden“!Außerdem muss die Objekt ID für den Verbrauch von jedem angepasst werden, im blockly als (Waschmaschine) festgelegt.
Ich hab versucht es einfach und für jeden brauchbar zu halten, in dem Fall wird mit Alexa gearbeitet, wenn dies nicht der Fall ist, kann zusätzlich oder anstelle von steuere „speak“ am Ende, einfach eine Lampe Gesteuert werden.
Ich habe alles fehlerfrei mit einem eigen erstellten Objekt getestet, bis auf das wenn ich frage "wie lange noch" und die Waschmaschiene unter zwei minuten läuft, die antwort: "die Waschmaschiene läuft seit eins minuten ..." nicht ganz korrekt ist, ist mir nichts aufegefallen, dies habe ich bewusst ignoriert.
Wenn es Fragen oder Probleme gibt, einfach fragen.<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="SEA4Zs3?=k:37=20K4Lu">an/aus</variable> <variable id="h]3son-MQJM,,:]`6_#2">check</variable> <variable id="Cuy;.6~8+/J0_Ap+{cGn">gerät</variable> <variable id="]3XUnZz=E)PJssgmSsYc">vergangen</variable> <variable id="YZGA=8Ii?c_%-4d|sUuo">start</variable> <variable type="timeout" id="timeout">timeout</variable> <variable type="interval" id="Intervall">Intervall</variable> <variable id="Ut8kTa!0@-C,ZM)?]_]P">restwert</variable> <variable id="TyrBnL^tW)pp(N]xLBKL">rest</variable> <variable id="eg!rsE:zHp#zL/LjCwP7">antwort</variable> <variable id="CqOqAxyS/CHs]Qd!}Kv#">lautstärke</variable> </variables> <block type="comment" id="JD=H/@RaNhOSO(8vjnS(" x="38" y="-37"> <field name="COMMENT">objekt id (Waschmaschiene) muss das objekt sein, welches den stromverbrauch ausgibt!</field> </block> <block type="variables_set" id="X0vfAm*D-x9e5FGnRtC:" x="38" y="38"> <field name="VAR" id="SEA4Zs3?=k:37=20K4Lu">an/aus</field> <value name="VALUE"> <block type="logic_boolean" id="~Ku|/GwVorz({Ore-J,s"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="^|z|]LP/P8j6@7W}{3c}"> <field name="VAR" id="h]3son-MQJM,,:]`6_#2">check</field> <value name="VALUE"> <block type="logic_boolean" id="oAZLTm4uCkV[cwAh|6iA"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> <block type="on" id="}`m|MGG0z1(qB$($`P45" x="38" y="138"> <field name="OID">0_userdata.0.Waschmaschiene</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="SM_IHzr1p}S5Vvf/k7CK"> <value name="IF0"> <block type="logic_compare" id="5Z!N8opL[jg%@8~^6(E*"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="N`K),}WeU0G(6ZvS,,:|"> <field name="VAR" id="SEA4Zs3?=k:37=20K4Lu">an/aus</field> </block> </value> <value name="B"> <block type="logic_boolean" id="[.-f%QP`YUr#I//*eJbd"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="D#a0x7|!|;R;ebsm2uhj"> <field name="COMMENT">setze die 10(watt) auf den wert, der in der pause unterschritten aber beim drehen wieder überschritten wird!</field> <next> <block type="controls_if" id="C1`y{-4kt[E=i^c@Wuk7"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_operation" id="50GYOvxsDLqesXp[CaY?"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="aFL47cn+=1i)A34ESBGc"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="c]-fPbeJ,L}FiAR98,n?"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Waschmaschiene</field> </block> </value> <value name="B"> <block type="math_number" id="$G4iJa^K,g:O$(LCgh?M"> <field name="NUM">10</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="z~I.Q@rjcAGpmAW]NoVp"> <value name="BOOL"> <block type="variables_get" id="bJ8^/P9.}#yb`j+~A4;V"> <field name="VAR" id="h]3son-MQJM,,:]`6_#2">check</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="w-#m_O1:2n`Q~(4CC?p|"> <field name="VAR" id="h]3son-MQJM,,:]`6_#2">check</field> <value name="VALUE"> <block type="logic_boolean" id="LIwjMD{RPRlI*D?Ps#Lf"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="comment" id="O5`TAEBuWpxilLy.C~u}"> <field name="COMMENT">setze timeout auf mehr als eine pause!</field> <next> <block type="timeouts_settimeout" id="EarW3/R=`A/*V{Q6X@mu"> <field name="NAME">timeout</field> <field name="DELAY">30</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="comment" id="Irk40P!Fc?w3}MFDni|F"> <field name="COMMENT">setze objekt id (speak) auf dein gerät oder geräte!</field> <next> <block type="control" id=")+Y_3X73G`c2xeE`AdlJ"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G2A14R039516097D.Commands.speak</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="cmG{jj(/ZqPS2+4N1yjX"> <field name="TEXT">Die Waschmaschiene ist fertig. </field> </block> </value> <next> <block type="variables_set" id="sE4S22T]^T5QIGA8In5T"> <field name="VAR" id="SEA4Zs3?=k:37=20K4Lu">an/aus</field> <value name="VALUE"> <block type="logic_boolean" id="h/b#?PB2B~#{0Y7/}kS-"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="timeouts_clearinterval" id="agav!3zAWmUG6o)StnGh"> <field name="NAME">Intervall</field> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="ls*4wx`|8^-=X(_X7oV3"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id=",-JTBfDN!6{2LNeasCxv"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Waschmaschiene</field> </block> </value> <value name="B"> <block type="math_number" id="B%4~RI6jtu/~)2fo3g[r"> <field name="NUM">10</field> </block> </value> </block> </value> <statement name="DO1"> <block type="timeouts_cleartimeout" id="n_V|$YpFx8ZbF8aLjJUY"> <field name="NAME">timeout</field> <next> <block type="variables_set" id="OyHork8KnjI`dh[vCkLR"> <field name="VAR" id="h]3son-MQJM,,:]`6_#2">check</field> <value name="VALUE"> <block type="logic_boolean" id="nNkOU6y48V!$_buS6uh5"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </statement> </block> <block type="on" id="GJC-+:*pCF:+YrSV+ERV" x="38" y="788"> <field name="OID">0_userdata.0.Waschmaschiene</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="fQ?rj}$/k4xiV4m}Fq)n"> <value name="IF0"> <block type="logic_compare" id="j+hh}{^zkw3zXuGT)b{x"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="C/?^csS#f7^t2|5+b^ci"> <field name="VAR" id="SEA4Zs3?=k:37=20K4Lu">an/aus</field> </block> </value> <value name="B"> <block type="logic_boolean" id="HWv+Ul%ZU5|f(K7?lcYg"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="controls_if" id="v=kw^[C*$MFx!3TkVZI`"> <value name="IF0"> <block type="logic_compare" id="R3,?)]6S1wPXV(CgHALF"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="p7IMcd5QlDK~*.fJob#m"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Waschmaschiene</field> </block> </value> <value name="B"> <block type="math_number" id="N3c-VdtVth1Aey]bC$Xd"> <field name="NUM">10</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="2Hce7C5lG5)O[BSD!-*U"> <field name="VAR" id="SEA4Zs3?=k:37=20K4Lu">an/aus</field> <value name="VALUE"> <block type="logic_boolean" id="lmd^OUoPgKd8*~:(17U%"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="comment" id="@2Y!XKhDVD$/Z.JVj3!x"> <field name="COMMENT">ab hier nur "wie lange noch"!</field> <next> <block type="variables_set" id="QSau,.q)~d7le10*jPDZ"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> <value name="VALUE"> <block type="math_number" id="O4MVGl@FXuNrt8,kBwWc"> <field name="NUM">0</field> </block> </value> <next> <block type="timeouts_setinterval" id="-./ElrAawx21Ostxr-z_"> <field name="NAME">Intervall</field> <field name="INTERVAL">1</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="math_change" id=";]CSN~M+@g)iph6tD|3#"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> <value name="DELTA"> <shadow type="math_number" id=")|d.Yig8D|RAF4%0j#M]"> <field name="NUM">1</field> </shadow> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> <block type="on" id="#mhtjpS0)ZU3@`Zb+Z*." x="38" y="1238"> <field name="OID">alexa2.0.History.summary</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="comment" id="=38aL*=AXn.QSkO{ho?O"> <field name="COMMENT">für die frage "wie lange läuft die waschmaschiene noch" eine routine in der alexa app anlegen, als antwort würde ich "moment" vorschlagen.</field> <next> <block type="controls_if" id="5Lbgw6Dk[{i4*+;:@(Lz"> <value name="IF0"> <block type="logic_compare" id="+o7HkIh=[q;IojboS(R?"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="wW=qk!%P6B=Rf1R%;zgn"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.summary</field> </block> </value> <value name="B"> <block type="text" id="^|TJn:B5}vZ3::)?DjEQ"> <field name="TEXT">wie lange läuft die waschmaschine noch</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="P5TQAX(pV1b[4TtH?S7h"> <field name="VAR" id="Cuy;.6~8+/J0_Ap+{cGn">gerät</field> <value name="VALUE"> <block type="get_value" id="}Jygy3YoS)yKzFr4/]vz"> <field name="ATTR">val</field> <field name="OID">alexa2.0.History.serialNumber</field> </block> </value> <next> <block type="variables_set" id="Fty,zqxo;is*TzWs1.}_"> <field name="VAR" id="]3XUnZz=E)PJssgmSsYc">vergangen</field> <value name="VALUE"> <block type="logic_ternary" id="_1pa[ob#:1C55QUVj1Ta"> <value name="IF"> <block type="logic_compare" id="!#jgbZwY,1;3Ww[7GFIB"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="Oe]Jld01C,S7a1td^iKp"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <block type="math_number" id="fKu-nr%zz8*A:n+.]!M$"> <field name="NUM">60</field> </block> </value> </block> </value> <value name="THEN"> <block type="text_join" id="z:06.$Ra3Gr#oFam6Z9+"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="VVEhMO!M2#5Vmw?*L[?k"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="ADD1"> <block type="text" id="U_A:)4@y4O5T,:@$V4F~"> <field name="TEXT"> minuten </field> </block> </value> </block> </value> <value name="ELSE"> <block type="text_join" id="SYNrx#0mt3fl(XQk@jGI"> <mutation items="2"></mutation> <value name="ADD0"> <block type="logic_ternary" id="j3)Id(Zqj_F,IZIPQ|Bi"> <value name="IF"> <block type="logic_compare" id="AnJTwO*;l!T3)BKH#l%:"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="W8DOF0RXjHJi8]J7Q9.]"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <block type="math_number" id="yka`m%E[:w!6nx8GYdZ/"> <field name="NUM">120</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="*-3Og327Q0SrhmFLM0[e"> <field name="TEXT">einer stunde</field> </block> </value> <value name="ELSE"> <block type="text_join" id="`eA5z6jX9;n!yY_nQQ#l"> <mutation items="2"></mutation> <value name="ADD0"> <block type="math_round" id="p}[pTXUJG,%#gZiLN^AD"> <field name="OP">ROUNDDOWN</field> <value name="NUM"> <shadow type="math_number" id=":Gu*)[+.M2;~2aH$KRNh"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="wZg.b_h@VgaC-4w4!w4R"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="XfFv5pIlPl4@+vlq[+LT"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="+@MRzj!ul#yPomRpTSu/"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <shadow type="math_number" id="IUnYWEIJ4a]QmgqV}:l?"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="ADD1"> <block type="text" id="2VdI)uR*%c!hWvk!8+!M"> <field name="TEXT"> stunden</field> </block> </value> </block> </value> </block> </value> <value name="ADD1"> <block type="logic_ternary" id="Um$J[dd7rnOjQ8aa!]-5"> <value name="IF"> <block type="logic_compare" id="@z8quz9C)*_Bzsf0N^^~"> <field name="OP">GT</field> <value name="A"> <block type="math_arithmetic" id="o,F]pw+`4JEsn~!`A3hS"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Z@+=K!b=i..hU9-.EJ$*"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="!rBY2j[Pp:?3~F}Oh?2f"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_round" id="VC?4I}a*w`1MrDU}=Tps"> <field name="OP">ROUNDDOWN</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="PDiuk6g^[n6Blz3k{?W1"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Td5;cge,MYHgW,QQaYuk"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <shadow type="math_number" id="`vNxU|V2$~P_!1~F4z{9"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="#c$sB]1,F*^{*:O7ZLJ}"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="!la53FklrL`?A`ZWO`AG"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="THEN"> <block type="text_join" id="A.3g;T~-##w+h:KM9@iz"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="iR.A)rU/aVvvzrpVo@W5"> <field name="TEXT"> und </field> </block> </value> <value name="ADD1"> <block type="math_arithmetic" id="JfP|ZA-0EPOAv#T}169Y"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="=g52wtq|?JwW^v$k@5oX"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="T@zG/BT_wUE1~_iB.$B!"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <shadow type="math_number" id="|RR^-~/CfCAGDG0AbQw."> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="=1J9rK9!5@3xnhE^-,gH"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="kc4=k*4Ug4gFJox|+{S!"> <field name="NUM">1</field> </shadow> <block type="math_round" id="02r.Ne4@Kjzn{1[XCb1v"> <field name="OP">ROUNDDOWN</field> <value name="NUM"> <shadow type="math_number" id="J6Vje:59){dsl!/m6AQ("> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="V0fN:M*4[5}g:~|6wD0+"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="~kujdI=Si2g-|pk~u/yY"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> <value name="B"> <shadow type="math_number" id="8A)o`f+5?!tF7;*f-O=L"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="b:YA`o^F#ahSzs;sqiUN"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="Wm=e;#@!(tOo75Klhn?`"> <field name="TEXT"> minuten</field> </block> </value> </block> </value> <value name="ELSE"> <block type="text" id=";RD[,9^?OkC01i;k`2ro"> <field name="TEXT"></field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="comment" id="v;OeQZfl4_ASIvb!,[*|"> <field name="COMMENT">hier die 120(min) auf den wert stellen, die eine normale wäsche in minuten braucht.</field> <next> <block type="variables_set" id="Gmf|wF/8LD/3tyWN`XHt"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> <value name="VALUE"> <block type="math_arithmetic" id="fVX`l+|a=vFiF(n3Vs:4"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="mBB~5X.w]]L~#WV:Paz/"> <field name="NUM">1</field> </shadow> <block type="math_number" id="ft%4rI0%:Fe*6]c}?km8"> <field name="NUM">120</field> </block> </value> <value name="B"> <shadow type="math_number" id="e!Rl_G50yAK;B%U52IC["> <field name="NUM">1</field> </shadow> <block type="variables_get" id="fjq+0.n}aoe*~vPv/-|i"> <field name="VAR" id="YZGA=8Ii?c_%-4d|sUuo">start</field> </block> </value> </block> </value> <next> <block type="variables_set" id="(j:!VKj|5FfG(H}{,5,D"> <field name="VAR" id="TyrBnL^tW)pp(N]xLBKL">rest</field> <value name="VALUE"> <block type="logic_ternary" id="pUoy-85dUvp!_*QDt)V`"> <value name="IF"> <block type="logic_compare" id=".6tN+1l8j^-IQ*-PX8?^"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="uV;}DDf@8?XN?11XcgYv"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <block type="math_number" id="4bEFuB,|~;cv,3Gw#%0H"> <field name="NUM">60</field> </block> </value> </block> </value> <value name="THEN"> <block type="text_join" id="W:Eh9WD-O#5{h.X2@^+6"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="NJ#:~-BEm(VKTpqolN*#"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="ADD1"> <block type="text" id="jFN5~-6.YPJn0;4@hbq`"> <field name="TEXT"> minuten </field> </block> </value> </block> </value> <value name="ELSE"> <block type="text_join" id="AW;fKH;7O,lQ~VAcYB_b"> <mutation items="2"></mutation> <value name="ADD0"> <block type="logic_ternary" id="ct/%pCbApq=O?TYDi4el"> <value name="IF"> <block type="logic_compare" id="YnDqsIM?:U%4E~pURXqT"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="cXMs*HtTxa#Jgs?GVT6Z"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <block type="math_number" id="O?R~y|O!2DiFxA~Eyg1|"> <field name="NUM">120</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id=";c^3A}J+p2^f`q${6?r4"> <field name="TEXT">eine stunde</field> </block> </value> <value name="ELSE"> <block type="text_join" id="W8[cC`AH[BE(6~Efgq]^"> <mutation items="2"></mutation> <value name="ADD0"> <block type="math_round" id="1S/V3W52h%3E,+1f)wEz"> <field name="OP">ROUNDDOWN</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="`YUOU==?(hLj`QzHRC79"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="ivPM^K:5D}w`|P{#V|/O"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <shadow type="math_number" id="PkL4l6ls_q)K-;uTPnj="> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="ADD1"> <block type="text" id=".,I^jTj$Z1L]GR,~*1G$"> <field name="TEXT"> stunden</field> </block> </value> </block> </value> </block> </value> <value name="ADD1"> <block type="logic_ternary" id="dp^x2MuT1t8}b:?RQW#Y"> <value name="IF"> <block type="logic_compare" id="a2`/o:?-IYsUZ0;j!zY$"> <field name="OP">GT</field> <value name="A"> <block type="math_arithmetic" id="?0KIgyQZv;cFsRT^0-ZV"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="iiUR32eBVb,XDSD+2B0P"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="QAnIE)_(IrB2obETb:V@"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_round" id="M7A?FLPic22]~?6T~-6C"> <field name="OP">ROUNDDOWN</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id=":JVEA(}Rqp?TMVSRpnbN"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="50?Yt[5Pg8sX]P4,+FSq"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <shadow type="math_number" id="k`fYmRKld#[[c(o9Dlk0"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="9xCZW-G_s*ja%+#zR`Wm"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="QJ+}I@!GtoJ^BAxa#ubK"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="THEN"> <block type="text_join" id="^@Ko?SgSEHk5Mm!8`?dy"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="$Hlw)A{=qlx|Q}znhN+o"> <field name="TEXT"> und </field> </block> </value> <value name="ADD1"> <block type="math_arithmetic" id="A](7NJX/%{7m_2%9=qPQ"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id=",_.3BJb3z:1I=9s~B%1["> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="3Yx:XF44iDc6Uae:Epay"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_round" id="BNB~u;ZJebS^TD2XCM50"> <field name="OP">ROUNDDOWN</field> <value name="NUM"> <shadow type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="oGMJ/b_sp[_h(zi5;TDP"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="~E+|]o/rM~#iFId?bzk("> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <shadow type="math_number" id="P1BOGI0P{HY!gou!,MtL"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id=".K7Jnxd#9[+~xK!OLn(-"> <field name="NUM">60</field> </shadow> </value> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="jYF%.|(WR5Md,#J~Xz]9"> <field name="TEXT"> minuten</field> </block> </value> </block> </value> <value name="ELSE"> <block type="text" id="5_h!Y8+!SV_/Q59`}Ggd"> <field name="TEXT"></field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="m5vN@tdIV+2qGM^bTUnr"> <field name="VAR" id="eg!rsE:zHp#zL/LjCwP7">antwort</field> <value name="VALUE"> <block type="logic_ternary" id="A--DH}T$2@@hv6qQ-7F$"> <value name="IF"> <block type="logic_compare" id="$N$Pf}2XNCP-g+y0wAz2"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="{S1|344GoO1cI=Dhv15{"> <field name="VAR" id="SEA4Zs3?=k:37=20K4Lu">an/aus</field> </block> </value> <value name="B"> <block type="logic_boolean" id="/$Sd7B|{FpGmqm}oW(+@"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="gK/Mq$SH-+V/6(tzH0qD"> <field name="TEXT">Tut mir leid, laut System läuft keine Wäsche.</field> </block> </value> <value name="ELSE"> <block type="text_join" id="=yF5xSxYw4(UYgz.7%qG"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="^1]gC_f9_j@8|6Bj|adK"> <field name="TEXT">Die Waschmaschiene läuft seit </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="vKFGxz6}rI4]IC=a#O7-"> <field name="VAR" id="]3XUnZz=E)PJssgmSsYc">vergangen</field> </block> </value> <value name="ADD2"> <block type="logic_ternary" id="!_dtH:cj:T95z=zg(h,2"> <value name="IF"> <block type="logic_compare" id="M]x2W;v$Gy[#)~,z]/6P"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="Q+aTv$uv6f-m6fOmLa5m"> <field name="VAR" id="Ut8kTa!0@-C,ZM)?]_]P">restwert</field> </block> </value> <value name="B"> <block type="math_number" id="[1]DhGu:vn9k,VX3C`OE"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="THEN"> <block type="text_join" id="s8z,Ao.$ALZ/CO[e10{$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="M?GLiw}ml%=t8zGKN/*?"> <field name="TEXT">, die geschätzte restzeit beträgt </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="+=|Voz5U7_qI-Y59vO=`"> <field name="VAR" id="TyrBnL^tW)pp(N]xLBKL">rest</field> </block> </value> </block> </value> <value name="ELSE"> <block type="text" id="yUtKY2CidEvRfj$~5L*:"> <field name="TEXT">, bei einem normalen waschprogramm, sollte die Waschmaschiene bereits fertig sein.</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="comment" id="!S*_)#HwS$nPk8xg))#|"> <field name="COMMENT">lautstärke nach uhrzeit:</field> <next> <block type="controls_if" id="6(:8Q}~kMOY#B3a7Tup}"> <mutation else="1"></mutation> <value name="IF0"> <block type="time_compare" id="UQdhRA~Oi/JJEVA+6H4Y"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">10:00</field> <field name="END_TIME">18:00</field> </block> </value> <statement name="DO0"> <block type="variables_set" id="Soi5dQrOI#|t:nl,H6z0"> <field name="VAR" id="CqOqAxyS/CHs]Qd!}Kv#">lautstärke</field> <value name="VALUE"> <block type="math_number" id="tn|aQ/Q]dWWqBDRxb;%;"> <field name="NUM">30</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="qE~h+A`GL`cs_K0uWlmY"> <field name="VAR" id="CqOqAxyS/CHs]Qd!}Kv#">lautstärke</field> <value name="VALUE"> <block type="math_number" id="!me-|AeAiCXL%RaxGK8S"> <field name="NUM">20</field> </block> </value> </block> </statement> <next> <block type="comment" id="(sFW,[kO7IJ$z0EnW*_w"> <field name="COMMENT">Antwort ausgabe:</field> <next> <block type="control_ex" id="CJp#3n.8SkKji|+{g05!"> <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="text_join" id="Z!zOc@Hw:FBnFbHh2gG2"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="%RU2zD:;-,nOE,!~z-Ut"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="V8rYmkw0VMvQHsC:5+,?"> <field name="VAR" id="Cuy;.6~8+/J0_Ap+{cGn">gerät</field> </block> </value> <value name="ADD2"> <block type="text" id="O01Ydu^eUNM)MWAQj~fv"> <field name="TEXT">.Commands.speak-volume</field> </block> </value> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="`,P3pdR5mEKSAgiTOr?j"> <field name="VAR" id="CqOqAxyS/CHs]Qd!}Kv#">lautstärke</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="3?OyI@@JdPL1VbUO]A6r"> <field name="NUM">1000</field> </shadow> </value> <next> <block type="control_ex" id="~yp,b3e*jg=?i_!41r}~"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="Z2Vgw?xCmBci.VTS?BIZ"> <field name="oid">alexa2.0.Echo-Devices.G2A14R039516097D.Commands.speak</field> </shadow> <block type="text_join" id="!r,y|qI_L}[w?_9!eV])"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="~S~cmTu-sb8:0m=_7qwT"> <field name="TEXT">alexa2.0.Echo-Devices.</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="BlZbn3IErUAmd3|n~4ZD"> <field name="VAR" id="Cuy;.6~8+/J0_Ap+{cGn">gerät</field> </block> </value> <value name="ADD2"> <block type="text" id="TIl.5`v8LT?1K94jI!89"> <field name="TEXT">.Commands.speak</field> </block> </value> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="k$rrR.tm)7$=v+Q+|bCD"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="bdS(0I)HqPE;=8HU~7wg"> <field name="VAR" id="eg!rsE:zHp#zL/LjCwP7">antwort</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="Ua3o8D)crm[iv.QrM@|^"> <field name="NUM">2000</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </xml>
-
@init5 Allgemeine Frage zur Vorgehensweise im Script.
Wenn ich auf Leistung oder Strom triggere, löst doch jede noch so kleine Änderung ein Ereignis aus und das gesamte Programm wird durchlaufen. Sorgt das nicht für unnötig viel Systemlast?
Ist es nicht besser solche Dinge zyklisch abzufragen. Ich habe damit gute Erfahrungen gemacht.
-
Es wird ja im ersten Schritt kontrolliert ob die Waschmaschine laufen sollte, im normal Fall läuft die dann zwar auch, im nächsten Schritt wird aber abgefragt ob der Wert unter (10) liegt, was so gut wie nie zutrifft, eben nur kurz vor Ende und erst dann wird der Rest berechnet, was aber auch nicht viel ist, ich glaub in dem Fall kann das vernachlässigt werden
Bei einer zyklischen Abfrage, läuft doch theoretisch auch etwas im Hintergrund, was dies berechnet und bei diesem Beispiel mit dem Stromverbrauch muss der Zyklus so gering gehalten werden, dass die Pausen nicht übersprungen werden, ich würde annehmen da tut sich wirklich nicht viel!
Ich hab auch bereits mehrere trigger zum test auf einen sich sekündlich ändernden wert gelegt und das System beobachtet, konnte hier kein anstieg irgendeiner Belastung feststellen.
Edit: Klar wenn hinter dem Trigger harte berechnungen stehen, die immer laufen, kann dies schon sein, da würde ich auch eher auf eine zb. stündliche abfrage wechseln wenn möglich. -
@ITCrowd sagte in [gelöst] Waschmaschine/Trockner fertig:
Ist es nicht besser solche Dinge zyklisch abzufragen. Ich habe damit gute Erfahrungen gemacht.
Das hängt sehr davon ab wie oft abgefragt wird, und wie oft eine Änderung des Stromwertes gemeldet wird. Die Systemlast das Programm bis zu den beiden "If" abfragen durchzuarbeiten ist eher zu vernachlässigen.
Solange es nur im ein Skript geht kann das arbeiten mit einem "Heartbeat" durchaus weniger Last erzeugen als das arbeiten mit dem Trigger. Spätestens wenn mehrere Aktionen durch den gleichen Heartbeat getriggert werden kehrt sich das aber um. Dazu kommt das alles davon abhängt das der Heartbeat auch durchläuft. Dazu kommt das auch das regelmässige Umschalten des "Tick" und das holen der Werte Last erzeugt.
Unterm Strich ist der ioBroker für "Event driven" Programmierung, nicht für eine "Heartbeat driven" , Programmierung gemacht, weswegen ich diese auch immer bevorzuge. Wenn das arbeiten mit einem Heartbeat besser wäre gäbe es diesen Heartbeat schon im System.
A.
-
hab selber noch ein Fehler in meinem Blockly entdeckt!
WICHTIG falls das jemand oben schon kopiert hat, bitte nochmal neu kopieren!
Gibt sonst eine Endlosschleife wenn der Verbrauch unter 10w fällt!!!Sorry
-
[https://forum.iobroker.net/topic/36531/vorl-gerätezustandsüberw-benachrichtigung-bei-start-ende](Vorlage dynamisches Script zur Erfassung von zahlreichen Geräten )
schaut euch bei Interesse zu dem Thema das hier mal an ...
In dem Script kann man zahlreichen Geräte gleichzeitig überwachen und zu jedem Gerät eine einzelne Start und Endnachricht, verschiedene alexa, telegram und whatsapp IDs und noch vieles weitere anlegen.
Vorteil: Man braucht nur noch ein Script und nicht wie sonst zahlreiche blocklys, die auch noch falschmeldungen wegen timeouts und schwankenden Stromspitzen senden -
@Newpicsel wie ich dir eben geschrieben habe. Das war das Ende der letzen Aufzeichnung. eingestellt ist 0w-10w
-
Wie kann ich so eine Stromverbrauch /-überwachung machen?
-
@Slowman Bei mir läuft es über je einen Shelly Plug an Trockner und Waschmaschine. Solche Geräte die, mir Tasmota bespielbar sind, gibt es wie Sand am Meer.
-
@init5 wozu brauchts für einen shelly plug tasmota? die original FW bietet alles was man braucht.
-
@da_Woody Bei mir laufen die Shellys auch alle auf der Originalen Firmware. Das mit Tasmota war mehr darauf bezogen, dass es nicht zwingend Shelly sein muss, um ein Gerät zu schalten und messen. Ein Gosund Zwischenstecker mit Tasmota tut es auch.
-
@init5 dann hab ich das mistverstanden...
-
Ich hänge mich hier grad mal mit an.
Ich habe folgendes Script, das stammt von nurCHRIS
Bei der Spülmaschine hab ich z.b. das Problem das sie wenn sie nichts tut, also eingeschaltet aber noch nicht das Programm gestartet so um die 4 Watt verbraucht. ab ca. 40 min Restzeit, lässt sie wohl etwas mit der Hitze trocknen, pumpt dann irgendwann ab, aber in der Zeit sinkt der Verbrauch auch auf die 4 Watt. Ergebnis, sie sagt ständig ich bin fertig, schwankt mal über die 4 und geht dann wieder auf die 4 Watt. Wenn sie wirklich fertig ist, Timer 0 dann bleibt sie halt auch bei 4 Watt.
Wie könnte ich das entschärfen ? Irgendwie bei sonst falls nen Timer rein, der alle 5 min testet und wenn nach den 5 min immer noch 4 Watt, dann fertig ? Wobei ich sehr wahrscheinlich in den 40 min öfters die 4 Watt habe und sie somit auch so melden würde fertig. Oder anders rum, wenn der Wert 4 Watt länger als 10 min bleibt dann soll sie Fertig melden, wie das aber aussehen soll, keine Ahnung. Springt der Wert über 4, startet der Timer von vorne, ist nach den 10 min nichts mehr über 4 Watt, dann ist sie fertig.
Vllt könnt ihr mir da auch helfen.
Des weiteren passt irgendwie die Rechnung nicht, er zeigt mir an 0 Euro. Was passt da nicht ?
-
@D3ltoroxp said in [gelöst] Waschmaschine/Trockner fertig:
nen Timer rein, der alle 5 min testet und wenn nach den 5 min immer noch 4 Watt, dann fertig ?
fast, nicht alle 5 min testen, sondern wenn 4W, dann timer ob für gewisse zeit keine änderung. ich hab das bei mir mit den shellys einfach auf 10min gesetzt. geht aber sicher auch kürzer. mal mitloggen wie lange die pausen sind, dann ne minute drauf und gut ists. musst halt bisschen testen bei dir.
ok, jetzt geht editieren wieder...
dabei gemerkt das ich das auch schon auf 5min reduziert habe... -
@da_Woody Ok super Danke dir, werd ich so mal probieren. Das heißt wenn die Maschine auf 4 Watt fällt. startet ja der "sonst falls" Teil und erst mal der 5 min Timer. Sollte nun innerhalb dieser 5 min der Wert wieder über die 4 steigen, dann bricht der Timer ab ? Fällt jetzt der Wert wieder auf 4 oder darunter, startet wieder der Timer ? Sollte das diesmal dabei bleiben, meldet das Script nach5 min, das die Maschine fertig ist ?
Hab ich das so richtig verstanden ?
Quasi so ?
-
@D3ltoroxp puh, ich bin kein blockly guru. is auch nicht wirklich auf meinem mist gewachsen, aber das prinzip hast du schon kapiert.
-
@da_Woody Hat das Verhalten leider auch nicht verbessert.