Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON-Frage - wie Wert "einfangen"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    JSON-Frage - wie Wert "einfangen"

    Hallo zusammen,

    ich bin gerade dabei von der Miele 3rd Party API den Status auszulesen und in die iKo zu schreiben. Ich habe aber Probleme damit, weil ich es vielleicht noch nicht ganz richtig verstanden habe. Laut http://json.parser.online.fr ist der JSON gültig.
    Beispiel:

    Code:
    {
    "ProgramID":{"value_raw":6,"value_localized":"Auto","key_localized":"Programmbezeichnung"},
    "status":{"value_raw":5,"value_localized":"In Betrieb","key_localized":"Status"},
    "programType":{"value_raw":0,"value_localized":"Programm","key_localized":"Programmart"},
    "programPhase":{"value_raw":1794,"value_localized":"Vorspülen","key_localized":"Programmphase"},
    "remainingTime":[2,13],"startTime":[0,0],
    "targetTemperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},
    "value_raw":-32768,"value_localized":null,"unit":"Celsius"}],
    "temperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],
    "signalInfo":false,"signalFailure":false,"signalDoor":false,"remoteEnable":{"fullRemoteControl":true,"smartGrid":false,"mobileStart":true},"ambientLight":null,"light":2,"elapsedTime":[0,13],"spinningSpeed":{"unit":"U/min","value_raw":null,"value_localized":null,"key_localized":"Schleuderdrehzahl"},"dryingStep":{"value_raw":null,"value_localized":"","key_localized":"Trockenstufe"},"ventilationStep":{"value_raw":null,"value_localized":"","key_localized":"Lüfterstufe"},"plateStep":[],"ecoFeedback":{"currentWaterConsumption":{"unit":"l","value":0.0},"currentEnergyConsumption":{"unit":"kWh","value":0.0},"waterForecast":0.3,"energyForecast":0.4},"batteryLevel":null}
    Es geht um Zeile 2: status - das wechselt zwischen "In Betrieb" und "Aus".

    Wie bekomme. ich das mit dem JSON Parser hin, den Wert in den geschweiften Klammern an zweiter Stelle auszulesen und den Wert in ein iKo zu schreiben als Text (Aus, In Betrieb). Geht das mit dem Array Index an E3? Egal was ich da im E3 eingebe, es passt immer nicht und ich habe den ganzen Inhalt der geschweiften Klammer oder nichts.

    Danke! Vielleicht kann mir jemand helfen.

    Mit freundlichen Grüßen
    Hans
    Angehängte Dateien

    #2
    Das JSON ist für mich ungültig, da fehlt eine geschweifte Klammer { vor dem dritten value_raw in targetTemperature.

    Ich erkennen aus deinem Bilder nicht mit was du arbeitest. Per JSONPath wäre auslesen des Status einfach mittels: $.status.value_localized

    Kommentar


      #3
      Beim JsonParser brauchst du zwei Bausteine.
      Beim 1. ist der Key „status“ und bei. 2. „value_localized“.
      Der Ausgang des 1. Bausteins ist der Json-Eingang des 2.

      Kommentar


        #4
        Hintereinander, das hatte mir gefehlt, Danke, ich versteh das jetzt besser.

        Und warum die Miele API keinen gültigen JSON liefert? bei dem Namen denkt man ja, es müßte alles passen... Oder ist das eher die Regel, als die Ausnahme?

        Kommentar


          #5
          Vielleicht geht beim Empfang was schief? Es gibt ja auch LBS für MIele https://knx-user-forum.de/forum/%C3%...meserver-14360 , und bei denen scheint es ja zu funktionieren.

          Kommentar


            #6
            Den habe ich in Verwendung, A5 liefert mir den Output oben bei meinem Geschirrspüler.
            Aber ich habe mir das jetzt so alles zusammengestückelt das ich die wichtigsten Daten habe, die ich brauch. Danke euch wieder mal vielmals :-)

            Kommentar


              #7
              Ich habe doch noch eine Frage. Wenn ich im Online-Debug im HS den Wert

              Code:
              {  "programId": 6 }
              Bildschirmfoto 2022-03-23 um 14.18.46.png

              an den Baustein des Miele an E15 setze im Überwachen-Modus, dann startet der Geschirrspüler im Programm AUTO, so wie ich es auch will. Wenn ich das über eine Sequenz versuch zu starten, dann kann ich den Wert des iKO so nicht beschreiben, da die Anführungszeichen bzw. Gänsefüße in ein Fragezeichen umgewandelt werden und dann auch so gesendet werden.

              Bildschirmfoto 2022-03-23 um 14.17.41.png

              An der GIRA Hotline konnte man mir bisher auch nicht helfen, daher die Frage nochmal hier, ob es möglich ist die Anführungszeichen in ein 14-Byte Text Objekt zu schreiben und wenn ja wie.

              Danke!

              Kommentar


                #8
                Versuch mal
                Code:
                %22
                anstatt der Anführungsszeichen.

                Kommentar


                  #9

                  Leider nein, funktioniert nicht. Auf der DeBug Seite werde ich auch nicht schlauer.

                  Am Eingang E15 kann ich die "" setzen im Online-Modus, aber leider nicht über einen Baustein an dem Eingang damit beschreiben. GIRA wußte nach einem zweiten Telefonat gestern auch nicht weiter.

                  In Bezug auf den Miele Baustein sollte das gleiche Ergebnis ja auch der Wert "6" am Eingang E23 das AUTO Programm starten, allerdings kommt da da gleiche Fehler wie bei E15 mit "Error 400".

                  Kommentar


                    #10
                    So geht es jetzt, wenn ich vor den Eingang E15 den Baustein 19949 (String-Replacement) setze. Damit wird das "?" (ASCII 63) in ein Anführungszeichen (ASCII 34) gewandelt.

                    Bildschirmfoto 2022-03-24 um 09.32.31.png

                    Damit läßt sich jetzt, wie in der Sandbox bei Miele, der Geschirrspüler in einem beliebigen Programm per Logikbaustein starten :-)

                    Bildschirmfoto 2022-03-24 um 09.36.41.png
                    Zuletzt geändert von knxhans; 24.03.2022, 09:38.

                    Kommentar

                    Lädt...
                    X