Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] JS: Log-Datei aufbereiten für VIS

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] JS: Log-Datei aufbereiten für VIS

    This topic has been deleted. Only users with topic management privileges can see it.
    • sigi234
      sigi234 Forum Testing Most Active @Glasfaser last edited by sigi234

      @Glasfaser
      @Negalein

      Danke, hatte ich auch schon fast. Habe aber All eingefügt.

      Glasfaser 1 Reply Last reply Reply Quote 0
      • Glasfaser
        Glasfaser @sigi234 last edited by

        @sigi234

        Habe mich auch schon gewundert 😉

        sigi234 1 Reply Last reply Reply Quote 0
        • sigi234
          sigi234 Forum Testing Most Active @Glasfaser last edited by sigi234

          @Glasfaser sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

          @sigi234

          Habe mich auch schon gewundert 😉

          javascript.0	2020-02-27 23:34:22.047	error	(12272) script.js.LOG.MIC_Log1: Log-Script-Fehler: Gewählter Filter all, aber Datenpunkt [0_userdata.0.Log-Script.logall.logJSON] ist nicht vorhanden.
          

          Erledigt, Fehler weg.

          1 Reply Last reply Reply Quote 0
          • O
            Oli @Mic last edited by

            @Mic

            nochmals danke für das tolle Script.

            Kann ich mir in deinem Script auch den Status aller Javascripte (aktiviert, nicht aktiviert, Pause) anzeigen lassen?

            Mic 1 Reply Last reply Reply Quote 0
            • Mic
              Mic Developer last edited by

              @Negalein
              Hi. Das Log-Script behandelt wirklich nur Logs, und keine Datenpunkte.
              Aber ich nutze schon seit längerem ein von mir geschriebenes Script, um die Alexa-History zu loggen und in VIS auszugeben. Also so:
              log_al.png

              Falls gewünscht, kann ich das Script gerne veröffentlichen. Gibt einen Datenpunkt, dessen Inhalt dann in VIS als Tabelle ausgegeben wird.

              Negalein 1 Reply Last reply Reply Quote 0
              • Mic
                Mic Developer @Oli last edited by Mic

                @Oli sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                Kann ich mir in deinem Script auch den Status aller Javascripte (aktiviert, nicht aktiviert, Pause) anzeigen lassen?

                Hi,
                das geht so leider nicht, da das Log-Script ausschließlich die Logs als Quelle nimmt. Für deine Anforderung am besten einen neuen Thread öffnen ☺

                1 Reply Last reply Reply Quote 0
                • Mic
                  Mic Developer @ple last edited by

                  @ple sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                  Vielleicht hast du eine Idee, wie ich dein Script nutzen kann als Meldearchiv.
                  Eigentlich will ich mir in einer Table nur anzeigen lassen, wenn ein Aktor auf true geht, oder sonst was.
                  Ähnlich Fensterzähler oder dein Garagentor. Nur soll die Meldung auch wieder weggehen, wenn z.B. dein Garagentor nicht mehr klemmt.
                  Hast du da vielleicht eine Idee, wie man sowas umsetzen könnte?
                  Mein rudimentärer Anfang ist hier mal dokumentiert.
                  https://forum.iobroker.net/topic/30324/array-erstellen-mit-prüfung-für-json-tabelle/9

                  Hi,
                  das Log-Script ist nicht für deinen Anwendungsfall gedacht, es nimmt ausschließlich die Logs als Quelle. Ebenso ist es ein "Log", daher werden ältere Werte nicht nachträglich angepasst.

                  P 1 Reply Last reply Reply Quote 0
                  • Negalein
                    Negalein Global Moderator @Mic last edited by Negalein

                    @Mic sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                    Aber ich nutze schon seit längerem ein von mir geschriebenes Script, um die Alexa-History zu loggen und in VIS auszugeben.
                    Falls gewünscht, kann ich das Script gerne veröffentlichen. Gibt einen Datenpunkt, dessen Inhalt dann in VIS als Tabelle ausgegeben wird.

                    Cool

                    Ja bitte

                    PS: kannst du mir dann einen Export von obigem Screenshot auch mitgeben?

                    Mic 1 Reply Last reply Reply Quote 0
                    • Mic
                      Mic Developer @Negalein last edited by

                      @Negalein sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                      Cool

                      Ja bitte

                      Gerne. Siehe hier: https://forum.iobroker.net/topic/30657/vorlage-alexa-history-befehle-in-vis-anzeigen

                      1 Reply Last reply Reply Quote 2
                      • Negalein
                        Negalein Global Moderator last edited by Negalein

                        @Mic

                        Ich schaffe es nicht das Design der Tabelle in mein Projekt zu übernehmen.

                        Das komplette Widget hab ich von deinem Projekt exportiert und bei mir wieder eingefügt.
                        Dann in deinem Projekt das Widget markiert und unter CSS/Global den Code 1:1 in meinem Projekt beim Widget unter CSS/Global eingefügt.

                        Trotzdem sind bei mir die Zeilen anders.

                        EDIT:
                        Kommando retour.
                        Ich hab das falsche CSS kopiert.

                        1 Reply Last reply Reply Quote 0
                        • M
                          mguenther last edited by

                          Ich weiß nicht, ob ich alles richtig verstehe. Wenn ich einen Log-File zu einem Adapter auswerten möchte, dann lege ich im Skript z.B. das an:

                             {
                              id:             'Modbus',
                              filter_all:     [/modbus.0/],
                              filter_any:     [' - error: ', ' - warn: ',  ' - info: '],  // entweder error oder warn
                              blacklist:      ['', '', ''],
                              clean:          ['', '', ''],
                              merge:          true,
                              sortDescending: true,
                              jsonDateFormat: '#DD.MM.# hh:mm',
                              jsonColumns:    ['date','level','source','msg'],
                              jsonLogLength:  100,
                              jsonMaxLines:   100,
                              jsonCssToLevel: false,
                            },
                          

                          und schreibe das z.B. unter das Beispiel im Skript für homematic. Es werden auch die folgenden Datenpunkte angelegt.
                          c5e1b11b-9ecb-4023-ba7e-c8b2b2c45b6d-grafik.png

                          Jetzt werte ich das in der VIS separat aus, allerdings scheine ich beim Layout anpassen an meine VIS etwas geändert zu haben - ich habe keine farbigen Einträge mehr. Was muss ich denn wo entsprechend ändern?
                          97e798d7-c7bc-483b-9a44-eda8e885d871-grafik.png

                          danke
                          Marcus

                          Glasfaser 1 Reply Last reply Reply Quote 0
                          • Glasfaser
                            Glasfaser @mguenther last edited by Glasfaser

                            @mguenther

                            Wenn du von Ihm das View in dein Projekt kopierst , dann mußt du auch die CCS kopieren .

                            CSS:

                            
                            
                            /******************************************
                                           — LINKS —
                            ******************************************/
                            .noteProject a:link { color: #b8b8b8; } /* unvisited link */
                            .noteProject a:visited { color: #b8b8b8; } /* visited link */
                            .noteProject a:hover { color: #ffffff; } /* mouse over link */
                            .pnoteProjecte a:active { color: #ffffff; } /* selected link */
                            hr { border:0; height: 1px; background-color:#b8b8b8 }
                            
                            
                            /******************************************
                                           — TABLE —
                            ******************************************/
                            
                            .tableLog .log-warn { color: orange;}
                            .tableLog .log-error { color: red;}
                            .tableLog .log-info { color: yellow;}
                            
                            
                            /* Word-Break anwenden */
                            .tableLog {
                               word-break: break-word; 
                            }
                            
                            
                            
                            /* Jede zweite Tabellenzeile formatieren */
                            .tableLog tr:nth-child(even) {
                               background:rgba(56,46,67,0.1);
                            }
                            
                            /* Rand unterhalb Tabellenüberschrift */
                            .tableLog .mdc-data-table__header-row {
                               border-bottom: 1px solid #434343;
                            }
                            
                            /* Zeilenhöhe und Abstände */
                            .tableLog .mdc-data-table__cell  {
                               line-height:1.3em;
                               padding-top: 6px;
                               padding-bottom: 6px;
                            }
                            
                            
                            /* Scrollbar */
                            .tableLog::-webkit-scrollbar { width: 15px; }
                            .tableLog::-webkit-scrollbar-track { background: transparent; }
                            .tableLog::-webkit-scrollbar-thumb { background-color: rgba(63,64,71,1); border-radius: 7px; border-color: rgba(63,64,71,1); }
                            .tableLog::-webkit-scrollbar-thumb:hover { background: #8f8f8f; }
                            
                            
                            /******************************************
                                           — BUTTONS —
                            ******************************************/
                            
                            
                            .leftBarBtn .materialdesign-button-body {
                               justify-content: left !important; 
                               margin-left: 0.9em;
                            }
                            

                            M 1 Reply Last reply Reply Quote 0
                            • M
                              mguenther @Glasfaser last edited by

                              @Glasfaser
                              das hatte ich gesucht... ich bin blöd, bei mir stand die ganze Zeit CSS auf global und deswegen hatte ich es nicht gesehen
                              danke

                              1 Reply Last reply Reply Quote 0
                              • Mic
                                Mic Developer last edited by Mic

                                Update: Script-Version 4.10

                                Die neue Log-Script Version 4.10 erlaubt es nun, über Logs, die abgegeben werden (z.B. über Funktion log() in JavaScript oder Blockly) die Inhalte zu manipulieren. 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.

                                Hier im Link weitere Infos zur Verwendung.

                                Beispiel:

                                Folgendes Script erzeugt eine Log-Zeile, sobald ein Befehl an ein Alexa-Gerät gesprochen wird.
                                Github: alexa-log-script.js

                                So sieht dann das Log dieses Scripts in etwa aus:
                                javascript.0 (12345) script.js.Alexa: [Alexa-Log-Script] ##{"msg":"Licht An", "source":"Sonos Küche"}##

                                Anzeige im VIS durch diese neue Funktion des Log-Scripts:
                                xsagh.png

                                Wie zu sehen wird damit "Quelle" (wäre hier normalerweise "javascript.0") durch das Alexa-Gerät (hier: Sonos Küche) ersetzt. Außerdem wird die Message durch den gesprochenen Befehl (hier: "Licht An") ersetzt.
                                Genauso können auch noch das Datum ("date") und das Log-Level ("level") ersetzt werden.

                                Für dieses Script-Beispiel einfach folgenden Filter setzen:

                                  {
                                    id:             'alexa',
                                    filter_all:     ['[Alexa-Log-Script]', ''],
                                    filter_any:     [' - info: '],
                                    blacklist:      ['', '', ''],
                                    clean:          [/script\.js\.[^:]*: [Alexa-Log-Script]/, '', ''],
                                    merge:          false,
                                    sortDescending: true,
                                    jsonDateFormat: '#DD.MM.# hh:mm',
                                    jsonColumns:    ['date','level','source','msg'],
                                    jsonLogLength:  100,
                                    jsonMaxLines:   50,
                                    jsonCssToLevel: true,
                                  },
                                

                                Genau so können auch mehrere Filter für verschiedene Alexa-Geräte angelegt werden.
                                Dazu einfach unter filter_all ein bestimmtes Alexa-Gerät, z.B. "Show 5 Küche" hinzufügen.

                                Update von Vorversion
                                Einfach alles unterhalb von hier ersetzen:

                                /********************************************************
                                 * Ab hier nichts mehr ändern / Stop editing here!
                                 ********************************************************/
                                
                                Glasfaser Negalein 2 Replies Last reply Reply Quote 1
                                • Glasfaser
                                  Glasfaser @Mic last edited by Glasfaser

                                  @Mic sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                                  Beispiel:
                                  Folgendes Script erzeugt eine Log-Zeile, sobald ein Befehl an ein Alexa-Gerät gesprochen wird.

                                  Ich würde das Skript noch auf Github legen , sonst geht es hier unter !?

                                  EDIT: und das Filterbeispiel ...

                                  @Negalein .... da hat Mic was tolles für Dich gemacht 😉

                                  Negalein Mic 2 Replies Last reply Reply Quote 1
                                  • Negalein
                                    Negalein Global Moderator @Glasfaser last edited by

                                    @Glasfaser sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                                    da hat Mic was tolles für Dich gemacht

                                    Ja, definitiv!
                                    Schon geil, was @Mic da für Zauberhände hat.

                                    1 Reply Last reply Reply Quote 1
                                    • Negalein
                                      Negalein Global Moderator last edited by

                                      @Mic

                                      Ich bekomm folgenden Error und das Log-Script geht auf Pause (Gelb).

                                      javascript.0	2020-03-01 20:31:44.477	error	(591) at Script.runInContext (vm.js:133:20)
                                      javascript.0	2020-03-01 20:31:44.477	error	(591) at script.js.System.IOBroker_Log:285:21
                                      javascript.0	2020-03-01 20:31:44.476	error	(591) SyntaxError: Invalid regular expression: /script\.js\.[^:]*: [Alexa-Log-Script]/: Range out of order in character class
                                      javascript.0	2020-03-01 20:31:44.476	error	(591) ^
                                      javascript.0	2020-03-01 20:31:44.476	error	(591) clean: [/script\.js\.[^:]*: [Alexa-Log-Script]/, '', ''],
                                      javascript.0	2020-03-01 20:31:44.475	error	(591) script.js.System.IOBroker_Log: script.js.System.IOBroker_Log:285
                                      

                                      /******************************************************************************************************
                                       * History der Alexa-Sprachbefehle in VIS darstellen.
                                       * Erfordert das Log-Script: https://github.com/Mic-M/iobroker.logfile-script
                                       ******************************************************************************************************/
                                      
                                      // Normalerweise wird die "summary", also der Befehl an Alexa, in Kleinbuchstaben zurückgegeben, also 
                                      // z.B. "flurlicht einschalten". Wenn diese Option auf "true" ist, wird die Ausgabe zu 
                                      // "Flurlicht Einschalten", also jeweils erster Buchstabe groß. 
                                      // Falls nicht gewünscht, auf "false" setzen.
                                      const CAPITALIZE_FIRSTS = true;
                                      
                                      /*************************************************************************************************************************
                                       * Ab hier nichts mehr ändern / Stop editing here!
                                       *************************************************************************************************************************/
                                      
                                      main();
                                      function main() {
                                          // All instances, so alexa2.0.History.json, alexa2.1.History.json, alexa2.2.History.json, etc.
                                          on({id: /^alexa2\.\d\.History\.json$/, change:'any'}, function(obj) {
                                      
                                              // obj.state.val: JSON string of oject.
                                              // Like: {"name":"Alexa Flur","serialNumber":"xxxxxxxxxx","summary":"Wohnlicht an","creationTime":1582843794820, ... }
                                              let objHistory = JSON.parse(obj.state.val); 
                                      
                                              // ignore alexa keywords or empty value.
                                              if(! (['', 'alexa','echo','computer'].includes(objHistory['summary']) )) {
                                                  // ignore "sprich mir nach"
                                                  if (!(objHistory['summary'].includes('sprich mir nach '))) {
                                                      log('[Alexa-Log-Script] ##{"msg":"' + formatAlexaSummary(objHistory['summary']) + '", "source":"' + objHistory['name'] + '"}##');
                                                  }
                                              }
                                          });
                                      }
                                      
                                      /**
                                       * Formats the Alexa summary text accordingly.
                                       * @param {string} summaryText   The summary text
                                       * @return {string} the formatted summary
                                       */
                                      function formatAlexaSummary(summaryText) {
                                          if (CAPITALIZE_FIRSTS) summaryText = summaryText.replace(/(^|\s)\S/g, l => l.toUpperCase()); // Capitalize if set. https://stackoverflow.com/questions/2332811/
                                          return summaryText;
                                      }
                                      


                                      Log-Script.txt

                                      Mic 1 Reply Last reply Reply Quote 0
                                      • Mic
                                        Mic Developer @Glasfaser last edited by

                                        @Glasfaser
                                        @Negalein
                                        Vielen Dank für euer Feedback 😊

                                        @Glasfaser sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                                        Ich würde das Skript noch auf Github legen

                                        Guter Hinweis, erledigt (da ist auch das Filterbeispiel drin): https://github.com/Mic-M/iobroker.logfile-script/blob/master/alexa/alexa-log-script.js

                                        sigi234 Glasfaser 2 Replies Last reply Reply Quote 0
                                        • sigi234
                                          sigi234 Forum Testing Most Active @Mic last edited by

                                          @Mic

                                          Hm, ist das jetzt ein eigenes Skript?

                                          Negalein 1 Reply Last reply Reply Quote 0
                                          • Negalein
                                            Negalein Global Moderator @sigi234 last edited by

                                            @sigi234 sagte in [Vorlage] JS: Log-Datei aufbereiten für VIS:

                                            Hm, ist das jetzt ein eigenes Skript?

                                            das kurze Script wird benötigt, um mit den neuen Log-Script die Alexa-History auszulesen.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            709
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            60
                                            617
                                            119403
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo