NEWS
Blockly - setStateDelayed mit Fehler in der Umsetzung ?
-
Ich bin jetzt ein paar Tage mit meinem Bewegungsmelder am Kämpfen.
Eigentlich sollte es einfach sein:
-
Bewegung erkannt - Licht an
-
keine Bewegung mehr - Licht in 10 Minuten aus, löschen falls es schon läuft
Das habe ich in Blockly alles schön programmiert, aber mein Licht geht auch schon mal nach 30 Sekunden oder 2 Minuten aus.
Heute habe ich bemerkt, daß das Ausschalten genau immer 10 Minuten nach der Aus-Meldung vom BWM kommt - offensichtlich wird der Timer nicht gelöscht.
Ich verwendete im Blockly "aktualisiere <id>mit <unwahr>, verzögert 10 Min und lösche falls läuft.
Blockly erzeugt dann einen Code:
on({id: "mqtt.0.stat.ArZi-Touch.POWER"/*stat/ArZi-Touch/POWER*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setStateDelayed("admin.0.ArZi-Deckenlampe"/*ArZi-Deckenlampe*/, (value == 'ON'), true, 100, false); });
Nehme ich den Haken bei "löschen falls läuft" weg, kommt das heraus:
on({id: "mqtt.0.stat.ArZi-Touch.POWER"/*stat/ArZi-Touch/POWER*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setStateDelayed("admin.0.ArZi-Deckenlampe"/*ArZi-Deckenlampe*/, (value == 'ON'), true, 100, false); });
Wie man sieht, exakt das gleiche.
Nehme ich statt "aktualisiere" das stärkere "steuere" klappt es und der Code sieht anders aus.
Für mich ist das ein Fehler…</unwahr></id>
-
-
Screenshot des blockly bitte ist einfacher und schneller um zu reagieren [emoji3]
Ich verstehe deine Frage / Problem auch nicht ganz am Ende sagst du es läuft ?
Aktualisiere = ist für variabelen
Steuere = für Zustände
Wen es also mit steuere geht verstehe ich das Problem nicht wobei wir helfen sollen [emoji3]
–-----------------------
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
-
Hallo,
ich schalte da nur Variablen um, die Anbindung an die Schalter etc. liegt in anderen Scripts.
Aktualisiere - die Verzögerung funktioniert, das löschen nicht (immer false).
Steuere - alles funktioniert.
6814_x.gif -
ich verstehen dein blockly komplett gar nicht das mach keinen sinn….
in deinem falls unter debug stehen keine abfrage, falls = value ? was willst du damit erreichen ?
des Weiteren wird bei mache kein timer gelöscht, kannst du mal bitte:
-
genau das scenario posten was du erreichen möchtest.
-
dein blockly exportieren und hier posten (nicht den generierten java code sonder den blocky export !)
Thanks
-
-
in deinem falls unter debug stehen keine abfrage, falls = value ? `
Die Abfrage ist korrekt und entsprichtif(obj.state.val) { // Bewegung erkannt
-
in deinem falls unter debug stehen keine abfrage, falls = value ? `
Die Abfrage ist korrekt und entsprichtif(obj.state.val) { // Bewegung erkannt ```` `
ok verstanden danke Paul
Dan ist der Fehler hier aber das der time nicht resettet wird wen "an" erkannt wurden.
Anstatt mit Verzögerung müsste man in blockly dan mit einen richtigen timeout / stop time out block arbeiten
-
Aktualisiere - die Verzögerung funktioniert, das löschen nicht (immer false).
Steuere - alles funktioniert. `
Ich habe keine Ahnung was Du damit sagen willst.Kann es sein das Dein BM immer nur "true/wahr" liefert?
Grüße
-
Buah…
ich wundere mich hier schon über die versch. Programmier-Exzesse gar nicht mehr ...
mein BWM meldet "true" bei Bewegung und nach 60 Sekunden wieder "false", wenn Ruhe ist:
javascript.0 2018-04-15 20:27:12.787 info script.js.meins.BaZi-Bewegung_folgen(1): BaZi-Bewegung: false javascript.0 2018-04-15 20:26:12.854 info script.js.meins.BaZi-Lampe_schalten: BaZi-Lampe ein javascript.0 2018-04-15 20:26:12.736 info script.js.meins.BaZi-Bewegung_folgen(1): BaZi-Bewegung: true
Die Timer-Konstruktion habe ich versch. ausprobiert, Alles funktionierte nicht.
Jetzt mit "Steuere" statt "Aktualisiere" läuft es. Da ist ein Fehler im Blockly !
Die Variable "value" wird im Kopf des Triggers mit dem Wert des abgefragten Datenpunktes gefüllt und kann dann verwendet werden.
"If true" ist ungeführ so viel wert wie "if true=true".
Über das Löschen des Timers bei BWM=true können wir streiten, da könnte es ein Problem bei ca. 9 Minuten Stillhalten geben…
Der Fehler im Blockly bleibt ja, egal was ich schreibe, wenn das "true" für das Setzen des Timers nicht an Javascript übergeben wird.
-
-
genau das scenario posten was du erreichen möchtest.
-
dein blockly exportieren und hier posten (nicht den generierten java code sonder den blocky export !) `
Das Szenario steht oben im Thread.
Den Blockly könnte ich auch schicken, würde aber nichts bringen, weil man den Fehler nur erkennt, wenn man einfach eine "Aktualisiere"-Anweisung mit Verzögerung und "löschen falls läuft" in Blockly eingibt und auf Code-Anzeige umschaltet. (das hatte ich darum gepostet).
Dann nmmt man in der Blockly-Anzeige den Haken bei "löschen wenn läuft" raus und schaltet wieder auf die Code-Anzeige um. Das gleiche Ergebnis bei versch. Quelltext - ist schon merkwürdig.
Und keine Angst, der Script läuft prima mit einem kleinen XIAOMI-Bewegungsmelder hier. Ich hätte noch 2 Philips Hue-BWM anzubieten, die fliegen nämlich raus.
-
-
Buah…
ich wundere mich hier schon über die versch. Programmier-Exzesse gar nicht mehr ... `
OK. Ich bin hier raus. -
Ok…
Fragen :
-
der Bewegungsmelder gibt einen Wert true (wen Bewegung) und false (wen keine Bewegung) ?
-
diese Daten kommen auch Life rein ohne Verzögerung ?
-
wen Bewegung Dan Licht an ?
-
wen keine Bewegung mehr nach 10 min aus ?
Hab ich das so richtig verstanden ?!?
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
-
-
-
der Bewegungsmelder gibt einen Wert true (wen Bewegung) und false (wen keine Bewegung) ?
-
diese Daten kommen auch Life rein ohne Verzögerung ?
-
wen Bewegung Dan Licht an ?
-
wen keine Bewegung mehr nach 10 min aus ? `
Ja (Timeout 60 Sekunden)
Ja
Ja
Ja (jetzt)
-
-
Das scenarion klinkt nicht kompliziert und ich würde es auf diese weise lösen.
Hierin fragen ich den BMW ab auf Änderungen,
ist Bewegung wahr
-
sollte die Lampe aus sein geht sie an und stopt eventuelle timer
-
sollte die Lampe bereits an sein stoppt nur der time (um doppeltes schalten zu vermeiden
ist Bewegung unwahr
-
aktiviere timer für 10 Minuten
-
schalte nach Ablauf die Lampe aus
blocky export:
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on" id="*?Q;v#g,}Q[X1V;Up{fp" x="-188" y="12"><field name="OID">javascript.2.BWM</field> <field name="CONDITION">ne</field> <statement name="STATEMENT"><block type="controls_if" id="E!w;6q:m.x1q)rPRp*of"><mutation elseif="2"></mutation> <value name="IF0"><block type="logic_operation" id="mp4EeT(Q++deK(RwU0DD" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="MUno8@nbg0a7JhWW~vKl"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="_@f+8i`+Vr.|MhM}cZ?C"><field name="ATTR">val</field> <field name="OID">javascript.2.BWM</field></block></value> <value name="B"><block type="logic_boolean" id="V=P|BryQwCL-N(dCkmo0"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="/YewW0C+po|9+dV4NViz"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="SeOT|8nH7J?].z;uaqCR"><field name="ATTR">val</field> <field name="OID">javascript.2.LAMPE</field></block></value> <value name="B"><block type="logic_boolean" id="rUp5NU#KC.hMl;5;@)e="><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO0"><block type="timeouts_cleartimeout" id="Uv4pkl%j=q.iF?C}CcgH"><field name="NAME">timeout</field> <next><block type="control" id="x=RRVZLmnUU8cb]bMHaI"><mutation delay_input="false"></mutation> <field name="OID">javascript.2.LAMPE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="i[`LOwIbi0zu.VY.*VdM"><field name="BOOL">TRUE</field></block></value></block></next></block></statement> <value name="IF1"><block type="logic_operation" id=",o-p]ifAXEA)8nGpc]~a" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="CoiXrUHg|GH7!,7KZK9V"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="K.Y]V2XQZ4Yl4.fQe2B("><field name="ATTR">val</field> <field name="OID">javascript.2.BWM</field></block></value> <value name="B"><block type="logic_boolean" id="20A1FNRX!m?_PaKsDX{P"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="WP@E:n:2Vv//n{n)K:Fa"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="eN%-(/T*3^BsJ=ZUh^64"><field name="ATTR">val</field> <field name="OID">javascript.2.LAMPE</field></block></value> <value name="B"><block type="logic_boolean" id="|(OxGxW[]_EdVe%Oj9Z8"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO1"><block type="timeouts_cleartimeout" id="%`Vm_V8lA1B7@sy=5JmR"><field name="NAME">timeout</field></block></statement> <value name="IF2"><block type="logic_operation" id="*A%PX0#.v/_wK}#:w*bW" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="_/6@/O}u7j,__%#_?k(0"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="0x4Wp?QlR^mSKqN%OTI("><field name="ATTR">val</field> <field name="OID">javascript.2.BWM</field></block></value> <value name="B"><block type="logic_boolean" id="{NrFe@@PVeBUT@bLb)Jf"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="bz(zT+z-VKVy{Y,hXc;M"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="_,sN(+*m1L{[DU;GknTH"><field name="ATTR">val</field> <field name="OID">javascript.2.LAMPE</field></block></value> <value name="B"><block type="logic_boolean" id="j,5pa`k4D:dSp)4~aWIu"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO2"><block type="timeouts_settimeout" id="J)PH}h)awJQsRU=3j(x*"><field name="NAME">timeout</field> <field name="DELAY">10</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="control" id="!UE9O,@qJU^9Dz`~M,))"><mutation delay_input="false"></mutation> <field name="OID">javascript.2.LAMPE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="dkeuXbFXEikmQ(#*W.,{"><field name="BOOL">FALSE</field></block></value></block></statement></block></statement></block></statement></block></xml>
im unterschied zu deiner ansehensweise setze ich bewusste timer ein und stoppe diese anstatt die Blöcke im Steuerblock
~Dutch
-
-
Ja prima !!!
Fakt ist aber, dass ich soviel Blockly programmieren kann, wie ich will, die Umsetzung in Javascript ist buggy!
Alle beschäftigen sich hier mit Blockly und den tollsten Scripts, niemand sieht den Fehler.
-
Fakt ist aber, dass ich soviel Blockly programmieren kann, wie ich will, die Umsetzung in Javascript ist buggy!
Alle beschäftigen sich hier mit Blockly und den tollsten Scripts, niemand sieht den Fehler. `
Wo du Recht hast…Hab mal ein Issue erstellt: https://github.com/ioBroker/ioBroker.ja ... issues/105
-
Ja prima !!!
Fakt ist aber, dass ich soviel Blockly programmieren kann, wie ich will, die Umsetzung in Javascript ist buggy!
Alle beschäftigen sich hier mit Blockly und den tollsten Scripts, niemand sieht den Fehler. `
Bin zwar schon raus…..Aber....welchen Fehler?Bis jetzt sehe ich nur einen Fehler :roll:
Sorry, ist sonst nicht meine Art.
-
Ja prima !!!
Fakt ist aber, dass ich soviel Blockly programmieren kann, wie ich will, die Umsetzung in Javascript ist buggy!
Alle beschäftigen sich hier mit Blockly und den tollsten Scripts, niemand sieht den Fehler. `
Bin dann wohl zu doof den Fehler zu sehen oder umgehen ihn halt auf meine Weise.
Bin dann auch raus
–-----------------------
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
-
Hab mal ein Issue erstellt: https://github.com/ioBroker/ioBroker.ja … issues/105 `
Das wird ja her immer interessanter :?Ab welchem Status/Level kann man sich hier zeitlich "vormogeln".
Ich verliere hier immer mehr die Lust
Grüße
-
Dein Datenpunkt für die Lampe liegt unter admin.0, dort (und auch unter allen anderen, außer javascript.0 und selbst angelegten Objekten) sollten keine eigenen Objekte angelegt werden, das hat auch schon zu Fehlern in der Ausführung von Scripten geführt!
Enrico
-
Ab welchem Status/Level kann man sich hier zeitlich "vormogeln".
Ich verliere hier immer mehr die Lust `
Hö, was meinst du?