Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Erzeugung einer Übersicht genutzter States

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Erzeugung einer Übersicht genutzter States

    This topic has been deleted. Only users with topic management privileges can see it.
    • Benjamin Häublein
      Benjamin Häublein Developer last edited by

      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-sky 1 Reply Last reply Reply Quote 1
      • liv-in-sky
        liv-in-sky @Benjamin Häublein last edited by

        @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äublein 1 Reply Last reply Reply Quote 0
        • Benjamin Häublein
          Benjamin Häublein Developer @liv-in-sky last edited by

          @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-sky 1 Reply Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @Benjamin Häublein last edited by

            @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äublein 1 Reply Last reply Reply Quote 0
            • Benjamin Häublein
              Benjamin Häublein Developer @liv-in-sky last edited by

              @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 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              745
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              2
              5
              339
              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