ioBroker.jarvis
ioBroker.jarvis copied to clipboard
Scripting
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
Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1147303951
{"testVar=0":"....."}
Ist die Variable auf 1 wird es trotzdem ausgeführt?
![]()
![]()
Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1147360165
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
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);
});
Originally posted by @mcuiobroker in https://github.com/Zefau/ioBroker.jarvis/issues/1670#issuecomment-1148793506
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)+'%'"
}
}
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
getObject liefert undefined?
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:
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);
});
Sollte man auch existsState und existsObject als Funktionen mit anbieten? Oder werden diese schon vorab mit getState, setState, usw. geprüft?
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);
});
Editor auch für scripts und CSS?
v3.1.0-alpha.16 subscribeStates nur noch 2x:
scripts
wurden mal angezeigt, jetzt nicht mehr?
scripts
wurden mal angezeigt, jetzt nicht mehr?
Bei mir sieht es so aus:
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);
}
});
}
Die Funktion musst du natürlich irgendwo aufrufen.
Mach ich vom Button aus.
'<button id="Button'+i+'" type="button" onclick="test(this.id)">Click Me!</button>';
Kann man die Elemente in scripts auch über jquery
auslesen?
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);
}
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?
Ist hier noch was offen? getState
funktioniert bei mir und den Rest hatten wir in anderen Issues geklärt oder?
Das Problem mit testVar=0 von oben ist noch vorhanden.
{"testVar=0":{"background-color":"yellow"}}
In Scripts
let testVar = 1;
Auch mit
{"testVar==0":{"background-color":"yellow"}}
-> es wird gelber Body angezeigt.
{"{testVar}=0":{"background-color":"yellow"}}
{"{testVar}==0":{"background-color":"yellow"}}
auch keine Besserung.
Das wird dann als DP erfasst
v3.1.0-alpha.32
nicht hochgeladen?
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?
ist hier noch was offen?
Ja.
- testVar (im Script hinterlegt) zieht nicht im Binding
- Wenn man Speichert und Beenden klickt bei Änderung oder auch nicht
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.
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?
schau nochmal mit v3.1.0-alpha.45
Bitte ohne Popup.
Klickt man OK macht er ein Reload.
Ohne Pop-up verwirrt die User, weil jarvis dann gefühlt 'einfach so' reloaded.
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?