Hier ein kleines Script, das am besten als „globales“ Script in ioBroker eingebunden wird.
Damit können selbst kreierte DebugMSGs zur Laufzeit des Scripts, ohne Neustart des Java-Script-Adapters zur Laufzeit ein, bzw. ausgeschaltet werden.
Für jedes Programm, das dieses Script benutzt, wird ein „DebugFlag“ im Objektverzeichnis angelegt, darüber können die Meldungen gesteuert werden.
Es gibt Fehler, die sich erst nach einer gewissen Laufzeit zeigen, wenn man jetzt allerdings Debug Meldungen von seinem Script benötigt, muss man den LogLevel von der entsprechenden Java-Instanz auf „debug“ umstellen. Dadurch wird diese Instanz aber neu gestartet und der Fehler löst sich vielleicht in Luft auf. Das zweite Problem besteht darin, dass jetzt alle Programme, die unter dieser Instanz laufen, ihre Debug-Meldungen ins Log schreiben.
Da mich dieses verhalten gestört hat, habe ich ein kleines Script geschrieben, mit dem ich „meine“ Debug-Meldungen zur Laufzeit des Programms ein- oder auch ausschalten kann.
Jedes Programm, das dieses Script benutzt, muss allerdings die Variable DEBUGNAME vor der ersten Ausgabe setzten. Danach kann mit der Funktion myDebug(„Testmeldung“) eine Ausgabe ins Log erzeugt werden, die aber nur angezeigt wird, wenn das entsprechende DebugFlag gesetzt ist.
// V0.02 globalDebug.js
// Erzeugt für jedes Programm bei der ersten Debugausgabe ein State in javascript.x.DEBUG
// Durch setzen dieses Flags, können DeBug Messages im laufenden Script aktiviert/deaktiviert werden
var DEBUGROOT = "javascript." + instance + ".Debug."; // Rootverzeichnis
var DEBUGNAME = ""; // Platzhalter für die ID des Flags, muss durch das entsprechende Scipt gesetzt sein
var myDebugActive = false; // ist true, wenn Debugging eingeschaltet ist
var myDebugInit = false; // ist true, wenn die Debug Funktion initalisiert ist
function initMyDebug() {
createState(DEBUGROOT + DEBUGNAME, {
type: 'boolean',
read: true,
write: true,
def: false,
states: "false:DEBUG_OFF; true:DEBUG_ON"
},false);
myDebugActive = getState(DEBUGROOT + DEBUGNAME).val;
}
function myDebug (debugtext){
if(!myDebugInit) {
// Debug ist noch nicht initalisiert
if(DEBUGNAME !== "") {
initMyDebug();
on ({id: DEBUGROOT + DEBUGNAME,change: "ne" }, function () {
myDebugActive = getState(DEBUGROOT + DEBUGNAME).val;
if(myDebugActive) {
log("Debug MSGs aktiviert: " + DEBUGNAME, 'warn');
} else{
log("Debug MSGs deaktiviert: " + DEBUGNAME, 'warn');
}
});
myDebugActive = getState(DEBUGROOT + DEBUGNAME).val;
myDebugInit = true;
} else {
// Es wurde kein DEBUGNAME angegeben
log("Use var DEBUGNAME for Debug Messages! See globalDebug.js", 'warn');
}
}
if(myDebugActive) log('' + "MYDEBUG:" + debugtext + '');
}
// Im zu steuernden Script, muss der Scriptname fürs Debuggen angegeben sein
// DEBUGNAME = "Testprogramm";
// myDebug("Dies ist ein Test");
Code-Sprache: JavaScript (javascript)