NEWS
"admin.0 Restart loop detected" und keine Trigger mehr
-
Hallo crunchip,
ich habe mich doch für ein Video Video entschieden, weil ich dort durch entsprechende Anordnung der Fenster die Reaktionen von ioBroker gleichzeitig darstellen kann und ich das für besser halte als das komplizierte Beschreiben mit Worten,
In dem Video siehst Du, wie- ich in der Visualisierung "VIS-2" einen Button anklicke, der mit dem boolschen Objekt
Schalter_Arbeitszimmer_Server-2
verknüft ist (Fenster links oben) - das Objekt
Schalter_Arbeitszimmer_Server-2
den Wert wechselt (unterer Bereich, markierte Zeile; Wechsel von false -> true -> false) - die Funktion "Unterprogramm Server-2 schalten" nicht ausgelöst wird (ich habe mehrere "debug"-Blöcke eingefügt, keiner schreibt jedoch ins Skript-Log)
Das Blockly-Skript hat folgenden Inhalt:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="}.JK6ksO42P4EA)Pm/q:">Server-2_heruntergefahren</variable> </variables> <block type="on" id="dpfW@o|Xb4KE-N4[V6kj" x="63" y="-87"> <field name="OID">0_userdata.0.Schalter.Schalter_Arbeitszimmer_Server-2</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="debug" id="9MmQ)U(CW|$CoZ{4:j_L"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="(0ibH02O]P8f;LJnWxv8"> <field name="TEXT">test</field> </shadow> <block type="text" id="~3{3/4%#`IS700N)${Y?"> <field name="TEXT">"Unterprogramm Server-2 schalten" gestartet</field> </block> </value> <next> <block type="controls_if" id="ZhJrg)}pep`{Pfq:@MR)"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="D}jsUEOC#BX=VjIs$=@u"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="=1(_*k?^+dvYJ$h-@W5_"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Schalter.Schalter_Arbeitszimmer_Server-2</field> </block> </value> <value name="B"> <block type="logic_boolean" id="/.z^fx89LEs[CUCacev,"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="Z}:7nmbOWJ^dl0_h.K!N"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alias.0.Arbeitszimmer Server-2 Verbrauch und Schalter.Schalter</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="T}_]4*Xa:sCj#0])Q{@_"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="debug" id="buTzmBW)ufvlE+k17)62"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="(0ibH02O]P8f;LJnWxv8"> <field name="TEXT">test</field> </shadow> <block type="text" id="+*O/[2o#pc](Cq|_*[be"> <field name="TEXT">Server-2 eingeschatet</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="MusPF0c$(T)4h!V]4RoQ"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="#II_Alpp%c2MKX#:].$l"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Schalter.Schalter_Arbeitszimmer_Server-2</field> </block> </value> <value name="B"> <block type="logic_boolean" id="9s@KTW1P}:t1}n8?Rzhs"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="{s_XQ;qrGJ)tHqnB!l?K"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Hilfsobjekte.Server-Ausschaltbefehl</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text_replace" id="0|#Go{/Im:rLY9M5K5eU"> <value name="FROM"> <shadow type="text" id="X#T|Tfy`+jTZh4ztgY`2"> <field name="TEXT">x</field> </shadow> <block type="text_newline" id="jFvT@+lbKG!6v|3|*dp7"> <field name="Type">\n</field> </block> </value> <value name="TO"> <shadow type="text" id="A)}{b7Gm2)tE]2g4~=KX"> <field name="TEXT">y</field> </shadow> <block type="text" id="(XZX6%uN`Z[h2QW0e^%5"> <field name="TEXT"></field> </block> </value> <value name="TEXT"> <shadow type="text" id="tKZBuIpOe{/kC7q%j#2y"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="Z0L-cG-_C)?/QTu+o%*a"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="g8xwdz:?VoM!t1VQJ$*8"> <field name="TEXT">ssh admin@</field> </block> </value> <value name="ADD1"> <block type="get_value" id=";SU=2SU{O/PjSk[wj~l/"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Netzwerkadressen.IP-Adresse_Server-2</field> </block> </value> <value name="ADD2"> <block type="text" id="m!H8v?xWJ/dFVX|-EA[D"> <field name="TEXT"> poweroff</field> </block> </value> </block> </value> </block> </value> <next> <block type="exec" id="dINM^XRtRKI2zo0kDsWK"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">debug</field> <value name="COMMAND"> <shadow type="text" id="+x)UNfi@Pd09uZn+)nj0"> <field name="TEXT">pwd</field> </shadow> <block type="text_replace" id="A-tOS.,Ab5-0p]4P=~y9"> <value name="FROM"> <shadow type="text" id="X#T|Tfy`+jTZh4ztgY`2"> <field name="TEXT">x</field> </shadow> <block type="text_newline" id="W:HGu5V97#-a3jjZU.e^"> <field name="Type">\n</field> </block> </value> <value name="TO"> <shadow type="text" id="A)}{b7Gm2)tE]2g4~=KX"> <field name="TEXT">y</field> </shadow> <block type="text" id="@*Ka=3uUO=13YbFc/{GG"> <field name="TEXT"></field> </block> </value> <value name="TEXT"> <shadow type="text" id="tKZBuIpOe{/kC7q%j#2y"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="boC#i7RN}`2VmfBbk6zH"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="RmGi6+2VY8]{d[q1mAR1"> <field name="TEXT">ssh admin@</field> </block> </value> <value name="ADD1"> <block type="get_value" id="a?wbLJ5YSs6!.a$*LMxn"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Netzwerkadressen.IP-Adresse_Server-2</field> </block> </value> <value name="ADD2"> <block type="text" id="Jh*.IX(cz:U|oD~{u[7^"> <field name="TEXT"> poweroff</field> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="FmqPTzo7kT3t`]ZC-uM-"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="(0ibH02O]P8f;LJnWxv8"> <field name="TEXT">test</field> </shadow> <block type="text" id="wi|%p$JN)Ou9]*1Vzjrz"> <field name="TEXT">Server-2 wird heruntergefahren</field> </block> </value> <next> <block type="debug" id="!-#Y#V,z_/BkVke1Yfbh"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="(0ibH02O]P8f;LJnWxv8"> <field name="TEXT">test</field> </shadow> <block type="get_value" id="YW0V%+Psc`G?+Sq6L+OV"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Hilfsobjekte.Server-Ausschaltbefehl</field> </block> </value> <next> <block type="variables_set" id="_SZ^${a4.da.HVtVflw?"> <field name="VAR" id="}.JK6ksO42P4EA)Pm/q:">Server-2_heruntergefahren</field> <value name="VALUE"> <block type="logic_boolean" id="]4cEN?|P.r=JC]R/0gDK"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="controls_whileUntil" id="Jg$ka*@unOMXF)%64UHa"> <field name="MODE">WHILE</field> <value name="BOOL"> <block type="logic_compare" id="NV(rf0!]lu5I{X@1BMHM"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="NGdQ)Elb3*]VK_oaDWP+"> <field name="VAR" id="}.JK6ksO42P4EA)Pm/q:">Server-2_heruntergefahren</field> </block> </value> <value name="B"> <block type="logic_boolean" id="q,s[qKLIpOnk9[%tP|,V"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO"> <block type="exec" id="M@mW6FL%_,0v]D|3(x4?"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="COMMAND"> <shadow type="text" id="2ISya|QWuK=oZ_Q{6whi"> <field name="TEXT">text</field> </shadow> <block type="text_join" id=".F*K;}^Ro%VIk;36qkkN"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="xpen|W3sk1@1mMI^X$dx"> <field name="TEXT">ping -c 1 </field> </block> </value> <value name="ADD1"> <block type="get_value" id="+LBmpXG*J,6^@M@Gwrr8"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Netzwerkadressen.IP-Adresse_Server-2</field> </block> </value> </block> </value> <statement name="STATEMENT"> <block type="controls_if" id="jDa`a4aMS,t+/r[Do_j/"> <value name="IF0"> <block type="logic_compare" id=":vrMh+x=v2bHQY;)}LC8"> <field name="OP">NEQ</field> <value name="A"> <block type="text_indexOf" id="RJ/#yna;Hqk(.JEQv+rQ"> <field name="END">FIRST</field> <value name="VALUE"> <block type="exec_result" id="G/5sXUTA6F*eMir{LT(W"> <field name="ATTR">result</field> </block> </value> <value name="FIND"> <shadow type="text" id="XsuuVumbmWIWoZ69JRxC"> <field name="TEXT">abc</field> </shadow> <block type="text" id=",v,6RfJ4n1ZN@SdO?,@/"> <field name="TEXT">Destination Host Unreachable</field> </block> </value> </block> </value> <value name="B"> <block type="math_number" id="CD*8GZP9X4Ans5BZAy7t"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="|vwYEzXZi}d;JR/hNu6j"> <field name="VAR" id="}.JK6ksO42P4EA)Pm/q:">Server-2_heruntergefahren</field> <value name="VALUE"> <block type="logic_boolean" id="My%k3.H/,N]8O*b[;1z!"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </statement> <next> <block type="timeouts_wait" id="KxzjUAu%2G~]*e7mro5Y"> <field name="DELAY">60000</field> <field name="UNIT">ms</field> </block> </next> </block> </statement> <next> <block type="control" id="6ke8|yGP0)D=`8]C1-m%"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alias.0.Arbeitszimmer Server-2 Verbrauch und Schalter.Schalter</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="FL9Lkobw[krO}u*2Ef9L"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </xml>
Hier das Admin-Log zum Download: Admin-Adapter-Log.json
Hier das Javascript-Log zum Download: Javascript-Adapter-Log.jsonIch hoffe, die Informationen reichen für den Anfang
- ich in der Visualisierung "VIS-2" einen Button anklicke, der mit dem boolschen Objekt
-
@klausstoertebeker sagte in "admin.0 Restart loop detected" und keine Trigger mehr:
Das Blockly-Skript hat folgenden Inhalt:
Blockly bitte immer auch als Screenshot.
Nur wenige werden Lust haben, das erstmal zu importieren um einen Blick darauf werfen zu können. -
@klausstoertebeker sagte in "admin.0 Restart loop detected" und keine Trigger mehr:
keiner schreibt jedoch ins Skript-Log)
-
@crunchip
Ok, hier das Blockly-Skript als Bild:
Und hier das detaillierte Skript-Log nach betätigen des Buttons:javascript.0 21:29:33.426 info Stopping script script.js.IT-Gerätesteuerung.Unterprogramm_Arbeitszimmer_Server-2_schalten javascript.0 21:29:33.475 info Start JavaScript script.js.IT-Gerätesteuerung.Unterprogramm_Arbeitszimmer_Server-2_schalten (Blockly) javascript.0 21:29:33.486 info script.js.IT-Gerätesteuerung.Unterprogramm_Arbeitszimmer_Server-2_schalten: subscribe: {"pattern":{"id":"0_userdata.0.Schalter.Schalter_Arbeitszimmer_Server-2","change":"ne","q":0},"name":"script.js.IT-Gerätesteuerung.Unterprogramm_Arbeitszimmer_Server-2_schalten"} javascript.0 21:29:33.486 info script.js.IT-Gerätesteuerung.Unterprogramm_Arbeitszimmer_Server-2_schalten: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
Das Skript wurde wieder nicht getriggert.
-
@klausstoertebeker Was ist das für ein "Schalter"?
-
@klausstoertebeker sagte in "admin.0 Restart loop detected" und keine Trigger mehr:
Und hier das detaillierte Skript-Log nach betätigen des Buttons:
da sollte eigentlich mehr kommen
vllt, findet man etwas im debug modus?
-
@crunchip sagte in "admin.0 Restart loop detected" und keine Trigger mehr:
da sollte eigentlich mehr kommen
wenn wirklich nicht getriggert wird kommt gar nichts
-
@klausstoertebeker
Was mir als erstes auffällt: Du fragst im Trigger nochmals den Wert ab. Und das auch noch 2x.
Das ist völlig unnötig. Dafür nimmt man den Block "Wert" aus dem Bereich "Trigger". Der Trigger kennt schließlich seinen eigenen Wert.
Und noch was: Wenn man einen bool'schen Wert abfragt, kann das "sonst falls" entfallen. Der Wert ist entwedertrue
und es wird Teil 1 ausgeführt. Danach reicht ein "sonst", denn dann kann der Wert ja nur nochfalse
sein.Prinzip:
https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps -
@homoran aber warum sollte, wie zu Beginn genannt, kein einziger Trigger, funktionieren
Eventuell mal ein downgrade der Javascript Instanz hilfreich?
Wenn es ein zeitliches Problem (falsche System Zeit) wäre, ist noch zu erklären, aber gar kein Trigger funktioniert, hab ich so bisher auch noch nicht gesehen -
@homoran said in "admin.0 Restart loop detected" und keine Trigger mehr:
@klausstoertebeker Was ist das für ein "Schalter"?
Das ist ein Objekt unter
0_userdata.0
vom Typ boolean.Ich habe mir angewöhnt, in meiner Hausautomation Aktoren nie direkt zu schalten, sondern immer über Funktionen, welche auf ein Ereignis triggern, beispielsweise die Änderung oder Aktualisierung eines Objekts.
Beispiel:
Ich möchte eine Lampe ein-/ausschalten:- Der Hardware-Schalter der Lampe ist der Datenpunkt
Lampe_Schalter
- Der Hardware-Taster, der die Lampe schalten soll, ist der Datenpunkt
Lampe_Taster
- Die Funktion, welche den Hardware-Schalter
Lampe_Schalter
ansteuert, ist "Funktion_Lampe_schalten" - Der Trigger, der die Funktion
Funktion_Lampe_schalten
auslöst, istLampe_schalten_Trigger
Um die Lampe nun einzuschalten, drücke ich den Taster
Lampe_Taster
. Dieser setzt das ObjektLampe_schalten_Trigger
auf "true", die Änderung dieses Objekts triggert die FunktionFunktion_Lampe_schalten
. In dieser Funktion wird das Triggerobjekt ausgewertet (in diesem Fall "true") und der Hardware-SchalterLampe_Schalter
wird eingeschaltet.
Das Ausschalten läuft genauso, nur, dass der Tastendruck das Triggerobjekt auf "false" setzt und die Funktion die Lampe ausschaltet.
Bisher hat das immer funktioniert, aber wenn kein Trigger ausgelöst wird, kann die Funktion die Lampe auch nicht schalten... - Der Hardware-Schalter der Lampe ist der Datenpunkt
-
@codierknecht said in "admin.0 Restart loop detected" und keine Trigger mehr:
Was mir als erstes auffällt: Du fragst im Trigger nochmals den Wert ab. Und das auch noch 2x.
Das ist noch aus meinen Anfangszeiten mit Blockly
Aber Danke für den Tipp. Da gerade eh nichts funktioniert, habe ich Zeit, die Skripte anzupassen.
Und noch was: Wenn man einen bool'schen Wert abfragt, kann das "sonst falls" entfallen. Der Wert ist entweder true und es wird Teil 1 ausgeführt. Danach reicht ein "sonst", denn dann kann der Wert ja nur noch false sein.
Auch das werde ich ändern
-
@klausstoertebeker dann beginnen wir halt mal von Anfang an.
Du drückst den Schalter, der virtuelle Datenpunkt ändert sich oder beginnt Vllt da schon das Problem?
Ansonsten würde ich Vllt doch mal die Javascript Instanz downgraden.
Hast du noch Adapter laufen, die unabhängig von Javascript etwas triggern/Schalten, wie z. B SmartControl? Wenn ja, funktioniert das? -
@crunchip said in "admin.0 Restart loop detected" und keine Trigger mehr:
@homoran aber warum sollte, wie zu Beginn genannt, kein einziger Trigger, funktionieren
Eventuell mal ein downgrade der Javascript Instanz hilfreich?
Wenn es ein zeitliches Problem (falsche System Zeit) wäre, ist noch zu erklären, aber gar kein Trigger funktioniert, hab ich so bisher auch noch nicht gesehenJa, das ist ja mein eigentliches Problem. Seltsam ist auch, dass ich keine zeitgesteuerten Trigger mehr bekomme (Stichwort: cron-Jobs).
Was den Downgrade angeht, habe ich schon mit einr 7'er-Version und der 8.8.3-Version (beide aus demstable
-Repository) sowie eine 8'er-Version aus dembeta
-Repository gearbeitet, und seit dem etwa 23.02.2025habe ich halt keine Trigger mehr - warum auch immer... -
Hast du einen Adapter wo du einen INPUT Wert setzen kannst?
Hast du einen Adapter der cron benutzt?Hintergrund:
a) Auch der Adaptercode reagiert auf "onStateChange" change trigger. Wenn möglich setz mal bei einem Adapetr via adminUI einen Input State (ACK=FALSE), also schalt z.B. via adminUI ein Licht ein oder so.
Reagiert der Adapter? Oder passiert da auch nix?b) Wenn du einen scheduled aadapter hast startet der?
Oder kannst du bei irgeneinem Adapter einen Cron Eintragen zum Restarten? Restartet der Adapter zu der Zeit?Die Tests könnten zeigen ob ev. das gesammte Ereignissystem nicht funtkioniert. Dann brauchen wir kaum beim Javascript adapter zu suchen sondern eher bei js-controller, node.js oder gar dem Betriebssystem.
(OS Spezialisten: Ist es denkbar dass das Eventhandling von node.js durhc irgeneine OS Einstellung blockiert wird? Gibts da ein Log wo da eas dazu stehen könnte? - Sorry wenn die Frage zu exotisch / naiv ist.)
Um die aller unterste Eben zu testen könntest du ev ein file test.js erstellen mit
setInterval( ()=> {console.log('juhu')}, 1000);
und das dann mit
node test.js
starten. Sollte dann alle Sekunden ein Juhu absetzen. -
@mcm1957 said in "admin.0 Restart loop detected" und keine Trigger mehr:
Um die aller unterste Eben zu testen könntest du ev ein file test.js erstellen mit
setInterval( ()=> {console.log('juhu')}, 1000);
und das dann mit
node test.js
starten. Sollte dann alle Sekunden ein Juhu absetzen.Mache ich. Wohin wird "juhu" dann geschrieben? In's System-Log?
-
@klausstoertebeker
nö als consolen output. also ins terminal.Falls ich zu unklar war
File auf der commandline in linux anlegen und node xxx auf der commandline eintippen.
-
@mcm1957 said in "admin.0 Restart loop detected" und keine Trigger mehr:
File auf der commandline in linux anlegen und node xxx auf der commandline eintippen.
Das habe ich verstanden
Ich versuche es.
-
@mcm1957 said in "admin.0 Restart loop detected" und keine Trigger mehr:
setInterval( ()=> {console.log('juhu')}, 1000);
Da ist ein Syntaxfehler drin: Es fehlt hinter der Argumentenliste eine )
-
@mcm1957 said in "admin.0 Restart loop detected" und keine Trigger mehr:
Um die aller unterste Eben zu testen könntest du ev ein file test.js erstellen mit
setInterval( ()=> {console.log('juhu')}, 1000);
und das dann mit
node test.js
starten. Sollte dann alle Sekunden ein Juhu absetzen.Der Befehl funktioniert (der Befehl lautete
setInterval( ()=> {console.log('juhu');}, 1000);
- da fehlte ein ";") -
@mcm1957
Ich habe dann auch noch versucht, einen cron-job mit node zu starten und habe dieses Beispiel genommen.
Nachdem ich die Modulenode-cron
undexpress
nachinstalliert hatte, führte auch die Ausführung des "index.js" Skripts aus dem Beispiel zum Erfolg...
Sind die auch für ioBroker bzw. den Javascript-Adapter notwendig?