NEWS
Laufende Skripte beenden
-
Hallo zusammen,
ich sitze gerade vor einem Fall für den ich noch keine optimale Lösung habe (welche auch die Frau versteht/akzeptiert).
Einfache Frage: Kann man manuell einzelne laufende Skripte wieder beenden? Wenn ja wie.
Hintergrund:
Ich habe 20 Blockly Skripte für unsere Fenster. Wenn eines geöffnet wird, dann beginnt das Skript nach 15 Minuten die erste Ansage (schließen) auszuführen, dann nach 30 und 45 Minuten.
Wenn nun ein Fenster geöffnet wird, dann kann das Skript nur beendet werden, wenn man das Fenster schließt.
Das kollidiert mit dem Wunsch nachts im Schlafzimmer das Fenster offen zu lassen.
Als erste Lösung habe ich ein weiteres Skript, dass die Skripte für 2 Stunden deaktiviert (komplett unter iobroker admin > Skripte). Damit kann man quasi die erste Prüfung umgehen und da dann keine weitere Statusänderung erfolgt, wenn die Skripte wieder gestartet werden, ist man safe.
Wenn jetzt aber meine Frau oder ich diesen Schritt vergessen werden die Skripte gestartet und das deaktivieren über mein Blockly Skript hilft nicht, da die Skripte im Hintergrund schon laufen.
Einzig das beenden und neustarten des javascript-Adapters oder das schließen des Fensters hilft.Des Weiteren die Frage ob das anders (20 finde ich schon viel und 1 Skript wäre deutlich besser wartbar) sinnvoller lösbar ist? Ich dachte immer das geht über die Aufzählungen, aber damit komme ich leider noch nicht klar.
Hier mal ein Skript als Blocky-Export:
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="[%K=f=r;m(G(pk=obCWv">foStufe</variable> <variable type="undefined" id="fo">fo</variable> </variables> <block type="on" id="oPQBb`_P]rd0GY{74W!V" x="38" y="38"> <field name="OID">hm-rpc.0.OEQ0702503.1.STATE</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="[4o~NeJHE6%i[quLygVT"> <mutation else="1"></mutation> <value name="IF0"> <block type="get_value" id="|+zhk1c4(R@L2)4_hHN5"> <field name="ATTR">val</field> <field name="OID">hm-rpc.0.OEQ0702503.1.STATE</field> </block> </value> <statement name="DO0"> <block type="variables_set" id="V/J*mk+wt@cNh.~c~|Hg"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> <value name="VALUE"> <block type="math_number" id="h~2*8?wvnLP;HzV2B*-O"> <field name="NUM">0</field> </block> </value> <next> <block type="timeouts_setinterval" id="4Ipx_czxnJF[k~P]TDeI"> <field name="NAME">fo</field> <field name="INTERVAL">15</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="debug" id="*QrYR~68tya0C@)WA0Kn"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="PDeV(L;u!{M[tLW%j*1l"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="ohwsWhQ4w=EIsY.hgq:3"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> </block> </value> <next> <block type="controls_if" id="i*~mRXT=z)ZX3!4UB}_W"> <value name="IF0"> <block type="logic_compare" id="w;f0*@VX@YKv4g16O#NE"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id=")]uoz(=d:noNL@`-bODO"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> </block> </value> <value name="B"> <block type="math_number" id="Y]3wOvWgrJ]|a25dR0(="> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="yb:l|W]+Ag`#+.C9Ahi}"> <mutation delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G2A0P30774320JKV.Commands.speak</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="U?p]k0V*r#Ljk4*,Z9W/"> <field name="TEXT">Das Schlafzimmerfenster ist seit 15 Minuten offen, bitte schließen.</field> </block> </value> <next> <block type="pushover" id="X-W!3Eh1*HR9,87!wLa#"> <field name="INSTANCE">.0</field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="anexqm^gh]vp;u#~8E!J"> <field name="TEXT">Das Schlafzimmerfenster ist seit 15 Minuten offen, bitte schließen.</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="controls_if" id="IGj.Mi2t8XTHSl)4cVWa"> <value name="IF0"> <block type="logic_compare" id="N!l}Up_=?bp{M-E(wq_y"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="Oopntm.6];:s~,hZ,aD~"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> </block> </value> <value name="B"> <block type="math_number" id="9pD3/M/^3^5Z?DR0[AOZ"> <field name="NUM">1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="-`7B4%~^yE)a`-96](J7"> <mutation delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G2A0P30774320JKV.Commands.speak</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="Gy9@RZMzg-uj{c2?+*kd"> <field name="TEXT">Das Schlafzimmerfenster ist seit 30 Minuten offen, bitte schließen.</field> </block> </value> <next> <block type="pushover" id="9TEI0Xco/.5C0,1PE%uP"> <field name="INSTANCE">.0</field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="?oCXF/_oss{^wVS_pk7D"> <field name="TEXT">Das Schlafzimmerfenster ist seit 30 Minuten offen, bitte schließen.</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="controls_if" id="=}:h+cXQcLZF@r`bJ.H4"> <value name="IF0"> <block type="logic_compare" id="/E!eyN6#)X)c{do}BWmY"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="wPJspfKO+.+8~SN+(Eib"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> </block> </value> <value name="B"> <block type="math_number" id="FEDb73c0:d,EMrzw2gKu"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="K=y-mRhfw.LTrX6G?tJ+"> <mutation delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G2A0P30774320JKV.Commands.speak</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="BiqS{/{|{B6Gjuh!.^xa"> <field name="TEXT">Das Schlafzimmerfenster ist seit 45 Minuten offen, bitte schließen.</field> </block> </value> <next> <block type="pushover" id="81SiS=OG@]X?c6ify1sq"> <field name="INSTANCE">.0</field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="@xFTv:OnvG=L;vS*!|O("> <field name="TEXT">Das Schlafzimmerfenster ist seit 45 Minuten offen, bitte schließen.</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="controls_if" id="P|4^{{03=^-;t.*m8Q`*"> <value name="IF0"> <block type="logic_compare" id="2XCS,`OeP4l;nhR6kFzM"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="jdvWf=LO|Gu|4VQP;o=^"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> </block> </value> <value name="B"> <block type="math_number" id="mXwv^jW`UcYn6Bt2b-QK"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="T+Wjy`|.WT6iX}Ji3]5@"> <mutation delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G2A0P30774320JKV.Commands.speak</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="2]P4[^D;*Z`UpgBJ[ev*"> <field name="TEXT">Heizung wird deaktiviert, das Schlafzimmerfenster ist seit mehr als 45 Minuten offen.</field> </block> </value> <next> <block type="pushover" id="{CT(uzD51OR2v{)=aM@f"> <field name="INSTANCE">.0</field> <field name="SOUND"></field> <field name="PRIORITY">0</field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="-?//~TUjY;9{9/DqEJ7N"> <field name="TEXT">Heizung wird deaktiviert, das Schlafzimmerfenster ist seit mehr als 45 Minuten offen.</field> </shadow> </value> </block> </next> </block> </statement> <next> <block type="variables_set" id="D9kN8#Y;IRO|GNFsTJ{%"> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> <value name="VALUE"> <block type="math_arithmetic" id="(.GoT(2*iPBoQ_)a2fqr"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="l.^x]u_gAA*kxS9l^(YU"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="DTGC!-a}G1ca3*{Y{F/="> <field name="VAR" id="[%K=f=r;m(G(pk=obCWv" variabletype="">foStufe</field> </block> </value> <value name="B"> <shadow type="math_number" id="P13/@Ubv//pK,.|HeZtE"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> <statement name="ELSE"> <block type="timeouts_clearinterval" id="OUHlkH9;v@~+|)91%]s2"> <field name="NAME">fo</field> </block> </statement> </block> </statement> </block> <block type="math_number" id="kvFL:GhU`uccLGMzy@[r" x="412" y="654"> <field name="NUM">1</field> </block> </xml>
-
@Buddinski88 sagte in Laufende Skripte beenden:
sinnvoller lösbar
ein zweiter Datenpunkt "SollOffenSein" vom Typ Logik, der womit auch immer abends auf true gesetzt wird mit einbauen.
-
@Homoran das ist eine gute Idee. Das Skript würde im Hintergrund dann aber weiterlaufen oder?
-
@Buddinski88 sagte in Laufende Skripte beenden:
Das Skript würde im Hintergrund dann aber weiterlaufen
So soll es ja auch sein...
...und warten, dass etwas passiert
-
@Homoran ok danke, damit komme ich klar. In der Regel sind das ja nur wenige Fenster die länger offen sind.
Hast du mir vielleicht noch einen Ansatz / Hinweis wie ich aus den vielen Skripten das in eines schieben kann und dann je nach Veränderung darauf reagieren kann?
-
Ich würde versuchen, die aktuelle Zeit mit einer Zeit in der Nacht zu vergleichen um dann eine weitere Variable, wie von @Homoran vorgeschlagen, zu triggern und das in deine Skripte einzubauen.
Ansonsten kann ich dein Skript nicht bei mir importieren, kannst du nochmal exportieren? -
Dann baue ich noch mal eine Variable ein, aber in dem Schritt schaue ich auch mal ob man die Skripte nicht vereinheitlichen kann.
Anbei noch mal das Skript als Upload (script-schlafzimmerfenster).
Bin mir nicht sicher ob da das Forum evtl. etwas abschneidet. -
Leider bleibt es beim Fehler. Abschneiden glaube ich eher nicht, da das in der Regel sehr gut funktioniert...
-
@XxJooO sagte in Laufende Skripte beenden:
Leider bleibt es beim Fehler. Abschneiden glaube ich eher nicht, da das in der Regel sehr gut funktioniert...
Du musst den Adapter pushover installieren............
-
@Buddinski88 sagte:
sinnvoller lösbar ist?
Man kann alles in ein Skript packen, muss dann allerdings die Variablen zeit01 und fo01 für jeden der 20 Trigger durchnummerieren.
-
@sigi234 sagte in Laufende Skripte beenden:
@XxJooO sagte in Laufende Skripte beenden:
Leider bleibt es beim Fehler. Abschneiden glaube ich eher nicht, da das in der Regel sehr gut funktioniert...
Du musst den Adapter pushover installieren............
Danke! Auch was gelernt...
-
@XxJooO sagte in Laufende Skripte beenden:
Leider bleibt es beim Fehler.
Hast du den pushover Adapter installiert?
-
@Homoran sagte in Laufende Skripte beenden:
@XxJooO sagte in Laufende Skripte beenden:
Leider bleibt es beim Fehler.
Hast du den pushover Adapter installiert?
@XxJooO sagte in Laufende Skripte beenden:
Du musst den Adapter pushover installieren............
Danke! Auch was gelernt...
-
@sigi234 sagte in Laufende Skripte beenden:
@Homoran sagte in Laufende Skripte beenden:
@XxJooO sagte in Laufende Skripte beenden:
Leider bleibt es beim Fehler.
Hast du den pushover Adapter installiert?
@XxJooO sagte in Laufende Skripte beenden:
Du musst den Adapter pushover installieren............
Danke! Auch was gelernt...
Irgenndwas stimmt mit dem forum nicht.
Immer wieder stelle ich fest, dass nach einer Antwort weitere Posts zu sehen sind, die vor/bei der Antwort noch nicht da waren.
Teilweise sind diese posts schon mehrere stunden alt.So auch diesmal
-
@paul53 sagte in Laufende Skripte beenden:
@Buddinski88 sagte:
sinnvoller lösbar ist?
Man kann alles in ein Skript packen, muss dann allerdings die Variablen zeit01 und fo01 für jeden der 20 Trigger durchnummerieren.
Danke für das Skript! Echt mega. Kannst du mir noch auf den Sprung helfen wo ich die zwei Variablen deklarieren muss?
Ich vermute es hat was mit dem "zweiten Block" in deinem Skript zu tun, wenn der Status des Fensters geändert wurde?
Deklariert der Block "Ansage mit Fenster", dann immer den Namen des Fensters und Zeit wird dann spezifisch zu dem Fenster gesetzt? -
@Buddinski88 sagte:
Deklariert der Block "Ansage mit Fenster", dann immer den Namen des Fensters und Zeit wird dann spezifisch zu dem Fenster gesetzt?
"Ansage mit: fenster, minuten" ist eine gemeinsame Funktion, die aus jedem Triggerblock aufgerufen wird. Als Parameter "fenster" wird der Textanfang, als Parameter "minuten" wird die abgelaufene Zeit übergeben. Diese Werte sind also für jedes Fenster individuell.
Der Tiggerblock (einer für jedes Fenster) lässt sich kopieren und anschließend muss man die Trigger-ID, die Variable zeitNN und den Fenstertext neu zuweisen. Die Variablen zeit02 bis zeit20 müssen unter "Variablen" neu erstellt werden.
Etwa so:
-
Vielen Dank, @paul53. Ich Werde das heute Abend mal so umsetzen und dann berichten. Ich hoffe das ich irgendwann auch mal so sinnvollen Content beitragen kann.
-
Hallo zusammen. Ich mache mal dieses alte Thema wieder auf, weil ich die gleiche Fragestellung habe, die aber mMn gar nicht in diesem Thema beantwortet wurde.
Das Thema heißt ja "Laufende Skripte beenden" und genau das brauche ich - eine Möglichkeit, ein angestoßenes, in der Ausführung befindliches Skript abzubrechen.
Hintergrund: Wird eine Tür/ein Fenster bei aktivierter "Alarmanlage" geöffnet, kommt der Hinweis, dass die Alarmanlage scharf ist und nach 15 Sekunden Alarm gegeben wird. Das passiert dann auch mittels lauter Ansagen von diversen Echos und Alarmsirenen, Rauchmeldern sowie kompletter Beleuchtung im ganzen Haus. Natürlich möchte ich innerhalb der angegebenen 15 Sekunden den ganzen Zirkus abbrechen können - etwa, wenn man nach Hause kommt.
Realisiert wird das über Sensoren an den Zugängen und einen virtuellen Schalter, der einen Nachtmodus aktiviert/deaktiviert. Ist er aktiviert, passiert das Beschriebene - sonst natürlich nicht. Die Zeitverzögerung realisiere ich derzeit mittels Timeout. Leider kann ich den Nachtmodus ruhig innerhalb der 15 Sekunden beenden, sodass der Auslöser (Tür/Fenster auf UND Nachtmodus aktiv) nicht mehr vorhanden ist, aber das hindert die Regel nicht, trotzdem weiter und dann eben Krawall zu machen...
Daher die ursprüngliche Frage: Kann man laufende Regeln abbrechen? Oder sieht jemand alternativ einen Workaround?
LG
-
@schomby sagte: Kann man laufende Regeln abbrechen?
Der Timeout kann gestoppt werden.
-
@paul53 Danke für den Hinweis - aber funktioniert das auch, wenn ich in Regel A den Timeout starte und in/mit Regel B abbrechen will...?