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.
    • 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
                                  • mickym
                                    mickym Most Active @mickym last edited by mickym

                                    So nun zur Ausgabe (Teil3 )- ich bin leider kein HTML Programmierer - da gibts hier viel fittere Leute an Board und ich hab das für Dich nur mal schnell so quick & dirty hingebastelt. Du magst Dich vielleicht fragen, warum ich das Ganze in ein Array gepackt habe.

                                    Node Red hat die tolle Eigenschaft auch in dem Dashboard dass die Angular JS unterstützt wird.

                                    Wie Du hier ja selbst angemerkt hast - eignet sich hier für die Ausgabe die Template Node am Besten:

                                    Neben dem ganzen Formatierung ist das Geniale diese ng-repeat Direktive (alles verlinkt hier).

                                    Im Quelltext kannst Du nämlich mit ein paar läppischen Zeilen durch das ganze Array durchgehen.

                                    Das ist nämlich dann alles - was Du zur Ausgabe des Logs brauchst. 😉

                                    <div class="main">
                                    
                                        <table id="t01">
                                    
                                       
                                        <tr><th width=20%>Datum</th><th  width=70%>Event</th></tr>
                                         <tr ng-repeat="item in msg.payload">
                                        <td  align=left>{{item.date}}</td><td align=left>{{item.event}}</td>
                                        </tr>
                                        
                                        </table>
                                    
                                    
                                    </div>
                                    

                                    Alles ist bei mir nicht schön rausgekommen aber zur Verdeutlichung langt es - also hier nun das iobroker Log als HTML Tabelle im Node Red Dashboard:

                                    Wie gesagt - das geht alles viel schöner

                                    858b3322-173f-4aa8-b7df-14c6ca714d20-image.png

                                    Also keine Fragen zur HTML Formatierung bitte - das können hier andere an Board viel besser.

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

                                      Teil4 - so wie gesagt, warum ich NodeRed liebe - das Ganze hier ist bis auf den Code der HTML Formatierung mit wenigen Nodes erledigt:

                                      4a8f8645-accf-4092-9f59-e3e893a5842e-image.png

                                      und erfordert quasi 0 Programmierung. 😉 Alles mit Standard-Nodes und ohne Function-Nodes mit irgendwelchen Programmzeilen. 😉

                                      Hier der Flow zum Importieren und Spielen - die wichtigsten Dinge habe ich ja nun erklärt:

                                      [
                                          {
                                              "id": "cf77d4c3.528018",
                                              "type": "file in",
                                              "z": "6e170384.60c96c",
                                              "name": "",
                                              "filename": "/opt/iobroker/log/iobroker.current.log",
                                              "format": "lines",
                                              "chunk": false,
                                              "sendError": false,
                                              "encoding": "none",
                                              "x": 2490,
                                              "y": 1620,
                                              "wires": [
                                                  [
                                                      "514882c5.47d2fc"
                                                  ]
                                              ]
                                          },
                                          {
                                              "id": "243bb718.488838",
                                              "type": "inject",
                                              "z": "6e170384.60c96c",
                                              "name": "",
                                              "props": [
                                                  {
                                                      "p": "payload"
                                                  }
                                              ],
                                              "repeat": "",
                                              "crontab": "",
                                              "once": false,
                                              "onceDelay": 0.1,
                                              "topic": "",
                                              "payload": "true",
                                              "payloadType": "bool",
                                              "x": 2250,
                                              "y": 1620,
                                              "wires": [
                                                  [
                                                      "cf77d4c3.528018"
                                                  ]
                                              ]
                                          },
                                          {
                                              "id": "cffc5b65.bd9258",
                                              "type": "change",
                                              "z": "6e170384.60c96c",
                                              "name": "",
                                              "rules": [
                                                  {
                                                      "t": "set",
                                                      "p": "date",
                                                      "pt": "msg",
                                                      "to": "payload",
                                                      "tot": "msg"
                                                  },
                                                  {
                                                      "t": "set",
                                                      "p": "event",
                                                      "pt": "msg",
                                                      "to": "payload",
                                                      "tot": "msg"
                                                  },
                                                  {
                                                      "t": "change",
                                                      "p": "date",
                                                      "pt": "msg",
                                                      "from": "(\\d{4}-\\d{2}-\\d{2}\\s\\d{2}\\:\\d{2}:\\d{2}).*39m:\\s(.*)",
                                                      "fromt": "re",
                                                      "to": "$1",
                                                      "tot": "str"
                                                  },
                                                  {
                                                      "t": "change",
                                                      "p": "event",
                                                      "pt": "msg",
                                                      "from": "(\\d{4}-\\d{2}-\\d{2}\\s\\d{2}\\:\\d{2}:\\d{2}).*39m:\\s(.*)",
                                                      "fromt": "re",
                                                      "to": "$2",
                                                      "tot": "str"
                                                  },
                                                  {
                                                      "t": "delete",
                                                      "p": "payload",
                                                      "pt": "msg"
                                                  },
                                                  {
                                                      "t": "move",
                                                      "p": "date",
                                                      "pt": "msg",
                                                      "to": "payload.date",
                                                      "tot": "msg"
                                                  },
                                                  {
                                                      "t": "move",
                                                      "p": "event",
                                                      "pt": "msg",
                                                      "to": "payload.event",
                                                      "tot": "msg"
                                                  }
                                              ],
                                              "action": "",
                                              "property": "",
                                              "from": "",
                                              "to": "",
                                              "reg": false,
                                              "x": 2980,
                                              "y": 1620,
                                              "wires": [
                                                  [
                                                      "c002b3a.6a1af5"
                                                  ]
                                              ]
                                          },
                                          {
                                              "id": "514882c5.47d2fc",
                                              "type": "switch",
                                              "z": "6e170384.60c96c",
                                              "name": "keine leeren Zeilen",
                                              "property": "payload",
                                              "propertyType": "msg",
                                              "rules": [
                                                  {
                                                      "t": "nempty"
                                                  }
                                              ],
                                              "checkall": "true",
                                              "repair": false,
                                              "outputs": 1,
                                              "x": 2770,
                                              "y": 1620,
                                              "wires": [
                                                  [
                                                      "cffc5b65.bd9258"
                                                  ]
                                              ]
                                          },
                                          {
                                              "id": "cb053236.8d8cc",
                                              "type": "join",
                                              "z": "6e170384.60c96c",
                                              "name": "",
                                              "mode": "custom",
                                              "build": "array",
                                              "property": "payload",
                                              "propertyType": "msg",
                                              "key": "topic",
                                              "joiner": "\\n",
                                              "joinerType": "str",
                                              "accumulate": false,
                                              "timeout": "10",
                                              "count": "",
                                              "reduceRight": false,
                                              "reduceExp": "",
                                              "reduceInit": "",
                                              "reduceInitType": "",
                                              "reduceFixup": "",
                                              "x": 3390,
                                              "y": 1620,
                                              "wires": [
                                                  [
                                                      "d3088cf.965347",
                                                      "5283a3de.98e1fc"
                                                  ]
                                              ]
                                          },
                                          {
                                              "id": "c002b3a.6a1af5",
                                              "type": "switch",
                                              "z": "6e170384.60c96c",
                                              "name": "date !== undefined",
                                              "property": "payload.date",
                                              "propertyType": "msg",
                                              "rules": [
                                                  {
                                                      "t": "neq",
                                                      "v": "undefined",
                                                      "vt": "str"
                                                  }
                                              ],
                                              "checkall": "true",
                                              "repair": false,
                                              "outputs": 1,
                                              "x": 3210,
                                              "y": 1620,
                                              "wires": [
                                                  [
                                                      "cb053236.8d8cc"
                                                  ]
                                              ]
                                          },
                                          {
                                              "id": "d3088cf.965347",
                                              "type": "change",
                                              "z": "6e170384.60c96c",
                                              "name": "speicher in fIOBLog",
                                              "rules": [
                                                  {
                                                      "t": "set",
                                                      "p": "fIOBLog",
                                                      "pt": "flow",
                                                      "to": "payload",
                                                      "tot": "msg"
                                                  }
                                              ],
                                              "action": "",
                                              "property": "",
                                              "from": "",
                                              "to": "",
                                              "reg": false,
                                              "x": 3590,
                                              "y": 1560,
                                              "wires": [
                                                  []
                                              ]
                                          },
                                          {
                                              "id": "5283a3de.98e1fc",
                                              "type": "ui_template",
                                              "z": "6e170384.60c96c",
                                              "group": "921e7aba.1e8358",
                                              "name": "IOB Log Ausgabe",
                                              "order": 0,
                                              "width": "30",
                                              "height": "22",
                                              "format": "<style>\n.main\n{\n    height:100%;\n    width:100%;\n    /* background:lightblue; */\n        \n}\n\n\n#t01 th {\n     \n  padding: 5px;\n  font-size:120%;\n  color: var(--nr-dashboard-groupTextColor);\n   /* color:#0eb8c0;  */\n}\n#t01 td {\n     \n  padding: 5px;\n\n}\n    \n</style>\n\n<div class=\"main\">\n\n    <table id=\"t01\">\n\n   \n    <tr><th width=20%>Datum</th><th  width=70%>Event</th></tr>\n     <tr ng-repeat=\"item in msg.payload\">\n    <td  align=left>{{item.date}}</td><td align=left>{{item.event}}</td>\n    </tr>\n    \n    </table>\n\n\n</div>",
                                              "storeOutMessages": true,
                                              "fwdInMessages": false,
                                              "resendOnRefresh": false,
                                              "templateScope": "local",
                                              "x": 3590,
                                              "y": 1620,
                                              "wires": [
                                                  []
                                              ]
                                          },
                                          {
                                              "id": "921e7aba.1e8358",
                                              "type": "ui_group",
                                              "name": "Tabelle Test",
                                              "tab": "dc25fe35.866f",
                                              "order": 2,
                                              "disp": true,
                                              "width": "30",
                                              "collapse": false
                                          },
                                          {
                                              "id": "dc25fe35.866f",
                                              "type": "ui_tab",
                                              "name": "Test",
                                              "icon": "dashboard",
                                              "order": 14,
                                              "disabled": false,
                                              "hidden": false
                                          }
                                      ]
                                      

                                      Als Hilfsmittel zum Analysieren Deiner Logdatein eignen sich wie ja hier schon erwähnt die regulären Ausdrücke gut.

                                      Ich teste immer hier - da sieht man dann auch was in den Gruppe $1 usw. entahlten ist. https://regexr.com/

                                      Ansonsten fragen, warum ich was gemacht habe - aber nun bist Du am Zug - Deine Wünsche zu realisieren.

                                      Neue Logzeilen hängst Du einfach an das Array an usw. Um Tabellen in Spalten zu sortieren, wie gesagt dass können Dir HTML Programmieren sicher besser erklären - bzw. im Moment weiß ich sowas einfach nicht.

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

                                        So noch ein paar Ergänzungen:

                                        Die tail-Node ist hervorragend, da sie ja aus sich selbst herausgetriggert wird und immer die letzte Zeile ausgibt.

                                        ebba6ee5-f6db-4503-8a35-c440323987ef-image.png

                                        Wenn man die Join-Node kann man nun natürlich so konfigurieren - dass sie anstelle von 10 sekunden - das Array erst nach 300s bildet - dann bildet sie das Array erst nach 300s und zusammen mit der Tailnode habe ich nur die Einträge der letzten 5 Minuten drin.

                                        Oder ich konfigurieren die JOIN Node so, dass sie auf einen externen Trigger reagiert habe ich folgenden mit einem Inject Node dargestellt. Der kann entweder zyklisch ablaufen - das LOG wird mit jedem neuen Array ja gelöscht. Im Prinzip kann man natürlich statt der JOIN Node eine Function Node machen und im Function Node Kontext das Array aufbauen. Das wird dann nicht mehr gelöscht und man hängt mit Array.push jede payload hinten dran. Ausgegeben wird das ganze Array wieder via trigger.

                                        So kann statt der Inject Node ja einfach die uicontrol Node dienen, die dann triggert wenn Du die entsprechende Seite in Deinem Dashboard öffnest.

                                        Also mir fallen 1000 Dinge ein. 😉

                                        Das ist zum Beispiel die Ausgabe mit der TAIL Node - nachdem ich die JOIN Node auf 300s gestellt habe und in der Zwischenzeit den Info-Adapter neu gestartet habe.

                                        9d9464ec-2ec3-4d1a-90f4-ca7c6e58bcd7-image.png

                                        Mit msg.complete als trigger kann man das auch vorher ausgeben, selbst wenn das Zeitintervall noch nicht abgelaufen ist.

                                        263f5241-64f7-4112-b307-330f00cb8355-image.png

                                        1e3a21a8-0987-4437-adb2-bfdc3fe18f48-image.png

                                        Also den Möglichkeiten sind kaum Grenzen gesetzt. Der Inject Node kann wie gesagt selbst als Trigger dienen nicht nur manuell:

                                        Hier mal die Ausgabe des Logs im 15 Minuten Intervall:

                                        927f93d2-6677-484b-bcc0-6293cf35e457-image.png

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

                                          @tomily Also in Summe war Dein Ansatz mit der Tail Node GOLDRICHTIG. Das nur die letzte Zeile genommen wird, ist ebenfalls aus Sicht der Entwickler richtig. Für die Speicherung mehrerer Nachrichten bist Du selbst verantwortlich. Anstelle von Zeitintervallen kannst Du den JOIN Node auch so konfigurieren, dass er erst nach 50 Nachrichten, dass Array ausgibt - das muss also nicht zeitabhängig sein.

                                          Im Übrigen dient dieser Flow mit der tail-Node auch hervorragend dazu bei bestimmten LOG-Einträgen weitere Flows zu triggern. Nur mal so als Anmerkung/Anregung. 😉 Eine Möglichkeit wäre ebenfalls die Ausgabe anhand einer Zeit/Datums oder aber bei einem bestimmten Ereignis auszugeben. So könnte auch ohne Datenpunkt ein Blockly einen LOG Eintrag erzeugen, der einen Flow in NodeRed anst ... 😇 😛

                                          und zum Schreiben eigener Log-Dateien gibts die FileNode. - Die ist auch schon im Standard enthalten.

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

                                            Weil es mir einfach keine Ruhe gelassen hat. 😉 Du kannst natürlich sämtliche Logeinträge in Echtzeit ausgeben, dazu muss sowieso immer das ganze Array ausgegeben werden. Die JOIN Node löscht das Array ja jedesmal, wenn sie eine Nachricht ausgibt (zumindest in dieser Konfiguration).

                                            Deshalb mal schnell eine Function Node - die soviele Logeinträge ausgibst bist Du einen Clear Trigger setzt. Alternative kannst Du natürlich in Function-Node auch selbstständig eine Löschung vornehmen. Beispiele wären rollierende Logs nach Zeit oder Anzahl von Einträgen durch eine events.shift() Anweisung. Das würde dann Deiner Anforderung entsprechen, nur die letzten x Einträge zu sehen, indem man die Anzahl der Elemente in dem Array konstant hält.
                                            Also für 50 Einträge könnte man dann so was machen:

                                            if (events.length > 50) events.shift();
                                            

                                            Wenn man das nach der push Anweisung einfügt, dann wird halt beim 51. Eintrag der 1. (=älteste) gelöscht und damit hättest Du das mit den 50 neuesten Einträgen.

                                            Wichtig ist nur, dass Du weißt - wenn Du das auf dem iobroker Log alles ausprobierst und Du hast einen Fehler in dieser Function Node - oder generell in NodeRed wirft eine Node einen Fehler - dann produzierst Du mit der Tail-Node ganz schnell eine Endlosschleife. Also ggf. NodeRed Ereignisse alle verwerfen bzw. ausfiltern. Das kannst aber selbst dann checken. Ich habe das zur Sicherheit hier nochmal gemacht.

                                            Hier mal der Inhalt der Function Node:

                                            var events=context.get('events')||[];
                                            
                                            events.push(msg.payload);
                                            
                                            if (msg.clear){
                                                events = [];
                                            } 
                                            context.set('events',events);
                                            
                                            msg.payload = events;
                                            
                                            return msg;
                                            

                                            In diesem Fall - doch mal eine Function Node - und ein paar Programmierzeilen. 😉 - Sollte aber die Ausnahme bleiben. 😉 😉 😉

                                            Und hier nochmal der komplette Flow mit der function Node:

                                            [
                                                {
                                                    "id": "cf77d4c3.528018",
                                                    "type": "file in",
                                                    "z": "6e170384.60c96c",
                                                    "name": "",
                                                    "filename": "/opt/iobroker/log/iobroker.current.log",
                                                    "format": "lines",
                                                    "chunk": false,
                                                    "sendError": false,
                                                    "encoding": "none",
                                                    "x": 2490,
                                                    "y": 1620,
                                                    "wires": [
                                                        [
                                                            "514882c5.47d2fc"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "243bb718.488838",
                                                    "type": "inject",
                                                    "z": "6e170384.60c96c",
                                                    "name": "",
                                                    "props": [
                                                        {
                                                            "p": "payload"
                                                        }
                                                    ],
                                                    "repeat": "",
                                                    "crontab": "",
                                                    "once": false,
                                                    "onceDelay": 0.1,
                                                    "topic": "",
                                                    "payload": "true",
                                                    "payloadType": "bool",
                                                    "x": 2250,
                                                    "y": 1620,
                                                    "wires": [
                                                        [
                                                            "cf77d4c3.528018"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "cffc5b65.bd9258",
                                                    "type": "change",
                                                    "z": "6e170384.60c96c",
                                                    "name": "",
                                                    "rules": [
                                                        {
                                                            "t": "set",
                                                            "p": "date",
                                                            "pt": "msg",
                                                            "to": "payload",
                                                            "tot": "msg"
                                                        },
                                                        {
                                                            "t": "set",
                                                            "p": "event",
                                                            "pt": "msg",
                                                            "to": "payload",
                                                            "tot": "msg"
                                                        },
                                                        {
                                                            "t": "change",
                                                            "p": "date",
                                                            "pt": "msg",
                                                            "from": "(\\d{4}-\\d{2}-\\d{2}\\s\\d{2}\\:\\d{2}:\\d{2}).*39m:\\s(.*)",
                                                            "fromt": "re",
                                                            "to": "$1",
                                                            "tot": "str"
                                                        },
                                                        {
                                                            "t": "change",
                                                            "p": "event",
                                                            "pt": "msg",
                                                            "from": "(\\d{4}-\\d{2}-\\d{2}\\s\\d{2}\\:\\d{2}:\\d{2}).*39m:\\s(.*)",
                                                            "fromt": "re",
                                                            "to": "$2",
                                                            "tot": "str"
                                                        },
                                                        {
                                                            "t": "delete",
                                                            "p": "payload",
                                                            "pt": "msg"
                                                        },
                                                        {
                                                            "t": "move",
                                                            "p": "date",
                                                            "pt": "msg",
                                                            "to": "payload.date",
                                                            "tot": "msg"
                                                        },
                                                        {
                                                            "t": "move",
                                                            "p": "event",
                                                            "pt": "msg",
                                                            "to": "payload.event",
                                                            "tot": "msg"
                                                        }
                                                    ],
                                                    "action": "",
                                                    "property": "",
                                                    "from": "",
                                                    "to": "",
                                                    "reg": false,
                                                    "x": 2980,
                                                    "y": 1620,
                                                    "wires": [
                                                        [
                                                            "c002b3a.6a1af5"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "514882c5.47d2fc",
                                                    "type": "switch",
                                                    "z": "6e170384.60c96c",
                                                    "name": "keine leeren Zeilen",
                                                    "property": "payload",
                                                    "propertyType": "msg",
                                                    "rules": [
                                                        {
                                                            "t": "nempty"
                                                        }
                                                    ],
                                                    "checkall": "true",
                                                    "repair": false,
                                                    "outputs": 1,
                                                    "x": 2770,
                                                    "y": 1620,
                                                    "wires": [
                                                        [
                                                            "cffc5b65.bd9258"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "cb053236.8d8cc",
                                                    "type": "join",
                                                    "z": "6e170384.60c96c",
                                                    "name": "",
                                                    "mode": "custom",
                                                    "build": "array",
                                                    "property": "payload",
                                                    "propertyType": "msg",
                                                    "key": "topic",
                                                    "joiner": "\\n",
                                                    "joinerType": "str",
                                                    "accumulate": false,
                                                    "timeout": "",
                                                    "count": "",
                                                    "reduceRight": false,
                                                    "reduceExp": "",
                                                    "reduceInit": "",
                                                    "reduceInitType": "num",
                                                    "reduceFixup": "",
                                                    "x": 3710,
                                                    "y": 1560,
                                                    "wires": [
                                                        [
                                                            "d3088cf.965347",
                                                            "5283a3de.98e1fc"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "c002b3a.6a1af5",
                                                    "type": "switch",
                                                    "z": "6e170384.60c96c",
                                                    "name": "date !== undefined",
                                                    "property": "payload.date",
                                                    "propertyType": "msg",
                                                    "rules": [
                                                        {
                                                            "t": "neq",
                                                            "v": "undefined",
                                                            "vt": "str"
                                                        }
                                                    ],
                                                    "checkall": "true",
                                                    "repair": false,
                                                    "outputs": 1,
                                                    "x": 3210,
                                                    "y": 1620,
                                                    "wires": [
                                                        [
                                                            "cb053236.8d8cc",
                                                            "c7a60ff1.24e51"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "d3088cf.965347",
                                                    "type": "change",
                                                    "z": "6e170384.60c96c",
                                                    "name": "speicher in fIOBLog",
                                                    "rules": [
                                                        {
                                                            "t": "set",
                                                            "p": "fIOBLog",
                                                            "pt": "flow",
                                                            "to": "payload",
                                                            "tot": "msg"
                                                        }
                                                    ],
                                                    "action": "",
                                                    "property": "",
                                                    "from": "",
                                                    "to": "",
                                                    "reg": false,
                                                    "x": 3890,
                                                    "y": 1560,
                                                    "wires": [
                                                        []
                                                    ]
                                                },
                                                {
                                                    "id": "5283a3de.98e1fc",
                                                    "type": "ui_template",
                                                    "z": "6e170384.60c96c",
                                                    "group": "921e7aba.1e8358",
                                                    "name": "IOB Log Ausgabe",
                                                    "order": 0,
                                                    "width": "30",
                                                    "height": "22",
                                                    "format": "<style>\n.main\n{\n    height:100%;\n    width:100%;\n    /* background:lightblue; */\n        \n}\n\n\n#t01 th {\n     \n  padding: 5px;\n  font-size:120%;\n  color: var(--nr-dashboard-groupTextColor);\n   /* color:#0eb8c0;  */\n}\n#t01 td {\n     \n  padding: 5px;\n\n}\n    \n</style>\n\n<div class=\"main\">\n\n    <table id=\"t01\">\n\n   \n    <tr><th width=20%>Datum</th><th  width=70%>Event</th></tr>\n     <tr ng-repeat=\"item in msg.payload\">\n    <td  align=left>{{item.date}}</td><td align=left>{{item.event}}</td>\n    </tr>\n    \n    </table>\n\n\n</div>",
                                                    "storeOutMessages": true,
                                                    "fwdInMessages": false,
                                                    "resendOnRefresh": false,
                                                    "templateScope": "local",
                                                    "x": 3890,
                                                    "y": 1620,
                                                    "wires": [
                                                        []
                                                    ]
                                                },
                                                {
                                                    "id": "630dfa92.8e2cc4",
                                                    "type": "tail",
                                                    "z": "6e170384.60c96c",
                                                    "name": "",
                                                    "filetype": "text",
                                                    "split": "[\\r]{0,1}\\n",
                                                    "filename": "/opt/iobroker/log/iobroker.current.log",
                                                    "inputs": 0,
                                                    "x": 2460,
                                                    "y": 1700,
                                                    "wires": [
                                                        [
                                                            "514882c5.47d2fc"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "433d9a6f.dfdc84",
                                                    "type": "inject",
                                                    "z": "6e170384.60c96c",
                                                    "name": "gebe log aus",
                                                    "props": [
                                                        {
                                                            "p": "complete",
                                                            "v": "true",
                                                            "vt": "bool"
                                                        }
                                                    ],
                                                    "repeat": "900",
                                                    "crontab": "",
                                                    "once": false,
                                                    "onceDelay": 0.1,
                                                    "topic": "",
                                                    "x": 3540,
                                                    "y": 1520,
                                                    "wires": [
                                                        [
                                                            "cb053236.8d8cc"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "a0a1d768.eef148",
                                                    "type": "function",
                                                    "z": "6e170384.60c96c",
                                                    "name": "Erstelle Log",
                                                    "func": "var events=context.get('events')||[];\n\nevents.push(msg.payload);\n\nif (msg.clear){\n    events = [];\n} \ncontext.set('events',events);\n\nmsg.payload = events;\n\nreturn msg;",
                                                    "outputs": 1,
                                                    "noerr": 0,
                                                    "initialize": "",
                                                    "finalize": "",
                                                    "x": 3690,
                                                    "y": 1700,
                                                    "wires": [
                                                        [
                                                            "5283a3de.98e1fc"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "446e84e2.3cafec",
                                                    "type": "inject",
                                                    "z": "6e170384.60c96c",
                                                    "name": "Array/Log  löschen",
                                                    "props": [
                                                        {
                                                            "p": "clear",
                                                            "v": "true",
                                                            "vt": "bool"
                                                        }
                                                    ],
                                                    "repeat": "",
                                                    "crontab": "",
                                                    "once": false,
                                                    "onceDelay": 0.1,
                                                    "topic": "",
                                                    "x": 3490,
                                                    "y": 1720,
                                                    "wires": [
                                                        [
                                                            "a0a1d768.eef148"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "c7a60ff1.24e51",
                                                    "type": "switch",
                                                    "z": "6e170384.60c96c",
                                                    "name": "Keine Node-RED Ereignisse",
                                                    "property": "payload.event",
                                                    "propertyType": "msg",
                                                    "rules": [
                                                        {
                                                            "t": "cont",
                                                            "v": "node-red.0",
                                                            "vt": "str"
                                                        },
                                                        {
                                                            "t": "else"
                                                        }
                                                    ],
                                                    "checkall": "true",
                                                    "repair": false,
                                                    "outputs": 2,
                                                    "x": 3460,
                                                    "y": 1680,
                                                    "wires": [
                                                        [],
                                                        [
                                                            "a0a1d768.eef148"
                                                        ]
                                                    ]
                                                },
                                                {
                                                    "id": "921e7aba.1e8358",
                                                    "type": "ui_group",
                                                    "name": "Tabelle Test",
                                                    "tab": "dc25fe35.866f",
                                                    "order": 2,
                                                    "disp": true,
                                                    "width": "30",
                                                    "collapse": false
                                                },
                                                {
                                                    "id": "dc25fe35.866f",
                                                    "type": "ui_tab",
                                                    "name": "Test",
                                                    "icon": "dashboard",
                                                    "order": 14,
                                                    "disabled": false,
                                                    "hidden": false
                                                }
                                            ]
                                            

                                            Außerdem habe ich noch festegestellt wenn die Nachrichten zu schnell einlaufen, wird die Anzeige ggf. auch nicht mehr korrekt - dann halt noch eine delay Node dazwischen schalten.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            535
                                            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