Hauptmenü

Problem mit JSONLIST2

Begonnen von wowogiengen, 11 September 2025, 19:41:53

Vorheriges Thema - Nächstes Thema

wowogiengen

Hallo,
in der Commandref zu jsonlist2 steht:
ZitatJsonList2
jsonlist2 [<devspec>] [<value1> <value2> ...]

Dieses Befehl sollte in der FHEMWEB oder telnet Eingabezeile ausgeführt werden, kann aber auch direkt über HTTP abgerufen werden über
http://fhemhost:8083/fhem?cmd=jsonlist2&XHR=1
Es liefert die JSON Darstellung der internen Variablen, Readings und Attribute zurück.
Wenn valueX angegeben ist, dann wird nur der entsprechende Internal (DEF, TYPE, usw), Reading (actuator, measured-temp) oder Attribut zurückgeliefert für alle Geräte die in devspec angegeben sind.

Achtung: die alte Version dieses Befehls (jsonlist, ohne 2 am Ende) is überholt, und wird in der Zukunft entfernt.

Ich habe nun beim Beispiel die Basisadresse angepasst, und versuche
https://fhem4:8084/fhem?cmd=jsonlist2&XHR=1aufzurufen...
bekomme dann aber
GET https://fhem4:8084/fhem?cmd=jsonlist2&XHR=1 net::ERR_HTTP_RESPONSE_CODE_FAILURE 400 (Bad Request) in der Browserkonsole angezeigt...

jsonlist2 an sich funktioniert und gibt mit auch das aus was ich suche:
jsonlist2 LichtSchlafzimmerOben stategibt dann auch
{
  "Arg":"LichtSchlafzimmerOben state",
  "Results": [
  {
    "Name":"LichtSchlafzimmerOben",
    "Internals": { },
    "Readings": {      "state": { "Value":"off", "Time":"2025-09-11 18:52:56" } },
    "Attributes": { }
  }  ],
  "totalResultsReturned":1
}

Ich wollte das jetzt über javascript in einer eigenen index.html ausprobieren:



fetch("https://fhem4:8084/fhem?cmd=jsonlist2&XHR=1")
    .then(res => {
        if (!res.ok) throw new Error("HTTP " + res.status);
        return res.json();
      })

Leider bin ich da jetzt mit meinem latein am Ende, kenne mich nicht aus, was hier noch fehlt!

rudolfkoenig

Das hat was mit den CSRF Schutzmassnahmen zu tun, die seit einiger Zeit per Voreinstellung aktiv sind:
https://fhem.de/commandref_modular.html#FHEMWEB-attr-csrfToken

Siehe auch https://wiki.fhem.de/wiki/CsrfToken-HowTo

wowogiengen

Hallo Rudolf,
nachdem nun die Ursache geklärt ist, würde ich gerne
die Lösung in meine Webseite unter

https://fhem4:8088/fhem/ftui/index.html

bzw.

https://fhem4:8084/fhem/ftui/index.html

einbauen

Der erste Link ist das, was im Wiki unter API-Web beschrieben ist. Sowas habe ich tatsächlich schon mal verwendet, um von meiner Überwachungskamera aus telegram Nachrichten verschicken zu können. Dafür reicht das ja auch aus, da die erlaubten IP-Adressen hier im lokalen Netzwerk liegen, und sonst keiner Zugriff hat.

Das reguläre FHEMWEB über 8084 ist sowohl mit Username und Passwort als auch mit dem CSRF-Token geschützt.

Meine Beispielwebseite unter ftui/index.html verwendet JavaScript um die gewünschten Daten zu laden...

Aktuell lese ich dort nur den Zustand eines Aktors aus.
Später möchte ich mit plotly den Verlauf einiger Werte aus meiner Datenbank ansehen können. Aber soweit bin ich noch lange nicht...

Wie müsste ich die Zeilen 20-24 anpassen oder ergänzen, um das aktuelle CSRF-Token zu ermitteln und dann im fetch in der URL zu verwenden?

Oder welches der Beispiel im Wiki passt am ehesten auf meine Du darfst diesen Dateianhang nicht ansehen. ?