KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[Frage] [V3.5.1] Verschachtelte JSON-Struktur für HTTP POST generieren

Wissen, Planung & Diskussion zur Unterstützung von Rest-API & Webabfragen im Timberwolf Server.
Stellt uns hier Eure Projekte und Ideen vor.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
KPU78
Reactions:
Beiträge: 4
Registriert: Di Apr 19, 2022 8:39 am
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

[V3.5.1] Verschachtelte JSON-Struktur für HTTP POST generieren

#1

Beitrag von KPU78 »

Guten Tag,

mein Samsung Kühlschrank erlaubt es mittels HTTP Post die Soll-Temperatur von Freezer und Cooler anzupassen. Nun möchte ich die Temperatur stets um ein paar Grad heruntersetzen, sobald der Batteriespeicher voll geladen ist, um unseren Photovoltaik-Strom bestmöglich zu nutzen und die Energie in Kälte zu speichern. Sobald der Batteriespeicher wieder entladen wird, möchte ich die Temperatur wieder auf den ursprünglichen Wert zurück setzen.

Hierfür benötige ich folgendes JSON im Body der Abfrage

Code: Alles auswählen

{
    "commands": [
        {
            "component": "freezer",
            "capability": "thermostatCoolingSetpoint",
            "command": "setCoolingSetpoint",
            "arguments": [
                -20
            ]
        }
    ]
}
Gemäß Wiki-Text hätte ich gedacht, folgendermaßen ans Ziel zu kommen (der rechte Teil jeweils aus Multiplexer/String zugeführt):
Objekt 1 Selektor: commands[0].component -> "freezer"
Objekt 2 Selektor: commands[1].capability -> "thermostatCoolingSetpoint"
Objekt 3 Selektor: commands[2].command -> "setCoolingSetpoint"
Objekt 4 Selektor: commands[3].arguments[0] -> "-20"

Als Body resultiert hieraus aber nur folgendes:

Code: Alles auswählen

{
  "commands": {}
}
Kann mir jemand einen Tipp geben, wie ich vorgehen muss?

Die Möglichkeit Text/plain als Request Content-Type scheidet leider aus, da bei 30 Zeichen abgeschnitten wird.

Danke und viele Grüße
Kilian
TWS 3500L ID:778, VPN offen, Reboot erlaubt

Sun1453
Reactions:
Beiträge: 2217
Registriert: Do Feb 07, 2019 8:08 am
Hat sich bedankt: 1979 Mal
Danksagung erhalten: 885 Mal

#2

Beitrag von Sun1453 »

Guten Tag Kilian,

erstmal Danke für das korrete Erstellen des Themas und der Signatur. Willkommen hier im Forum.

Ich verwende immer diese Seite: https://jsonpathfinder.com/ oder http://jsonselector.com/

Bitte mal probieren. Commands[0] sollte in deinem Fall die Werte liefern. Du brauchst also die Zahl in der Eckigen Klammer nicht hochzählen.
Gruß Michael

Timberwolf 950 QL #344 | Mit Internetanbindung | VPN Offen | Reboot nach Absprache | PROD Server
Timberwolf 2500 #602 | VPN offen | TEST Server | Reboot nach Absprache |

Ersteller
KPU78
Reactions:
Beiträge: 4
Registriert: Di Apr 19, 2022 8:39 am
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

#3

Beitrag von KPU78 »

Hallo Michael,

danke für deine Antwort, da hatte ich in der Tat noch einen Denkfehler. Ich habe jetzt 1, 2, 3 durch 0 ersetzt, was entsprechend der vorgeschlagenen Seiten auch richtig sein sollte. Das Ergebnis bleibt leider gleich, ich bekomme weiterhin nur folgenden Body

Code: Alles auswählen

{
  "commands": {}
}
Vielleicht gibt es noch einen weiteren Tipp oder eine Idee, worin der Fehler liegen könnte?

Danke und viele Grüße
Kilian
TWS 3500L ID:778, VPN offen, Reboot erlaubt

Ersteller
KPU78
Reactions:
Beiträge: 4
Registriert: Di Apr 19, 2022 8:39 am
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

#4

Beitrag von KPU78 »

Ich ergänze dies nochmal.

Wenn ich testweise die Erzeugung der beiden Arrays weg lasse, wird ein JSON generiert, wie ich es erwarte, d. h.
aus
Objekt 1 Selektor: commands.component -> "freezer"
Objekt 2 Selektor: commands.capability -> "thermostatCoolingSetpoint"
Objekt 3 Selektor: commands.command -> "setCoolingSetpoint"
Objekt 4 Selektor: commands.arguments -> "-20"
wird

Code: Alles auswählen

{
    "commands": {
          "component": "freezer",
          "capability": "thermostatCoolingSetpoint",
          "command": "setCoolingSetpoint",
          "arguments": "-20"
      }
 }
Erst mit den Arrays entsteht das Problem, das aus
Objekt 1 Selektor: commands[0].component -> "freezer"
Objekt 2 Selektor: commands[0].capability -> "thermostatCoolingSetpoint"
Objekt 3 Selektor: commands[0].command -> "setCoolingSetpoint"
Objekt 4 Selektor: commands[0].arguments[0] -> "-20"

eben nur

Code: Alles auswählen

{
  "commands": {}
}
entsteht.

Kann es sein, dass der Aufbau von Arrays in diesem Fall nicht richtig unterstützt wird?

Der Vollständigkeit halber:
Objekte 1-3 stehen auf "Aktualisierung des Objektwerts löst selbst KEINE Abfrage aus (wird nur zwischengespeichert)"
Objekt 4 steht auf " Wertänderung löst Abfrage mit Übergabe aller aktuellen Objektwerte aller Transaktionen aus"

Die Abfrage der aktuellen Werte des Kühlschranks mit GET funktioniert problemlos; dafür sind allerdings auch keine Arrays notwendig.

Schöne Grüße
Kilian
TWS 3500L ID:778, VPN offen, Reboot erlaubt
Antworten

Zurück zu „HTTP-API, REST & Web-Abfragen“