ioBroker.jarvis icon indicating copy to clipboard operation
ioBroker.jarvis copied to clipboard

Scripting

Open Zefau opened this issue 2 years ago • 32 comments

Wenn man dann eine Variable in einem Script definiert hat und dieses Script mit definiert hat, wie muss man darauf im Binding zugreifen? {"{testVar}=0":"....."} Wenn die testVar ein String ist dann auch wieder {"'{testVar}'='0'":"....."}

oder ist scripts schon der Inhalt von einem ? Kann man im Scripts auch zusätzlich Dateien als Script einfügen mit ?

Beispiel-Test -> wird nicht berücksichtigt image image

Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1147303951

Zefau avatar Jun 07 '22 17:06 Zefau

{"testVar=0":"....."}

Ist die Variable auf 1 wird es trotzdem ausgeführt? image image image

Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1147360165

Zefau avatar Jun 07 '22 17:06 Zefau

Allgemeines Aktualisierungsproblem. Bei Änderung von Einstellungen oder von SCRIPTS wird die Änderung erst nach F5 wirksam.

Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1148764349

Zefau avatar Jun 07 '22 17:06 Zefau

Scripts beim Start Warum 3x subscribeStates?

window.Socket.subscribeState('0_userdata.0.temperature', ({ err, state }) => {
   console.log('SUBSCRIBESTATE'+state);
});

window.Socket.getState('0_userdata.0.temperature', ({ err, state }) => {
   console.log('GETSTATE'+state);
});

image

Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1148793506

Zefau avatar Jun 07 '22 17:06 Zefau

Scripts Im Rückgabe Wert state sind objekte mehrfach enthalten: 1x im config-Objekt und dann nochmal einzeln? Da im config eigentlich mehrere Objekte sein können, da eine ioBroker-ID mehrfach in mehreren Devices sein kann, sollte config eigentlich ein Array sein? Es fehlt auch ein Bezug auf das ioBroker-Objekt(s.u.)

{
	"val": 156,
	"ack": false,
	"ts": 1654612496248,
	"q": 0,
	"from": "system.adapter.admin.0",
	"user": "system.user.admin",
	"lc": 1654612496248,
	"id": "0_userdata.0.Power0",
	"key": "power0",
	"stateKey": "power0",
	"value": "dim156%",
	"config": {
		"bodyElement": "LevelBody",
		"display": {
			"true": "defaults#on",
			"false": "defaults#off"
		},
		"stateStyle": {
			"true": {
				"color": "#090",
				"fontWeight": "bold"
			},
			"false": {
				"color": "#999"
			}
		},
		"showState": true,
		"state": "0_userdata.0.Power0",
		"label": "",
		"LevelBodyConfig": {
			"step": "6.25",
			"markStep": "16"
		},
		"properties": {
			"value": "val => 'dim'+Math.floor(val)+'%'"
		},
		"action": "0_userdata.0.Power0",
		"stateKey": "power0"
	},
	"bodyElement": "LevelBody",
	"stateStyle": {
		"true": {
			"color": "#090",
			"fontWeight": "bold"
		},
		"false": {
			"color": "#999"
		}
	},
	"state": "0_userdata.0.Power0",
	"actionElement": "DropdownAction",
	"action": "0_userdata.0.Power0",
	"properties": {
		"value": "val => 'dim'+Math.floor(val)+'%'"
	}
}

image type, common.type,, role usw wären auch wichtige Werte, die man in Scripts abfragen können sollte?

Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1148916621

Zefau avatar Jun 07 '22 17:06 Zefau

getObject liefert undefined? image

window.Socket.getObject('0_userdata.0.temperature', ({ err, state}) => {
   console.log('GETOBJECT'+state);
});

Als direkten log: console.log(window.Socket.getObject('0_userdata.0.temperature')); bekommt man einen Promise: image Wie kommt man dann an die Promise-Werte? mit

let objA = window.Socket.getObject('0_userdata.0.temperature');
console.log(objA.common.role); -> Uncaught

funktioniert es nicht. EDIT: Hab einen Weg gefunden:

let objA = window.Socket.getObject('0_userdata.0.temperature');
let objArole = objA.then(function(result) {
  console.log(result.common.role);
}); 

mcuiobroker avatar Jun 08 '22 19:06 mcuiobroker

Sollte man auch existsState und existsObject als Funktionen mit anbieten? Oder werden diese schon vorab mit getState, setState, usw. geprüft?

mcuiobroker avatar Jun 08 '22 20:06 mcuiobroker

object statt state:

window.Socket.getObject('0_userdata.0.temperature', ({ err, object }) => {
   console.log('GETOBJECT'+object );
});

Promises fängst du mit then( ... ) ab, siehe https://www.w3schools.com/js/js_promise.asp Die Wert-Zuweisung brauchst du nicht:

let objArole = objA.then(function(result) {
  console.log(result.common.role);
}); 

sondern

objA.then(function(result) {
  console.log(result.common.role);
}); 

Zefau avatar Jun 08 '22 20:06 Zefau

Editor auch für scripts und CSS? image

mcuiobroker avatar Jun 10 '22 22:06 mcuiobroker

v3.1.0-alpha.16 subscribeStates nur noch 2x: image

mcuiobroker avatar Jun 10 '22 22:06 mcuiobroker

