NEWS
Timeout in Blockly funktioniert nicht
-
Hallo zusammen,
ich bin dabei mich mit dem ioBroker auseinanderzusetzen um eine Haussteuerung zu realisieren.
Da meine Javascript Kenntnisse eher gering sind setze ich bei den Skripten auf Blockly und habe begonnen einfache Skripte (Lampe an, Fernseher aus) zu schreiben.
Um der Fernseher auszuschalten benötige ich erstmal ein Infrarotsignal, dann eine Pause und zum Abschluss ein 433Mhz Kommando. Die Pause lässt sich mit einem Timeout jedoch nicht schalten, die Befehle rattern direkt durch.
Hier der Code:
timeout = setTimeout(function () {
}, 10000);
Dieser soll eine 10 Sekundenpause bewirken, macht aber scheinbar garnichts. Kann mir da bitte jemand weiterhelfen?
Kleine Anmerkung noch, es funktioniert auch nicht, wenn ich den "Falls Objekt"-Block in den Timeout Block ziehe.
Vielen Dank schonmal.
LG
Steffen
4846_timeout.jpg -
Du hast leider nur einen kleinen Ausschnitt aus deinem Blockly gezeigt.
Alles, was du über den Timeout verzögern willst, muss in den Timeout! Und auch aufpassen, dass der Timeout nicht mehrfach gestartet werden kann, bzw. darauf achten, bei bestimmten Bedingungen den Timeout sicherheitshalber stoppen.
Enrico
-
Hallo und vielen Dank für die Antwort.
D.h. mein erster Ansatz die Bedingung innerhalb des Timeouts zu platzieren war doch richtig (sah auch logischer aus).
Wobei dieser Aufbau die Problematik nicht behebt, anbei der ganze Block für meinen Fernseher. Die Befehle werden nahezu gleichzeitig ausgegeben.
LG
Steffen
4846_timeout2.jpg -
mach mal bitten einen export von deinem block das ist einfacher
Dein blockly stimme nicht, die timeouts sind auserhalb der trigger machen also ueberhaupt garnichts
Wozu ist die variable/object Fernseh switch ?
die timeouts gehoren in die "mache" deines falls blocks und die bloecke "steuere" innerhalb dieses timeouts
-
Hallo,
danke für die Antwort, ich hoffe ich habe das mit dem Export richtig verstanden:
var timeout3, timeout, timeout2;
timeout3 = setTimeout(function () {
setState("broadlink.0.learnedSignals.FernsehSwitch"/FernsehSwitch/, true);
}, 15000);
timeout = setTimeout(function () {
on({id: 'broadlink.0.learnedSignals..Fernseher', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("broadlink.0.learnedSignals..Fernseher").val == true) {
setState("broadlink.0.learnedSignals.FernseherAn"/FernseherAn/, true);
} else if (getState("broadlink.0.learnedSignals..Fernseher").val == false) {
setState("broadlink.0.learnedSignals.FernseherAus"/FernseherAus/, true);
}
});
}, 10000);
timeout2 = setTimeout(function () {
setState("broadlink.0.learnedSignals.FernsehSwitch"/FernsehSwitch/, true);
}, 15000);
Der Fernsehswitch emuliert einmal den Ein/Aus Schalter der Fernbedienung, vom Gedanken her, Fernseher in Standby…warten und Steckerleiste aus. Bzw. Steckerleiste an...warten und Fernseher vom Standby auf an.
Ich verstehe leider nicht ganz wie ich die Timeouts "in" die Trigger einbauen kann.
LG
Steffen
-
Fast richtig ich brauche den blockly Export nicht das generierte Script, geh Mal auf die Pfeiltasten und dann exportiere blockly
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Wobei dieser Aufbau die Problematik nicht behebt, anbei der ganze Block für meinen Fernseher. Die Befehle werden nahezu gleichzeitig ausgegeben. ` Hallo
Timeouts machen KEINE Programmpause!
Die nachfolgenden Befehle werden direkt danach ausgeführt.
Die Befehle INNERHALB des Timers werden NACH der abgelaufenen Zeit des Timers ausgeführt.
Die Anweisungen IN "Timerout" werden 10 Sek. nach Scriptstart,
"timeout2" UND "timeout3" werden 15 Sek nach Scriptstart ausgeführt.
Grüße
PS.
Du hast keinen Blockly Export gemacht sondern das Script kopiert.
Einen Export macht man hier.
Den Export dann immer in den Tags "spoiler" und "code" in den Beitrag einfügen.
-
Hello,
oha, ich sehe schon, hab noch viel zu lernen!
Wobei die Ausführung des Skripts nicht abläuft wie Rantanplan aufgezeigt hat, das Ding rattert ohne Verzögerung direkt beim Start los und sendet scheinbar alle drei Befehle auf einmal?!
Hier der Blockly-Export:
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="timeouts_settimeout" id=":R19h()#3b:wj+MHuOrO" x="162" y="13"><field name="NAME">timeout3</field> <field name="DELAY">15</field> <field name="UNIT">sec</field> <statement name="STATEMENT"><block type="control" id="FwGXK}r@Mad]|mB]A~8@"><mutation delay_input="false"></mutation> <field name="OID">broadlink.0.learnedSignals.FernsehSwitch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="#iWGR}~b^s@HWOEg,Aqd"><field name="BOOL">TRUE</field></block></value></block></statement> <next><block type="timeouts_settimeout" id="*L8vt+g*idPqggl-]ini"><field name="NAME">timeout</field> <field name="DELAY">10</field> <field name="UNIT">sec</field> <statement name="STATEMENT"><block type="on_ext" id="z9%E+s(WEefq(I3*FP*0"><mutation items="1"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id="*%Ed+(aG1MTyqOC)R-wq"><field name="oid">broadlink.0.learnedSignals..Fernseher</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="c]7K4Hu%{Ow8mYr:dwyF"><mutation elseif="1"></mutation> <value name="IF0"><block type="logic_compare" id="@B|3xRB2^T1nF{ma]T]Y"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="5.iuLn0srwVI@`Vl^yzS"><field name="ATTR">val</field> <field name="OID">broadlink.0.learnedSignals..Fernseher</field></block></value> <value name="B"><block type="logic_boolean" id="-m=[JUAf.=+Iy)M/j#-]"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="control" id="LVN;Pn`pmn[YUk3-5@V."><mutation delay_input="false"></mutation> <field name="OID">broadlink.0.learnedSignals.FernseherAn</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="?QK|/o`Tzsj!*?4tItQQ"><field name="BOOL">TRUE</field></block></value></block></statement> <value name="IF1"><block type="logic_compare" id="^i`GDbk)D2(:X.}r13#I"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="#+xZJuJZ*.vI:1n}Zm|X"><field name="ATTR">val</field> <field name="OID">broadlink.0.learnedSignals..Fernseher</field></block></value> <value name="B"><block type="logic_boolean" id=";7LeNZ5Q]n:aRGS4)Edf"><field name="BOOL">FALSE</field></block></value></block></value> <statement name="DO1"><block type="control" id="w(3Q?()kE/Hr/Beue]/a"><mutation delay_input="false"></mutation> <field name="OID">broadlink.0.learnedSignals.FernseherAus</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="Gx{@]eO6RfavN5kx^Wvm"><field name="BOOL">TRUE</field></block></value></block></statement></block></statement></block></statement> <next><block type="timeouts_settimeout" id="4bpRe8;_IZc;}3##;U0p"><field name="NAME">timeout2</field> <field name="DELAY">15</field> <field name="UNIT">sec</field> <statement name="STATEMENT"><block type="control" id="}vT7xTp|^a+|x?1yHF=D"><mutation delay_input="false"></mutation> <field name="OID">broadlink.0.learnedSignals.FernsehSwitch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="~H1*PJ59;)5d)F{%a?`G"><field name="BOOL">TRUE</field></block></value></block></statement></block></next></block></next></block></xml>
LG
Steffen
-
Hello,
hat keiner mehr ne Idee oder übersehe ich etwas offensichtliches? :?:
SG
Steffen
-
Hello,
hat keiner mehr ne Idee oder übersehe ich etwas offensichtliches? [emoji780]
SG
Steffen `
Könntest du mal bitte einen Screenshot deiner Blöcke Posten?
Bin um ehrlich zu sein zu faul um von tapatalk nach pc zu gehen und einen Import machen um zu sehen was du gebastelt hast
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
hat keiner mehr ne Idee oder übersehe ich etwas offensichtliches? :?: `
Offensichtlich machst Du alles falsch was man nur falsch machen kannst.Sorry, aber liest Du hier auch mal, hier im Forum, einige Beiträge zu Blockly?
Heute ist es schon etwas spät.
Ich weis auch nicht richtig was Du machen willst.
Kannst Du das mal etwas näher beschreiben?
Wenn wir wissen was Du machen willst, kriegen wir das schon hin.
Grüße
PS.
Export in SPOILER UND code
(Erst "spoiler" und dann "code" klicken)
-
Hallo zusammen,
Schritt 1 war natürlich die Forensuche, in älteren Versionen gab es sogar einen wait-Block, der in der aktuellen Version leider nicht mehr vorkommt.
Ich versuche mittels io.Broker ein Skript für Amazon Alexa zu erstellen, welches den Fernseher in den Standby versetzt und dann die Steckerleiste ca. 10 Sekunden später ausmacht (Sender ist ein Broadlink).
Problem ist, dass die Kommandos nahezu parallel gesendet werden und der Fernseher keine Zeit hat in den Standby zu gehen.
Anbei der Screenshot des Codes. Danke für eure Hilfe.
SG
Steffen
4846_timeout2.jpg -
Hallo zusammen,
Schritt 1 war natürlich die Forensuche, in älteren Versionen gab es sogar einen wait-Block, der in der aktuellen Version leider nicht mehr vorkommt.
Ich versuche mittels io.Broker ein Skript für Amazon Alexa zu erstellen, welches den Fernseher in den Standby versetzt und dann die Steckerleiste ca. 10 Sekunden später ausmacht (Sender ist ein Broadlink).
Problem ist, dass die Kommandos nahezu parallel gesendet werden und der Fernseher keine Zeit hat in den Standby zu gehen.
Anbei der Screenshot des Codes. Danke für eure Hilfe. `
Schritt 1 kann ich fast nicht glauben.In jedem gefühlten zweiten Thread zu Blockly geht es um "Trigger" und "Timeouts"
Und sehr häufig steht da "…alles was außerhalb eines Triggers steht, wird EINMALIG bei Scriptstart ausgeführt."
"...Timeouts unterbrechen NICHT den Programmablauf." usw. usw....
(einen wait-Block habe ich in Blockly noch nie gesehen)
Doch nun zu Deinem Blockly.
"FernsehSwitch" ist die Steckerleiste?
Was ist/macht "Fernseher", "FernseherAn" und "FernseherAus" ?
Ein bisschen mehr Infos wäre schön.
Dann kriegen wir das auch hin.
-
Wenn ich es richtig verstehe wird FernsehSwitch getoggled (an-aus-an-aus)
Es gibt keine Unterscheidung von "wahr" oder "unwahr" beim FernsehSwitch - korrekt?
Und wenn ich weiterhin deine Aufgabe richtig verstanden habe, dann lautet diese:
1.) Wenn Fernsehen = wahr dann schalte die Steckdose für den Fernseher ein und 15 Sekunden später den Fernseher selber (damit die Steckdose bereit ist)
2.) Wenn Fernseher = unwahr, dann schalte erst den Fernseher aus und 10 Sekunden später die Steckdose (damit der Fernseher auch wirklich aus ist)
[Nachtrag]
Ich sehe gerade, dass Du alles was ich bis hier geschrieben habe ja beinahe wortwörtlich so in deinem ersten Post steht 8-)
Das würde ich dann sehr simpel "mit Verzögerung" so wie im Screenshot lösen.
1917_tv_mit_verzoergung.png -
-
Wenn der Fragende mal antworten würde und ein wenig Infos liefert, müsste man nicht raten. ` Er ist ja noch neu an Bord, helfen wir ihm sich zurecht zu finden
-
Er ist ja noch neu an Bord, helfen wir ihm sich zurecht zu finden `
Hmmm….Von Dir kann ich noch was lernen