Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. ioBroker Objekte aus javascript object erzeugen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

ioBroker Objekte aus javascript object erzeugen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
5 Beiträge 2 Kommentatoren 2.6k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • dewenniD Offline
    dewenniD Offline
    dewenni
    schrieb am zuletzt editiert von
    #1

    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.

    paul53P 1 Antwort Letzte Antwort
    0
    • dewenniD dewenni

      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.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @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

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • dewenniD Offline
        dewenniD Offline
        dewenni
        schrieb am zuletzt editiert von
        #3

        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.

        paul53P 1 Antwort Letzte Antwort
        0
        • dewenniD dewenni

          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.

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @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')
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          1
          • dewenniD Offline
            dewenniD Offline
            dewenni
            schrieb am zuletzt editiert von
            #5

            das passt!

            Danke!

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            797

            Online

            32.5k

            Benutzer

            81.7k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe