Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. Journal-Log erstellen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Journal-Log erstellen

Geplant Angeheftet Gesperrt Verschoben Node-Red
62 Beiträge 5 Kommentatoren 4.2k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • HomoranH Homoran

    @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-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    schrieb am zuletzt editiert von liv-in-sky
    #42

    @homoran

    jetzt schon :-)

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

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    HomoranH 1 Antwort Letzte Antwort
    0
    • liv-in-skyL liv-in-sky

      @homoran

      jetzt schon :-)

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

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von Homoran
      #43

      @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

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      liv-in-skyL 1 Antwort Letzte Antwort
      0
      • HomoranH 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-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        schrieb am zuletzt editiert von
        #44

        @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
        

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        HomoranH 1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          @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
          

          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #45

          @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

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          liv-in-skyL 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @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-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von
            #46

            @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

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            1 Antwort Letzte Antwort
            1
            • HomoranH Homoran

              @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-skyL Offline
              liv-in-skyL Offline
              liv-in-sky
              schrieb am zuletzt editiert von liv-in-sky
              #47

              @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

              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

              HomoranH 2 Antworten Letzte Antwort
              1
              • liv-in-skyL 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

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #48

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

                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                1 Antwort Letzte Antwort
                0
                • liv-in-skyL 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

                  HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #49

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

                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  liv-in-skyL 1 Antwort Letzte Antwort
                  0
                  • HomoranH Homoran

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

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    schrieb am zuletzt editiert von liv-in-sky
                    #50

                    @homoran

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

                    oder check ich was nicht

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    HomoranH 1 Antwort Letzte Antwort
                    0
                    • liv-in-skyL liv-in-sky

                      @homoran

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

                      oder check ich was nicht

                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #51

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

                      oder check ich was nicht

                      du schon :joy:

                      ich jetzt auch

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      1 Antwort Letzte Antwort
                      0
                      • T tomily

                        Hallo zusammen,

                        ich oute mich mal wieder als NodeRed-Beginner und hoffe, dass meine Anfrage korrekt plaziert ist :-)
                        Ich nutze Node-Red samt Dashboard um einige Funktionen u.A. mein Monitoring abzudecken. Das funktioniert tadellos.

                        Mein Ziel ist es, im Dashboard eine Art "Journal" bzw. "LOG/History" zu erstellen. Ich möchte mir die letzten Schaltvorgänge und aktivitäten aus anderen Logs anzeigen lassen.

                        Es würde mir reichen, wenn ich alles im Linux in eine Log-Datei schreibe und mir im Dashboard die letzten 50 Zeilen Dieser Datei anzeigen lasse.

                        Mit dem Tail-Node funktioniet das an sich, alledings immer nur mit der letzten Zeile:
                        9512f50a-dd9a-4a48-ab99-15807ddd12e1-grafik.png

                        c94711d4-d1e8-4bd2-9efd-6da0ee456533-grafik.png

                        Hat jemand eine Idee, wie ich entweder einen tail - 50 /pfad-zur.log ausgeben kann. Oder gibt es bessere Ansätze, um eine neue Textzeile einem Bestehenden Text-Node hinzuzufügen?

                        Freue mich auf eure Rückmeldungen.

                        Grüße
                        Tomily

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #52

                        @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!)

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        mickymM 1 Antwort Letzte Antwort
                        0
                        • mickymM 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!)

                          mickymM Offline
                          mickymM Offline
                          mickym
                          Most Active
                          schrieb am zuletzt editiert von
                          #53

                          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.

                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                          mickymM 1 Antwort Letzte Antwort
                          0
                          • mickymM mickym

                            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.

                            mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von mickym
                            #54

                            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.

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            mickymM 1 Antwort Letzte Antwort
                            0
                            • mickymM 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.

                              mickymM Offline
                              mickymM Offline
                              mickym
                              Most Active
                              schrieb am zuletzt editiert von mickym
                              #55

                              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.

                              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                              mickymM 1 Antwort Letzte Antwort
                              0
                              • mickymM 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.

                                mickymM Offline
                                mickymM Offline
                                mickym
                                Most Active
                                schrieb am zuletzt editiert von
                                #56

                                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

                                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                T 1 Antwort Letzte Antwort
                                0
                                • T tomily

                                  Hallo zusammen,

                                  ich oute mich mal wieder als NodeRed-Beginner und hoffe, dass meine Anfrage korrekt plaziert ist :-)
                                  Ich nutze Node-Red samt Dashboard um einige Funktionen u.A. mein Monitoring abzudecken. Das funktioniert tadellos.

                                  Mein Ziel ist es, im Dashboard eine Art "Journal" bzw. "LOG/History" zu erstellen. Ich möchte mir die letzten Schaltvorgänge und aktivitäten aus anderen Logs anzeigen lassen.

                                  Es würde mir reichen, wenn ich alles im Linux in eine Log-Datei schreibe und mir im Dashboard die letzten 50 Zeilen Dieser Datei anzeigen lasse.

                                  Mit dem Tail-Node funktioniet das an sich, alledings immer nur mit der letzten Zeile:
                                  9512f50a-dd9a-4a48-ab99-15807ddd12e1-grafik.png

                                  c94711d4-d1e8-4bd2-9efd-6da0ee456533-grafik.png

                                  Hat jemand eine Idee, wie ich entweder einen tail - 50 /pfad-zur.log ausgeben kann. Oder gibt es bessere Ansätze, um eine neue Textzeile einem Bestehenden Text-Node hinzuzufügen?

                                  Freue mich auf eure Rückmeldungen.

                                  Grüße
                                  Tomily

                                  mickymM Offline
                                  mickymM Offline
                                  mickym
                                  Most Active
                                  schrieb am zuletzt editiert von mickym
                                  #57

                                  @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 ... :innocent: :stuck_out_tongue:

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

                                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                  mickymM 1 Antwort Letzte Antwort
                                  0
                                  • mickymM 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 ... :innocent: :stuck_out_tongue:

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

                                    mickymM Offline
                                    mickymM Offline
                                    mickym
                                    Most Active
                                    schrieb am zuletzt editiert von mickym
                                    #58

                                    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.

                                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                    1 Antwort Letzte Antwort
                                    0
                                    • T tomily

                                      Hallo zusammen,

                                      ich oute mich mal wieder als NodeRed-Beginner und hoffe, dass meine Anfrage korrekt plaziert ist :-)
                                      Ich nutze Node-Red samt Dashboard um einige Funktionen u.A. mein Monitoring abzudecken. Das funktioniert tadellos.

                                      Mein Ziel ist es, im Dashboard eine Art "Journal" bzw. "LOG/History" zu erstellen. Ich möchte mir die letzten Schaltvorgänge und aktivitäten aus anderen Logs anzeigen lassen.

                                      Es würde mir reichen, wenn ich alles im Linux in eine Log-Datei schreibe und mir im Dashboard die letzten 50 Zeilen Dieser Datei anzeigen lasse.

                                      Mit dem Tail-Node funktioniet das an sich, alledings immer nur mit der letzten Zeile:
                                      9512f50a-dd9a-4a48-ab99-15807ddd12e1-grafik.png

                                      c94711d4-d1e8-4bd2-9efd-6da0ee456533-grafik.png

                                      Hat jemand eine Idee, wie ich entweder einen tail - 50 /pfad-zur.log ausgeben kann. Oder gibt es bessere Ansätze, um eine neue Textzeile einem Bestehenden Text-Node hinzuzufügen?

                                      Freue mich auf eure Rückmeldungen.

                                      Grüße
                                      Tomily

                                      mickymM Offline
                                      mickymM Offline
                                      mickym
                                      Most Active
                                      schrieb am zuletzt editiert von mickym
                                      #59

                                      @tomily So und nun noch das Non-Plus Ultra - weil wir eh schon das Array haben. Hier gibst eine Tabellen Node für das Dashboard.

                                      Das Array haben wir schon - und damit kann man dann auch in Spalten sortieren. ;)

                                      https://flows.nodered.org/node/node-red-node-ui-table

                                      Ich habe es schnell mal installiert ist super Klasse.

                                      Die Table Node einfach an die function Node hängen:

                                      6594d8dd-5c1a-4eac-9450-5678086d89d0-image.png

                                      Output kann in den Spalten sortiert werden und diese Standardansicht gibts ohne besondere Konfig:

                                      a56f08c9-b513-47bd-b6d8-6baf5468ab8c-image.png

                                      Das Einzige was man eingeben muss sind die Spalten und wie die in den Objekten heißen:

                                      965a417f-5471-49b0-a30d-3280ace28373-image.png

                                      Zur Standardisierung des Datums bei anderen Logdateien - würde ich schauen, dass Du es genauso hinbekommst wie im iobroker - da dies das standardisierte moments.js Format ist und ggf. in ein von Dir gewünschtes einheitlich umformatiert werden kann. Bleiben die Logs alle innerhalb eines Tages funktioniert das sortieren dann auch, wenn z.Bsp. Text im Datum ist.
                                      Das ganze mit dem Datumsformaten und dass dies auch von den Change Nodes beherrscht wird - wurde ja schon mal hier diskutiert. Mit einer aufgebohrten Change Node:

                                      [
                                          {
                                              "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": "set",
                                                      "p": "date",
                                                      "pt": "msg",
                                                      "to": "$moment(payload.date).locale(\"de\").tz('Europe/Berlin').format('D. MMMM YYYY [um] HH:mm')",
                                                      "tot": "jsonata"
                                                  },
                                                  {
                                                      "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"
                                                  ]
                                              ]
                                          }
                                      ]
                                      

                                      kannst Du dann das Datumsformat jeder Logdatei für Dich anpassen:

                                      76a1fc9a-4660-472b-a2e7-734c15ed3d01-image.png

                                      So ich habe noch etwas rumgespielt. Wenn man aus dem iobroker Log noch die Severity herausliest - dann bekommt man dieses Objekt:

                                      63c26f42-6d43-4742-bff0-2bf1fee47ee6-image.png

                                      Den Werten kann man nun im serveritylevel - Zahlenwerte zuordnen. Ich habe mal debug, silly und info 100 zugeordnet, warn 50 und error 0. Das würde man über einen Change Node dann so machen.

                                      cf7aad83-47a8-4140-a477-09af924d87c7-image.png

                                      Die veränderten Change Nodes hier (wegen der geöffnet Klammer kann man das leider nicht wieder importieren, deshalb als Screenshot:

                                      17ab598b-7e80-489c-ad0e-e95c17633655-image.png

                                      In dieser neuen Tabellenfunktion kann man dann den Zahlenwerten automatisch Ampelfarben zuordnen:

                                      10760e92-2a31-47da-94b1-2700a0f33ecd-image.png

                                      Das schaut doch auf die Schnelle ziemlich brauchbar aus. ;)

                                      In Summe wirst brauchst Du also nichts weiter machen müssen, als für jede zu überwachende Log-Datei eine Tail-Node zu konfigurieren, die Logeinträge über reguläre Ausdrücke zu standardisieren, der Function Node übergeben und in der Tabelle ausgeben und/oder parallel in eine eigene Logdatei zu schreiben.

                                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                      1 Antwort Letzte Antwort
                                      1
                                      • mickymM mickym

                                        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 Offline
                                        T Offline
                                        tomily
                                        schrieb am zuletzt editiert von
                                        #60

                                        @mickym
                                        WOW! Ich bin beeindruckt von so viel Aktivität, Kompetenz und Geschwindigkeit.
                                        Ihr seid ja alle der Hammer.

                                        DANKE für die Lösung von Dir mickym. Die Flows sind alle mit den Node-Red Bordmitteln und geben das Log im endeffekt so aus wie ich das wollte :-)
                                        Hat nach dem importieren sofort funktioniert. Werde das mal noch versuchen auf mein eigenes Log anzuwenden, damit auch das voll läuft.

                                        Da ich kein großer und guter Scripter bin, werde ich mir die Scripting-Vorschläge auf jeden Fall anschauen. Fürchte aber, dass die Regex und andere Geschichten mich überfordern.

                                        Zunächst nochmal Herzlichen Dank. Melde mich gerne nochmal nach erfolgreichem Test zurück

                                        :+1:

                                        mickymM 1 Antwort Letzte Antwort
                                        0
                                        • T tomily

                                          @mickym
                                          WOW! Ich bin beeindruckt von so viel Aktivität, Kompetenz und Geschwindigkeit.
                                          Ihr seid ja alle der Hammer.

                                          DANKE für die Lösung von Dir mickym. Die Flows sind alle mit den Node-Red Bordmitteln und geben das Log im endeffekt so aus wie ich das wollte :-)
                                          Hat nach dem importieren sofort funktioniert. Werde das mal noch versuchen auf mein eigenes Log anzuwenden, damit auch das voll läuft.

                                          Da ich kein großer und guter Scripter bin, werde ich mir die Scripting-Vorschläge auf jeden Fall anschauen. Fürchte aber, dass die Regex und andere Geschichten mich überfordern.

                                          Zunächst nochmal Herzlichen Dank. Melde mich gerne nochmal nach erfolgreichem Test zurück

                                          :+1:

                                          mickymM Offline
                                          mickymM Offline
                                          mickym
                                          Most Active
                                          schrieb am zuletzt editiert von mickym
                                          #61

                                          @tomily Das freut mich natürlich, wenn es so klappt, wie Du Dir das vorgestellt hast. Ich mache das ja gerne, weil ich selbst daran lerne und auch mit vorhandenen Kenntnissen, diese anders anzuwenden, als ich das heute bereits tue.

                                          Ich mache inzwischen ja kein Hehl mehr daraus, dass ich inzwischen ein großer NR-Fan bin und man, wenn man das Prinzip verstanden hat, mit quasi kaum Programmierkenntnissen einiges erreichen kann. Jedenfalls bin ich der Meinung, dass man bei blockly mehr Kenntnisse benötigt und für mich ist es eben auch nicht so intuitiv - da ich immer nach den entsprechenden Puzzlestückchen suchen muss und meist nie finde. ;)

                                          Die ganze Arbeit ist mit ca. 5-6 Nodes getan und auch die function Node ist nicht besonders aufwändig programmiert. In Kombination mit dem iobroker hat man halt in meinen Augen 2 Systeme, die sich ideal mit Ihren Stärken ergänzen. Das NR war - habe ich glaube schon früher mal geschrieben - von der IBM eine kommerzielles Produkt, was dann aber wohl freigegeben wurde. So genau weiß ich das nicht. Die Nodes jedenfalls sind mit Adaptern des iobrokers zu vergleichen - ich versuche gerade selbst welche zur Anbindung an den iobroker über socket.io zu entwickeln. Die Community hierzu ist deshalb noch wesentlich größer als IOB.

                                          NR hat jedoch überhaupt keine brauchbare Methode, die Zustände also die Datenbank anzuzeigen und zu verwalten. Für reine NR Benutzer war zu diesem Zweck MQTT - als Broker und Datenverwalter vorgesehen. Das ist auch der Grund, warum dieses Protokoll soviele Geräte benutzen. Hierfür hast Du dann aber wieder Drittmittel gebraucht, um das vernünftig anzuzeigen. Von solchen Features wie Aliases etc. ganz zu schweigen - das sind die wirklichen Stärken des IOB.

                                          Mein Ziel war es ja außerdem, quasi Hilfe zur Selbsthilfe zu vermitteln. Dir nicht einfach nur den Flow zur Verfügung zu stellen, sondern auch herzuleiten, wie ich/man so eine Lösung entwickeln kann. Dazu darf man oft nicht den Blick auf das Ganze verlieren. Das ist manchmal schwierig - aber mir macht es auch manchmal Spaß zu erkennen, was man selbst für ein Brett vor dem Kopf hat. ;)

                                          Beispiel: Du warst mit der Tail-Node, wie ich beschrieb schon auf dem richtigen Weg. Dieser Thread zeigt so eine Entwicklung in meinen Augen hervorragend. Dann hast Du Dich geärgert, dass die Tail-Node immer nur die letzte Zeile ausspuckt. Anstelle darüber nachzudenken, warum es vielleicht sinnvoll sein könnte nur 1 Zeile auszugeben, war nun Dein nächster Schritt eine Lösung zu suchen, mehrere Zeilen aus einem Log auszulesen, anstelle diese Zeilen eben in NR zu einem größeren Ganzen zu entwickeln. Dabei entlastet Dich NR ja gerade wegen der "Kleinheit" der Information. Einen größeren Informationsblock muss man mit Schleifen zerhacken, um letztlich eine Zeile in seine Bedeutungsbestandteile zu zerlegen und das wurde Dir abgenommen. NR ist ein Flow Tool - ich stelle mir immer vor, ich wäre eine payload und müsste mich durch die Nodes bewegen. Wenn ich also die letzte Zeile eines Logs wäre, dann wäre mein Ziel ja - nach der Aufgabenstellung - mal irgendwo in einer Tabelle als Klartext aufzutauchen - neben Geschwistern. Das sich für eine Ausgabe von Events ein Array anbietet durch das man einfach "durchiterieren" also durchzählen kann, hätte Dich vielleicht darauf gebracht, das Große zu sehen und hättest Dich nicht so sehr auf 50 Zeilen LOG lesen konzentriert.

                                          Ich hoffe es ist OK, wenn ich das mal so ausführlich schreibe. ;)

                                          Noch ein Wort zu den regulären Ausdrücken. Ich habe diese kryptischen Dinge gehasst, wie die Pest und bin da heute noch manchmal am fluchen. Deswegen habe ich Dir die Seite gepostet, die mir ungemein hilft.

                                          Trotzdem hier mal ein kleines Tutorial:

                                          Ich werde es nochmals am iobroker Log versuchen zu verdeutlichen, damit Du es auf die anderen Logs anwenden kannst.
                                          Dann drückst Du als erstes Mal den "New" button.

                                          Am Anfang muss man sich etwas auf der Seite zu Recht finden:

                                          1. Mit New - machst Du erstmal alles "clean" auf der Seite.

                                          2. Das zeigt schon aufgeklappt die Zeichenklassen.

                                          3. Ich habe mal als Beispiel \d für eine Zahl ausgewählt. Das heißt der regEx Ausdruck matched wenn er eine Zahl finden. Hier im Thread haben die Kollegen [0-9] genommen, das ist das Gleiche wie \d. Im Prinzip ist alles was Du in eckige Klammern packst, maßgebend für 1 Match. Wenn Du also [123] oder [1-3] gibst, dann muss der String oder die Zeichenfolge eben eine 1,2 oder 3 enthalten damit das matched. Man kann auch beliebiges kombinieren [123abc], dann gäbe es einen Match bei 1,2,3 oder a,b,c und zwar nicht als 1 Wort, sondern als 1 Zeichen als Auswahl aus dem was in den Klammern steht.

                                          4. Anhand des Beispielstrings siehst Du dann wie oft \d matched. Also dort 11 mal. Eine Regel für Dich muss später sein, dass ein Ausdruck genau EINMAL matched - nur so bekommst Du Eindeutigkeit.
                                            5 und 6. Dann sind noch die Quantifiers wichtig. Ein Punkt '.', wie zu Beginn vorgegeben steht für ein beliebiges Zeichen. Egal ob sichtbar oder nicht, ob Zahl Buchstabe etc. Wenn man New gedrückt hat, sieht man dass jedes der 4 Zeichen (da ja beliebiges Zeichen) matched. Also steht rechts (4 matches). Ausserdem siehst Du um jedes Muster, das matched ein blaues Quadrat. Der Quantifier gibt an wie oft man das vorhergehende Zeichen wiederholen muss, damit ein match erfolgt.
                                            screen.png

                                          5. Wenn Du also in dem RegEx nach dem Punkt einen * schreibst, was soviel bedeutet, dass das beliebige Zeichen - beliebig oft auftreten darf zu einem Match, dann siehst Du in

                                          6. das nun nicht mehr jeder einzelne Buchstabe mit einem blauen Quadrat umrandet ist, sondern das ganze Wort.

                                          7. Allerdings ist das nicht zu verwenden, da dieser regEx Ausdruck auf alles zutrifft und somit sinnlos ist - deswegen gibt es rechts die Warnung.

                                          screen2.png

                                          1. Um es spezifisch zu machen - kann man nun sagen es soll matchen wenn in der Zeichenfolge ein T gefolgt von beliebig vielen Zeichen folgt.
                                            e0c496dc-61aa-44e7-936a-f59230525aa1-image.png

                                          Du siehst 1 Match - was in der Regel das Ziel ist.

                                          1. Wenn man nur auf die Existenz von einem Zeichen oder einer bestimmten Zeichenfolge aus ist, dann ist es egal wie oft es matched ansonsten aber immer schauen dass es einmal matched.
                                            58078761-a69d-417f-a312-ec4dbc33ff7a-image.png

                                          2. So nun zu Deinen anderen Logdateien. Ich demonstriere es nochmal am iobroker Log.
                                            Kopiere einfach eine Zeile in das Textfeld - nachdem Du "New" gedrückt hast.
                                            screen.png

                                          Du siehst mit dem '.' alleine hast Du 134 matches und dann klicke unten auf Details. Ich kopiere jetzt die regEX da rein, die ich in den Change Nodes verwendet habe. Alles was in runden Klammern steht bildet Gruppen die Du von links nach rechts mit $1, $2, $3 referenzieren kannst.

                                          Wenn Du also folgenden Ausdruck oben reinkopierst, dann erhältst Du folgende Ausgabe im Detailfenster:

                                          (\d{4}-\d{2}-\d{2}\s\d{2}\:\d{2}:\d{2}).*\[\d\dm(\w{4}\w?).*39m:\s(.*)
                                          

                                          d48f43ee-e7d6-4ca4-8c0d-3cb42fc5f1f4-image.png

                                          1 Match für die Eindeutigkeit und dann siehst Du wie ich aus einer Logzeile über die Gruppe 1 = $1, den Zeitstempel, die Gruppe 2 die Severty und mit der Gruppe 3 den Rest aus der Zeile analysiere.

                                          So ich hoffe diese kleine Tutorial nimmt Dir bisschen die Angst vor regulären Ausdrücken und hilft Dir Deine übrigen Logdateien zu analysieren.

                                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                          T 1 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          901

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe