AFAIK kann man Systemvariable NICHT mit der XML-API setzen und lesen, sondern nur mit der Skript-API, indem man ein Skript-Snippet mit POST an Port 48181 sendet.
Von der Kommandozeile funktioniert das auch wie erwartet:
Code: Alles auswählen
curl -v --insecure -X POST --data 'x = dom.GetObject("SV_heizung").Value();' https://192.168.0.80:48181/regex.exe
Code: Alles auswählen
<xml><exec>/regex.exe</exec><sessionId></sessionId><httpUserAgent>user-agent: curl/7.68.0</httpUserAgent><x>20230108</x></xml>
Da der Port des Webservers lighttpd (http/https - 80 oder 443) nicht dem der Skript-API entspricht (48181), ist es nicht mehr "Same-Origin". Es hilft dabei auch nicht, dass der Javascript-Code der Webanwendung vom gleichen Raspberry-Webserver ausgeliefert wird.
Falls es sich nicht um "Same-Origin" handelt, erzeugt der Webbrowser einen sog. Preflight-Request: eine OPTIONS-Anfrage "Darf ich die Ressource von Dir laden?", die vor der eigentlichen Abfrage gesendet wird.
Wenn ich das entsprechende Protokoll richtig verstanden habe, gibt der Server über HTTP-Header "Allow-Control-Allow-*" sein OK oder eben nicht.
Der Server in RaspberryMatic erzeugt jedoch einen Fehler 510. Dabei hilft es dann auch nicht, dass ich lighttpd dazu gebracht habe die entsprechenden Header zu senden. Fehler bleibt Fehler. CORS bricht ab und es kommt nicht zur eigentlichen Datenabfrage.
Der Fehler zeigt sich auch mit einer OPTIONS-Abfrage von der Kommandozeile:
Code: Alles auswählen
curl -v --insecure -X OPTIONS https://192.168.0.80:48181/regex.exe
Code: Alles auswählen
* Trying 192.168.0.80:48181...
* TCP_NODELAY set
* Connected to 192.168.0.80 (192.168.0.80) port 48181 (#0)
...
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
...
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
...
> OPTIONS /regex.exe HTTP/2
> Host: 192.168.0.80:48181
> user-agent: curl/7.68.0
> accept: */*
>
...
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 8)!
< HTTP/2 510
< accept-ranges: bytes
< cache-control: private, no-cache, must-revalidate, no-transform, max-age=0
< content-type: text/html; charset=iso-8859-1
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< x-xss-protection: 1; mode=block
< x-robots-tag: none
< x-download-options: noopen
< x-permitted-cross-domain-policies: none
< referrer-policy: no-referrer
< access-control-allow-origin: https://192.168.0.80
< access-control-allow-methods: POST, GET, OPTIONS
< date: Sat, 31 Dec 2022 14:31:15 GMT
<
...
Die Beschreibung des Web-Fehlers 510 (Not Extended) legt auch nicht gerade nahe, was schief läuft.
URLs deren OPTIONS mit 510 beantwortet werden:
Code: Alles auswählen
https://192.168.0.80
https://192.168.0.80/
https://192.168.0.80/login.html
Code: Alles auswählen
https://192.168.0.80/addons/cuxd/
https://192.168.0.80/addons/cuxd/robots.txt
Frohes Neues...
Michael