Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Mqtt: String in Datenpunkte umwandeln?

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

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

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

Mqtt: String in Datenpunkte umwandeln?

Scheduled Pinned Locked Moved Skripten / Logik
12 Posts 2 Posters 4.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Offline
    W Offline
    wolf
    wrote on last edited by
    #1

    Hallo, liebe Forengemeinde,

    ich habe mir auf eine Raspberry 3 den iobroker installiert. Nun wollte ich ein Projekt aus github (https://github.com/bruhautomation/ESP-M … ultisensor ) realisieren, das mir verschiedene Sensordaten an den iobroker liefert. Dazu habe ich im iobroker den MQTT Server Adapter installiert. Das klappt auch. Sobald der Sensor angeschlossen ist, wird ein Objekt angelegt. Nur werden mir die Sensordaten nicht als einzelne Datenpunkte angezeigt, sondern in einem String, der dann so aussieht:

    {"state":"OFF","color"{"r":255,"g":255,"b":255},"brightness":255,"humidity":"53.70","motion":"standby","ldr":"0","temperature":"74.48","heatIndex":"74.15"}

    Die Werte in dem String aktualisieren sich auch, also scheint die Übergabe zu funktionieren.

    Jetzt meine Frage: Gibt es eine (einfache) Möglichkeit, dass die Werte als einzelne Datenpunkte angezeigt werden?
    5573_screenshot.jpg

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      Das müsse etwa so funktionieren per Javascript:

      var obj = JSON.parse(getState('mqtt.0.bruh.sensornode1').val);
      setState(idState, obj.state, true);
      setState(idRot, obj.color.r, true);
      setState(idGruen, obj.color.g, true);
      setState(idBlau, obj.color.b, true);
      setState(idHell, obj.brightness, true);
      setState(idFeuchte, obj.humidity, true);
      setState(idBeweg, ovj.motion, true);
      setState(idTemp, obj.temperature, true);
      setState(idHeiz, obj.heatindex, true);
      
      

      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 Reply Last reply
      0
      • W Offline
        W Offline
        wolf
        wrote on last edited by
        #3

        @paul53:

        Das müsse etwa so funktionieren per Javascript:

        var obj = JSON.parse(getState('mqtt.0.bruh.sensornode1').val);
        setState(idState, obj.state, true);
        setState(idRot, obj.color.r, true);
        setState(idGruen, obj.color.g, true);
        setState(idBlau, obj.color.b, true);
        setState(idHell, obj.brightness, true);
        setState(idFeuchte, obj.humidity, true);
        setState(idBeweg, ovj.motion, true);
        setState(idTemp, obj.temperature, true);
        setState(idHeiz, obj.heatindex, true);
        
        ```` `  
        

        Besten Dank für den Lösungsansatz!

        Also einfach im Reiter „Skripte“ unter „common“ ein neues Script erstellen und diese Zeilen einfügen? Sorry, wenn ich so blöd frage, aber ich bin auf diesem Gebiet absoluter Neuling.

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @wolf:

          Also einfach im Reiter „Skripte“ unter „common“ ein neues Script erstellen und diese Zeilen einfügen? `
          Nein, das zeigt nur das Prinzip, wie man die einzelnen Werte aus dem JSON-String in Datenpunkte schreibt. Die Datenpunkte müssen erst erstellt werden, am Besten im Reiter "Objekte" unter javascript.0. Als Beispiel der Datenpunkt für Rot:

          Name: 'Bruh.Farbe.Rot'

          Typ: Zahl
          ` > role: value

          read: anhaken (true)

          write: anhaken (true)

          min: 0

          max: 255

          unit: (leer) `
          Dann im Skript die symbolischen ID-Bezeichnungen durch die tatasächliche ID ersetzen. Dabei hilft der Button "ID einfügen" (rechts oben).

          function setDps() {
            var obj = JSON.parse(getState('mqtt.0.bruh.sensornode1').val);
            if(obj.state == "OFF") setState('javascript.0.Bruh.Ein', false, true);  // DP-Typ: Logikwert
            else  setState('javascript.0.Bruh.Ein', true, true);
            setState('javascript.0.Bruh.Farbe.Rot', obj.color.r, true);  // DP-Typ: Zahl
            setState('javascript.0.Bruh.Farbe.Gruen', obj.color.g, true);  // DP-Typ: Zahl
            // usw.
            setState(idBlau, obj.color.b, true); // DP-Typ: Zahl
            setState(idHell, obj.brightness, true); // DP-Typ: Zahl
            setState(idFeuchte, parseFloat(obj.humidity), true);  // DP-Typ: Zahl
            setState(idBeweg, obj.motion, true);  // DP-Typ: Zeichenkette
            setState(idTemp, parseFloat(obj.temperature), true); // DP-Typ: Zahl
            setState(idHeiz, parseFloat(obj.heatindex), true);  // DP-Typ: Zahl
          }
          
          setDps();  // Skriptstart
          on('mqtt.0.bruh.sensornode1', setDps);  // Triggert bei jeder Inhaltsänderung des JSON-Strings
          
          

          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 Reply Last reply
          0
          • W Offline
            W Offline
            wolf
            wrote on last edited by
            #5

            Hallo Paul!

            Vielen, vielen Dank!!!!

            Mein stundenlanges Brüten ohne verwertbares Resultat hat dein Script nun beendet. Ich habe wie von dir gezeigt, neue Datenpunkte angelegt und das Script folgend angepasst:

            function setDps() {

            var obj = JSON.parse(getState('mqtt.0.bruh.sensornode1').val);

            if(obj.state == "OFF") setState('javascript.0.Bruh.Ein', false, true); // DP-Typ: Logikwert

            else setState('javascript.0.Bruh.Ein', true, true);

            setState('javascript.0.Bruh.Farbe.Rot', obj.color.r, true); // DP-Typ: Zahl

            setState('javascript.0.Bruh.Farbe.Gruen', obj.color.g, true); // DP-Typ: Zahl

            // usw.

            setState("javascript.0.Bruh.Farbe.Blau"/Bruh.Farbe.Blau/, obj.color.b, true); // DP-Typ: Zahl

            setState("javascript.0.Bruh.Sensor.Helligkeit"/Bruh.Sensor.Helligkeit/, obj.brightness, true); // DP-Typ: Zahl

            setState("javascript.0.Bruh.Sensor.Feuchte"/Bruh.Sensor.Feuchte/, parseFloat(obj.humidity), true); // DP-Typ: Zahl

            setState("javascript.0.Bruh.Sensor.Bewegung"/Bruh.Sensor.Bewegung/, obj.motion, true); // DP-Typ: Zeichenkette

            setState("javascript.0.Bruh.Sensor.Temperatur"/Bruh.Sensor.Temperatur/, parseFloat(obj.temperature), true); // DP-Typ: Zahl

            setState("javascript.0.Bruh.Sensor.Waermeindex"/Bruh.Sensor.Waermeindex/, parseFloat(obj.heatindex), true); // DP-Typ: Zahl

            }

            setDps(); // Skriptstart

            on('mqtt.0.bruh.sensornode1', setDps); // Triggert bei jeder Inhaltsänderung des JSON-Strings

            Ich bekomme zwar am Wärmeindex eine "0" geliefert, aber diesen Wert benötige ich eigentlich nicht.

            Die relevanten Werte von Bewegung, Feuchtigkeit und Temperatur werden geliefert. Da ich auf den Lichtsensor noch warte, kann da noch kein vernünftiger Wert drin stehen.

            Drei Fragen hätte ich noch:

            1. Ist es möglich, dass der Temperaturwert in Celsius angezeigt wird?

            2. Wie kann ich der LED einen anderen Wert übermitteln, so dass sie beispielweise rot leuchtet, wenn der Bewegungssensor auf "motion detected" schaltet?

            3. Mein log ist voll mit:

            javascript.0 2018-01-28 15:35:19.441 warn at Object.setDps (script.js.common.Sensoren_auslesen:3:26)

            javascript.0 2018-01-28 15:35:19.439 warn State "javascript.0.Bruh.Ein" not found

            javascript.0 2018-01-28 15:34:56.985 warn at Object.setDps (script.js.common.Sensoren_auslesen:3:26)

            javascript.0 2018-01-28 15:34:56.984 warn State "javascript.0.Bruh.Ein" not found

            Hat das damit zu tun, dass der Lichtsensor noch nicht angeschlossen ist?

            Jedenfalls nochmals vielen Dank für deine Hilfe!

            LG

            wolf
            5573_datenpunkte.jpg

            1 Reply Last reply
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

              @wolf:

              1. Ist es möglich, dass der Temperaturwert in Celsius angezeigt wird? `
              Wie wird der wert jetzt angezeigt ? Wenn in Fahrenheit, muss man umrechnen.

              setState("javascript.0.Bruh.Sensor.Temperatur"/*Bruh.Sensor.Temperatur*/, (parseFloat(obj.temperature) - 32) / 1.8, true);
              
              

              @wolf:

              2. Wie kann ich der LED einen anderen Wert übermitteln, so dass sie beispielweise rot leuchtet, wenn der Bewegungssensor auf "motion detected" schaltet? `
              Welche LED ? Bisher werden nur Werte eingelesen.
              @wolf:

              javascript.0 2018-01-28 15:35:19.439 warn State "javascript.0.Bruh.Ein" not found `
              Der Datenpunkt "javascript.0.Bruh.Ein" vom Typ Logikwert, der anzeigt, ob das Gerät eingeschaltet ist, fehlt noch.

              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 Reply Last reply
              0
              • W Offline
                W Offline
                wolf
                wrote on last edited by
                #7

                Danke für das learning by doing Tutorial von dir… :)

                @paul53:

                @wolf:

                1. Ist es möglich, dass der Temperaturwert in Celsius angezeigt wird?

                Wie wird der wert jetzt angezeigt ? Wenn in Fahrenheit, muss man umrechnen.

                setState("javascript.0.Bruh.Sensor.Temperatur"/*Bruh.Sensor.Temperatur*/, (parseFloat(obj.temperature) - 32) / 1.8, true);
                
                ```` `  
                

                Ja, wurde in Fahrenheit angezeigt. Hab deinen Code eingefügt und er zeigt die Grade in Celsius an… Wieder Danke!

                @wolf:

                2. Wie kann ich der LED einen anderen Wert übermitteln, so dass sie beispielweise rot leuchtet, wenn der Bewegungssensor auf "motion detected" schaltet? `
                Welche LED ? Bisher werden nur Werte eingelesen.

                Tja, die LED, für die die RGB-Werte übernommen werden (hab ich zumindest angenommen). Ich weiß schon, dass du eine profundere Antwort erwartet hast, die ich dir aber mangels Wissen leider nicht liefern kann.

                @wolf:

                javascript.0 2018-01-28 15:35:19.439 warn State "javascript.0.Bruh.Ein" not found Der Datenpunkt "javascript.0.Bruh.Ein" vom Typ Logikwert, der anzeigt, ob das Gerät eingeschaltet ist, fehlt noch.

                Hab jetzt den Datenpunkt "javascript.0.Bruh.Ein" angelegt (ist mir jetzt erst im Script aufgefallen). Jetzt kommt kein "warn" mehr im Log. Er hat aber immer den Wert "false". Wozu ist der eigentlich?

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #8

                  @wolf:

                  Wozu ist der eigentlich? `
                  Da er die erste Objekteigenschaft ("state":"OFF") abbildet, vermute ich Gerät Aus/Ein ?
                  @wolf:

                  Wie kann ich der LED einen anderen Wert übermitteln, so dass sie beispielweise rot leuchtet, `
                  Du kannst mal versuchen, im Reiter "Objekte" direkt im Datenpunkt 'mqtt.0.bruh.sensornode1' den JSON-String zu verändern:

                  Hinter "g":255 –> 0 und hinter "b":255 --> 0. Tut sich dann was ?

                  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 Reply Last reply
                  0
                  • W Offline
                    W Offline
                    wolf
                    wrote on last edited by
                    #9

                    @paul53:

                    @wolf:

                    Wozu ist der eigentlich? `
                    Da er die erste Objekteigenschaft ("state":"OFF") abbildet, vermute ich Gerät Aus/Ein ?
                    @wolf:

                    Wie kann ich der LED einen anderen Wert übermitteln, so dass sie beispielweise rot leuchtet, `
                    Du kannst mal versuchen, im Reiter "Objekte" direkt im Datenpunkt 'mqtt.0.bruh.sensornode1' den JSON-String zu verändern:

                    Hinter "g":255 –> 0 und hinter "b":255 --> 0. Tut sich dann was ? `

                    Nein, die LED leuchtet unverändert blau, egal was ich eintrage…

                    Ach ja, etwas ist mir aufgefallen... Die Temperatur wird mir mit vielen Kommastellen angezeigt: 24.89999999999999. Gibt's eine Möglichkeit, dass nur 2 Kommastellen gezeigt werden... Nur ganze Zahlenwerte wären auch ok...

                    1 Reply Last reply
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #10

                      @wolf:

                      Gibt's eine Möglichkeit, dass nur 2 Kommastellen gezeigt werden… Nur ganze Zahlenwerte wären auch ok... `
                      Ja, natürlich. Aber langsam wird der Ausdruck unübersichtlich.

                      setState("javascript.0.Bruh.Sensor.Temperatur", Math.round((parseFloat(obj.temperature) - 32) / 0.18) / 10, true);
                      

                      rundet auf eine Nachkommastelle.

                      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 Reply Last reply
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        wrote on last edited by
                        #11

                        @wolf:

                        Nein, die LED leuchtet unverändert blau, egal was ich eintrage… `
                        Das hatte ich vermutet: Wenn die Kommunikation über JSON erfolgt, dann meist nur in eine Richtung.

                        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 Reply Last reply
                        0
                        • W Offline
                          W Offline
                          wolf
                          wrote on last edited by
                          #12

                          @paul53:

                          @wolf:

                          Nein, die LED leuchtet unverändert blau, egal was ich eintrage… Das hatte ich vermutet: Wenn die Kommunikation über JSON erfolgt, dann meist nur in eine Richtung.

                          Nicht wirklich tragisch, wäre nur ein netter Mehrwert gewesen.

                          Wäre dieses Script eigentlich auch unter Blockly zu realisieren gewesen? Damit konnte ich schon ein paar vernünftige Ergebnisse erzielen, wenn es um die Abfrage von Schaltzuständen gegangen ist. Hat für einen Anfänger wie mich den Vorteil, dass man die ganze Befehlssyntax nicht kennen muss. Gibt es eigentlich ein Programm, das den Code des Scriptes in Blockly Struktur darstellt? Würde mir das Lernen erleichtern.

                          Jedenfalls nochmals Danke für deine Hilfe! Du hast mir wirklich sehr geholfen.

                          LG

                          Wolf

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          389

                          Online

                          32.5k

                          Users

                          81.7k

                          Topics

                          1.3m

                          Posts
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Home
                          • Recent
                          • Tags
                          • Unread 0
                          • Categories
                          • Unreplied
                          • Popular
                          • GitHub
                          • Docu
                          • Hilfe