Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Mein erstes Skript und Probleme!

    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

    Mein erstes Skript und Probleme!

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

      Anbei mein erster Versuch eines Skriptes und habe keinen Erfolg:

      var idtimenew = "javascript.0.VIS.Laufzeit";
      var idSekunden = "system.adapter.admin.0.uptime";
      var idtage = '0';
      var idstunden = '0';
      var idminuten = '0';
      
      createState(idtimenew, '0', {
          def: '0',
          type: 'string',
          role: 'text'
      });
      
      on(idSekunden, function (data) {
          if (data.state.val >= 86400) setState(idtage, Math.floor(data.state.val / 86400 )),
          setState(idSekunden, data.state.val - (86400 * parseInt(idtage)));
      
          if (data.state.val >= 3600) setState(idstunden, Math.floor(data.state.val / 3600 )),
          setState(idSekunden, data.state.val - (3600 * parseInt(idstunden)));
          
          if (data.state.val >= 60) setState(idminuten, Math.floor(data.state.val / 60 ));
      
          if (parseInt(idtage) > 0) setState(idtimenew, idtage + ' Tg. ' + idstunden + ' Std. ' + idminuten + ' Min.');
          else setState(idtimenew, idstunden + ' Std. ' + idminuten + ' Min.');
         
      });
      

      Wo liegt der Fehler?

      Für Hilfe dankbar!!!

      MfG
      Wastl

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Langer last edited by paul53

        @Langer sagte:

        Wo liegt der Fehler?

        Du verwechselst Datenpunkte mit Variablen.

        var idtimenew = "javascript.0.VIS.Laufzeit";
        var idSekunden = "system.adapter.admin.0.uptime";
        
        createState(idtimenew, '0', {
            def: '0',
            type: 'string',
            role: 'text'
        });
         
        on(idSekunden, function (data) {
            let tage = Math.floor(data.state.val / 86400);
            let sekunden = data.state.val - (86400 * tage);
            let stunden = Math.floor(sekunden / 3600);
            sekunden = sekunden - 3600 * stunden;
            let minuten = Math.round(sekunden / 60);
            let text = stunden + ' Std. ' + minuten + ' Min.';
            if (tage > 0) text = tage + ' Tg. ' + stunden + ' Std. ' + minuten + ' Min.';
            setState(idtimenew, text, true);
        });
        
        L 1 Reply Last reply Reply Quote 0
        • L
          Langer @paul53 last edited by

          @paul53

          Danke für Deine Hilfe.

          MfG
          Wastl

          L 1 Reply Last reply Reply Quote 0
          • L
            Langer @Langer last edited by

            Hallo,

            bin dabei mein erstes Skript weiter auszubauen und habe ein Problem:

            Unter "Global" habe ich folgende Funktion abgelegt:

            function SekToTime(uptime_sek, objekt) {
                let tage = Math.floor(uptime_sek / 86400);
                let sekunden = uptime_sek - (86400 * tage);
                let stunden = Math.floor(sekunden / 3600);
                sekunden = sekunden - 3600 * stunden;
                let minuten = Math.round(sekunden / 60);
                let text = stunden + ' Std. ' + minuten + ' Min.';
                if (tage > 0) text = tage + ' Tg. ' + stunden + ' Std. ' + minuten + ' Min.';
                setState(objekt, text, true);
            };
            

            Wobei erster Parameter die Uptime von z.B. adapter Admin ist in sekunden, der zweite Parameter ist das Objekt, in dem der erechnete Wert abgelegt werden soll.

            Unter "Common" habe ich folgende Funktion:

            function adapter_uptime() {
                
                SekToTime("system.adapter.admin.0.uptime","javascript.0.uptime.admin");
                SekToTime("system.adapter.ble.0.uptime","javascript.0.uptime.ble");
            }
            
            adapter_uptime();
            

            Als Ausgabe bekomme ich in beiden Fällen:

            NaN Std. NaN Min.

            Was läuft falsch?

            Danke vorab.

            MfG
            Wastl

            Asgothian paul53 2 Replies Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Langer last edited by

              @Langer Wie auch vorher verwechselst Du was.

              Deine Funktion benötigt als ersten parameter eine Zeit, als 2. Parameter die ID eines States.

              Du übergibst der Funktion in beiden Parametern State-ID's. Das kann nicht gehen.

              A.

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Langer last edited by

                @Langer sagte in:

                Was läuft falsch?

                "system.adapter.admin.0.uptime" ist keine Zahl, sondern eine ID. Versuche mal

                function adapter_uptime() {
                    SekToTime(getState("system.adapter.admin.0.uptime").val,"javascript.0.uptime.admin");
                    SekToTime(getState("system.adapter.ble.0.uptime").val,"javascript.0.uptime.ble");
                }
                 
                adapter_uptime();
                
                L 1 Reply Last reply Reply Quote 0
                • L
                  Langer @paul53 last edited by

                  @paul53 , @Asgothian

                  Danke für die schnelle Antworten.

                  Habe es so gemacht, mit getState ().val, bekomme jetzt aber folgende Fehlermeldung im Log:

                  javascript.0	2020-12-15 13:49:56.486	error	(5076) at Script.runInContext (vm.js:130:18)
                  javascript.0	2020-12-15 13:49:56.486	error	(5076) at script.js.common.admin_Uptime:7:1
                  javascript.0	2020-12-15 13:49:56.485	error	(5076) at adapter_uptime (script.js.common.admin_Uptime:3:56)
                  javascript.0	2020-12-15 13:49:56.485	error	(5076) TypeError: Cannot read property 'val' of undefined
                  javascript.0	2020-12-15 13:49:56.484	error	(5076) ^
                  javascript.0	2020-12-15 13:49:56.484	error	(5076) SekToTime(getState("system.adapter.admin.0.uptime").val,"javascript.0.uptime.admin");
                  javascript.0	2020-12-15 13:49:56.483	error	(5076) script.js.common.admin_Uptime: script.js.common.admin_Uptime:3
                  javascript.0	2020-12-15 13:49:56.480	error	(5076) script.js.common.admin_Uptime: Please disable that setting or use "getState" with a callback, e.g.: getState("system.adapter.admin.0.uptime", (err, state) => { ... });
                  javascript.0	2020-12-15 13:49:56.479	error	(5076) script.js.common.admin_Uptime: The "getState" method cannot be used synchronously, because the adapter setting "Do not subscribe to all states on start" is enabled.
                  

                  Wie schon geschrieben, absoluter Anfänger, kann mit der Meldung nichts anfangen.

                  MfG
                  Wastl

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Langer last edited by

                    @Langer sagte:

                    because the adapter setting "Do not subscribe to all states on start" is enabled.

                    Entferne den Haken in der Konfiguration der Javascript-Instanz.

                    L 1 Reply Last reply Reply Quote 0
                    • L
                      Langer @paul53 last edited by

                      @paul53

                      Danke!!!

                      MfG
                      Wastl

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      893
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      282
                      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