Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON

    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

    OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON

    This topic has been deleted. Only users with topic management privileges can see it.
    • Negalein
      Negalein Global Moderator @mickym last edited by

      @mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

      @paul53 😁 schneller 😉

      Hi Micky

      Das JSON hat sich wegen neuem Script geändert und sieht nun auszugsweise (der relevante Teil für mich) so aus.

      {
       "ÖSTERREICH": {
         "services": {
           "Super Plus": [
             {
               "date": "05.12.2022-11.12.2022:",
               "price": "1,642 EUR"
             }
           ],
           "Super": [
             {
               "date": "05.12.2022-11.12.2022:",
               "price": "1,498 EUR"
             }
           ],
           "Normal": [
             {
               "date": "05.12.2022-11.12.2022:",
               "price": "1,498 EUR"
             }
           ],
           "Diesel": [
             {
               "date": "05.12.2022-11.12.2022:",
               "price": "1,685 EUR"
             }
           ],
      

      JSON.parse(val).Diesel.price

      muss es nun so lauten?

      JSON.parse(val).ÖSTERREICH.services.Diesel.price
      
      mickym paul53 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @Negalein last edited by

        @negalein ja

        Homoran 1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @mickym last edited by

          @mickym ist ein Ö sinnvoll?

          mickym 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Negalein last edited by

            @negalein sagte: muss es nun so lauten?

            Nein, es ist noch ein Array mit einem Element hinzu gekommen.

            JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price
            
            1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @Homoran last edited by mickym

              @homoran na besser ist ohne, aber da hat man ja oft keinen Einfluss darauf. Wenn das Teil streikt dann die Klammernotation mit Gänsefüßchen nutzen.

              Und mit dem Array stimmt auch - diesmal ist paul schneller. Richtig müsste es heißen:

              JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].price
              

              aber ich sehe ja, dass genügend geballte Kompetenz vorhanden ist.

              paul53 Negalein 2 Replies Last reply Reply Quote 0
              • paul53
                paul53 @mickym last edited by

                @mickym sagte: Richtig müsste es heißen:

                Mit Anführungszeichen funktioniert es nicht.

                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @paul53 last edited by

                  @paul53 Doch funktioniert

                  cd4eebbc-4989-4861-95d2-7c0cda7b2faf-image.png

                  6dae004f-e66f-40a3-9379-fcd884966f42-image.png

                  habs ja getestet-

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @mickym last edited by

                    @mickym sagte: habs ja getestet-

                    Wie sieht es in RAW-Ansicht (JSON) aus?

                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @paul53 last edited by

                      @paul53

                      Da werden sie auskommentiert - funktioniert aber:

                      {
                        "common": {
                          "name": "jsonState",
                          "desc": "Manuell erzeugt",
                          "role": "state",
                          "type": "string",
                          "read": true,
                          "write": true,
                          "def": "",
                          "alias": {
                            "id": {
                              "read": "0_userdata.0.Test.jsonState",
                              "write": "0_userdata.0.Test.jsonState.set"
                            },
                            "read": "JSON.parse(val)[\"ÖSTERREICH\"].services.Diesel[0].price"
                          }
                        },
                        "type": "state",
                        "native": {},
                        "_id": "alias.0.test.jsonState",
                        "acl": {
                          "object": 1636,
                          "state": 1636,
                          "owner": "system.user.admin",
                          "ownerGroup": "system.group.administrator"
                        },
                        "from": "system.adapter.admin.0",
                        "user": "system.user.admin",
                        "ts": 1670692903249
                      }
                      
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @mickym last edited by

                        @mickym
                        Ja, mit Backslash davor funktioniert es.

                        1 Reply Last reply Reply Quote 0
                        • Negalein
                          Negalein Global Moderator @mickym last edited by Negalein

                          @mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

                          Richtig müsste es heißen:

                          bekomme das im Log (Alias-DP wurden aber aktualisiert)

                          web.0 2022-12-10 18:28:58.193	error	Invalid read function for undefined: JSON.parse(val).Diesel.date => Cannot read properties of undefined (reading 'date')
                          web.0 2022-12-10 18:28:58.192	error	Invalid read function for undefined: JSON.parse(val).Diesel.price => Cannot read properties of undefined (reading 'price')
                          javascript.0 2022-12-10 18:28:50.637	error	Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].date => Cannot read properties of undefined (reading 'services')
                          javascript.1 2022-12-10 18:28:50.634	error	Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].date => Cannot read properties of undefined (reading 'services')
                          javascript.0 2022-12-10 18:28:07.912	error	Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].price => Cannot read properties of undefined (reading 'services')
                          javascript.1 2022-12-10 18:28:07.912	error	Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].price => Cannot read properties of undefined (reading 'services')
                          

                          So ist das komplette JSON

                          {
                            "ÖSTERREICH": {
                              "services": {
                                "Super Plus": [
                                  {
                                    "date": "05.12.2022-11.12.2022:",
                                    "price": "1,642 EUR"
                                  }
                                ],
                                "Super": [
                                  {
                                    "date": "05.12.2022-11.12.2022:",
                                    "price": "1,498 EUR"
                                  }
                                ],
                                "Normal": [
                                  {
                                    "date": "05.12.2022-11.12.2022:",
                                    "price": "1,498 EUR"
                                  }
                                ],
                                "Diesel": [
                                  {
                                    "date": "05.12.2022-11.12.2022:",
                                    "price": "1,685 EUR"
                                  }
                                ],
                                "Premium Diesel": [
                                  {
                                    "date": "05.12.2022-11.12.2022:",
                                    "price": "1,919 EUR"
                                  }
                                ],
                                "IQ Motoröle und Chemie": "10 % Rabatt",
                                "Autowäsche": "10 % Rabatt"
                              },
                              "info": "",
                              "countryname": "ÖSTERREICH"
                            },
                            "BOSNIEN UND HERZEGOWINA": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "BOSNIEN UND HERZEGOWINA"
                            },
                            "BELGIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "BELGIEN"
                            },
                            "BULGARIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "BULGARIEN"
                            },
                            "DEUTSCHLAND": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "DEUTSCHLAND"
                            },
                            "DÄNEMARK": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "DÄNEMARK"
                            },
                            "SPANIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "SPANIEN"
                            },
                            "FRANKREICH": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "FRANKREICH"
                            },
                            "GROßBRITANNIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "GROßBRITANNIEN"
                            },
                            "UNGARN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "UNGARN"
                            },
                            "ITALIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "ITALIEN"
                            },
                            "LITAUEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "LITAUEN"
                            },
                            "LUXEMBURG": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "LUXEMBURG"
                            },
                            "NIEDERLANDE": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "NIEDERLANDE"
                            },
                            "NORWEGEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "NORWEGEN"
                            },
                            "POLEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "POLEN"
                            },
                            "RUMÄNIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "RUMÄNIEN"
                            },
                            "SLOWENIEN": {
                              "services": {},
                              "info": "Sie tanken zum aktuellen Pumpenabgabepreis",
                              "countryname": "SLOWENIEN"
                            }
                          }
                          
                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Negalein last edited by mickym

                            @negalein Ich bekomme Deinen Fehler wie gesagt nicht. Auch nicht im Log. Hab deinen kompletten JSON bei mir reinkopiert. Insofern schwierig für mich nachzuvollziehen. Du kannst ja auch mit einfachen Hochkomma nutzen, Du musst es halt in der Maske eintragen und nicht in dem Common Objekt, sonst musst halt mit \ die Gänsefüsschen maskieren.

                            Bei mir tut das in der Maske eingegeben ohne Probleme:

                            48f3d424-95b5-4dbb-9609-f9ce5403be45-image.png

                            Dein zuerst gepostetes JSON war ja unvollständig, aber mit dem vollständigen funktioniert es auch.

                            Negalein 1 Reply Last reply Reply Quote 0
                            • Negalein
                              Negalein Global Moderator @mickym last edited by

                              @mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

                              Du musst es halt in der Maske eintragen und nicht in dem Common Objekt

                              Common schaut so aus

                              {
                                "type": "state",
                                "common": {
                                  "name": "IQ_Sprit",
                                  "role": "state",
                                  "type": "string",
                                  "read": true,
                                  "write": true,
                                  "alias": {
                                    "id": "0_userdata.0.IQ_Sprit.IQ_Sprit",
                                    "read": "JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price"
                                  }
                                },
                                "_id": "alias.0.IQ-Sprit.Diesel.Preis.IQ_Sprit",
                                "native": {},
                                "acl": {
                                  "object": 1636,
                                  "state": 1636,
                                  "owner": "system.user.admin",
                                  "ownerGroup": "system.group.administrator"
                                },
                                "from": "system.adapter.admin.0",
                                "user": "system.user.admin",
                                "ts": 1670534620818
                              }
                              

                              Und so in der Maske (bereits mit einfachem Hochkomma)
                              adf325c8-2f2f-4cbb-8621-4ec4bf77fff5-image.png
                              JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price

                              mickym 1 Reply Last reply Reply Quote 0
                              • Negalein
                                Negalein Global Moderator last edited by

                                @mickym

                                sehe gerade, dass das im Log noch von alten Konvertierungsfunktion ist.

                                Invalid read function for undefined: JSON.parse(val).Diesel.price => Cannot read properties of undefined (reading 'price')

                                Eingetragen ist aber schon JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price

                                Werde mal neu starten.

                                1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @Negalein last edited by mickym

                                  @negalein Irgendwie stimmt bei Dir was oben nicht - mit dem Anhaken der unterschiedlichen Lesen Schreiben Funktion.

                                  Na ich weiss den Fehler. Du hast den nicht auf ReadOnly gesetzt. Wenn Du schreiben willst musst halt da das stringify setzen. Der Fehler tritt natürlich nur auf wenn Du in den Alias schreiben willst und da hast Du weder unterschiedliche Punkte angegeben.

                                  Wie gesagt wenn Du das nur extrahieren willst und nicht schreiben setz den Alias mal auf ReadOnly

                                  Oh ich sehe gerade da gibts einen Bug mit dem Alias. Der zerstört den Quelldatenpunkt auch wenn ReadOnly gesetzt ist und schreibt. Dann musst halt bei Schreiben auch setzen.

                                  Negalein 1 Reply Last reply Reply Quote 0
                                  • Negalein
                                    Negalein Global Moderator @mickym last edited by Negalein

                                    @mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

                                    Wie gesagt wenn Du das nur extrahieren willst und nicht schreiben setz den Alias mal auf ReadOnly

                                    Ja, nur vom orig. DP in den Alias schreiben (konvertiert).

                                    Du meinst da auch das JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price bei Write eintragen?
                                    8b10ee3a-b331-44c6-a557-d40082c03107-image.png

                                    Bzw. da
                                    769285f4-e495-4ee5-a855-3be56d093445-image.png

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @Negalein last edited by mickym

                                      @negalein Also im Prinzip taucht der Fehler nicht auf, wenn Du nicht in den Alias schreibst. Sonst musst Du das gesamte Objekt mir stringfy schreiben. ist aber doof in meinen Augen. Nein nicht parsen. Also das Problem ist, dass das ReadOnly im Alias nicht funktioniert. Du kannst als Umgehung einfach in einen Dummy Datenpunkt schreiben.

                                      Ja so kann man das Teil überlisten ohne Log Einträge:

                                      a3e1d520-d59f-4a4e-8265-0c429fc530df-image.png

                                      und den Alias selbst auf ReadOnly:

                                      91ab7402-8834-4b21-9a28-47a206df4285-image.png

                                      Der dummy Datenpunkt muss nicht existieren:

                                        "common": {
                                          "name": "jsonState",
                                          "desc": "Manuell erzeugt",
                                          "role": "state",
                                          "type": "string",
                                          "read": true,
                                          "write": false,
                                          "def": "",
                                          "alias": {
                                            "id": {
                                              "read": "0_userdata.0.Test.jsonState",
                                              "write": "0_userdata.0.Test.jsonState.dummy"
                                            },
                                            "read": "JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price"
                                          }
                                        }
                                      
                                      Negalein 1 Reply Last reply Reply Quote 0
                                      • Negalein
                                        Negalein Global Moderator @mickym last edited by

                                        @mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

                                        Du kannst als Umgehung einfach in einen Dummy Datenpunkt schreiben.

                                        kannst du das für mich verständlicher Beschreiben? Ich versteh gerade nur Bahnhof. 😥

                                        mickym paul53 2 Replies Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @Negalein last edited by

                                          @negalein sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

                                          @mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:

                                          Du kannst als Umgehung einfach in einen Dummy Datenpunkt schreiben.

                                          kannst du das für mich verständlicher Beschreiben? Ich versteh gerade nur Bahnhof. 😥

                                          Also das Problem mit den Log-Einträgen entsteht nur, wenn Du in den Alias was schreibst. Du willst aber doch nur den Preis auslesen? - Richtig?

                                          Deshalb sollte man den Alias auf ReadOnly stellen. Das scheint aber nicht auszureichen. Deswegen einen Dummy Datenpunkt zum Schreiben angeben. Der muss nicht existieren. Dann sollte es gehen. Ich hab Dir die Screenshots im letzten Post gepostet.

                                          Oder willst Du selbst Preise schreiben? - Glaub ich eigentlich nicht, sonst musst Du das ganze Objekt in die Schreibfunktion kopieren.

                                          Negalein 1 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 @Negalein last edited by

                                            @negalein
                                            Der Dummy-Datenpunkt verhindert, dass der Alias einen ungültigen Wert in den Original-Datenpunkt schreibt.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            392
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            63
                                            3227
                                            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