scripts wurden mal angezeigt, jetzt nicht mehr? image

mcuiobroker avatar Jun 15 '22 00:06 mcuiobroker

scripts wurden mal angezeigt, jetzt nicht mehr?

Bei mir sieht es so aus:

Screenshot (4944)

sigi2345 avatar Jun 15 '22 07:06 sigi2345

JSON-Wert wird mit getState oder subscribeState nicht gelesen in einer function().

function test(e){
        console.log('Zeile ' + e + ' gewählt!');
	window.Socket.getState('0_userdata.0.forum.recentJSON', ({ err, state }) => {
		console.log(JSON.stringify(state));
                if (err){
			console.log('Error JSON holen');
		}else{
			console.log('JSON geholt');
			console.log(JSON.stringify(state));
			let jsonArr = state;
			alert(jsonArr[e].creator);
		}
	});  
}

mcuiobroker avatar Jun 15 '22 19:06 mcuiobroker

Die Funktion musst du natürlich irgendwo aufrufen.

Zefau avatar Jun 15 '22 20:06 Zefau

Mach ich vom Button aus. image

'<button id="Button'+i+'" type="button" onclick="test(this.id)">Click Me!</button>';

mcuiobroker avatar Jun 15 '22 20:06 mcuiobroker

Kann man die Elemente in scripts auch über jquery auslesen?

mcuiobroker avatar Jun 15 '22 20:06 mcuiobroker

setState funktioniert mit string. Andere noch nicht getestet.

function recentTable(e){
        console.log('Zeile ' + e + ' gewählt!');
        window.Socket.setState('0_userdata.0.forum.activeNum',e,false);
}

mcuiobroker avatar Jun 15 '22 20:06 mcuiobroker

Gibt es die Möglichkeit Dateien als Skript in scripts zu importieren? import 'http://192.168.178.70/jarvis/scripts/export.js' Oder einen anderen Befehl?

mcuiobroker avatar Jun 16 '22 18:06 mcuiobroker

Ist hier noch was offen? getState funktioniert bei mir und den Rest hatten wir in anderen Issues geklärt oder?

Zefau avatar Aug 12 '22 21:08 Zefau

Das Problem mit testVar=0 von oben ist noch vorhanden. image {"testVar=0":{"background-color":"yellow"}} In Scripts let testVar = 1;

Auch mit {"testVar==0":{"background-color":"yellow"}} -> es wird gelber Body angezeigt.

mcuiobroker avatar Aug 12 '22 21:08 mcuiobroker

{"{testVar}=0":{"background-color":"yellow"}} {"{testVar}==0":{"background-color":"yellow"}} auch keine Besserung. Das wird dann als DP erfasst image

mcuiobroker avatar Aug 12 '22 21:08 mcuiobroker

v3.1.0-alpha.32 nicht hochgeladen?

mcuiobroker avatar Aug 12 '22 22:08 mcuiobroker

v3.1.0.-alpha.35 Es dauert ca 25 Sekunden bis die Icon in der StateList angezeigt werden. Unabhängig, ob ich die Seite direkt neu aufrufe (F5) oder beim Seiten/TAB-Wechsel aufrufe.

EDIT: Nach 5x Wiederholen kann man diese 25 Sekunden nicht mehr reproduzieren?

Nur bei der ersten Seite. In meinem Fall HOME Seite. Hängt eventuell mit der dort eingesetzten testVar Variable zusammen?

mcuiobroker avatar Aug 18 '22 20:08 mcuiobroker

ist hier noch was offen?

Zefau avatar Sep 08 '22 18:09 Zefau

Ja.

  • testVar (im Script hinterlegt) zieht nicht im Binding
  • Wenn man Speichert und Beenden klickt bei Änderung oder auch nicht image

mcuiobroker avatar Sep 08 '22 18:09 mcuiobroker

Wenn man Speichert und Beenden klickt bei Änderung oder auch nicht

Hier sollte jarvis reloaden. Das ist das Problem, was ich unter https://github.com/Zefau/ioBroker.jarvis/issues/1805#issuecomment-1203133476 beschrieben habe. Da kann ich nicht viel machen.

Zefau avatar Sep 10 '22 14:09 Zefau

Das macht jarvis eben nicht. Er führt dann kein automatischen Reload durch sondern startet die Seite mit dem Fehler. Kann man da ne Abfrage einbauen, wenn Script error null -> Reload?

mcuiobroker avatar Sep 17 '22 20:09 mcuiobroker

schau nochmal mit v3.1.0-alpha.45

Zefau avatar Sep 17 '22 21:09 Zefau

image Bitte ohne Popup. Klickt man OK macht er ein Reload.

mcuiobroker avatar Sep 17 '22 22:09 mcuiobroker

Ohne Pop-up verwirrt die User, weil jarvis dann gefühlt 'einfach so' reloaded.

Zefau avatar Sep 18 '22 06:09 Zefau

Ok. Dann kann man unten, wie beim Update in rot eine Nachricht kurz anzeigen. Man kommt ja gerade aus der Konfiguration. Also wäre eine direkter Reload nicht störend nur verwunderlich, dafür die rote Nachricht?

mcuiobroker avatar Sep 18 '22 11:09 mcuiobroker