Autor Thema: Mit der JSON API auf Funktionsblock zugreifen  (Gelesen 1656 mal)

Offline ChrisDJoker

  • Newbie
  • *
  • Beiträge: 2
Mit der JSON API auf Funktionsblock zugreifen
« am: Mai 28, 2024, 11:30:28 Vormittag »
Moin zusammen,

ich probiere mich momentan an der EASY JSON API und bis jetzt hat alles wunderbar funktioniert: Ausgänge und Eingänge lesen, Merker lesen und schreiben. Aber bei den Funktionsblöcken stoße ich auf einen Fehler, den ich nicht beheben kann.

Meine CMD-Ausgabe sieht so aus:
EASY Mode
RUN
API-Antwort: [{"T1(2;0;2000)": 0, "SUCCESS": 0}]
API-URL: 192.168.1.2/api/set/par?op=FB&v1=T1(2;0;2000)
Timer I1
Fehler: HTTP Response Code 401
URL: 192.168.1.2/api/get/adm?elm=FBT1(2;1)
Timer Q1
Fehler: HTTP Response Code 401
URL: 192.168.1.2/api/get/adm?elm=FBT1(1;0)
Timer QV
Fehler: HTTP Response Code 401
URL: http://192.168.1.2/api/get/adm?elm=FBT1(3;0)
Timer EN
Fehler: HTTP Response Code 401
URL: 192.168.1.2/api/get/adm?elm=FBT1(0;0)

In der ersten Zeile wird der EASY Mode abgefragt. Dann habe ich als Test dem Timer einen neuen Zeitwert übergeben, also die Schreibfunktion ist gegeben, was bedeutet, dass die Berechtigung auch vorhanden ist. Jetzt kommt mein Problem: Egal welchen Pin ich vom Timer ansprechen will, es tritt immer derselbe Fehler auf. Die URL ist korrekt erstellt und der User hat die notwendigen Berechtigungen. Ich habe die API-Anfrage sowohl mit Benutzername/Passwort als auch mit API-Schlüssel probiert, beides mit demselben Fehler.

Da die Schreibfunktion funktioniert, kann es nicht an den Berechtigungen liegen.

Hier ist der relevante Code:

java
public String getFunctionBlocks(int index, String fBlock, int pinType, int pinPosition) {
    try {
        String endpoint = String.format("/get/adm?elm=FB%s%d(%d;%d)",
                URLEncoder.encode(fBlock, StandardCharsets.UTF_8),
                index, pinType, pinPosition);
        String response = apiKeySendGetRequest(endpoint);
        if (response != null) {
            System.out.println("API-Antwort: " + response);
            System.out.println("API-URL: " + baseUrl + endpoint);
            return response;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

Hat jemand eine Idee, woran es liegen könnte? Danke im Voraus für eure Hilfe!

Offline ChrisDJoker

  • Newbie
  • *
  • Beiträge: 2
Antw:Mit der JSON API auf Funktionsblock zugreifen
« Antwort #1 am: Juni 20, 2024, 21:29:27 Nachmittag »
Moin zusammen,

ich habe den Eaton EASY E4 Support kontaktiert, und nach einigen Mails wurde der Fehler gefunden. In der JSON API Dokumentation gibt es einen Fehler. In der Dokumentation wird die URL /api/get/adm?elm=FBA1(0;0) angegeben. Hier ist in der URL das "adm" falsch, richtig wäre "data". Somit sollte die URL so aussehen: /api/get/data?elm=FBA1(0;0).

Ich habe das in meinem API-Zugriff bereits angepasst, kann es aber momentan nicht testen. Sobald ich wieder eine EASY E4 zur Verfügung habe, werde ich es ausprobieren und hier eine finale Rückmeldung geben. ;)