Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. ioBroker Log auslesen und verarbeiten

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    ioBroker Log auslesen und verarbeiten

    This topic has been deleted. Only users with topic management privileges can see it.
    • Psycho0verload
      Psycho0verload last edited by

      Hallo Community 🙂

      gibt es eine Möglichkeit mit Blockly oder Node Red den Log von ioBroker auszulesen und auf einen Eintrag zu reagieren. Ich habe auf einem ioBroker Slave eine Radar 2.0 Instanz laufen. Nach ein paar Tagen führt diese zu einem Fehler und ich muss das Slave Neustarten und dann läuft es wieder.

      Ich würde gerne den Fehler auslesen und das Slave dann automatisch Neustarten lassen, da es mir meine Anwesenheit regelt.

      Hat jemand einen Tipp?

      Liebe Grüße

      Psycho0verload

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

        @Psycho0verload gibt es

        https://forum.iobroker.net/topic/13971/vorlage-js-log-datei-aufbereiten-für-vis

        Psycho0verload 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Psycho0verload last edited by

          @Psycho0verload sagte:

          mit Blockly oder Node Red den Log von ioBroker auszulesen und auf einen Eintrag zu reagieren.

          Mit Javascript.

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

            @liv-in-sky oh, das habe ich übersehen. dann arbeite ich mich mal durch 🐒

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

              @Psycho0verload - ein kleines script- ist javascript - aber sehr einfach zum handhaben - damit kannst du einfach auf log einträge reagieren - brauchst du mehr, ist das andere script zu empfehlen

              es legt 2 datenpunkte an unter der javascript-instanz, in der das script läuft
              Image 1.png

              wenn nun ein "error" im log kommt wird der def. datenpunkt auf true gesetzt und nach 2 sec wieder auf false - dann kannst du diesen datenpunkt überwachen - und darauf reagieren

              wenn du mehr alarme brauchst kopierst du dir die einzelnen abfragen und gleichst die daten an
              im script sind die anzugleichenden werte kommentiert. da du Meross und test nicht brauchst, kannst du auch diese löschen oder angleichen

              
              const dpPrefix = "javascript."+ instance +".";
              
              //definition des dp's - BLOCK 1
              
              createState(dpPrefix + "OwnLogEntries.Meross",false, { name: 'Meross',  type: 'boolean', role:"switch", read:  true,  write: true,});
              createState(dpPrefix + "OwnLogEntries.Test",false, { name: 'Test',  type: 'boolean', role:"switch", read:  true,  write: true,});
              
              
              
              // für jeden definierten fehler der trigger - BLOCK 2
              
              function checkErrors(data) {
                 //Alarm 1
               // hier mit regex um genauer zu filtern
                  if(data.message.match(/ Error Test /g)){                      // hier angleichen fehler meldung
                 setState(dpPrefix + "OwnLogEntries.Test",true);                         // hier angleichen dp
                 setStateDelayed(dpPrefix + "OwnLogEntries.Test",false,2000);            // hier angleichen dp
                 }
              
                 //Alarm 2
                 if(data.message.includes("instance system.adapter.meross.0 terminated with code 156")){       // hier angleichen fehler meldung
                 setState(dpPrefix + "OwnLogEntries.Meross",true);                                             // hier angleichen dp
                 setStateDelayed(dpPrefix + "OwnLogEntries.Meross",false,2000);                                // hier angleichen dp
                 }
               
              }
              
              onLog("error", checkErrors);
              
              
              
              

              danke @paul53 - kannte ich noch nicht ist aber cool

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

                @liv-in-sky
                Weshalb verwendest Du zwei identische Trigger ?

                onLog('error', callback);
                

                Man muss aufpassen, dass das Skript selbst keinen Error-Log erzeugt, sonst gerät man in eine Endlosschleife. Deshalb vor Aktivierung des Triggers die Callback-Funktion ausgiebig testen !

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

                  @paul53 gut das du drüber schaust - aber ich dachte, der trigger ist einmal data und einmal data2 - oder check ich was nicht

                  paul53 2 Replies Last reply Reply Quote 1
                  • paul53
                    paul53 @liv-in-sky last edited by

                    @liv-in-sky sagte:

                    dachte, der trigger ist einmal data und einmal data2

                    Der Trigger ist 'error' (alle Error-Logs). data ist der Parameter, der die Daten für die Callback-Funktion enthält.

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

                      @liv-in-sky
                      In der Callback-Funktion wird man filtern, um Aktionen auszuführen.

                      // Filtern nach Error-Message
                      function checkErrors(logs) {
                          if(logs.message.indexOf('radar2.0') != -1) {
                              // Aktion(en)
                          }
                      }
                      
                      onLog('error', checkErrors);
                      
                      1 Reply Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @paul53 last edited by

                        @paul53
                        wollte auch gerade vorschlagen
                        ist das besser

                        
                        const dpPrefix = "javascript."+ instance +".";
                        
                        //definition des dp's - BLOCK 1
                        
                        createState(dpPrefix + "OwnLogEntries.Meross",false, { name: 'Meross',  type: 'boolean', role:"switch", read:  true,  write: true,});
                        createState(dpPrefix + "OwnLogEntries.Test",false, { name: 'Test',  type: 'boolean', role:"switch", read:  true,  write: true,});
                        
                        
                        
                        // für jeden definierten fehler der trigger - BLOCK 2
                        
                        onLog("error", data => {
                           
                         // hier mit regex um genauer zu filtern
                            if(data.message.match(/Error Test/g)){                                 // hier angleichen fehler meldung
                           setState(dpPrefix + "OwnLogEntries.Test",true);                         // hier angleichen dp
                           setStateDelayed(dpPrefix + "OwnLogEntries.Test",false,2000);            // hier angleichen dp
                           }
                        
                        
                           if(data.message.includes("instance system.adapter.meross.0 terminated with code 156")){
                           setState(dpPrefix + "OwnLogEntries.Meross",true);
                           setStateDelayed(dpPrefix + "OwnLogEntries.Meross",false,2000);
                           }
                         
                        });
                        
                        

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

                          @liv-in-sky sagte:

                          ist das besser

                          Ja, aber besser in einer separaten Funktion, damit man diese testen kann, bevor man den Trigger darauf loslässt.
                          dpPrefix braucht es bei den Befehlen createState(), getState() und setState() nicht.

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

                            @paul53 ich werde es mit einer eigenen function machen und oben ausbessern - nochmals vielen dank

                            verbessertes script ist oben ausgebessert https://forum.iobroker.net/post/329570

                            1 Reply Last reply Reply Quote 0
                            • Psycho0verload
                              Psycho0verload last edited by

                              Oh, jetzt war ich ein paar Tage nicht online und hier sind neue Lösungsansätze entstanden. Vielen Dank! Das Script https://forum.iobroker.net/topic/13971/vorlage-js-log-datei-aufbereiten-für-vis ist recht komplex. Ich versuche mal das Script von hier, es erscheint einfacher für meinen Anwendungsbereich.

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

                                @liv-in-sky den Fehler nach dem ich suchen möchte

                                radar2.0	2019-12-05 10:59:32.612	warn	(515) BT already scanning!
                                

                                Ich versuche dein Script mal dahingehend umzubauen, aber vielleicht kannst du auch mal schauen.

                                Tausend Dank schonmal für das Script!

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

                                  @Psycho0verload

                                  probier mal das hier - hier ist eine function für warnings drin

                                  
                                  
                                  
                                  
                                  const dpPrefix = "javascript."+ instance +".";
                                  
                                  //definition des dp's - BLOCK 1
                                  
                                  createState(dpPrefix + "OwnLogEntries.Meross",false, { name: 'Meross',  type: 'boolean', role:"switch", read:  true,  write: true,});
                                  createState(dpPrefix + "OwnLogEntries.Test",false, { name: 'Test',  type: 'boolean', role:"switch", read:  true,  write: true,});
                                  createState(dpPrefix + "OwnLogEntries.Warn515",false, { name: 'Test',  type: 'boolean', role:"switch", read:  true,  write: true,});
                                  
                                  
                                  
                                  // für jeden definierten fehler der trigger - BLOCK 2
                                  
                                  function checkErrors(data) {
                                    //Alarm 1 
                                   // hier mit regex um genauer zu filtern
                                      if(data.message.match(/ Error Test /g)){                               // hier angleichen fehler meldung
                                     setState(dpPrefix + "OwnLogEntries.Test",true);                         // hier angleichen dp
                                     setStateDelayed(dpPrefix + "OwnLogEntries.Test",false,2000);            // hier angleichen dp
                                     }
                                  
                                     //Alarm2
                                     if(data.message.includes("instance system.adapter.meross.0 terminated with code 156")){       // hier angleichen fehler meldung
                                     setState(dpPrefix + "OwnLogEntries.Meross",true);                                             // hier angleichen dp
                                     setStateDelayed(dpPrefix + "OwnLogEntries.Meross",false,2000);                                // hier angleichen dp
                                     }
                                  
                                  
                                   
                                  }
                                  
                                  function checkWarnings(data) {
                                             //Warn1
                                     if(data.message.includes("(515) BT already scanning!")){       // hier angleichen warning meldung
                                     setState(dpPrefix + "OwnLogEntries.Warn515",true);                                             // hier angleichen dp
                                     setStateDelayed(dpPrefix + "OwnLogEntries.Warn515",false,2000);                                // hier angleichen dp
                                     }
                                  }
                                  
                                  
                                  
                                  onLog("error", checkErrors);
                                  onLog("warn", checkWarnings);
                                  
                                  

                                  dein beispiel ist auch eingefügt - müßte eigentlich sofort funktionieren

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

                                    @liv-in-sky 😘 Ich werde es gleich ausprobieren!

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

                                      @liv-in-sky Vielen Dank!
                                      Hab das bei mir auch mal einbaut und insoweit geändert, das ich das in Node-RED weiter verarbeiten kann.

                                      1 Reply Last reply Reply Quote 1
                                      • D
                                        Diamand2k22 last edited by

                                        @paul53

                                        Hallo Paul, ich weiß der Thread ist etwas älter aber ich würde bei einem bestimmten error im Log den zigbee2mqtt Service gerne restarten.

                                        Wäre das hier so möglich mit excec?
                                        Wie kann man sicher stellen, dass der Restart nur 1x ausgeführt wird und nicht in einer Endlosschleife?

                                        function checkErrors(data) {
                                           
                                           if(data.message.includes("SRSP - AF - dataRequest after 6000ms")){ 
                                           exec('sudo systemctl restart zigbee2mqtt');
                                           }
                                         
                                        }
                                         
                                        onLog("error", checkErrors);
                                        

                                        Danke und Grüße

                                        haus-automatisierung 1 Reply Last reply Reply Quote 0
                                        • haus-automatisierung
                                          haus-automatisierung Developer Most Active @Diamand2k22 last edited by

                                          @diamand2k22 Denke nicht dass dein iobroker Linux-Nutzer sudo-Rechte hat, oder?

                                          1 Reply Last reply Reply Quote 0
                                          • D
                                            Diamand2k22 last edited by

                                            @haus-automatisierung

                                            wohl eher nicht, aber zumindest starte ich den externen dienst so immer neu. bei iobroker selber arbeite ich in der Regel immer ohne sudo!
                                            evtl. kann ich den service auch ohne sudo reststarten, hab ich noch nicht probiert.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            943
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly javascript node-red
                                            6
                                            20
                                            5555
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo