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. Mqtt: String in Datenpunkte umwandeln?

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

Mqtt: String in Datenpunkte umwandeln?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 2 Kommentatoren 4.7k 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.
  • W Offline
    W Offline
    wolf
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • W Offline
        W Offline
        wolf
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • W Offline
            W Offline
            wolf
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • W Offline
                W Offline
                wolf
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • W Offline
                    W Offline
                    wolf
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • W Offline
                          W Offline
                          wolf
                          schrieb am zuletzt editiert von
                          #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 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

                          488

                          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