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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script für Systemmeldungen aus ioBroker (für die Visualisierung)

NEWS

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

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

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

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 4 Kommentatoren 1.0k Aufrufe
  • Ä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.
  • S Offline
    S Offline
    Smartuser
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • wendy2702W Offline
      wendy2702W Offline
      wendy2702
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        tempestas
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          Smartuser
          schrieb am zuletzt editiert von
          #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. :D

          Dankeschön

          Gruß

          1 Antwort Letzte Antwort
          0
          • N Offline
            N Offline
            NyanCat
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              Smartuser
              schrieb am zuletzt editiert von
              #6

              @NyanCat:

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

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

              Gruß

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


              Support us

              ioBroker
              Community Adapters
              Donate

              406

              Online

              32.4k

              Benutzer

              81.4k

              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