Closed Diginix closed 2 weeks ago
/usr/bin/
denn in der $PATH-Variablen vom ioBroker-Nutzer?/usr/bin/iobroker
(meistens) mit sudo
ausgeführt, was der iobroker Linux-Nutzer (hoffentlich) eh nicht darf.Insgesamt also 100% ein Linux-Thema und Blockly unabhängig.
Was kommt denn auf stderr
zurück? Da sollte eigentlich stehen, warum etwas nicht geht.
Wenn es ein Linux Thema wäre, warum funktioniert es dann mit Downgrade auf js 8.5.2 sofort wieder? Wie kann man Adapter in Blockly besser stoppen/starten/restarten? In der CLI funktionieren alle "iobroker ..." commands mit sauberer stdout Antwort. Nur in js 8.6.0 geht es aktuell nicht.
Über die Objekte hatte ich früher schon Adapter restarts probiert, aber irgendwas passte da nicht oder fehlte. Meine Skripte sind zT Jahr alt, aber funktionieren perfekt. Speziell der Proxmox Adapter muss aktuell per Skript überwacht und neugestartet werden. Bug ist bekannt, aber seit mehreren Vers. nicht gelöst.
Bei mir funktioniert es auch mit 8.6.0 (gerade getestet).
Generell ist es halt umständlich, Dinge über einen CLI-Prozess zu tun, welche am Ende auch nur Objekte im ioBroker setzen. Du nutzt ja auch setState als Funktion mit Blockly und nicht exec('iobroker state set 0_userdata.0.example_state true');
Der Admin-Adapter macht einfach nur eine exendObjekt auf system.adapter.${namespace}
. Das trigger dann den Neustart. Ginge also nur, wenn setObject in JavaScript erlaubt wird und (aktuell) nur mit einem Funktions-Baustein. Ich teste das mal gerade.
So geht es:
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="YHi]XwL|x-OQRu6XJ!,w">instance</variable>
</variables>
<block type="procedures_defcustomnoreturn" id="^(d~V_hm.^xis(f6DkUY" x="88" y="188">
<mutation statements="false">
<arg name="instance" varid="YHi]XwL|x-OQRu6XJ!,w"></arg>
</mutation>
<field name="NAME">restart</field>
<field name="SCRIPT">Y29uc3Qgb2JqSWQgPSBgc3lzdGVtLmFkYXB0ZXIuJHtpbnN0YW5jZX1gOwpjb25zdCBvYmogPSBhd2FpdCBnZXRPYmplY3RBc3luYyhvYmpJZCk7CgppZiAob2JqLnR5cGUgPT09ICdpbnN0YW5jZScpIHsKICAgIGF3YWl0IGV4dGVuZE9iamVjdEFzeW5jKG9iaklkLCB7fSk7Cn0=</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="comment" id="S`L$;Z92RKG*rn{pA{Ri" x="88" y="263">
<field name="COMMENT">Instanz neustarten</field>
<next>
<block type="procedures_callcustomnoreturn" id="UPGM$-A]ah)?Z{+6hvcJ">
<mutation name="restart">
<arg name="instance"></arg>
</mutation>
<value name="ARG0">
<block type="text" id="YfX|iFP*{WdIs}e)Zxah">
<field name="TEXT">discovery.0</field>
</block>
</value>
</block>
</next>
</block>
</xml>
Schau ich mir mal an. Aber das Überwachungsskript hat recht viele restart exc und in anderen Skripten gibt es das wahrs auch noch. Mal eben alles umbauen ist immer Aufwand. Komisch, dass es bei mir mit 8.6.0 nicht geht. Damit das System 100% läuft, muss ich aber erstmal auf 8.5.2 bleiben.
Wäre aber auch ein gutes Feature für eigene Blöcke...
Wollte es nicht schreiben, aber den Gedanken hatte ich auch schon. Block in dem man per Dropdown wählt ob Stop, Start oder Restart und in einem Textfeld trägt man die Instanz ein.
I'm sure that
Script type
Blockly & Javascript
The problem
Weder mit JS noch mit Blockly lassen sich Adapter stopen/starten/restarten. EXEC ist in der JS Instanz aktiviert und funktioniert mit anderen Kommandos auch fehlerfrei.
exec('iobroker restart proxmox.0');
iobroker.current.log (in debug mode!)
No response
Version of nodejs
20.14.0
Version of ioBroker js-controller
6.0.4
Version of adapter
8.6.0
Mit JS 8.5.2 funktioniert es problemlos.