NEWS
[Vorlage] JS: Log-Datei aufbereiten für VIS
-
danke, aber bei mir wird der Button nicht erkannt, darum fragte ich nach dem Widgetadapter.
-
-
@Oli sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:
danke, aber bei mir wird der Button nicht erkannt, darum fragte ich nach dem Widgetadapter.
Edit wegen Textänderung
HdWidget ON/OFF
-
@sigi234 sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:
HdWidget ON/FF
Ist der Button neu … mit FF Funktion
-
@Glasfaser ,@Negalein ,@sigi234
vielen Dank!!
-
Hi zusammen
@joergeli sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:
@Mic
Hallo Mic,
saubere Arbeit !Ich habe auch schon die ältere Version des Scriptes genutzt und hatte ebenfalls das "Mitternachts-Problem".
Habe mir dann (mit meinen rudimentären JavaScript-Kenntnissen) so geholfen, daß ich erstens den Schedule auf jede 45te Sekunde gesetzt habe ( also nicht alle 45 Sek), damit auf jeden Fall immer 15 Sekunden Zeit bis zum "Mitternacht-Wechsel" war:Hi Jörg,
danke für dein Feedback und das war im alten Script definitiv (mit) das Problem, wegen des Mitternachtsproblems, aber hat sich ja jetzt erübrigt.Trotzdem habe ich - für mich persönlich! - auch im neuen Script wieder etwas "herumgepfuscht".
Worum geht's ? Nun, ich wollte gerne, wenn ich das Log manuell lösche (clearJSON), daß das auch im vis optisch angezeigt wird.Schöne Umsetzung. Das mit der Anzeige im VIS ("Derzeit keine Logeinträge" o.ä.) mache ich noch einfacher: Ich hab ein Text-Widget hinter der Tabelle, das nur sichtbar ist, wenn kein Log vorhanden. Hier könnte man auch Datum/Uhrzeit des letzten Löschen ausgeben:
Zur Performance:
@Negalein sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:
In der Zeit wo der Cron läuft wird das System doch sehr träge. Und das trotz sehr guter Hardware.
@Negalein sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:
@Glasfaser sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:
Noch nie Probleme auf meiner Synology gehabt , aber sicherlich kann @Mic vielleicht eine Fehlerquelle bei dir finden ….. warum es bei dir das System sehr träge macht !?
Ja, ich warte jetzt mal auf @Mic!
Normal kenn ich auf der Syno auf keine Performanceeinbußen.
Die CPU ist von 5% auf 16% angestiegen.
Der RAM nur sehr minimal.Aber am ioBroker hab ich es vorallem an der VIS bemerkt, dass der Seitenaufbau sehr träge war und
zB ein Button mitmdui-raisedbutton mdui-blue-blink
nur ca. alle 10 Sekunden geblinkt hat (statt normal jede Sekunde).Seltsam, ich stelle bei mir keinerlei Performanceprobleme fest, weder wenn das Script läuft, noch beim Update lt. Schedule. Auch lt. Proxmox kein merklicher CPU-Load-Unterschied feststellbar.
Ich habe allerdings die meisten Adapter auf Debug Level warn oder error, so dass bei mir generell nicht so viel im Log ankommt.Das Script bedient sich einiger Funktionen, um die Log-Zeilen aufzubereiten, da werden mehrere Schleifen durchlaufen, Arrays gefüllt, Regex-Funktionen ausgeführt, usw., und das für jede Logzeile und jede "Kategorie".
Leider tue ich mir schwer zu identifizieren, ob hier eine Funktion / Script-Bestandteil die Performance in den Keller drückt, denn das gibt der JavaScript-Adapter nicht her.
Das Parsing im Script muss ich noch mal bei Gelegenheit umstellen, das geht definitiv effizienter. Aber ob das danach dann Auswirkung auf langsameren Systemen hat, kann ich nicht sagen.Cool wäre, wenn man dem Script, oder alternativ den JavaScript-Adapter, nur bestimmte Systemressourcen (RAM und vor allem CPU in %) zuordnen könnte. Dann könnte man das auf z.B. CPU 5% stellen und das Script hätte Zeit, das nach und nach abzuarbeiten.
Ob das überhaupt geht (JavaScript-Adapter-seitig) weiß ich nicht. Evtl. weiß das jemand von Euch. Dann könnte man auf schwachen Systemen das Script in eine eigene JS-Adapter-Instanz packen und dort für die Instanz verfügbare Ressourcen herunterschrauben.Grüße
-
Hallo zusammen,
ich habe mal ne blöde Anfängerfrage.
Was muss ich in die Blacklist eintragen, damit ich folgende Logeinträge nicht mehr angezeigt bekomme?
-
blacklist: ['snmp'],
-
@Glasfaser said in [Vorlage] JS: Log-Datei aufbereiten für VIS:
['snmp']
danke für die schnelle Antwort, aber das scheint nicht zu klappen.
Wahrscheinlich sitzt die Schwachstelle wieder vorm PC
-
@Oli
snmp.0 -
danke, das war es.
-
Mein Angabe war für hier zum eintragen , deshalb nur " snmp "
-
Es geht beides:
BLACKLIST_GLOBAL: Hier werden als erstes ALLE Log-Einträge global ausgefiltert.
Aber manchmal will man ja nicht global alles ausfiltern.
Daher kann man unterhalb von LOG_FILTER dann je nach Kategorie ('hubschrauberlandeplatz', 'error', etc.) noch zusätzlich filtern.
Das Beispiel aus dem Screenshot https://forum.iobroker.net/post/321724 kann nicht funktionieren, weil hier eckige Klammern hinzugefügt wurden:
'[snmp]'
Die Logzeile selbst enthält aber nursnmp.0
ohne eckige Klammern, daher greift der Filter nicht, da es'[snmp]'
in der Logzeile selbst nicht gibt.
'snmp'
ohne eckige Klammern geht natürlich. Besser ist es allerdings, näher zu spezifizieren, also'snmp.0'
, damit nicht auch Logzeilen anderer Skripte mit ausgefiltert werden, falls diese in irgend einem Wort den Bestandteilsnmp
enthalten.Also: besser
'snmp.0'
statt'snmp'
. Oder: besser'wetter.0'
statt'wetter'
(Begriff wetter könnte schließlich auch wirklich in anderen Logzeilen enthalten sein). -
Hallo, bekomme nach Start des Scripts folgende Fehlermeldung:
javascript.0 2019-11-13 15:56:54.939 error (29884) at process._tickCallback (internal/process/next_tick.js:68:7) javascript.0 2019-11-13 15:56:54.939 error (29884) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49) javascript.0 2019-11-13 15:56:54.939 error (29884) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23) javascript.0 2019-11-13 15:56:54.939 error (29884) at client.get (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:491:17) javascript.0 2019-11-13 15:56:54.939 error (29884) at adapter.getForeignState (/opt/iobroker/node_modules/iobroker.javascript/main.js:845:17) javascript.0 2019-11-13 15:56:54.938 error (29884) at createProblemObject (/opt/iobroker/node_modules/iobroker.javascript/main.js:1254:17) javascript.0 2019-11-13 15:56:54.938 error (29884) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1201:37) javascript.0 2019-11-13 15:56:54.938 error (29884) at compile (/opt/iobroker/node_modules/iobroker.javascript/main.js:978:28) javascript.0 2019-11-13 15:56:54.938 error (29884) at Object.createScript (vm.js:277:10) javascript.0 2019-11-13 15:56:54.938 error (29884) at new Script (vm.js:83:7) javascript.0 2019-11-13 15:56:54.938 error (29884) SyntaxError: Unexpected end of input javascript.0 2019-11-13 15:56:54.937 error (29884) javascript.0 2019-11-13 15:56:54.937 error (29884) log('registered ' + __engine.__subscriptions + ' subscription' + (__engine.__subscriptions === 1 ? '' : 's' ) + ' and ' + __engine.__schedules + ' schedule' + (__engine.__schedules === 1 ? '' javascript.0 2019-11-13 15:56:54.937 error at script.js.common.Home.LogfileSrcipt2:1392 javascript.0 2019-11-13 15:56:54.937 error (29884) script.js.common.Home.LogfileSrcipt2 compile failed:
was bedeutet das?
-
Zeige mal bitte dein ganzes Skript.
Lade es als . txt Datei hier hoch. -
-
-
oh peinlich. Vielen Dank für den Hinweis
-
Hallo,
erstmal Kompliment, geiles Script, toll Dokumentiert, so viel Mühe. Meinen grössten Respekt.Nun kommt meine Frage: Ich benutze Habpanel und möchte ungerne die VIS einblenden extra dafür, zumal Habpanel so einfach ist.
Dafür müsste mir das LOG die Daten nicht als Fließtext ausgeben, sondern es müsste immer einen harten Zeilenumbruch nach jeder Zeile einfügen.Ein Beispiel wie ich eine Statusseite hardcoded eingegeben hatte in das Template-Widget. So müsste also der Syntax aussehen. Am Log-Code selbst hatte ich bisher extra nichts geändert.
Geht das irgendwie umzusetzen oder hat jemand irgendeine andere Idee wie ich es sauber in Habpanel einpflege?{{itemValue('deconz.0.Sensors.5.lastupdated')}}<br> {{itemValue('deconz.0.Sensors.6.lastupdated')}}<br> {{itemValue('deconz.0.Sensors.7.lastupdated')}}<br> {{itemValue('deconz.0.Sensors.8.lastupdated')}}<br>
VG Sascha
-
@Sascha12
Vielen Dank für dein Feedback !Was du machen kannst:
Den entsprechenden Datenpunkt von logJSON, also etwajavascript.0.Log-Script.xxxxx.logJSON
, einfach auf Änderung überwachen. Bei Änderung dann auslesen, die Logzeilen neu aufbauen, und dann in einen neuen Datenpunkt ausgeben.
Beispiel (kopiert aus einem Script von mir):// State von Logfile-Script, den wir verarbeiten wollen const STATE_LOG = 'javascript.0.Log-Script.logError.logJSON'; // Neuer State, der die geparste Ausgabe enthält const STATE_RESULT = 'javascript.0.Test.Testlog' /////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////// AB HIER NICHTS MEHR ÄNDERN /////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// createState(STATE_RESULT, {'name':'Test Log', 'type':'string', 'read':true, 'write':true, 'def':'' }); on({id: STATE_LOG, change: 'any'}, function (obj) { doStuff(); }); function doStuff() { let obj; // https://forum.iobroker.net/topic/6805/mqtt-json-einzelner-datenpunkt-sonoffpow-script/4 try {obj = JSON.parse(getState(STATE_LOG).val); } catch (e) { log('Cannot parse: ' + getState(STATE_LOG).val, 'warn'); return; } let logStr = ''; for (let lpEntry of obj) { // hier kannst du beliebig alles anpassen für die Ausgabe logStr += lpEntry.date + ' - Level: ' + lpEntry.level + ', Quelle: ' + lpEntry.source + ', Message: ' + lpEntry.msg; } setState(STATE_RESULT, logStr); }
Bei
// hier kannst du beliebig alles anpassen für die Ausgabe
kannst du deine Ausgabe individuell konfigurieren.