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. Erzeugung einer Übersicht genutzter States

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    927

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Erzeugung einer Übersicht genutzter States

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 518 Aufrufe 6 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.
  • Benjamin HäubleinB Offline
    Benjamin HäubleinB Offline
    Benjamin Häublein
    Developer
    schrieb am zuletzt editiert von
    #1

    Ich habe bei meinen Skripten die Übersicht verloren, wo ich welche States setze oder lese, oder wo ich sie abonniere.
    Daher hab ich mir ein kleines Skript geschrieben, das die JavaScript/TypeScript Dateien analysiert und eine Liste der genutzten States erzeugt.
    Das ganze ist mit einer Beschreibung hier zu finden: https://github.com/BenjaminHae/iobroker-semgrep-rules

    Das Schöne ist, dass es nicht stupide nach getState/setState/on sucht, sondern wirklich semantisch geparst wird. D.h. wenn die ID in einer Variable gespeichert wird und diese Variable später in setState genutzt wird, sollte das auch erkannt werden.
    Es gibt ein paar Sonderfälle, bei denen es nicht gut klappt, z.B. bei Strings in Backticks z.B. ID=`id.foo.${id}`;, oder Arrays.

    Das Skript erkennt zum Beispiele beim nachfolgenden Skript, dass die ID id.foo.bar´ in setState` genutzt wurde:

    const ID_OF_DEVICE ="id.foo.bar";
    setState(ID_OF_DEVICE, true)
    

    Ich freue mich über die Entdeckung weiterer Edge-Cases, oder neuer Ideen, was man noch identifizieren könnte.

    (Wenn ich mal ganz viel Zeit habe, versuche ich einen Graphen zu erzeugen, welcher State bei welchen anderen States Änderungen auslösen, aber das ist etwas Arbeit)

    liv-in-skyL 1 Antwort Letzte Antwort
    1
    • Benjamin HäubleinB Benjamin Häublein

      Ich habe bei meinen Skripten die Übersicht verloren, wo ich welche States setze oder lese, oder wo ich sie abonniere.
      Daher hab ich mir ein kleines Skript geschrieben, das die JavaScript/TypeScript Dateien analysiert und eine Liste der genutzten States erzeugt.
      Das ganze ist mit einer Beschreibung hier zu finden: https://github.com/BenjaminHae/iobroker-semgrep-rules

      Das Schöne ist, dass es nicht stupide nach getState/setState/on sucht, sondern wirklich semantisch geparst wird. D.h. wenn die ID in einer Variable gespeichert wird und diese Variable später in setState genutzt wird, sollte das auch erkannt werden.
      Es gibt ein paar Sonderfälle, bei denen es nicht gut klappt, z.B. bei Strings in Backticks z.B. ID=`id.foo.${id}`;, oder Arrays.

      Das Skript erkennt zum Beispiele beim nachfolgenden Skript, dass die ID id.foo.bar´ in setState` genutzt wurde:

      const ID_OF_DEVICE ="id.foo.bar";
      setState(ID_OF_DEVICE, true)
      

      Ich freue mich über die Entdeckung weiterer Edge-Cases, oder neuer Ideen, was man noch identifizieren könnte.

      (Wenn ich mal ganz viel Zeit habe, versuche ich einen Graphen zu erzeugen, welcher State bei welchen anderen States Änderungen auslösen, aber das ist etwas Arbeit)

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

      @benjamin-häublein

      interessantes project - blockly wird nicht berücksichtigt ?

      und mein output file ist ziemlich leer, bis auf die namen der scripts

      mach ich was falsch ?

      auschnitt des files - nur alle namen - keine sonstigen einträge (bei 2922 zeilen im file)

      ... 
      ## MYSTUFF/VIS/ALERT-WIDGET/AlarmHinzu1.js
      
      ## MYSTUFF/VIS/ALERT-WIDGET/PostItHinzu2.js
      
      ## MYSTUFF/VIS/ALERT-WIDGET/WidgerAlertTest1.js
      
      ## MYSTUFF/VIS/ALERT-WIDGET/xdeleteAlert1.js
      
      ## MYSTUFF/VIS/ALEXA15/RefreshMovementMotionShow15All.js
      
      ## MYSTUFF/Vorlagen-Verschiedene.js
      
      ## MYSTUFF/WAAGE/WaageAnsagen.js
      
      ## MYSTUFF/WINDOWS_NODE/new-windows-control.js
      
      ## MYSTUFF/WINDOWS_NODE/WindowsNodeWebserver.js
      
      ## MYSTUFF/XIAOMI/DASHBUTTONPlayboy2.js
      
      ## MYSTUFF/XIAOMI/XiaomiAlarmBatterie1.js
      
      ## MYSTUFF/XIAOMI/xiaomiAntennaSchalten.js
      
      ## MYSTUFF/XIAOMI/XiaomiSchalter1.js
      ....
      
      

      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

      Benjamin HäubleinB 1 Antwort Letzte Antwort
      0
      • liv-in-skyL liv-in-sky

        @benjamin-häublein

        interessantes project - blockly wird nicht berücksichtigt ?

        und mein output file ist ziemlich leer, bis auf die namen der scripts

        mach ich was falsch ?

        auschnitt des files - nur alle namen - keine sonstigen einträge (bei 2922 zeilen im file)

        ... 
        ## MYSTUFF/VIS/ALERT-WIDGET/AlarmHinzu1.js
        
        ## MYSTUFF/VIS/ALERT-WIDGET/PostItHinzu2.js
        
        ## MYSTUFF/VIS/ALERT-WIDGET/WidgerAlertTest1.js
        
        ## MYSTUFF/VIS/ALERT-WIDGET/xdeleteAlert1.js
        
        ## MYSTUFF/VIS/ALEXA15/RefreshMovementMotionShow15All.js
        
        ## MYSTUFF/Vorlagen-Verschiedene.js
        
        ## MYSTUFF/WAAGE/WaageAnsagen.js
        
        ## MYSTUFF/WINDOWS_NODE/new-windows-control.js
        
        ## MYSTUFF/WINDOWS_NODE/WindowsNodeWebserver.js
        
        ## MYSTUFF/XIAOMI/DASHBUTTONPlayboy2.js
        
        ## MYSTUFF/XIAOMI/XiaomiAlarmBatterie1.js
        
        ## MYSTUFF/XIAOMI/xiaomiAntennaSchalten.js
        
        ## MYSTUFF/XIAOMI/XiaomiSchalter1.js
        ....
        
        
        Benjamin HäubleinB Offline
        Benjamin HäubleinB Offline
        Benjamin Häublein
        Developer
        schrieb am zuletzt editiert von
        #3

        @liv-in-sky zu Blockly kann ich nichts sagen, ich weiß leider nicht, wie das funktioniert.

        Dass es ganz leer ist, wundert mich. Ist semgrep installiert? Sonst einmal mit pip install semgrep installieren. (Die neueste Version von generateDoc prüft jetzt auch, ob semgrep installiert ist)

        Ansonsten könntest du mir bite ein Script zeigen, bei dem etwas herauskommen sollte?

        liv-in-skyL 1 Antwort Letzte Antwort
        0
        • Benjamin HäubleinB Benjamin Häublein

          @liv-in-sky zu Blockly kann ich nichts sagen, ich weiß leider nicht, wie das funktioniert.

          Dass es ganz leer ist, wundert mich. Ist semgrep installiert? Sonst einmal mit pip install semgrep installieren. (Die neueste Version von generateDoc prüft jetzt auch, ob semgrep installiert ist)

          Ansonsten könntest du mir bite ein Script zeigen, bei dem etwas herauskommen sollte?

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

          @benjamin-häublein sagte in Erzeugung einer Übersicht genutzter States:

          pip install semgrep

          • semgrep ist installiert und die neuste version deines scriptes

          • inhalt outputfile:

          # Overview of objects used in /opt/iobroker/scripte-backup/common/
          ## 00000000000000000000000000tesssst.js
          
          ## 00000000000000HeizungNedis.js
          
          ## 0000000000000array.js
          
          

          das script dazu:

          let counter=0;
          let valId ="0_userdata.0.CONTROL-OWN.AAATEST.TestLogic"
           let myInt= setInterval(async function () {
                 counter++; 
                 let theState=getState(valId).val
                 setState(valId, theState=!theState)
             	if (counter==10) {clearInterval(myInt); myInt = null;}
          }, 2000);
          

          oder:

          //sendTo('puppeteer.0', 'screenshot', { 
          
           //  url: 'https://www.simply-yummy.de/low-carb-plaetzchen',
          
           //  path: '/Daten/pictureTest2.png' // sollte dann in /opt/iobroker/node_modules/iobroker.puppeteer/ landen
          
          // });
          
          schedule("*/30 * * * * *", function (obj) {//log("jetzt")
          
             if(getState("0_userdata.0.CONTROL-OWN.MOTION.Standort").val==4){
          sendTo('puppeteer.0', 'screenshot', { 
          
             url: 'http://192.168.178.59:8082/vis/index.html?handyBildAnzeige#dtaBild',
          
             path: '/Daten/iobroker1.png', 
          
             width:450,
          
             height:850,
          
             waitForTimeout: 6000,
             fullPage: false,
          
             clip: {         
                 x: 0,
                 y: 0,
                 width: 450,
                 height: 850 
               }
          
          });
             }
          })
          

          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

          Benjamin HäubleinB 1 Antwort Letzte Antwort
          0
          • liv-in-skyL liv-in-sky

            @benjamin-häublein sagte in Erzeugung einer Übersicht genutzter States:

            pip install semgrep

            • semgrep ist installiert und die neuste version deines scriptes

            • inhalt outputfile:

            # Overview of objects used in /opt/iobroker/scripte-backup/common/
            ## 00000000000000000000000000tesssst.js
            
            ## 00000000000000HeizungNedis.js
            
            ## 0000000000000array.js
            
            

            das script dazu:

            let counter=0;
            let valId ="0_userdata.0.CONTROL-OWN.AAATEST.TestLogic"
             let myInt= setInterval(async function () {
                   counter++; 
                   let theState=getState(valId).val
                   setState(valId, theState=!theState)
               	if (counter==10) {clearInterval(myInt); myInt = null;}
            }, 2000);
            

            oder:

            //sendTo('puppeteer.0', 'screenshot', { 
            
             //  url: 'https://www.simply-yummy.de/low-carb-plaetzchen',
            
             //  path: '/Daten/pictureTest2.png' // sollte dann in /opt/iobroker/node_modules/iobroker.puppeteer/ landen
            
            // });
            
            schedule("*/30 * * * * *", function (obj) {//log("jetzt")
            
               if(getState("0_userdata.0.CONTROL-OWN.MOTION.Standort").val==4){
            sendTo('puppeteer.0', 'screenshot', { 
            
               url: 'http://192.168.178.59:8082/vis/index.html?handyBildAnzeige#dtaBild',
            
               path: '/Daten/iobroker1.png', 
            
               width:450,
            
               height:850,
            
               waitForTimeout: 6000,
               fullPage: false,
            
               clip: {         
                   x: 0,
                   y: 0,
                   width: 450,
                   height: 850 
                 }
            
            });
               }
            })
            

            Benjamin HäubleinB Offline
            Benjamin HäubleinB Offline
            Benjamin Häublein
            Developer
            schrieb am zuletzt editiert von
            #5

            @liv-in-sky Bei mir kommt dabei folgendes Ergebnis raus:

            ## test1.js
            
            ### Set State
            
             - 0_userdata.0.CONTROL-OWN.AAATEST.TestLogic
            
            ### Get State
            
             - 0_userdata.0.CONTROL-OWN.AAATEST.TestLogic
            
            ## test2.js
            
            ### Get State
            
             - 0_userdata.0.CONTROL-OWN.MOTION.Standort
            
            ### Schedule
            
             - */30 * * * * *
            

            Was ist denn die Ausgabe des Skripts auf der Konsole?
            Und was ist die Ausgabe von semgrep --config=rules.yml /pfad/zu/einem/Skript, wenn du das im Verzeichnis des generateDoc Projekts ausführst?

            P.S: SendTo kommt auf meine Liste der Dinge die ich noch unterstützen will

            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

            384

            Online

            32.6k

            Benutzer

            82.2k

            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