@bananajoe Da ich Dein Skript für den "apache-Ersatz" ´mal ausprobieren wollte, fällt mir auf, daß ich als Nicht-Experte noch nicht sicher bin, wie/wo genau Du Dein Skript speicherst und wann/wodurch Du es startest/beendest. Kannst Du dazu bitte noch eine Erläuterung geben?
Update zu meiner "sauren Obst-Vermeidung":
@andersmacher sagte in [gelöst] - VIS Intance Id - automatisiert ermitteln:
So leider (noch) nicht:
Ist zwar etwas Aufwand, aber so scheint das dann doch zu klappen (das "simuliert" quasi ein "Binding im Binding" via VIS-Skript-Code):
Anstelle des Bindings
{0_userdata.0.Vis_Navigation.ViewListe.Nummern}
schreibe ich in mein "Select ValueList-Widget" ins Feld "Werte":
{local_Hauptnavigation_Werte}
Diese Vis-lokale Variable initialisere ich im VIS-Skript von @BananaJoe so:
...
//Variable erzeugen, die dann die Nummern des Hauptmenüs als Inhalt bekommt:
vis.conn._socket.emit('getState', '0_userdata.0.Vis_Navigation.ViewListe.Nummern', function (err, obj) {
if (!err && obj) {
//Alles OK!
Vis_Hauptmenu_Nummern = obj.val;
console.info("Folgende Vis_Hauptmenu_Nummern wurden ermittelt: ",Vis_Hauptmenu_Nummern);
} else {
//Es ist ein Fehler aufgetreten!
alert("Die Vis_Hauptmenu_Nummern konnten nicht ermittelt werden!");
console.info("Die Vis_Hauptmenu_Nummern konnten nicht ermittelt werden!");
}
});
// Warten auf das (basic - Scren Resolution)-Widget:
//+++++ Achtung: In der nächsten Zeile die Widget-ID anpassen!!! +++++
waitForElement($('body'),'#w00003', 'dummy', 'dummy', function () {
// Widget ist geladen, auf das Widget klicken:
setTimeout( () => {
//+++++ Achtung: In der nächsten Zeile die Widget-ID anpassen!!! +++++
$('#w00003>div>span>span').trigger('click');
//Die vorhergehende Zeile sorft wohl dafür, daß das aktuelle VIS eine Instanz-ID erhält!?
}, 1000);
// und in einen Datenpunkt schreiben
setTimeout( () => {
//+++++ Achtung: In der nächsten Zeile die IP-Adresse anpassen!!! +++++
$.getJSON('http://192.168.1.99/meineip.php', function(data) {
//Leider funktioniert das Special-Binding "instance" nicht, sodaß man einen "workaround" braucht, um die VIS-Instanz-ID durch ein Widget an ioBroker übergeben zu können, damit ioBroker individuell auf Aktionen in verschiedenen VIS-Instanzen reagieren kann. Dazu eine lokale Variable innerhalb VIS erzeugen. Diese kann dann via Binding in einem VIS-Widget genutzt werden. Da sie VIS-lokal ist, hat sie trotz einheitlichem Initialisierungscode hier in jeder VIS-Instanz einen anderen/den jeweils passenden Wert:
vis.setValue('local_Instanz_ID', vis.instance);
//Aus den Semikolon-getrennten-Strings jeweils eine Liste machen:
Liste_Instanznamen = Vis_Instanznamen.split(';');
Liste_IP_Adressen = Vis_IP_Adressen.split(';');
Liste_Vis_Hauptmenu_Nummern = Vis_Hauptmenu_Nummern.split(';');
//Konsolenausgaben für das Austesten des Skripts:
console.info(Vis_IP_Adressen.length);
console.info(Liste_IP_Adressen.length);
console.info(Vis_Hauptmenu_Nummern);
console.info(Vis_Hauptmenu_Nummern.length);
console.info(Liste_Vis_Hauptmenu_Nummern.length);
//Schleife über alle möglichen/vorgesehenen VIS-Instanzen:
for (var i_index in Liste_Instanznamen) {
i = Liste_Instanznamen[i_index];
if (data.ipAddress == Liste_IP_Adressen[i_index]) {
vis.setValue((['0_userdata.0.Vis_Navigation.Instanzen.',i,'.Instanz_ID'].join('')), { val: vis.instance, ack: true }, parseInt(((0) || '').toString(), 10), false);
console.info(i);
}
}
//Schleife über alle Hauptmenu_Nummern, um die VIS-Instanz-ID vor jede Nummer zu schreiben:
Dummy = '';
for (var j_index in Liste_Vis_Hauptmenu_Nummern) {
j = Liste_Vis_Hauptmenu_Nummern[j_index];
Dummy = Dummy + vis.instance + '__' + j + ';';
console.info(Dummy);
}
//Das letzte Semikolon wieder löschen:
Dummy = Dummy.slice(0, Dummy.length-1);
console.info(Dummy);
//VIS-lokale Variable erzeugen und setzen, um damit das Menü-Widget zu befüllen:
vis.setValue('local_Hauptnavigation_Werte', Dummy);
});
}, 3000);
}, 0, true);
Nun ergibt das Binding
{local_Hauptnavigation_Werte}
im Feld "Werte" des "Select ValueList-Widgets":
InstanzID__0;InstanzID__1;InstanzID__2;...
Via Trigger/Blockly kann man die Instanz-ID dann im ioBroker wieder abtrennen und auf den "reinen" Auswahl-Wert (also 0, 1, 2 ...) reagieren: