Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. String umwandeln in Number und neues Objekt anlegen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    String umwandeln in Number und neues Objekt anlegen

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

      Hallo zusammen.

      Der device-reminder Adapter schreibt leider alle Werte als String die ich im Grafana nicht vernünftig auswerten kann.
      Ein Weg wäre wohl ein neues Objekt als number anzulegen und die Werte neu zu speichern (schon ein paar Beiträge).

      Vielleicht kann mir jemand bei dem Script helfen.
      Wie rechne ich die Zeit in Sekunden um ?

      Datenpunkt: device-reminder.0.Trockner.lastRuntime
      Wert der geschrieben wird: 00:02:20

      Wenn ich das richtig verstanden haben, muss ich Javascript bauen:

      on("device-reminder.0.Trockner.lastRuntime", function (obj) {
         inhalt = JSON.parse(obj.state.val);
         setState("javascript.0.Test1", inhalt.Sekunden, true);
      });
      

      Aber wie lasse ich die Zeit in Sekunden umrechnen?

      lg
      Bit

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

        @bitwicht sagte: Wert der geschrieben wird: 00:02:20

        on("device-reminder.0.Trockner.lastRuntime", function (obj) {
           const arr = obj.state.val.split(':');
           const sec = 3600 * arr[0] + 60 * arr[1] + parseInt(arr[2]);
           setState("javascript.0.Test1", sec, true);
        });
        
        1 Reply Last reply Reply Quote 0
        • David G.
          David G. last edited by

          Bekommt man das nicht auch mit einem Alias hin?

          1 Reply Last reply Reply Quote 0
          • B
            bitwicht last edited by bitwicht

            @paul53

            Danke.
            Wird der Wert automatisch angelegt oder muss ich das noch einbauen:

            createState("javascript.0.Test1", 0, {type: 'number', read: 'true', write: 'true'});
            

            Das createState würde dann bei jedem Script Neustart aufgerufen werden, ist das ein Problem?

            T 1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @bitwicht last edited by ticaki

              @bitwicht
              Nö kein Problem, kannst ja noch ein if( !existsState('bla.bla.bla')) davor einbauen.

              1 Reply Last reply Reply Quote 0
              • B
                bitwicht last edited by

                @paul53

                Der Datenpunkt wurde erzeugt aber nicht befüllt.
                Ich bekomme folgenden Fehler:

                
                javascript.0
                2024-03-08 18:10:37.282	error	at processImmediate (node:internal/timers:476:21)
                
                javascript.0
                2024-03-08 18:10:37.282	error	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11229:62)
                
                javascript.0
                2024-03-08 18:10:37.282	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:645:29)
                
                javascript.0
                2024-03-08 18:10:37.281	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1266:38)
                
                javascript.0
                2024-03-08 18:10:37.281	error	at Object.<anonymous> (script.js.Test-Trockner:3:26)
                
                javascript.0
                2024-03-08 18:10:37.279	error	Error in callback: TypeError: Cannot read properties of undefined (reading '0')
                
                admin.0
                2024-03-08 18:06:26.192	info	<== Disconnect system.user.admin from ::ffff:192.168.0.100 javascript
                
                javascript.0
                2024-03-08 18:06:19.113	warn	This object will not be created in future versions. Please report this to the developer.
                
                javascript.0
                2024-03-08 18:06:19.113	warn	Object javascript.0.Test1 is invalid: obj.common.read has an invalid type! Expected "boolean", received "string"
                
                javascript.0
                2024-03-08 18:06:19.107	info	script.js.Test-Trockner: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                
                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @bitwicht last edited by paul53

                  @bitwicht sagte: obj.common.read has an invalid type! Expected "boolean", received "string"

                  createState("javascript.0.Test1", 0, {type: 'number', read: true, write: false, role: 'value'});
                  

                  EDIT: In Zeile 2 war ein Fehler. Habe ich oben korrigiert:

                  split(':')
                  
                  1 Reply Last reply Reply Quote 0
                  • B
                    bitwicht last edited by

                    @paul53

                    Super, Danke!
                    Das neue Objekt wird befüllt und passt auch:
                    Adapter Objekt: 00:02:10
                    Neues Objekt: 130

                    Ich würde jetzt gerne noch ein weiteres Objekt anlegen das bei jedem Lauf einfach mit 1 befüllt wird.
                    Dann kann ich die Anzahl pro Tag einfach im Grafana aggregieren.

                    Wäre das dann so richtig:

                    on("device-reminder.0.Trockner.lastRuntime", function (obj) {
                       const arr = obj.state.val.split(':');
                       const sec = 3600 * arr[0] + 60 * arr[1] + parseInt(arr[2]);
                       setState("javascript.0.Test1", sec, true);
                           const xxx = 1
                           setState("javascript.0.Test2", xxx, true);
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • B
                      bitwicht last edited by

                      Falls es jemand brauchen kann:

                      on("device-reminder.0.Trockner.lastRuntime", function (obj) {
                         const arr = obj.state.val.split(':');
                         const lastRuntime_in_sec = 3600 * arr[0] + 60 * arr[1] + parseInt(arr[2]);
                         setState("javascript.0.device-reminder.Trockner.lastruntime_in_sec", lastRuntime_in_sec, true);
                         const Runtime_counter = 1;
                         setState("javascript.0.device-reminder.Trockner.runtime_counter", Runtime_counter, true);
                      });
                      createState("javascript.0.device-reminder.Trockner.lastruntime_in_sec", 0, {type: 'number', read: true, write: false, role: 'value'});
                      createState("javascript.0.device-reminder.Trockner.runtime_counter", 0, {type: 'number', read: true, write: false, role: 'value'});
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      958
                      Online

                      31.7k
                      Users

                      79.7k
                      Topics

                      1.3m
                      Posts

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