Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. ioBroker Objekte aus javascript object erzeugen

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    ioBroker Objekte aus javascript object erzeugen

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

      Hallo,

      ich experimentiere gerade mir meinem WLAN Grillthermometer.
      Dieses sendet per MQTT einen Status im JSON Format.

      Hier ein Beispiel:

      {"system":{"time":"1555763739","unit":"C","soc":87,"charge":false,"rssi":-76,"online":2},"channel":[{"number":1,"name":"Smoker","typ":0,"temp":33.70,"min":95.00,"max":150.00,"alarm":0,"color":"#FFC100"},{"number":2,"name":"Fleisch Un","typ":0,"temp":999.00,"min":10.00,"max":94.00,"alarm":1,"color":"#22B14C"},{"number":3,"name":"Fleisch Ob","typ":10,"temp":999.00,"min":10.00,"max":94.00,"alarm":1,"color":"#EF562D"},{"number":4,"name":"Kanal 4","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#FFC100"},{"number":5,"name":"Kanal 5","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#A349A4"},{"number":6,"name":"Kanal 6","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#804000"},{"number":7,"name":"Kanal 7","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#5587A2"},{"number":8,"name":"Kanal 8","typ":0,"temp":999.00,"min":10.00,"max":35.00,"alarm":0,"color":"#5C7148"}],"pitmaster":{"type":["off","manual","auto"],"pm":[{"id":0,"channel":1,"pid":2,"value":100,"set":110.00,"typ":"auto","set_color":"#ff0000","value_color":"#000000"}]}}
      

      Ich würde nun gerne daraus ein entsprechendes Objekt im ioBroker erzeugen.
      Dazu habe ich nun mittels javascript angefangen aus dem JSON ein Objekt zu erzeugen.
      Das klappt prima mittels JSON.parse recht elegant.

      // path to json data
      varJSON = 'mqtt.0.WLanThermo.Nanotherm.status.data';
      
      // get json data
      var rawJSON = getState(varJSON).val;
      
      // JSON to object
      obj = JSON.parse(rawJSON);
      
      
      // Test output
      console.log(obj.system.time);
      console.log(obj.system.unit);
      console.log(obj.system.soc);
      console.log(obj.system.charge);
      console.log(obj.system.rssi);
      console.log(obj.system.online);
      

      Wie erstelle ich denn jetzt am einfachsten aus dem bestehenden javascript Objekt ein Objekt im ioBroker?

      Muss ich das für jedes Element einzeln machen, oder gibt es sogar eine Möglichkeit das mit einem Befehl zu machen?

      Zu Fuß habe ich nun so angefangen:

              id = 'javascript.0.nanotherm.system.time'
              createState(id, false,{
                  name: 'System time',
                  type: 'number',
              }); 
              id = 'javascript.0.nanotherm.nystem.unit'
              createState(id, false,{
                  name: 'System unit',
                  type: 'string',
              }); 
      

      Das wäre ok, da ich aber noch recht neu bin in ioBroker und javascript wollte ich lieber mal fragen ob das so der richtige Weg ist.

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

        @dewenni sagte:

        ob das so der richtige Weg ist.

        Nicht ganz. system.unit ist sicherlich konstant und gehört wohl zum Wert system.soc. Die Zeit in s seit 1.1.1970 darzustellen, ist sicherlich nicht so elegant.

        const path = 'nanotherm.system.';
        
        createState(path + 'soc', obj.system.soc, {
           type: 'number',
           unit: obj.system.unit,
           name: 'System soc'
        });
        createState(path + 'time', formatDate(parseInt(obj.system.time), 'hh:mm:ss'), {
           type: 'string',
           name: 'System time'
        });
        

        EDIT: obj.system.time von String nach Zahl gewandelt

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

          Danke für die Antwort. Mir ging es auch erstmal generell um die Frage ob man jedes Element einzeln erzeigen muss. Dies scheint ja so zu sein.

          Aber wo wir schon bei den Details sind. Das mit der Zeit klappt nicht. Ich hatte das auch schon probiert.

          Der Wert von time ist z.B. "time":"1555766679"

          mit formatDate(obj.system.time, 'hh:mm:ss') ergibt das aber NaN:NaN:NaN

          An anderer stelle habe ich auch schon mit formatDate() gearbeitet, aber hier passt irgendwas nicht.

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

            @dewenni sagte:

            formatDate(obj.system.time, 'hh:mm:ss') ergibt das aber NaN:NaN:NaN

            Versuche es mal mit Wandlung in eine Zahl:

            formatDate(parseInt(obj.system.time), 'hh:mm:ss')
            
            1 Reply Last reply Reply Quote 1
            • dewenni
              dewenni last edited by

              das passt!

              Danke!

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

              Support us

              ioBroker
              Community Adapters
              Donate

              881
              Online

              31.6k
              Users

              79.4k
              Topics

              1.3m
              Posts

              javascript
              2
              5
              2296
              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