Ich habe das Script in einen Adapter umgewandelt: Adapter Log Parser. Daher wird die Entwicklung dieses Scripts nicht mehr fortgeführt!
- 1. Sinn und Zweck
- 2. Installation und Einrichtung
- 3. Log-Ausgaben im VIS darstellen
- 4. Auf Log-Ereignisse reagieren
- 5. Neues Feature ab 4.10: Per Log JSON-Spalteninhalte ändern
- 6. Weiteres
Table of contents generated with markdown-toc
Der ioBroker loggt alle Aktionen der Adapter und Scripte entsprechend mit, einzusehen in der ioBroker-Administration, linke Seite Menüpunkt "Log". Dieses Script bietet nun folgendes:
- Log im VIS darstellen: Entsprechend gefiltert, also etwa nur Warnungen und Fehler, nur Ausgaben eines bestimmten Adapters, usw.
- Auf Log-Ereignisse agieren
Dabei nimmt das Script jeden neuen Logeintrag des ioBrokers und wendet entsprechend gesetzte Filter an, um den Eintrag dann in den entsprechenden Datenpunkten dieses Scripts abzulegen. Es stehen auch JSON-Datenpunkte zur Verfügung, mit diesen kann im vis eine Tabelle ausgegeben werden (z.B. über das Widget 'basic - Table').
-
In der Instanz des JavaScript-Adapters die Option
Erlaube das Kommando "setObject"
aktivieren. Dies ist notwendig, damit die Datenpunkte unterhalb von0_userdata.0
angelegt werden mittels Script github.com/Mic-M/iobroker.createUserStates. Wer das nicht möchte: -
Falls Datenpunkte unterhalb
0_userdata.0
(und nicht unterhalb vonjavascript.0
) angelegt werden sollen: In der Instanz des JavaScript-Adapters die OptionErlaube das Kommando "setObject"
aktivieren. Siehe auch: https://github.com/Mic-M/iobroker.createUserStates
- Script-Code öffnen.
- Alles kopieren (Strg + a)
- Zur ioBroker-Administration wechseln und dort im linken Menü "Skripte" auswählen.
- Mit dem "+"-Menüpunkt ein neues Script hinzufügen, dann "Javascript" auswählen, und einen Namen vergeben (z.B. "Log-Script") und speichern.
- Dieses neue Script öffnen (ist jetzt natürlich noch leer), den zuvor kopierten Code mit Strg+v einfügen und Speichern.
Wichtig: Das Script nicht unterhalb des Ordners "Global" erstellen. Das ist unnötig und kostet Performance. Siehe auch: global-functions
Das neue Script nun öffnen und gemäß den Angaben im Script bei Bedarf entsprechend einrichten. Speichern nicht vergessen. Es funktioniert auch so ohne Änderungen und es werden schon mal Datenpunkte angelegt. Weiter einstellen kann man dann auch später.
Das Script nun aktivieren. Damit werden nach wenigen Sekunden alle Datenpunkte angelegt und das Script überwacht nun ab sofort das ioBroker-Log.
Hierzu habe ich ein Beispiel-Projekt erstellt: VIS-Project-Log-Script.zip
Diese zip-Datei herunterladen, und in VIS im Menü Setup > Projekt-Export/Import > Import
aufrufen, um dort das Projekt zu importieren.
Siehe auch im ioBroker-Forum.
Voraussetzungen
- Die Widgets ioBroker Material Design Widgets werden benötigt
- Falls im Script in den Optionen unter
LOG_STATE_PATH = '0_userdata.0.Log-Script'
ein anderer Pfad eingestellt wurde, dann am besten in der zip die Dateivis-views.json
in einem Editor öffnen und über Suchen/Ersetzen euren Pfad entsprechend setzen. Danach speichern und sicherstellen, dass die zip-Datei aktualisiert wurde.
Um sich etwa bei einer bestimmten Log-Meldung eine Telegram-Nachricht zu senden, gibt es die ioBroker-Funktion onLog().
Alternativ kann man per JavaScript oder Blockly die entsprechenden Filter-Datenpunkte des Scripts (z.B. 0_userdata.0.Log-Script.logError.log
überwachen und dann bei einer entsprechenden Log-Meldung über dieses erzeugte JavaScript / Blockly agieren.
Ab Script-Version 4.10 gibt es die Möglichkeit, über JavaScript, Blockly, etc. Logs abzusetzen und dabei zu beeinflussen, welcher Inhalt in die Spalten 'date','level','source','msg' gesetzt wird.
Beispiel: Folgender Befehl wird in einem JavaScript ausgeführt:
log('[Alexa-Log-Script] ##{"msg":"' + 'Befehl [Musik an].' + '", "source":"' + 'Alexa Flur' + '"}##');
Damit wird nun der Teil ##{"msg":"' + 'Befehl [Musik an].' + '", "source":"' + 'Alexa Flur' + '"}##
genommen, als Log-Text 'Befehl [Musik an].' (anstatt der Logzeile) angezeigt, und als Quelle wird 'Alexa Flur' (anstatt javascript.0) angezeigt.
Syntax:
In die Logzeile folgendes aufnehmen: ##{"date":"", "level":"", "source":"", "msg":""}##
Dabei können einzelne Werte entfernt werden, also z.B. nur um den Logtext (msg) zu ändern, nimmt man ##{"msg":"hier der Text."}##
Use Cases Da das Log-Script umfangreiche Filter bietet, von denen beliebig viele angelegt werden können und dann in Datenpunkten verfügbar sind, können mit dieser Funktion einfach per log() entsprechend Tabellen gefüllt werden.
Beispiele: Siehe hier im Forum.
Support erhaltet ihr hier im ioBroker Forum: Log-Datei aufbereiten für VIS - JavaScript.
Siehe im Script.
MIT License
Copyright (c) 2018-2020 Mic-M
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.