Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Rechnen mit 2 Objekten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Rechnen mit 2 Objekten

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

      Hi zusammen!

      Wie kann ich mit 2 Objekten rechnen?

      Und zwar möchte ich mir z.B. Beim RPI Adapter bei Sdcard noch den freien Speicher anzeigen lassen und dafür möchte ich rpi.0.sdcard.sdcard_root_total - rpi.0.sdcard.sdcard_root_used rechnen und das Ergebnis in ein neues Objekt setzen!

      Aber wie mach ich das?

      Kann mir da jemand bei dem Script bitte behilflich sein?

      Gruß Johnny

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

        Probier mal:

        createState("sdcard_root_free",0);
        var sdcard_root_free = getState(rpi.0.sdcard.sdcard_root_total).val - getState( rpi.0.sdcard.sdcard_root_used ).val;
        log("sdcard_root_free: " + sdcard_root_free);
        setState("sdcard_root_free",sdcard_root_free);
        
        

        Beim ersten Start dürfte noch ein Fehler kommen, da der Datenpunkt noch nicht angelegt ist.

        Beim zweiten Start sollte es durchlaufen.

        Wenn es funktioniert kannst Du das noch abfangen.

        Wobei Du das dann in dem Script nicht mehr merken wirst 😉

        1 Reply Last reply Reply Quote 0
        • P
          PrinzEisenherz1 last edited by

          Hi ruhr70!

          Danke für Deine Unterstützung aber leider klappt das nicht!

          Im log steht folgendes:

          javascript-0	2016-03-08 17:09:38	error	script.js.RPI_MemFree compile failed: SyntaxError: Unexpected number
          
          

          Johnny

          1 Reply Last reply Reply Quote 0
          • P
            PrinzEisenherz1 last edited by

            Halt, jetzt gehts!

            Hab die IDs nochmal neu eingefügt!

            Jetzt läuft es!

            Muss ich da jetzt noch n cron anhängen oder erkennt es automatisch Veränderungen des Speicherplatzes?

            Gruß

            Johnny

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

              Du kannst ein on/subscribe machen

              
              function memBerechnen(){
                    var sdcard_root_free = getState(rpi.0.sdcard.sdcard_root_total).val - getState( rpi.0.sdcard.sdcard_root_used ).val;
                    log("sdcard_root_free: " + sdcard_root_free);
                    setState("sdcard_root_free",sdcard_root_free);
              }
              
              on({
                   id: 'rpi.0.sdcard.sdcard_root_used', 
                   change: 'any'
                   }
                   memBerechen
              );
              
              

              einbauen, wenn sich 'used' ändert, dann loslegen.

              Das kann aber nach hinten los gehen, wenn sich der 'used' stänig ändert.

              Dann besser ein Schedule.

              Statt on() dann

              schedule('*/10 * * * *', memBerechnen);
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Um die CPU-Belastung gering zu halten, wenn sich "used" häufig ändert, würde ich es so machen:

                var used = getState("rpi.0.sdcard.sdcard_root_used").val;
                var total = getState("rpi.0.sdcard.sdcard_root_total").val;
                
                setState("sdcard_root_free", total - used);  // Script start
                
                on('rpi.0.sdcard.sdcard_root_used', function(dp) {
                	setState("sdcard_root_free", total - dp.state.val);
                });
                
                1 Reply Last reply Reply Quote 0
                • ruhr70
                  ruhr70 last edited by

                  @paul53:

                  Um die CPU-Belastung gering zu halten, wenn sich "used" häufig ändert, würde ich es so machen:

                  var used = getState("rpi.0.sdcard.sdcard_root_used").val;
                  var total = getState("rpi.0.sdcard.sdcard_root_total").val;
                  
                  setState("sdcard_root_free", total - used);  // Script start
                  
                  on('rpi.0.sdcard.sdcard_root_used', function(dp) {
                  	setState("sdcard_root_free", total - dp.state.val);
                  });
                  ```` `  
                  

                  Ich verstehe es nicht ganz.

                  Ist da nicht der einzige Effekt, dass total sich nicht ändert und daher nicht immer neu ausgelesen werden muss?

                  Oder gibt es noch einen anderen Effekt?

                  Ansonsten wird doch auch bei jeder Änderung geschrieben.

                  Wenn jede Änderung wieder eine Änderung auf der SD Karte nachzieht, hört das gar nicht mehr auf. 😉

                  [EDIT]

                  Ok, rpi.0.sdcard.sdcard_root_used wird bei Änderung auch nur einmal gelesen, statt zweimal.

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

                    Stimmt, das ist deutlich effektiver.

                    Trotzdem glaub ich, dass das ein eine irre CPU belastung erzeugt, weil sich used ja ständig ändert.

                    Meine Präferenz wäre ein schedule. Jede Minute oder sogar all 10 sek, das wäre immer noch seltener als bei jeder Änderung mit Subscribe.

                    Die Idee ist ja bestimmt so in etwa den Trend zu erkennen, und nicht ein Echtzeit-Monitoring.

                    1 Reply Last reply Reply Quote 0
                    • P
                      PrinzEisenherz1 last edited by

                      Tausend Dank euch allen!

                      Ich hab es jetzt mit Schedule eingebunden

                      Ist das so in Ordnung?

                      createState("sdcard_root_free",0);
                      function memBerechnen(){
                      var sdcard_root_free = getState("rpi.0.sdcard.sdcard_root_total"/*rpi.0.sdcard.sdcard_root_total*/).val - getState("rpi.0.sdcard.sdcard_root_used"/*rpi.0.sdcard.sdcard_root_used*/).val;
                      log("sdcard_root_free: " + sdcard_root_free);
                      setState("sdcard_root_free",sdcard_root_free);
                      }
                      schedule('*/10 * * * *', memBerechnen);
                      
                      

                      10-Min Rythmus reicht mir vollkommen!

                      Gruß

                      Johnny

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      809
                      Online

                      31.9k
                      Users

                      80.2k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      1344
                      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