- Home
- Deutsch
- Praktische Anwendungen (Showcase)
- Mein Staubsauger Schedule Skript
Mein Staubsauger Schedule Skript
This topic has been deleted. Only users with topic management privileges can see it.
-
Anbei mein Blockly Skript für ein Staubsauger Schedule.
Features:
- Staubsauger fährt los, kurz nachdem letzter das Haus verlässt
- Nächster geplanter Starttag kann übersprungen werden (Skip Next Run)
- hierfür einfach einen Switchdatenpunkt in VIS, Telegram, Alexa, Happanel etc. einbinden
- Staubsauger fährt nur in einem fest konfiguriertem Zeitraum los, falls die Umstände stimmen (Anwesenheit, Skip Next Run, etc)
- die Anzahl an nicht gefahrenen Tagen wird gespeichert
- bei überschreitung eines Schwellwertes, gibt es eine täglich eine Nachricht per Telegramm mit der Info, wie lange der Staubsauger nicht mehr gefahren ist (aktuell ab 4 Tage)
- sowohl beim erfolgreichen als auch nicht durchgeführtem Start, gibt es frühstmöglich eine Statusinfo mit Begründung per Telegramm
- entweder direkt nach Start oder 10 Uhr
Nachteile:
- Schedule ist eher "hardcoded" und muss im Skript angepasst werden --> Schedule kann nicht per VIS angepasst werden
Zusätzliche Infos:
- Startzeitraum für den Staubsauger ist Montag, Mittwoch, Freitag zwischen 6:00 und 9:50 Uhr
- Statusmeldungen kommen spätestens 10 Uhr per Telegramm
- Skript ist aktuell auf zwei Personen ausgelegt, kann aber angepasst werden (erster Trigger und zwei If-Prüfung anpassen)
- im Skript wird ein Mi Robot angesteuert
- ein Datenpunkt wird benötigt "staubsauger_skipnextrun"", als Switch und Logikwert
- ein Datenpunkt wird benötigt "staubsauger tage ohne aktivität" als Zahlenwert
- ich schreibe zusätzlich einen Datenpunkt "eventlist", wird für das Skript nicht zwingend benötigt, dient nur dem Loggen von Ereignissen
Vielleicht kann ja jemand das Skript gebrauchen oder als Basis nutzen, um sich selber was zu basteln.
Blockly Export
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="undefined" id="timeout">timeout</variable> <variable type="undefined" id="timeout2">timeout2</variable> </variables> <block type="comment" id="Mbii%.3x$krH__;Pd;Sy" x="63" y="37"> <field name="COMMENT">Sobald der letzte das Haus verlässt, soll der Staubsauger losfahren.</field> <next> <block type="on_ext" id="g.r+oP@:dKnQB[ND%AF:"> <mutation items="2"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="hXz4D@h(w)~DGOp,tx.z"> <field name="oid">default</field> </shadow> <block type="field_oid" id="^PcQ+*eOh+$=[VxT,8gv"> <field name="oid">custom.0.presence_person1</field> </block> </value> <value name="OID1"> <shadow type="field_oid" id="(8[LVwhw)CXk=[kl`WOx"> <field name="oid">default</field> </shadow> <block type="field_oid" id="6t.9+NTSn0#1p?RM3@L:"> <field name="oid">custom.0.presence_person2</field> </block> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id="y(*yR3]x1^)DTdI3;_;k"> <field name="NAME">timeout</field> <next> <block type="controls_if" id="i_*3-n|[xIGHFyrjT*3J"> <value name="IF0"> <block type="logic_operation" id="r!E3c;gdndELr;I2lBTs" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="{i[|vDj4fRj9A|XhM@#q" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id=")W/^%]A6u1|_(`N3VQ]I" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="QZ/Ek9~HbqXU$*EV_5R3" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="7(#nl*{YO^s#-ko%CET-"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="F0q^):e(V8?~[Sxs0,/,"> <field name="ATTR">val</field> <field name="OID">custom.0.presence_person1</field> </block> </value> <value name="B"> <block type="logic_boolean" id="(p;#HTfe`gCYPl/abv{6"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="UmV3q=ZbkNV5j*,@8S-G"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="~M+2tKn`T`s8`1sTa}1^"> <field name="ATTR">val</field> <field name="OID">custom.0.presence_person2</field> </block> </value> <value name="B"> <block type="logic_boolean" id="[KxpC9l/P;!j}:[F@WyY"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="a/;GZ*RAkfX8YM}y#BE3"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="kwIKrqU#6*8ig11!I]=;"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_tage</field> </block> </value> <value name="B"> <block type="math_number" id="B9.W0TQjZ#o#!#iAV4#H"> <field name="NUM">-1</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="WX/8bM;Bv2q|V#.!I~rK" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="time_compare_ex" id="eYl;RYzwgZUG_Hqjx)Lb"> <mutation end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION">></field> <value name="START_TIME"> <shadow type="text" id="y{j?EUg]}21G3I~%z7JE"> <field name="TEXT">06:00</field> </shadow> </value> </block> </value> <value name="B"> <block type="time_compare_ex" id="@5B^N2/tAo,(~nt-u/R?"> <mutation end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION"><</field> <value name="START_TIME"> <shadow type="text" id="i/@Bm,JaUa3}q%E?TN0W"> <field name="TEXT">09:50</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_operation" id="aMuz1~3sHCcehu}!ay8U" inline="false"> <field name="OP">OR</field> <value name="A"> <block type="logic_operation" id="M_yT4r|[EMBIH47EM0lg" inline="false"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id=":XUemYYQ#H#_1~ulc+=p"> <field name="OP">EQ</field> <value name="A"> <block type="time_get" id="NtqX@yOhFsUi5T`Xf1!{"> <mutation format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> <value name="B"> <block type="math_number" id="[pV$BiB|7}r/fpWuNz;$"> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="Et7cd2V)Eg=U;o0{N67C"> <field name="OP">EQ</field> <value name="A"> <block type="time_get" id="tNF.$rOX}*6by8ySr[u+"> <mutation format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> <value name="B"> <block type="math_number" id="bA[8~OSe^Pf:5[7u$y]?"> <field name="NUM">3</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="mO0e{p:]3@o]QF*/k#R%"> <field name="OP">EQ</field> <value name="A"> <block type="time_get" id="i~0qohBpWjRe^!Ss8W(a"> <mutation format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> <value name="B"> <block type="math_number" id="y3ZHb08Jhs=`(fH+3LLt"> <field name="NUM">5</field> </block> </value> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_settimeout" id="8GBjHB2sgWY://=g4]e2"> <field name="NAME">timeout</field> <field name="DELAY">10</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="controls_if" id="DFr#;Kh2%9E,o[|pv)NH"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="+5Sd[2-RX[G#s3bh:_(T"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="xQZ$;prhl7!o1-Yv$@(i"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_skipnextrun</field> </block> </value> <value name="B"> <block type="logic_boolean" id="xLKKIzp:MT|U.}ow)d%:"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="update" id="tlMJj2U/tSun?d`zgl)o"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.event_eventlist</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="]bYyMfjCoN|sC]=+oR[~"> <field name="TEXT">Staubsauger Start wird übersprungen</field> </block> </value> <next> <block type="telegram" id="rLUlRTv%d.]Q#Xgnd*@V"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">TRUE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="?ZlT0PeSV;feLoxE[s1P"> <field name="TEXT">Staubsauger startet erst am nächsten regulären Staubsauger Tag wieder automatisch.</field> </shadow> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block type="update" id="^koQ_k3A(0ly(l:aj,g~"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.event_eventlist</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="Lbr=Y4?.UygXv1N.w3*D"> <field name="TEXT">Staubsauger startet automatisch</field> </block> </value> <next> <block type="telegram" id="(Eol8j|/]LV7{2LSGnN4"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">TRUE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="z5Tum;fkcgXuOcDqO~7|"> <field name="TEXT">Staubsauger startet jetzt automatisch.</field> </shadow> </value> <next> <block type="control" id="bhZ5LOIW^@shBD..DTi0"> <mutation delay_input="false"></mutation> <field name="OID">mihome-vacuum.0.control.start</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="O$n@0Bbs!b6:rYlnPbzi"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> </block> </next> </block> </statement> <next> <block type="comment" id=";QOQ^u~%iAD,;8Qb(upY"> <field name="COMMENT">Nach Ende des Zeitfensters, prüfen ob alles funktioniert hat. Falls nicht erfolgt eine Info.</field> <next> <block type="schedule" id="3z,+O3^~)FU_UyAIHE=@"> <field name="SCHEDULE">{"time":{"exactTime":true,"start":"10:00"},"period":{"days":1,"dows":"[1,3,5]"}}</field> <statement name="STATEMENT"> <block type="controls_if" id=".6:yyVl0G{6*p7M?Xoey"> <value name="IF0"> <block type="logic_compare" id="Ahhu:sG^Y#kR((^wbvt1"> <field name="OP">GTE</field> <value name="A"> <block type="get_value" id="?,*DZJBuxi0Q#E73]K%8"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_tage</field> </block> </value> <value name="B"> <block type="math_number" id="Oz7;8vpLf6GB,Y^Z`dVa"> <field name="NUM">4</field> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="Vm~5Sb8Nr.6u)nb0h]Ue"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="7b0,N2SH)eDcW?M~ai]e"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="OX.cm?jyp@?;81y-,N(d"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="d)xaBqW`-eZP!tH70q,c"> <field name="TEXT">Staubsauger seit </field> </block> </value> <value name="ADD1"> <block type="get_value" id="UaBZke7gxbz`dy{o[B!#"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_tage</field> </block> </value> <value name="ADD2"> <block type="text" id="A{q6;[BZ^#L(7SrIj.Gg"> <field name="TEXT"> Tag(en) nicht gefahren</field> </block> </value> </block> </value> </block> </statement> <next> <block type="controls_if" id="XFS0y8^!rC42cq:,+xM="> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_operation" id="^|mu=43;+xaz|eKZmoS." inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="Y%-.mT{Apm[djC._[(9V" inline="false"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="jgu4CfdaY+~TZ:6JW[aS"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id=",OMQ_4IG/d2ceQo[3N0}"> <field name="ATTR">val</field> <field name="OID">custom.0.presence_person1</field> </block> </value> <value name="B"> <block type="logic_boolean" id="R!G|_1f~U(0(kYmM^7aX"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="H4%*jhc1jOZ6@H0G9%or"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="LKg(.0k^!K8J2%qDs;b8"> <field name="ATTR">val</field> <field name="OID">custom.0.presence_person2</field> </block> </value> <value name="B"> <block type="logic_boolean" id="/NO7`/D~`Xa)+B}-.w,q"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="MVua#RKSXClO9FBj03`)"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="dhH{c`.+3KT;{=qw)GO^"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_tage</field> </block> </value> <value name="B"> <block type="math_number" id="DH:!IxX8pZzSE?#1IsCD"> <field name="NUM">-1</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="update" id="]q)4ksUfcZfDToBa:U^H"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.event_eventlist</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="LnF9HF~I;yygPBE@=s_a"> <field name="TEXT">Staubsauger nicht gestartet</field> </block> </value> <next> <block type="telegram" id="8JhWFoPq/,m4324JAbUB"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">TRUE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="yFv6abX!5HVXT:/^wf`("> <field name="TEXT">Staubsauger nicht gestartet, da jemand anwesend.</field> </shadow> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="q+u~O-Ld+)^3%/7)R@H~" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="Cx;w=)/z-7hM|vArMF3U"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="M9.k~*N|=P|t4~}ON_cs"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_tage</field> </block> </value> <value name="B"> <block type="math_number" id="DrTM=5=UWv7#x2UD2`Qb"> <field name="NUM">-1</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="d5?dL?NBf#ASYJc:J3iF"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="p8XfgK149zlYlP-a`X{}"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_skipnextrun</field> </block> </value> <value name="B"> <block type="logic_boolean" id="Q_]1|bJj^3w_Z6FVm6xl"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="update" id="0hb#Zh}1_/pz|Ha;9gb?"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.event_eventlist</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="1%w=~z.OW.hWvq_0tUP*"> <field name="TEXT">Staubsauger nicht gestartet</field> </block> </value> <next> <block type="telegram" id="y$1~tPfv}(nLnxreuTJk"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">TRUE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="cK0c^EGzfQm:](/uk[@N"> <field name="TEXT">Staubsauger aus unbekanntem Grund anscheinend nicht gestartet.</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="control" id="/-mPVir,:oXI=E26$MP2"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.staubsauger_skipnextrun</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="E[HDa#D8a:J`#+,}H32m"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> <next> <block type="comment" id="?bPg3g*e=TXZ_akqL{Za"> <field name="COMMENT">Speichern wenn Staubsauger losfährt.</field> <next> <block type="on_ext" id="0#XI](/%?oam`E7}oi9y"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="sKmC8Mg~?CfE[~~a.qT6"> <field name="oid">mihome-vacuum.0.info.state</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="7Z}Eq~VdF6veyl=pQoR{"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="i=4@~BvJNwc~v,bCZJM|" inline="false"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="c/}8Q`claoW6D=,60Hto"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="m(N;kj7/y/;2lvK@=Ee1"> <field name="ATTR">val</field> <field name="OID">mihome-vacuum.0.info.state</field> </block> </value> <value name="B"> <block type="math_number" id="QHnC@Ss;ZffX+G0iq9zZ"> <field name="NUM">5</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="w`BXDe~H3[YC#aqDE{c1"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="RNUdniJWA_fPyXx8j-Z*"> <field name="ATTR">val</field> <field name="OID">mihome-vacuum.0.info.state</field> </block> </value> <value name="B"> <block type="math_number" id="H~DCtOm#MQ+z2w5%Md{C"> <field name="NUM">17</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="4UQ`fx:-g].mB4~AfjYz"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="cP6NyiMgSr;}=6[?|DTX"> <field name="TEXT">Staubsauger fängt an</field> </shadow> </value> <next> <block type="timeouts_settimeout" id="o?=oUu%pxK_^)]mdBL(%"> <field name="NAME">timeout2</field> <field name="DELAY">60</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="control" id="Nth#`7?m[|yl?*DR{Ntr"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.staubsauger_tage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="?,Pm|G#85CwVCK!dA@3n"> <field name="NUM">-1</field> </block> </value> <next> <block type="debug" id="TSRYP8/4EJ8.tK5MNIxN" disabled="true"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="b3Rn?ttb5Z[5O]gL=vrL"> <field name="TEXT">Staubsauger eine Minute dabei</field> </shadow> </value> </block> </next> </block> </statement> </block> </next> </block> </statement> <statement name="ELSE"> <block type="timeouts_cleartimeout" id="W{-ulwskZ|yOi]7V:c|i"> <field name="NAME">timeout2</field> </block> </statement> </block> </statement> <next> <block type="comment" id="`0dlux[K/}oY`-n2}J0Y"> <field name="COMMENT">Staubsaugerzähler an neuem Tag hochsetzen</field> <next> <block type="schedule" id=":O-MXt!#W~bW98r*O2rd"> <field name="SCHEDULE">{"time":{"start":"00:00","exactTime":true},"period":{"days":1}}</field> <statement name="STATEMENT"> <block type="debug" id="**#bv1g-o^.*)jb?Z#^*"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="5m9`H*b3kHjz6Z)k,Zl3"> <field name="TEXT">Staubsauger Tage Zähler wird hoch gezählt</field> </shadow> </value> <next> <block type="control" id="TEv}wFRQS6SsZf1*3C31"> <mutation delay_input="false"></mutation> <field name="OID">custom.0.staubsauger_tage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="%_m|=__R?Ctd-;/=.Em]"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="bzM`EZDMC*AmsWwejx{#"> <field name="NUM">1</field> </shadow> <block type="get_value" id="i#7RJ/*|w?,6b1mpiW2%"> <field name="ATTR">val</field> <field name="OID">custom.0.staubsauger_tage</field> </block> </value> <value name="B"> <shadow type="math_number" id="@B[LfUqEXmh0ueJr5d-("> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
Screenshots
-
Wollte heute mal dein Spript ausprobieren, konnte es leider jedoch nicht importieren.
Gruß Svenomatt
-
@svenomatt Du hast Recht, ich konnte es auch nicht importieren.
Habe es im ersten Beitrag nochmal als "Code" hochgeladen, jetzt kann man es auch importieren.
Habe zusätzlich auch noch Screenshots hinzugefügt, ggf. braucht jemand nur mal eine Gedankenstütze bei einzelnen Komponenten.