Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Journal-Log erstellen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Journal-Log erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tomily @liv-in-sky last edited by

      @liv-in-sky
      Bisher gibt es das LOG so noch nicht. Ich werde das durch andere Scripte erstellen und befüllen lassen.
      Somit sind noch alle Wege offen. Das Testlog habe ich mit vi einfach selbst untereinander geschrieben.

      Denkbar und Sinnvoll wäre es, dass ich jede neue Zeile mit Datum, Uhrzeit + ": " Doppelpunkt am Ende beginne. Also z.B.

      08.02.21 - 14:31: Zeile 1
      08.02.21 - 14:31: Zeile 2
      08.02.21 - 14:32: Bla
      08.02.21 - 14:34: Bla bla

      Wäre das zum parsen Sinnvoll?

      liv-in-sky Homoran 2 Replies Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @tomily last edited by liv-in-sky

        @tomily ja- da sollte man mit regex was machen können - zur not hilft uns vielleicht der regex meister ( @Homoran )

        Homoran 1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @liv-in-sky last edited by

          @liv-in-sky sagte in Journal-Log erstellen:

          zur not hilft uns vielleicht der regex meister ( @Homoran )

          und irgendwann bringst du mir noch das parsen in js (Blockly) bei.
          dann kann ich auch mit wget Daten holen

          liv-in-sky 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @tomily last edited by

            @tomily sagte in Journal-Log erstellen:

            08.02.21 - 14:31: Zeile 1
            08.02.21 - 14:31: Zeile 2
            08.02.21 - 14:32: Bla
            08.02.21 - 14:34: Bla bla

            Wäre das zum parsen Sinnvoll?

            dann wäre da einfach ein Zeilenende? oder was sehe ich da nicht?
            oder willst du nur den Text und nicht den Timestamp haben?

            T 1 Reply Last reply Reply Quote 0
            • T
              tomily @Homoran last edited by

              @homoran
              Schön wäre es, wenn einfach exakt der Inhalt der LogDatei im Dashbaord erscheint. Und zwar Zeile für Zeile, statt hintereinander.

              Wenn es zum Formatieren einfacher ist, würde ich das Datum/Uhrzeit zusätzlich in die LogDatei in jede Zeile schreiben lassen, um den Zeilenanfang erkennen zu können.

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @tomily last edited by

                @tomily
                @liv-in-sky

                Wenn jeder eintrag mit einem Zeilenumbruch endet, geht das zumindest theoretisch einfach
                logdatei.png

                Das RegEx wäre ([^\n]+)
                und dann wieder +das Umbruchzeichen <br> ode /n aneinanderreihen

                liv-in-sky 1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @Homoran last edited by liv-in-sky

                  @homoran

                  @Homoran gibt es dafür eine bessere schreibweise - damit kann ich ein </br> am anfang einfügen und bekomme das im html angezeigt

                  ([0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9] [0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]\.[0-9][0-9][0-9]).*?
                  

                  Image 11.png

                  Image 10.png

                  Image 12.png

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @liv-in-sky last edited by

                    @liv-in-sky sagte in Journal-Log erstellen:

                    gibt es dafür eine bessere schreibweise

                    hast du mein Regex nicht gesehen?
                    eine Gruppe (), darin beliebig viele alles außer \n = [^\n]+

                    liv-in-sky 1 Reply Last reply Reply Quote 0
                    • liv-in-sky
                      liv-in-sky @Homoran last edited by liv-in-sky

                      @homoran

                      jetzt schon 🙂

                      bin mir nicht sicher, ob es \n enthält - teste ich mal

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @liv-in-sky last edited by Homoran

                        @liv-in-sky sagte in Journal-Log erstellen:

                        bin mir nicht sicher, ob es \n enthält

                        hat es - siehe Screenshot

                        wenn nicht, bräuchte ich mal eine echte logdatei von @tomily

                        liv-in-sky 1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @Homoran last edited by

                          @homoran

                          die haben wir ja noch nicht - muss er erst erstellen oder umbauen - auf jeden fall wissen wir, wie es funktionieren soll

                          ich arbeite ja damit - mit dem logfile von iobroker - das ist aber nur der test - das sind \r und \n drin - linux halt

                          2021-02-08 13:59:54.536  - error: node-red.0 (1794) 8 Feb 13:59:54 - [error] [change:b0f28e3c.41e57] Ungültiges 'from' Merkmal: Invalid regular expression: / [/: Unterminated character class
                          
                          2021-02-08 14:00:12.159  - error: node-red.0 (1794) 8 Feb 14:00:12 - [error] [change:b0f28e3c.41e57] Ungültiges 'from' Merkmal: Invalid regular expression: / [/: Unterminated character class
                          
                          2021-02-08 14:05:02.428  - info: javascript.0 (1123) Stop script script.js.Armin_Schalter.AAAtail
                          2021-02-08 14:05:02.736  - info: javascript.0 (1123) Start javascript script.js.Armin_Schalter.AAAtail
                          
                          2021-02-08 14:05:39.151  - error: node-red.0 (13376) install: [""]
                          2021-02-08 14:05:44.482  - warn: node-red.0 (13376) 8 Feb 14:05:44 - [warn] Projekte inaktiviert: editorTheme.projects.enabled=false
                          

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @liv-in-sky last edited by

                            @liv-in-sky sagte in Journal-Log erstellen:

                            die haben wir ja noch nicht - muss er erst erstellen oder umbauen

                            @tomily
                            kannst du uns bitte mal eine Datei zur Verfügung stellen, die du auswerten willst

                            liv-in-sky 1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @Homoran last edited by

                              @homoran danke dir

                              habe es jetzt für mein beispiel so gelöst

                              (.*?)(?<!\r)\n
                              

                              genug getestet - muss jetzt wieder an anderem script "wurschteln" - das nervt schon seit tagen

                              Image 13.png

                              1 Reply Last reply Reply Quote 1
                              • liv-in-sky
                                liv-in-sky @Homoran last edited by liv-in-sky

                                @homoran sagte in Journal-Log erstellen:

                                und irgendwann bringst du mir noch das parsen in js (Blockly) bei.
                                dann kann ich auch mit wget Daten holen

                                vielleicht magst du dich damit spielen - braucht minimal javascript - kann aber mehrere reg-auflöungen hintereinander machen - du mußt dafür nur die array's richtig (myFilterRegexEvent5,myFilterRegexEvent6) füllen

                                Image 14.png

                                orange: regex ausdruck - was wird gesucht
                                grün: mit was wird es ersetzt

                                da diese variablke ein array ist, kannst du ein komma setzen und in beiden arrays einfach ein zweites regex einsetzen - das wird dann anschliessend ausgeführt

                                ein beispiel aus meinem ical script (zuerst wird nach Biathlon... gesucht und ersetzt (mit Bia) und anschliessend nach SACK und ersetzt (mit Tonne):

                                  let myFilterRegexEvent5=[/Biathlon(: .*)/,/(GELBE)R SACK/];                        // Regex für EventAnzeige: event=event.replace(myFilterRegexEvent,myFilterRegexEvent2)
                                  let myFilterRegexEvent6=["Biat$1","$1 Tonne"];  
                                

                                myFilterRegexEvent5 und myFilterRegexEvent6 müssen immer gleich viele einträge haben - sonst mag das script nix ausfühen

                                <xml xmlns="https://developers.google.com/blockly/xml">
                                 <variables>
                                   <variable id="y-|J0d(aR`$MnV$s%a1l">val0</variable>
                                   <variable id="tHZ5N|7tx.:_t~bL$-X,">result</variable>
                                 </variables>
                                 <block type="exec" id="pVw*=SO,Qv)T=Z3WsR+o" x="162" y="212">
                                   <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation>
                                   <field name="WITH_STATEMENT">TRUE</field>
                                   <field name="LOG"></field>
                                   <value name="COMMAND">
                                     <shadow type="text" id="~(8H1A)J70YzQZ)mS1VL">
                                       <field name="TEXT">tail -n 10 /opt/iobroker/log/iobroker.current.log</field>
                                     </shadow>
                                   </value>
                                   <statement name="STATEMENT">
                                     <block type="debug" id="tEH3%[uQpaLwhAr(pux6">
                                       <field name="Severity">log</field>
                                       <value name="TEXT">
                                         <shadow type="text" id="L155Yy0phV@yz(uu84WI">
                                           <field name="TEXT">test</field>
                                         </shadow>
                                         <block type="variables_get" id="iC=px]qekkTJ;rBvty~e">
                                           <field name="VAR" id="tHZ5N|7tx.:_t~bL$-X,">result</field>
                                         </block>
                                       </value>
                                       <next>
                                         <block type="variables_set" id="%eq_T!.3]_F()B#nlEqO">
                                           <field name="VAR" id="tHZ5N|7tx.:_t~bL$-X,">result</field>
                                           <value name="VALUE">
                                             <block type="procedures_callcustomreturn" id="@klX@R2]ZG)nM1JHh6|Y">
                                               <mutation name="regex-schleife">
                                                 <arg name="val0"></arg>
                                               </mutation>
                                               <value name="ARG0">
                                                 <block type="variables_get" id="gI3(os?-yIJlXxVr-#4H">
                                                   <field name="VAR" id="tHZ5N|7tx.:_t~bL$-X,">result</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="debug" id="|dD!fZ(Zm*(9!Uo]QigF">
                                               <field name="Severity">log</field>
                                               <value name="TEXT">
                                                 <shadow type="text">
                                                   <field name="TEXT">test</field>
                                                 </shadow>
                                                 <block type="variables_get" id="M@Lxxz.*YLgf]KOaOdE9">
                                                   <field name="VAR" id="tHZ5N|7tx.:_t~bL$-X,">result</field>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="control" id="v(kx8Kic0u3Ng#yXxQ2b">
                                                   <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                   <field name="OID">0_userdata.0.TestTail</field>
                                                   <field name="WITH_DELAY">FALSE</field>
                                                   <value name="VALUE">
                                                     <block type="variables_get" id="#K@),KPbR8T4#?m-^O1(">
                                                       <field name="VAR" id="tHZ5N|7tx.:_t~bL$-X,">result</field>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                       </next>
                                     </block>
                                   </statement>
                                 </block>
                                 <block type="procedures_defcustomreturn" id="p~-buWNdttPkl!wwvsKR" x="663" y="362">
                                   <mutation statements="false">
                                     <arg name="val0" varid="y-|J0d(aR`$MnV$s%a1l"></arg>
                                   </mutation>
                                   <field name="NAME">regex-schleife</field>
                                   <field name="SCRIPT">ICBsZXQgbXlGaWx0ZXJSZWdleEV2ZW50NT1bLyhbMC05XVswLTldWzAtOV1bMC05XVwtWzAtOV1bMC05XVwtWzAtOV1bMC05XSBbMC05XVswLTldXDpbMC05XVswLTldXDpbMC05XVswLTldXC5bMC05XVswLTldWzAtOV0pLio/L2dtXTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdleCBmw7xyIEV2ZW50QW56ZWlnZTogZXZlbnQ9ZXZlbnQucmVwbGFjZShteUZpbHRlclJlZ2V4RXZlbnQsbXlGaWx0ZXJSZWdleEV2ZW50MikNCiAgbGV0IG15RmlsdGVyUmVnZXhFdmVudDY9WyI8L2JyPiQxIl07ICAgICAgIA0KDQoNCiAgaWYgKG15RmlsdGVyUmVnZXhFdmVudDUubGVuZ3RoPT1teUZpbHRlclJlZ2V4RXZlbnQ2Lmxlbmd0aCl7DQogICAgICAgIGZvcihsZXQgej0wO3o8bXlGaWx0ZXJSZWdleEV2ZW50NS5sZW5ndGg7eisrKXt2YWwwPXZhbDAucmVwbGFjZShteUZpbHRlclJlZ2V4RXZlbnQ1W3pdLG15RmlsdGVyUmVnZXhFdmVudDZbel0pfX0NCg0KcmV0dXJuIHZhbDA7</field>
                                   <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                 </block>
                                </xml>
                                

                                Image 15.png

                                Homoran 2 Replies Last reply Reply Quote 1
                                • Homoran
                                  Homoran Global Moderator Administrators @liv-in-sky last edited by

                                  @liv-in-sky DANKE!
                                  Das sieht schaffbar aus - muss ich mal ventilieren 😁

                                  1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @liv-in-sky last edited by

                                    @liv-in-sky Aber wenn ich gar nichts ersetzen (replace) will, sondern nur den Wert anzeigen/in eine Variable schreiben will??

                                    liv-in-sky 1 Reply Last reply Reply Quote 0
                                    • liv-in-sky
                                      liv-in-sky @Homoran last edited by liv-in-sky

                                      @homoran

                                      mit klammer suchen und ersetzen mit $1 - müßte funktionieren

                                      oder check ich was nicht

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @liv-in-sky last edited by

                                        @liv-in-sky sagte in Journal-Log erstellen:

                                        oder check ich was nicht

                                        du schon 😂

                                        ich jetzt auch

                                        1 Reply Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @tomily last edited by mickym

                                          @tomilyIch misch mich mal wieder ein.

                                          Um eine eigene Logdatei zu schreiben bzw. anzuzeigen willst musst Du Dir ja ne Struktur aufbauen. Ich empfehle Dir ein Array mit Objekten gleichen Aufbaus - wie Datum, Ereignis usw.

                                          Eingabe:

                                          Die Log Dateien kannst Du mit Standard Nodes (wie file in) einlesen. Damit bekommst Du schon mal für jede Zeile eine Nachricht.
                                          Die Aufteilung einer Zeile kannst Du dann wie @Homoran schreibt mit regulären Ausdrücken machen.

                                          Das geht auch mit regulären Ausdrücken in NodeRed ohne irgendwelche Funktionen nutzen zu müssen. Du kannst auch mit Gruppen ($1 und $2 ...) arbeiten und diese dann weiterverarbeiten. Damit kannst Du direkt neue Nachrichten erzeugen so habe ich das hier gemacht:

                                          Damit kannst Du dann zum Beispiel schon mal ausfiltern welche Zeit Du haben willst.

                                          Wie die Mitstreiter habe ich als Beispiel auch mal die iobroker log genommen und mit der file in eingelesen.

                                          somit bekommst Du für jede Zeile eine Nachricht - die leeren Zeilen wurden herausgefiltert.

                                          Wie Du siehst funktioniert das soweit ganz gut.

                                          ebd0590e-21f8-4ad0-aea7-e00bb0570452-image.png

                                          Zur Analyse der Logdateien bietet sich die Gruppenfunktion mit regulären Ausdrücken an, die NodeRed mit Hausmitteln bereits unterstützt.

                                          Das siehst Du an diesem Change Node:

                                          Ich sichere hier die Zeile / payload in 2 Zwischenobjekte und analysiere das Datum und das Ereignis aus und speichere es in einem eigenen Objekt, damit ich die payload dann löschen kann und als Objekt neu aufbauen kann:

                                          c039d155-d574-4427-93d7-ee1a45cb399e-image.png

                                          Als Ergebnis erhälst Du dann ein wundeschönes Payload Objekt mit den Eigenschaften Date und Event die Du dann im weiteren Verlauf analysieren kannst.

                                          7a13d8ed-edd7-4cfc-a9ff-6c5b53e7bc74-image.png

                                          Nun empfehle ich Dir solche Objekte in einem Array mit der gleichen Struktur als Flow Variable anzulegen.

                                          und verarbeiten ... (Teil 2 folgt!)

                                          mickym 1 Reply Last reply Reply Quote 0
                                          • mickym
                                            mickym Most Active @mickym last edited by

                                            So mit dem Teil2 kommen wir also zur Verarbeitung - nachdem Du nun events und Datum hast - kannst Du einzelne Nachrichten wegschmeissen herausfilter usw.

                                            Nach der Verarbeitung (der einzelnen Events) - schmeißen wir alle wieder zusammen in ein Array. Das macht die JOIN Node.

                                            Man kann ihr entweder über einen trigger mitteilen wann das Array fertig ist (msg.complete = true) - ich habe hier der Einfachheit mal ein Zeitlimit eingegeben - da mein Log in der Regel selbst wenn es groß ist, in 10 Minuten eingelesen ist.

                                            Wir haben also nur noch eine Nachricht - die alle Events in einem Array in einer Payload enthält.

                                            Ich hoffe Du folgst mir - ich versuche es ja mit Screenshots immer zu erklären:

                                            28a4b38e-acd7-4351-8391-2c0d89d73490-image.png

                                            So ein Array kannst Du dann auch in einer flow Variablen speichern und ggf. getriggert für weitere Untersuchungen verwenden. Das macht die 2. Change Node - die aber sonst keine Aufgabe hat - außer die Payload - das Array in einer Variablen zu speichern.

                                            Im Kontext Menü sieht das dann so aus.

                                            f9f53dd3-c17d-4fb2-a3cd-4404240ae842-image.png

                                            Die Ausgabe erfolgt im 3. Teil.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            996
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            62
                                            2673
                                            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