NEWS
[gelöst]_Blockly Script - Fehlermeldung im Log
-
Hallo,
Ich habe mich mal an ein erstes eigenes Blockly-Script gewagt - u. es auch hinbekommen dass es funktioniert.
Der Haken an der Sache hab noch eine blöde Fehlermeldung für die ich den Grund nicht erkennen kann:
javascript.1 2017-08-23 09:55:30.321 info script.js.TEST.Hauswasserpumpe_mit_Zeit: registered 2 subscriptions and 0 schedules
javascript.1 2017-08-23 09:55:30.320 info Start javascript script.js.TEST.Hauswasserpumpe_mit_Zeit
javascript.1 2017-08-23 09:55:29.949 error unsubscribe: invalid type of id - boolean
javascript.1 2017-08-23 09:55:29.946 info Stop script script.js.TEST.Hauswasserpumpe_mit_Zeit
javascript.1 2017-08-23 09:55:12.788 info script.js.TEST.Hauswasserpumpe_mit_Zeit: registered 2 subscriptions and 0 schedules
javascript.1 2017-08-23 09:55:12.788 info script.js.TEST.Hauswasserpumpe_mit_Zeit: setInterval(ms=900000)
javascript.1 2017-08-23 09:55:12.788 info script.js.TEST.Hauswasserpumpe_mit_Zeit: subscribe: {"pattern":
Hier noch das Script:
Vielleicht hat jemand eine Idee ?!
Grüße
crepp
-
Nimm mal oben den Vergleich weg und stattdessen nur das Objekt, da wo du auf Änderung prüfst.
dna909
-
Interval habe ich selbst noch nicht ausprobiert.
Aber so würde ich anfangen:
Licht_Kueche machst du entsprechend den Uni.schalter. Brauchst nicht den Umweg über Lampe EIN / AUS.Die "1" habe ich aus dem Mathematik-Bereich… vielleicht geht "Text" genauso.
Blockly Import:
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="U%/c~}R5Nm|qv^w|]Q}+" x="-63" y="63"><mutation items="1"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow type="field_oid" id="A=r*%tJ+RWq^Dbn%58Ei"><field name="oid">default</field></shadow> <block type="get_value" id="ac%T6U,/6?N/L}v]_rwY"><field name="ATTR">val</field> <field name="OID">hm-rpc.0.LEQ0183615.2.POWER</field></block></value> <statement name="STATEMENT"><block type="controls_if" id="Fxr!SM9(4USywceEXgOb"><value name="IF0"><block type="logic_compare" id="S!Y.4HLQK!9=xzgpMrW`"><field name="OP">LTE</field> <value name="A"><block type="get_value" id="_mTde=TtB`hDJ37BOj)H"><field name="ATTR">val</field> <field name="OID">hm-rpc.0.LEQ0183615.2.POWER</field></block></value> <value name="B"><block type="math_number" id="*9wtxmuP2X-GB_lu+J`j"><field name="NUM">1</field></block></value></block></value> <statement name="DO0"><block type="timeouts_setinterval" id="MB2]:kl84~dCeL,77l~C"><field name="NAME">Intervall</field> <field name="INTERVAL">15</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="control" id="G;#hP6(R#~_dyCk:+b.,"><mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.KEQ0198416.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id=";gRg,c#0Pg+Q%2c!e:|G"><field name="BOOL">TRUE</field></block></value> <next><block type="control" id="vB9~6GT0CvVkI%ROKUfP"><mutation delay_input="true"></mutation> <field name="OID">hm-rpc.0.KEQ0198416.1.STATE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">10</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="VALUE"><block type="logic_boolean" id="%+^msqfudBKC9J(|gP-e"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></statement></block></statement></block></xml>
-
Habe jetzt den Vergleich rausgenommen, Die Fehlermeldung im Log kommt aber immer noch…
-
Nachtrag:
Sie kommt allerdings nur beim Speichern des Scripts - während der Ausführung alle 15min kommt kein Fehler …
-
Habe jetzt den Vergleich rausgenommen, Die Fehlermeldung im Log kommt aber immer noch…
Unbenannt.PNG `
Nee, gemeint war der Vergleich oben im Trigger.Im Trigger schaust du nur ob sich der Wert ändert. Da drunter prüfst du ob der geänderte Wert Power < 1 ist. Und bei der "1" kannst mal testen den Wert von "Mathematik" anstatt "Text" zu nehmen.
Edit: der ursprüngliche Vergleich macht auch nicht wirklich Sinn… es sei denn es soll in den zwei Minuten nichts passieren... also 00:00 bis 00:01 und 23:59 bis 24:00 Uhr.
-
Die Fehlermeldung im Log kommt aber immer noch… ` Du fragst nach Unterstützung, und dennoch setzt du <u>NICHTS</u> von dem um was dir von lobomau empfohlen wird …
"1" ist noch immer ein "String" und keine "Zahl"
Dein timeout ist <u>nicht Bestandteil</u> deines Triggers, sondern hängt teilnahmslos unterhalb des selbigen.
Du legst Variablen an, anstatt die Kommandos direkt umzusetzen …
:oops:
ich verstehe dich nicht :!: :oops:
-
Ich bin noch ein Anfänger im scripten mit Blockly. das sei hier gesagt…
Das die Zeiteingrenzung sinnlos war habe ich selbst gemerkt und deswegen auch rausgenommen.
Das mit dem Trigger habe ich nicht richtig verstanden zugegeben.
Ansonsten bemühe ich mich schon die Tipps umzusetzen. Werde heute abend nochmal rangehen und dann hier berichten.
Trotzdem erstmal vielen Dank für Eure Tipps.
Gruß
crepp
-
Hallo crepp!
@crepp:Ich bin noch ein Anfänger im scripten mit Blockly `
Das macht doch nichts, dafür helfen wir ja, damit sich das ändert.Das mit dem Trigger habe ich nicht richtig verstanden `
Dann bitte sofort nachfragen, ansonsten müssen wir glauben, das alles klar ist, und umso größer ist dann die Verwunderung wenn du Dinge tust, die wir dann nicht nachvollziehen können.Bitte in Zukunft Schritt für Schritt genau das (und nur das) machen, was gesagt wird.
Alles was unklar ist bitte sofort nachfragen.
Gruß
Rainer
-
Das mit dem Trigger habe ich nicht richtig verstanden zugegeben. `
Mit einem Trigger reagiert man auf Zustandsänderungen.Suche hier mal im Forum nach Blockly, da gibt es schon genügend Beispiele und Erklärungen.
@crepp:Ansonsten bemühe ich mich schon die Tipps umzusetzen. Werde heute abend nochmal rangehen und dann hier berichten.
Trotzdem erstmal vielen Dank für Eure Tipps. `
Drann bleiben. Wir helfen gerne.Grüße
-
Hab jetzt so, wie ich Eure Anleitung verstanden habe, umgesetzt, jetzt funkt das Script jedoch nicht mehr und die Fehlermeldung im Log ist immer noch da.
Gruß
crepp
686_unbenannt.png -
Hallo crepp
Nicht eine Bedingung/Verkleich triggern!
Sondern einen Datenpunkt Deines Aktors.
Ist "Power" ein Datenpunkt bei dem Aktor?
Welche Zustände kann der annehmen? true/false 0/1.
Das kannst Du im Reiter "Objekte" überprüfen.
Bei meinem Beispiel wird der Datenpunkt ".State" einer Steckdose überwacht/getriggert.
Dieser Datenpunkt kann wahr/true oder unwahr/false sein.
Schreibe uns doch die Datenpunke von dem Adapter oder was das für einer ist.
Grüße
-
Hallo,
Der Datenpunkt ist der Stromstärke-Messkanal meiner Steckdose. Ich frage damit ab, ob die angeschlossene Pumpe läuft (unter 1mA) oder nicht. Wenn nicht, schalte ich die Steckdose aus und nach 10sec wieder an. Damit reseste ich die Pumpe die evtl. mit einer Fehlermeldung steht. Dies will ich zukünftig in Abständen von 10-15min machen.
Hier mein jetziges Script mit den von dir empfohlenen Änderungen:
Läuft aber trotzdem nicht.Hier meine Version die komischerweise (?) funktioniert:
Die Fehlermeldung ist bei beiden Versionen identisch:
Gruß
crepp
-
Sorry, aber das kann nicht funktionieren.
Bzw. nur 1x beim Starten des Scripts.
Dann wird Dein Intervall gestartet. Diese Bausteine liegen außerhalb des Triggers.
Bausteine ausserhalb eines Triggers (ausser Funktionen) werden NUR bei Scriptstart EINMALIG ausgeführt.
Mach doch bitte einmal was wir Dir schon vorgeschlagen haben.
Trigger Deinen Datenpunkt.
Einfach auf das "ID Objekt" des Triggers klicken.
Dann kannst Du den gewünschten Datenpunkt auswählen.
Trigger auf "wurde geändert" setzen. NICHT auf "ist wahr"
Die Bedingung <= mit der ZAHL aus Mathematik NICHT TEXT nehmen.
Hier als Beispiel.
Grüße
-
Dies will ich zukünftig in Abständen von 10-15min machen. `
Dann wird das Blockly aber völlig anders aussehen
Jetzt machen wir aber erst mal das erste Problem
[EDIT] Noch ein Tipp. Gib Deinen Aktoren auf der CCU "sprechende" Namen.
Grüße
-
Hab jetzt den letzten Vorschlag umgesetzt:
Damit läuft es jetzt. Allerdings wird alle 10sec geschaltet (timeout fürs wieder anschalten) und nicht wie ich wollte alle 60sec.
Zur Erklärung hab ich die Objekte rausgesucht die beteiligt sind, vielleicht wird es so klarer was ich möchte:
Ich möchte den Trigger "Power" verwenden, wenn unter 1W, dann schalte "State" auf true.
-
Seltsam, habe jetzt zwischenzeitlich an einer anderen Version gebastelt, und das obenstehende Script inaktiv geschaltet.
Jetzt habe ich es wieder aktiv geschaltet und es läuft nicht mehr.
-
Damit läuft es jetzt. Allerdings wird alle 10sec geschaltet (timeout fürs wieder anschalten) und nicht wie ich wollte alle 60sec. `
Beobachte doch mal den Power State.Wie oft ändert der sich und ist dabei <=1?
Wenn die Bedingung erfüllt ist, wird JEDESMAL ein "Intervall" gestartet.
Der Intervall schaltet alle 60 Sek eine Lampe aus (egal ob sie schon aus ist).
Und das UNENDLICH!
Zudem wird durch den Intevall alle 60 Sek. ein Timer von 10 Sek. gestartet, der die Lampe einschaltet (egal ob sie schon an ist)
Wenn man 10x einen Intervall startet laufen auch 10 Intevalle.
Wenn man 10x einen Timer startet laufen auch 10 Timer.
Und bei Dir potenziert sich das!!!
(Bei mir hätte eigentlich eine Alarmglocke klingeln müssen :oops: ,sorry)
Du solltest Dein Konzept noch mal überdenken bzw. uns ausführlich erklären was Du möchtest.
Setze auf JEDENFALL "Stop Intervall" und "Stop Timer" ein.
Sonst bricht Dein System, wegen Überlastung zusammen.
Grüße
-
Hallo,
Danke die Info war sehr wichtig, ich versuche das jetzt mal selber hinzubekommen und werde die CPU und den Speicher dabei im Auge behalten.
Was ich möchte ist:
Schalte die Pumpe in regelmäßigen Abständen aus, wenn sie nicht gerade arbeitet (Reset einer evtl. Fehlermeldung)
Warte 10sec
Schalte dann wieder ein
Danke
Gruß
Torsten
-
Habe bei Wert <1 genommen, da die Pumpe im Standby ca. 0,4W zieht.
Ansonsten habe ich alles von Dir übernommen:
Leider stimmt irgendwas mit der Syntax nicht