Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Konvertierung von Zeichenkette nach Zahl?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Konvertierung von Zeichenkette nach Zahl?

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

      @baumsass:

      und wie bekomme ich werd in neu erstellte Objekte? `

      Verstehe ich nicht ganz. Du schreibst "Ich bekomme eine Variable per MQTT."

      meinst du jetzt einen Datenpunkt, oder eine Variable. Falls du einen Datenpunkt hast dann kannst du es so machen

      var inDP = "mqtt.0.........."; // Hier den Pfad zu deinem MQTT Datenpunkt angeben!
      var inhalt = getState(inDP).val;
      inhalt = JSON.parse(inhalt);
      
      var a = inhalt.Time;
      var b = inhalt.SML.Total_in;
      var c = inhalt.SML.Total_out;
      var d = inhalt.SML.Power_curr;
      
      log("Time = " + a);
      log("Total In = " + b);
      log("Total Out = " + c);
      log("Power = " + d);
      
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        @baumsass:

        wie bekomme ich werd in neu erstellte Objekte? `
        Mit https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#setstate;

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

          und wo werden die Werte dann ausgegeben?

          Die Werte sind in Objekten. Kommen von einem esp8266 (sonoff firmware).

          var inDP = "mqtt.0.tele.sonoff.SENSOR"; // Hier den Pfad zu deinem MQTT Datenpunkt angeben!
          var inhalt = getState(inDP).val;
          inhalt = JSON.parse(inhalt);
          
          var a = inhalt.Time;
          var b = inhalt.SML.Total_in;
          var c = inhalt.SML.Total_out;
          var d = inhalt.SML.Power_curr;
          
          log("Time = " + a);
          log("Total In = " + b);
          log("Total Out = " + c);
          log("Power = " + d);
          

          ich hätte zb gerne: var b in ein neu erstellte Objekt-Id zb. "Zählerstand"(als Zahl)

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

            @baumsass:

            und wo werden die Werte dann ausgegeben?

            Die Werte sind in Objekten. Kommen von einem esp8266 (sonoff firmware).

            var inDP = "mqtt.0.tele.sonoff.SENSOR"; // Hier den Pfad zu deinem MQTT Datenpunkt angeben!
            var inhalt = getState(inDP).val;
            inhalt = JSON.parse(inhalt);
            
            var a = inhalt.Time;
            var b = inhalt.SML.Total_in;
            var c = inhalt.SML.Total_out;
            var d = inhalt.SML.Power_curr;
            
            log("Time = " + a);
            log("Total In = " + b);
            log("Total Out = " + c);
            log("Power = " + d);
            

            ich hätte zb gerne: var b in ein neu erstellte Objekt-Id zb. "Zählerstand"(als Zahl) `

            var ZaehlerstandDP = "javascript.0.my.zaehlerstand";  // Dein ZielDatenpunkt
            setState(ZaehlerstandDP, b, true);
            

            Vorher musst du vielleicht den Datenpunkt erstellen:

            createState("javascript.0.my.zaehlerstand", 0, {type: 'number', read: 'true', write: 'true'});
            
            1 Reply Last reply Reply Quote 0
            • X
              xbow42 last edited by

              lege den Datenpunkt manuell an unter Objekte

              mqtt.0.tele.sonoff.zaelerstand als Typ Zahl

              s. Zitat: Mit setState(id, wert, true); und deinem Wunsch für b

              Mit setState('mqtt.0.tele.sonoff.zaelerstand', inhalt.SML.Total_in , true);

              edit: ok warst schneller: 😄

              Ich würde den DP trotzdem lieber beim Gerät abspeichern, als Daten zu einem Gerät an zu vielen Stellen zu haben.

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

                bekomme es nicht hin.Die Objekt-Id ist angelegt . 15166_unbenannt.jpg

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

                  Du hast ZaehlerstandDP falsch definiert erstmal " und dann '

                  einfach "javascript.0.Zählerstand_Haus" ohne die ' und Kommentare!

                  oder noch einfacher:

                  setState("javascript.0.Zählerstand_Haus", b, true);
                  

                  alternativ;

                  setState("javascript.0.Zählerstand_Haus", parseFloat(b), true);
                  

                  Dann wird die Variable b nach Float umgewandelt, bevor sie geschrieben wird.

                  1 Reply Last reply Reply Quote 0
                  • D
                    dirkhe Developer last edited by

                    Du solltest mal genau hinsehen, was du als id eingetragen hast..

                    "'Xxxx kann nicht funktionieren. Da sind zu viele Anführungszeichen, sowohl oben als such unten.

                    Du kannst auch das sonoff Objekt erweitern mit extendObject

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

                      funktioniert.

                      Wird das denn auch aktualisiert wenn sich das "Hauptobjekt" per mqtt ändert?

                      nur passiert es manchmal das eine komische Zahl gelesen wird.
                      15166_unbenannt.jpg

                      obwohl es im Objekt richtig steht

                      15166_unbenannt1.jpg

                      1 Reply Last reply Reply Quote 0
                      • X
                        xbow42 last edited by

                        schön dass es jetzt klappt!

                        Um Blocky und js besser zu lernen habe ich mal versucht den Wert "Total_in" einzeln heraus zu kitzeln.

                        Kann mir wer sagen warum die slice()-Funktion nicht funktioniert von dem Blocklyscript?

                        ! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
                        ! <block type="variables_set" id="J(;S,}.VY694q:bm7{RX" x="-87" y="13"><field name="VAR">MSG</field>
                        ! <value name="VALUE"><block type="text" id="}QR6t|5yHFKulBE3MDg"><field name="TEXT">{"Time":"2019-01-24T19:33:29","SML":{"Total_in":6001.0760,"Total_out":0.1580,"Power_curr":0}}</field></block></value>
                        ! <next><block type="variables_set" id="vu_7]U4wBf}NDqfu9k.;"><field name="VAR">Total_In_Anfang</field>
                        ! <value name="VALUE"><block type="math_arithmetic" id="lZ*9j-Z7ry#|Dv@~qA@"><field name="OP">ADD</field> ! <value name="A"><shadow type="math_number" id="gt9WUG(t6ie[i0tKU2#{"><field name="NUM">1</field></shadow> ! <block type="text_indexOf" id="Fzr9Z_.VcNYSKogLRSW"><field name="END">FIRST</field>
                        ! <value name="VALUE"><block type="variables_get" id="Y0[TCzK(_u,bbEwq6zkY"><field name="VAR">MSG</field></block></value>
                        ! <value name="FIND"><shadow type="text" id="USy|6K2qk[Fo[GSXW;Ni"><field name="TEXT">Total_in</field></shadow></value></block></value>
                        ! <value name="B"><shadow type="math_number" id="6dYrhU.Q+JCq,BiN4+"><field name="NUM">10</field></shadow></value></block></value>
                        ! <next><block type="debug" id=".jvcF-W){%M[ioY}BX2s"><field name="Severity">log</field>
                        ! <value name="TEXT"><shadow type="text" id="tl@EmOKRb!@{/qFiYavJ"><field name="TEXT">test</field></shadow>
                        ! <block type="text_join" id="kDzGc/=@fs.;[1+x
                        {W."><mutation items="2"></mutation>
                        ! <value name="ADD0"><block type="text" id="0amyFZF@:-}un:C/}Ap9"><field name="TEXT">Total_in Anfang:</field></block></value>
                        ! <value name="ADD1"><block type="variables_get" id=")#lY-5faPghWkOLQJOr}"><field name="VAR">Total_In_Anfang</field></block></value></block></value>
                        ! <next><block type="variables_set" id="bH=X:.FnyZcLxbc4Gxu"><field name="VAR">MSG_temp</field>
                        ! <value name="VALUE"><block type="text_getSubstring" id="b-}pQm]p1~{.+
                        -n^z3w"><mutation at1="true" at2="true"></mutation>
                        ! <field name="WHERE1">FROM_START</field>
                        ! <field name="WHERE2">FROM_START</field>
                        ! <value name="STRING"><block type="variables_get" id="I6Dj7iz4mGByHiGof]"><field name="VAR">MSG</field></block></value>
                        ! <value name="AT1"><block type="variables_get" id="BTh9Y{g4GxjmywWlS?S_"><field name="VAR">Total_In_Anfang</field></block></value>
                        ! <value name="AT2"><block type="text_length" id="3yNvV@(z!V2eu[PGJkV"><value name="VALUE"><shadow type="text" id="jEc3oYD0^{g~aWOoiyd"><field name="TEXT">abc</field></shadow> ! <block type="variables_get" id="ERMT^T1e-_Z2qF~^asqR"><field name="VAR">MSG</field></block></value></block></value></block></value> ! <next><block type="debug" id="n^a!SA,R;N2mtW%Y!FGx"><field name="Severity">log</field> ! <value name="TEXT"><shadow type="text" id="tl@EmOKRb!@{/qFiYavJ"><field name="TEXT">test</field></shadow> ! <block type="text_join" id="*^t{*5(L{8P0_0OLX=[J"><mutation items="2"></mutation> ! <value name="ADD0"><block type="text" id="2YcYNZt}@JVua}qe:[H!"><field name="TEXT">msg_temp:</field></block></value> ! <value name="ADD1"><block type="variables_get" id="l]^}U=9nv}H2=4j0ZYE"><field name="VAR">MSG_temp</field></block></value></block></value>
                        ! <next><block type="variables_set" id="3T;;^[khXtinCJMhQ7A"><field name="VAR">Total_In_Ende</field>
                        ! <value name="VALUE"><block type="math_arithmetic" id="Y)|^oQ}myYr9z2{Y=Ac"><field name="OP">MINUS</field> ! <value name="A"><shadow type="math_number" id="gt9WUG(t6ie[i0tKU2#{"><field name="NUM">1</field></shadow> ! <block type="text_indexOf" id="[}N#SvlVd/Wn%4UPRAk"><field name="END">FIRST</field>
                        ! <value name="VALUE"><block type="variables_get" id="VL9+#!QZjT6J^R+ieH+?"><field name="VAR">MSG_temp</field></block></value>
                        ! <value name="FIND"><shadow type="text" id="y0~a)00,%78~dWt
                        |WF+"><field name="TEXT">,</field></shadow></value></block></value>
                        ! <value name="B"><shadow type="math_number" id="Y4=}S=KwfSy)mx:f*O^c"><field name="NUM">1</field></shadow></value></block></value>
                        ! <next><block type="debug" id="uetZ4+!2o~l/MYdRS]I["><field name="Severity">log</field>
                        ! <value name="TEXT"><shadow type="text" id="tl@EmOKRb!@{/qFiYavJ"><field name="TEXT">test</field></shadow>
                        ! <block type="text_join" id="|(w.-P{}EP,Xg8u+^pFq"><mutation items="3"></mutation>
                        ! <value name="ADD0"><block type="text" id="O#T[mg/@6]x24QAS;3"><field name="TEXT">total_in_ende:</field></block></value>
                        ! <value name="ADD1"><block type="variables_get" id="g1Xk|JjJx0?Ed2oYvS?w"><field name="VAR">Total_In_Ende</field></block></value>
                        ! <value name="ADD2"><block type="variables_get" id="D13lawug2;^NsIx?u{1)"><field name="VAR">MSG</field></block></value></block></value>
                        ! <next><block type="variables_set" id="?1PY=A6,Fyz{*a(Vjs}^"><field name="VAR">Total_In</field>
                        ! <value name="VALUE"><block type="convert_tonumber" id="o#N2EfkR^+A(|sMZ60Bv"><value name="VALUE"><block type="text_getSubstring" id="xnDhP9V_E^BDu|!q{0M~"><mutation at1="true" at2="true"></mutation>
                        ! <field name="WHERE1">FROM_START</field>
                        ! <field name="WHERE2">FROM_START</field>
                        ! <value name="STRING"><block type="variables_get" id="+E|jMCP+AJt}Nw9(c~A
                        "><field name="VAR">MSG</field></block></value>
                        ! <value name="AT1"><block type="variables_get" id="Nk,YVt?R5vJC2%!ZSdZ"><field name="VAR">Total_In_Anfang</field></block></value> ! <value name="AT2"><block type="variables_get" id="#lv!hlG8nsJdBa;SUb"><field name="VAR">Total_In_Ende</field></block></value></block></value></block></value> ! <next><block type="debug" id=";6og#CF0)(]Rxuv1dfW"><field name="Severity">log</field>
                        ! <value name="TEXT"><shadow type="text" id="tl@EmOKRb!@{/qFiYavJ"><field name="TEXT">test</field></shadow>
                        ! <block type="text_join" id="KR=dUtSffy=D:}Gq8]dr"><mutation items="2"></mutation>
                        ! <value name="ADD0"><block type="text" id="1kBDH/HP.tjPp4A._OC2"><field name="TEXT">Total_in ist:</field></block></value>
                        ! <value name="ADD1"><block type="variables_get" id="v6Qt]msR*tM.@f1~Ozk4"><field name="VAR">Total_In</field></block></value></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></xml>

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

                          nein, wird nicht aktualisiert.

                          dafür musste du folgendes eintragen:

                          on({id: "mqtt.0.tele.sonoff.SENSOR", change: "ne"}, function (obj) {
                          	inhalt = JSON.parse(getState(id).val);
                          	setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML.Total_in), true);
                          });
                          

                          jetzt wird, bei der Änderung des "mqtt.0.tele.sonoff.SENSOR" der Datenpunkt ausgelesen, verarbeitet und der Total_in Wert wird in "javascript.0.Zählerstand_Haus" geschrieben.

                          Ist das das, was du willst?

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

                            teste ich.

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

                              ja nur mit diesen einen Satz macht IObroker das was ich möchte. Mehr steht jetzt nicht mehr im Script.

                              Leider mit falschen Zahlen siehe oben.

                              Die Aktualisierung erfolgt sofort.

                              15166_unbenannt.jpg

                              in der Ojekt ID der per MQTT kommt steht das in der Beschreibung:

                              Zeichenkette

                              {

                              "sql.0": {

                              "enabled": true,

                              "changesOnly": true,

                              "debounce": 0,

                              "maxLength": 10,

                              "retention": "63072000",

                              "changesRelogInterval": 0,

                              "changesMinDelta": 0,

                              "storageType": "",

                              "aliasId": "StromzählerHaus"

                              }

                              }

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

                                hast du noch eine Quelle, die da rein schreibt. wie man sieht sind die "fremden" Einträge mit Ack False, während unsere true sind.

                                Die Quelle ist javascript, Also denke ich, dass du noch ein Skript am Laufen hast, das dir dort die Werte einfügt. Prüfe das mal.

                                bis morgen.

                                ps. kann es sein, dass in dem mqtt-Objekt mehrere Einträge mit "Total_in" gibt. Dann musst du [0] einfügen.

                                setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML.Total_in[0]), true);
                                

                                oder mehrere SML Blöcke, dann;

                                setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML[0].Total_in), true);
                                

                                Schick mir den gesamten Inhalt des MQTT-Datenpunktes.

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

                                  Du hattest recht da hat was anderes reingeschrieben war aber mein Fehler beim kopieren….

                                  Das Skript sieht jetzt so aus

                                  var inDP = "mqtt.0.tele.sonoff.SENSOR"; // Hier den Pfad zu deinem MQTT Datenpunkt angeben!

                                  var inhalt = getState(inDP).val;

                                  inhalt = JSON.parse(inhalt);

                                  var a = inhalt.Time;

                                  var b = inhalt.SML.Total_in;

                                  var c = inhalt.SML.Total_out;

                                  var d = inhalt.SML.Power_curr;

                                  log("Time = " + a);

                                  log("Total In = " + b);

                                  log("Total Out = " + c);

                                  log("Power = " + d);

                                  var ZaehlerstandDP = "javascript.0.Zählerstand_Haus"; // Dein ZielDatenpunkt

                                  setState(ZaehlerstandDP, b, true);

                                  var ZaehlerstandDP = "javascript.0.Zählerstand_PV"; // Dein ZielDatenpunkt

                                  setState(ZaehlerstandDP, c, true);

                                  on({id: "mqtt.0.tele.sonoff.SENSOR", change: "ne"}, function (obj) {

                                  inhalt = JSON.parse(getState(id).val);

                                  setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML.Total_in), true);

                                  });

                                  leider wird aes immer nur einmal abgearbeitet… nur wenn ich das script neu starte.

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

                                    @baumsass:

                                    Du hattest recht da hat was anderes reingeschrieben war aber mein Fehler beim kopieren….

                                    Das Skript sieht jetzt so aus

                                    var inDP = "mqtt.0.tele.sonoff.SENSOR"; // Hier den Pfad zu deinem MQTT Datenpunkt angeben!

                                    var inhalt = getState(inDP).val;

                                    inhalt = JSON.parse(inhalt);

                                    var a = inhalt.Time;

                                    var b = inhalt.SML.Total_in;

                                    var c = inhalt.SML.Total_out;

                                    var d = inhalt.SML.Power_curr;

                                    log("Time = " + a);

                                    log("Total In = " + b);

                                    log("Total Out = " + c);

                                    log("Power = " + d);

                                    var ZaehlerstandDP = "javascript.0.Zählerstand_Haus"; // Dein ZielDatenpunkt

                                    setState(ZaehlerstandDP, b, true);

                                    var ZaehlerstandDP = "javascript.0.Zählerstand_PV"; // Dein ZielDatenpunkt

                                    setState(ZaehlerstandDP, c, true);

                                    on({id: "mqtt.0.tele.sonoff.SENSOR", change: "ne"}, function (obj) {

                                    inhalt = JSON.parse(getState(id).val);

                                    setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML.Total_in), true);

                                    }); `

                                    leider wird aes immer nur einmal abgearbeitet… nur wenn ich das script neu starte.

                                    mach folgendes:

                                    on({id: "mqtt.0.tele.sonoff.SENSOR", change: "ne"}, function (obj) {
                                       inhalt = JSON.parse(getState(id).val);
                                       setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML.Total_in), true);
                                       setState("javascript.0.Zählerstand_PV", parseFloat(inhalt.SML.Total_Out), true);
                                    });
                                    

                                    mehr brauchst du nicht. Mit deinem Skript hast du die beide Werte mehrmals in den Datenpunkt geschrieben. Wenn das nicht hilft, dann brauche ich einen kompletten Eintrag aus mqtt.0.tele.sonoff.SENSOR um die Datenstruktur zu sehen.

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

                                      leider funktioniert das nicht.

                                      habe jetzt nur dein Script da drin.

                                      15166_screenshot_20190125-124342_chrome.jpg

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

                                        @baumsass:

                                        leider funktioniert das nicht.

                                        habe jetzt nur dein Script da drin. `

                                        Ich kann dir nicht helfen, wenn du mir nicht den Inhalt deines Inputsobjekts zeigst.

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

                                          reicht dir das :?: Sorry screenshot vom handy… bin noch auf Arbeit
                                          15166_screenshot_20190125-131300_chrome.jpg

                                          {"Time":"2019-01-25T13:12:31","SML":{"Total_in":6021.8000,"Total_out":0.1580,"Power_curr":0}}

                                          War der Letyte Eintrag

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

                                            on({id: "mqtt.0.tele.sonoff.SENSOR", change: "ne"}, function (obj) {
                                               inhalt = JSON.parse(getState("mqtt.0.tele.sonoff.SENSOR").val);				// Diese Zeile wurde geändert!
                                               setState("javascript.0.Zählerstand_Haus", parseFloat(inhalt.SML.Total_in), true);
                                               setState("javascript.0.Zählerstand_PV", parseFloat(inhalt.SML.Total_Out), true);
                                            });
                                            

                                            Versuchs mal damit!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            937
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            46
                                            4351
                                            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