Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JSON in Blockly parsen

    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

    JSON in Blockly parsen

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

      ja danke…! Aber leider auch änderung nichts was ich noch gefunden habe ein Error

      mqtt.0 2018-05-13 12:08:13.330 error Cannot parse {"Time":"2018-05-13T11:08:10","Switch1":"ON","Distance":}

      momentan der COde

       var objekt = {"Time":"2018-05-13T09:43:21","Switch1":"ON","Distance":8.76};
      
       log(objekt.Time); // Ergibt 0
       log(objekt.Distance); // Ergibt 1522141883 
      
      1 Reply Last reply Reply Quote 0
      • BuZZy
        BuZZy last edited by

        Wieso schmeißt mqtt den fehler? Wie sieht dein komplettes Script aus?

        Bei mir funktioniert es ohne Probleme..

        Gruß

        1 Reply Last reply Reply Quote 0
        • L
          ludino last edited by

          Da ich es nicht verstehe, das ist mein Komplettes Script "duck und Weck"

          1 Reply Last reply Reply Quote 0
          • J
            jnmcfly last edited by

            Hallo, hatte grade auch diese Anforderung. Habe es wie folgt gelöst.

            on({id: "mqtt.0.tele.SONOFF_PRUSA.SENSOR"/*tele/SONOFF_PRUSA/SENSOR*/, change: "ne"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              json = (function () { try {return JSON.parse(getState("mqtt.0.tele.SONOFF_PRUSA.SENSOR").val);} catch(e) {return {};}})();
              setState("mymeta.0.3DStromkosten"/*3DStromkosten*/, Math.round((getAttr(json, 'ENERGY.Total') * getState("mymeta.0.kwhPrice").val)*100)/100, true);
            });
            
            1 Reply Last reply Reply Quote 0
            • M
              mikesch last edited by

              Hallo jnmcfly,
              kannst Du mal das Blockly dazu posten bzw. den XML export. Leider bekomme ich das so nur zu 70% nachgebaut.
              Danke.

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

                @mikesch

                <xml xmlns="http://www.w3.org/1999/xhtml">
                 <block type="logic_boolean" id="VJ@nv6*~Q;W,@*6MXJ0b" x="-762" y="238">
                   <field name="BOOL">TRUE</field>
                 </block>
                 <block type="comment" id="hd#*aty~iYsu64[%_,8T" x="187" y="288">
                   <field name="COMMENT">(c) https://forum.iobroker.net/post/361542</field>
                   <next>
                     <block type="on_ext" id="D1uBT!v9/V)4h!!Y1)RL">
                       <mutation items="1"></mutation>
                       <field name="CONDITION">ne</field>
                       <field name="ACK_CONDITION"></field>
                       <value name="OID0">
                         <shadow type="field_oid" id=":EJ[kBY+g/#:42s_MG6!">
                           <field name="oid">default</field>
                         </shadow>
                         <block type="text" id="$f}7_^4x(Dvk0:$g=Z!x">
                           <field name="TEXT">mqtt.0.tele.SONOFF_PRUSA.SENSOR</field>
                         </block>
                       </value>
                       <statement name="STATEMENT">
                         <block type="procedures_callcustomnoreturn" id=".SUNAb;yu94^zP/{E~8}">
                           <mutation name="calc3dprintercost"></mutation>
                         </block>
                       </statement>
                     </block>
                   </next>
                 </block>
                 <block type="procedures_defcustomnoreturn" id="enK7^[CkGvQ3`.H}Bsv!" x="188" y="438">
                   <mutation statements="false"></mutation>
                   <field name="NAME">calc3dprintercost</field>
                   <field name="SCRIPT">ICBqc29uID0gKGZ1bmN0aW9uICgpIHsgdHJ5IHtyZXR1cm4gSlNPTi5wYXJzZShnZXRTdGF0ZSgibXF0dC4wLnRlbGUuU09OT0ZGX1BSVVNBLlNFTlNPUiIpLnZhbCk7fSBjYXRjaChlKSB7cmV0dXJuIHt9O319KSgpOw0KICBzZXRTdGF0ZSgibXltZXRhLjAuM0RTdHJvbWtvc3RlbiIvKjNEU3Ryb21rb3N0ZW4qLywgTWF0aC5yb3VuZCgoZ2V0QXR0cihqc29uLCAnRU5FUkdZLlRvdGFsJykgKiBnZXRTdGF0ZSgibXltZXRhLjAua3doUHJpY2UiKS52YWwpKjEwMCkvMTAwLCB0cnVlKTs=</field>
                   <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                 </block>
                </xml>
                


                Pfade im Trigger und in der js-Funktion zu den DP müssen noch angepasst werden. 😉

                1 Reply Last reply Reply Quote 0
                • M
                  mikesch last edited by

                  @xbow42 -Danke! Läuft!

                  Newpicsel 1 Reply Last reply Reply Quote 0
                  • Newpicsel
                    Newpicsel @mikesch last edited by Newpicsel

                    Moin und frohes neues 😊

                    Ich stehe aktuell vor einem schier unlösbaren Problem, ich muss dazu sagen, ich hab keine Ahnung von dem was ich tue also seid mir nicht böse 😇

                    Ich versuche ein JSON Objekt zu parsen, soweit eigentlich kein Problem, zumindest solange ich nicht auf „body“ oder darin enthaltenes zugreifen will, auf zb. „Status“ kann ich zugreifen und den Wert auslesen.

                    Hier ein Beispiel JSON:

                    
                    {
                    "body": {
                    "homes": [
                    {
                    "id": "5954e7f249c75f97428b7b23",
                    "name": "Your House",
                    "altitude": 89,
                    "coordinates": [
                    "-0.12726409999999996, 51.51608619999999"
                    ],
                    "country": "FR",
                    "timezone": "Europe/paris",
                    "rooms": [
                    {
                    "id": 3466299980,
                    "name": "myRoom",
                    "type": "Kitchen",
                    "module_ids": [
                    "09:00:00:00:0e:e0"
                    ]
                    }
                    ],
                    "modules": [
                    {
                    "id": "01:00:00:00:0e:e0",
                    "type": "NAPlug",
                    "name": "thermostat relay",
                    "setup_date": 1498736626,
                    "module_bridged": [
                    "02:00:00:00:0e:e0, 03:00:00:00:0e:e0"
                    ]
                    },
                    {
                    "id": "01:00:00:00:0e:e0",
                    "type": "NATherm1",
                    "name": "thermostat relay",
                    "setup_date": 1498736626,
                    "room_id": 2016185224,
                    "bridge": "01:00:00:00:0e:e0"
                    },
                    {
                    "id": "01:00:00:00:0e:e0",
                    "type": "NRV",
                    "name": "thermostat relay",
                    "setup_date": 1498736626,
                    "room_id": 2016185224,
                    "bridge": "01:00:00:00:0e:e0"
                    }
                    ],
                    "therm_set_point_default_duration": 180,
                    "schedules": [
                    {
                    "timetable": [
                    {
                    "zone_id": 1,
                    "m_offset": 360
                    }
                    ],
                    "zones": [
                    {
                    "name": "Confort",
                    "id": 1,
                    "type": 1,
                    "rooms": [
                    {
                    "id": 201618522,
                    "therm_setpoint_temperature": 15
                    }
                    ]
                    }
                    ],
                    "name": "mySchedule"
                    }
                    ],
                    "therm_mode": "schedule"
                    }
                    ],
                    "user": {
                    "email": "user@example.com",
                    "langage": "fr-FR",
                    "locale": "fr-FR",
                    "feel_like_algorithm": 0,
                    "unit_pressure": 0,
                    "unit_system": 0,
                    "unit_wind": 0,
                    "id": "5c81004fd6e33f0b008b4df2"
                    }
                    },
                    "status": "ok",
                    "time_exec": "0.060059070587158",
                    "time_server": "1553777827"
                    } 
                    

                    Ich möchte hier auf die Liste „body.homes.modules.module_bridged“ zugreifen, am besten die Angaben zählen und dann Objekte für jede dieser ID‘s anlegen.

                    Hat den Hintergrund, dass ich versuche ein blocky zu bauen, welches wie ein Adapter ready to use für jedermann einsetzbar ist, bin auch soweit das Objekte automatisch angelegt werden wenn nicht vorhanden und hier nur Zugangsdaten in Objekte eingetragen werden müssen und automatisch oauth2 Tokens angefordert und aktualisiert werden, womit dann bereits zwei JSON Objekte aus der API geholt und angelegt werden.
                    Zum einen wird schon seit Jahren nach einem Adapter von x Personen gebeten und zum anderen lerne ich so eine Menge dazu! 😊

                    Ich hoffe mir kann hier jemand helfen, danke im Voraus

                    Blockly-Parsen.png

                    Edit: mir ist klar, dass dieses JSON mit Arrays verschachtelt ist, jedoch liegt genau hier mein Problem, wie muss ich die richtig parsen?
                    Mir fehlt einfach die richtige Formulierung des Pfades, habe es auch mit [] eckigen Klammer oder Klammer und einer null [0] für das erste Array probiert, komme hier aber leider überhaupt nicht weiter 😞
                    Auch im netzt und hier im Forum konnte ich bisher nichts finden, was mir weiterhelfen würde.

                    machs-smart.de M 2 Replies Last reply Reply Quote 0
                    • machs-smart.de
                      machs-smart.de @Newpicsel last edited by

                      @newpicsel Versuche es mal mit "modules.module_bridged" und dann einen "in der Liste (DEIN ATTRIBUT VOM OBJEKT BLOCK) nimm entweder "erstes" oder "letztes" - je nach dem welchen Wert du möchtest.

                      1 Reply Last reply Reply Quote 0
                      • M
                        MCU @Newpicsel last edited by MCU

                        @newpicsel
                        ff28a583-0edc-4cb5-8c2d-c4cf79d984b8-image.png
                        Ergebnis:

                        cfe3b8c3-ee98-47de-8edd-79aaa0e8cd6c-image.png

                        b7f766b6-26aa-421b-ba83-23ad6a20c2a6-image.png

                        66bedf13-5855-4eee-9fb6-93aaa4547bb6-image.png

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        825
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        11
                        20
                        13281
                        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