NEWS
Gelöst - extendObject und Adapterneustart triggern
-
Hallo Zusammen,
ich habe ein "kleines" Problem. Seit geraumer Zeit funktioniert ein kleines Konstrukt nicht mehr. Ich habe hier jetzt schon eine kleine Ewigkeit dran gehockt, komme aber leider nicht weiter.
Daher hoffe ich, dass ihr weiterhelfen könnt. Mein Ziel: Ich möchte die URL im Parser-Adapter updaten.Folgende Schrittfolge hatte ich hier: Die URL wird über eine manuelle angelegte Variable (ManuelleVariablen.0.Webseite_URL) über die VIS eingegeben. Wenn eine Änderung erfolgt, wird diese getriggert und ein Skript aktualisiert mittels extendObject die Objektdaten der Parser-Datenpunkte (z.B. parser.0.Webseite). Im Anschluss wird der Parser-Adapter neu gestartet.
Folgendes funktionierte mal in Kombination:
Skript 1 - Objektdaten aktualisieren
var URL; URL = (getState("ManuelleVariablen.0.Webseite_URL").val) extendObject('parser.0.Webseite', {native: {link: (URL)}}); extendObject('parser.0.Webseite2', {native: {link: (URL)}}); extendObject('parser.0.Webseite3', {native: {link: (URL)}}); extendObject('parser.0.Webseite4', {native: {link: (URL)}}); extendObject('parser.0.Webseite_pic', {native: {link: (URL)}});
soll die hinterlegten URLs im Parser-Adapter aktualisieren. Wenn ich im Skript-Editor auf den "Neustart"-Button (rechts neben Datei anzeigen) klicke, funktioniert das Skript und alle obigen Objekte erhalten eine andere URL. Wenn ich allerdings auf den Pfeil "Skript ausführen" klicke, funktioniert das nicht. (Warum überhaupt?)
Für den Neustart des Adapters hatte ich folgendes integriert:
Skript 2 - Parser-Adapter neustarten
var Instanz, start; async function Adapter_start_stop(Instanz, start) { extendObject('system.adapter.' + Instanz, {common: {enabled: start}}); } async function Adapter_neustart(Instanz) { extendObject('system.adapter.' + Instanz, {common: {enabled: true}}); } await Adapter_neustart('parser.0');
Über Skript 3.) wird oder soll das Ganze dann getriggert werden.
on({id: 'ManuelleVariablen.0.Webseite_URL', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("javascript.0.scriptEnabled.Parser.Parser_Instanz_neustarten"/*scriptEnabled.Parser.Parser_Instanz_neustarten*/, true); setState("javascript.0.scriptEnabled.Parser.Webseite_Parser_URL"/*scriptEnabled.Parser.Webseite_Parser_URL*/, true); setStateDelayed("javascript.0.scriptEnabled.Parser.Parser_Instanz_neustarten"/*scriptEnabled.Parser.Parser_Instanz_neustarten*/, false, 1000, false); setStateDelayed("javascript.0.scriptEnabled.Parser.Webseite_Parser_URL"/*scriptEnabledWebseite_Parser_URL*/, false, 1000, false); });
Warum auch immer, funktioniert das Skript nicht mehr. Ich bin mir nicht bewusst, dass ich im Halbsuff irgendetwas daran verändert hätte.
Die Instanz ist identisch geblieben. Ich vermute beinah, dass es im Zusammenhang mit irgendeinem Update besteht.
Unabhängig davon können die Skripte möglicherweise auch konsolidiert werden.Daher die Frage:
Wie kriege ich den Trigger + Aktualisierung der Objektdaten + Adapterneustart in ein Skript zusammengewurstet?
Das wäre mir jedenfalls aus Übersichtsgründen das Liebste. -
Scheint ein Bug gewesen zu sein. Problem ist mit Update der Script-Engine behoben.
5.3.3 (2022-03-06)
(bluefox) Added async functions: createStateAsync, deleteStateAsync
5.3.2 (2022-03-06)
(Apollon77) fix problem that scripts were not starting when scriptsEnabled State was triggered (or startScript was used)
(Apollon77) Make sure callbacks on startScript/stopScript work and Async variants also resolve
(Apollon77) Make sure startScriptAsync, stopScriptAsync and runScriptAsync resolve in debug mode too
5.3.1 (2022-03-03)