Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script für Systemmeldungen aus ioBroker (für die Visualisierung)

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    211

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

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

Script für Systemmeldungen aus ioBroker (für die Visualisierung)

Script für Systemmeldungen aus ioBroker (für die Visualisierung)

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 4 Posters 1.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Smartuser
    wrote on last edited by
    #1

    Hallo Zusammen,

    da dieser Thread https://forum.iobroker.net/viewtopic.php?f=21&t=1502&start=0 durch den Autor schon auf "gelöst" gesetzt wurde, öffne ich diesen hier.

    Ich verwende aus dem Thread folgendes Script:

    //***************GLOBALES_SCRIPT*********************
    createState('log', '');
    
    function getTimeAsString(d) {
        var date = d || new Date();
        return date.getFullYear() + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + ('0' + date.getDate()).slice(-2) + ' '+
     ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' +  ('0' + date.getSeconds()).slice(-2);    
    }
    function toLog(text, addTimestamp) 
    {
        console.log(text);
        var lines = getState('log').val;
        lines = lines.split('
    ');
        if (addTimestamp) {
                lines.unshift(getTimeAsString() + ': ' + text);
        } else {
                lines.unshift(text);
        }
        if (lines.length > 25) lines.splice(0,1);
        setState('log', lines.join('
    '), true);
    }
    

    Es funktioniert soweit ohne Probleme, allerdings hab ich dazu einige Fragen und hoffe ihr könnt mir helfen. 🙂

    1.

    Aktuell wird dieser "log" in den Objekten direkt unter "javascript.0" erstellt. Wie muss ich denn das Script abändern, damit dieser in einem "Unterordner" angelegt wird?

    2.

    Aktuell stopt das "Füllen" des "log" bei einer Zeilenanzahl von 25. Danach kommen keine neuen Einträge mehr dazu.

    Ich gehe davon aus, dass diese Zeile dafür verantwortlich ist:

    if (lines.length > 25) lines.splice(0,1);
    

    Wenn ich diesen Wert erhöhe, werden auch mehr Einträge geschrieben.

    Ist das ein Fehler in dem Script und die Code-Zeile soll eigentlich einen Zeilenumbruch bewirken?

    Oder ist das gewollt das nicht mehr als 25 Zeilen geschrieben werden sollen? Was wiederum die Frage aufwirft … gibt es irgendwie ein Problem, wenn man so ein "Object" mit sehr vielen Zeichen/Zeilen füllt?

    Gruß ...

    1 Reply Last reply
    0
    • wendy2702W Online
      wendy2702W Online
      wendy2702
      wrote on last edited by
      #2

      Bin kein Java Experte aber wegen dem Datenpunkte kannst du mal versuchen bei demcreateStatevor das````
      log

      
      Z.B.````
      system.log
      ````dann sollte es einen Datenpunkt geben````
      javascript.0.system.log
      

      Den gleichen Namen musst du dann an allen Stellen im script ändern wo````
      log

      
      Also auch bei set State und getState.

      Bitte keine Fragen per PN, die gehören ins Forum!

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

      1 Reply Last reply
      0
      • T Offline
        T Offline
        tempestas
        wrote on last edited by
        #3

        @Smartuser:

        Hallo Zusammen,

        da dieser Thread https://forum.iobroker.net/viewtopic.php?f=21&t=1502&start=0 durch den Autor schon auf "gelöst" gesetzt wurde, öffne ich diesen hier.

        Ich verwende aus dem Thread folgendes Script:

        //***************GLOBALES_SCRIPT*********************
        createState('log', '');
        
        function getTimeAsString(d) {
            var date = d || new Date();
            return date.getFullYear() + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + ('0' + date.getDate()).slice(-2) + ' '+
         ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' +  ('0' + date.getSeconds()).slice(-2);    
        }
        function toLog(text, addTimestamp) 
        {
            console.log(text);
            var lines = getState('log').val;
            lines = lines.split('
        ');
            if (addTimestamp) {
                    lines.unshift(getTimeAsString() + ': ' + text);
            } else {
                    lines.unshift(text);
            }
            if (lines.length > 25) lines.splice(0,1);
            setState('log', lines.join('
        '), true);
        }
        

        Es funktioniert soweit ohne Probleme, allerdings hab ich dazu einige Fragen und hoffe ihr könnt mir helfen. 🙂

        1.

        Aktuell wird dieser "log" in den Objekten direkt unter "javascript.0" erstellt. Wie muss ich denn das Script abändern, damit dieser in einem "Unterordner" angelegt wird?

        2.

        Aktuell stopt das "Füllen" des "log" bei einer Zeilenanzahl von 25. Danach kommen keine neuen Einträge mehr dazu.

        Ich gehe davon aus, dass diese Zeile dafür verantwortlich ist:

        if (lines.length > 25) lines.splice(0,1);
        

        Wenn ich diesen Wert erhöhe, werden auch mehr Einträge geschrieben.

        Ist das ein Fehler in dem Script und die Code-Zeile soll eigentlich einen Zeilenumbruch bewirken?

        Oder ist das gewollt das nicht mehr als 25 Zeilen geschrieben werden sollen? Was wiederum die Frage aufwirft … gibt es irgendwie ein Problem, wenn man so ein "Object" mit sehr vielen Zeichen/Zeilen füllt?

        Gruß ... `

        Das mit den Zeilen ist so gewollt. Der Zeilenumbruch erfolgt hier:

            setState('log', lines.join('
        '), true);
        ````das
        sorgt dafür.
        
        Ob es irgendwann Probleme gibt weiß ich nicht, denke nicht (oder erst ab sehr sehr vielen Zeilen). Die Frage ist wohl, was bringt einem eine sehr lange Liste, da verschwindet die Übersicht und die Wahrscheinlichkeit, dass die Liste so lang ist, weil irrelevantes mitgeloggt wird ist hoch. Aber das liegt ja bei dir. Du kannst es erstmal ohne Probleme höher setzen.
        
        Die andere Frage hat wendy korrekt beantwortet.

        <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

        1 Reply Last reply
        0
        • S Offline
          S Offline
          Smartuser
          wrote on last edited by
          #4

          @wendy2702 @tempestas

          Sorry für die verspätete Rückmeldung. :oops:

          Vielen Dank für Antworten.

          Ich habe die "Log-Größe" angepasst und das mit dem "Unterordner" funktioniert auch. 😄

          Dankeschön

          Gruß

          1 Reply Last reply
          0
          • N Offline
            N Offline
            NyanCat
            wrote on last edited by
            #5

            Hi, ich habe das auch mal übernommen und funktioniert (glaube ich) soweit, aber was mache ich, wenn die 25 Zeilen voll sind? Dann werden ja keine neuen Log's mehr geschrieben. Kann man das so machen, dass die letzte Zeile dann gelöscht wird, wenn eine neue dazu kommt? :?:

            Vielen Dank und Grüße

            EDIT: Hab die Lösung gefunden

            anstatt

            if (lines.length > 25) lines.splice(0,1);
            

            pop nutzen

            if (lines.length > 25) lines.pop();
            

            die zahl gibt die länge an, ab wann hinten gelöscht wird

            Bitte um Nachsicht: Bin ein hardcore Noob, was Coding angeht. Copy-Paste ist mein Freund.

            1 Reply Last reply
            0
            • S Offline
              S Offline
              Smartuser
              wrote on last edited by
              #6

              @NyanCat:

              EDIT: Hab die Lösung gefunden `
              Find ich gut, hab ich auch gleich so geändert. 😄

              (schön das du Lösung teilst!)

              Gruß

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              84

              Online

              32.4k

              Users

              81.3k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe