Autor |
Beitrag |
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Fr 27.11.20 18:45
Hallo Leute.
Ich stehe vor dem Problem, das mir der html-Browser ein Download des Javascripts (GetMeterRealtimeData.json) vorschlägt, anstatt den Script auszufühern und mir das Resultat zu liefern.
Quelltext 1:
| WebBrowser1.Navigate('http://192.168.101.15/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=0'); |
Ergebnis - siehe Bild
Derselbe Aufruf im Webbrowser bringt als Ergebnis:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| { "Body" : { "Data" : {} }, "Head" : { "RequestArguments" : { "DeviceClass" : "Meter", "DeviceId" : "0'", "Scope" : "Device" }, "Status" : { "Code" : 6, "Reason" : "CGI-Args: Invalid parameter '0'' for attribute 'DeviceId' (must be numeric)", "UserMessage" : "" }, "Timestamp" : "2020-11-27T17:43:12+01:00" } } |
Hat jemand dafür eine Lösung?
PS ich verwende (noch immer) DELPHI5
lg
Rupert
Einloggen, um Attachments anzusehen!
_________________ Grüße Rupert
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.11.20 19:53
Ähm... Json ist kein Skript, sondern ein Format zur Speicherung von Objekten (ursprünglich) in JavaScript. Da kann man nichts ausführen. Von daher ist das Verhalten schon richtig. Die Anzeige im Webbrowser, die du gepostet hast, zeigt ja auch Json-Inhalt.
Aber wozu brauchst du denn hier einen TWebBrowser? Wie wäre es die Datei einfach mit TIdHttp ohne den ganzen Overhead mit der Webbrowser-Komponente herunterzuladen und in einem TMemo anzuzeigen?
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 27.11.20 21:12
Das Json ist eine Fehlerresponse des CGIs. Da steht ziemlich offensichtlich das du als QueryParameter für DeviceId nicht 0 benutzen darfst und du schickst 0 hin.
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.11.20 21:15
Für die richtige ID sollte man bei Fronius Geräten vorher GetActiveDeviceInfo.cgi verwenden um die verfügbaren Geräte zu ermitteln. Deren ID kann man dann in obigem Skript als Parameter angeben.
|
|
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Sa 28.11.20 13:07
jaenicke hat folgendes geschrieben : | Aber wozu brauchst du denn hier einen TWebBrowser? Wie wäre es die Datei einfach mit TIdHttp ohne den ganzen Overhead mit der Webbrowser-Komponente herunterzuladen und in einem TMemo anzuzeigen? |
Delphi5 hat noch kein TIdHttp - ich muss also irgendwie anders an die Daten kommen und generell wäre es ideal, direkt an die Daten des Wechselrichters ranzukommen.
Moderiert von Th69: Delphi-Tags hinzugefügt
_________________ Grüße Rupert
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 29.11.20 00:01
Dann bliebe (abgesehen von einer neuen Delphiversion, die natürlich noch andere Vorteile hätte...) z.B. noch die Windows API direkt übrig:
URLDownloadToFile lädt Daten herunter.
Mehr dazu findest du in der Doku:
docs.microsoft.com/e...is/ms775123(v=vs.85)
|
|
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: So 29.11.20 19:33
Danke für die Info - welche Delphi version wäre geeignet um delphi5 programme migrieren zu können.
Lt Embarcadero sollte dies mit RAD 10.3 möglich sein.
_________________ Grüße Rupert
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 29.11.20 20:44
Solange du das ganze privat machst und kein oder wenig Geld (bis 5000 USD) damit verdienst, kannst du einfach die kostenlose Delphi Community Edition nehmen. Die alten Projekte kann man damit aufmachen. Die Umstellung auf Unicode könnte z.B. ein paar Änderungen erfordern, aber das siehst du dann ja.
|
|
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Di 01.12.20 00:22
Danke vielmals.
Ich habe die Community Edition erst mal downgeloaded und befasse mich später weil:
Ich fand im Indy9 eine funktionierende TIdHttp
Bekam aber gleich ein neues Problem.
Wenn ich ein neues Projekt erstelle funktioniert die procedure Button4Click
baue ich dasselbe in meine bestehende Heizungsapp ein, erhalte ich eine Exception
Ich konnte feststellen, dass der URL-String nicht an TIdHttp1.Get übergeben wird - deshalb die Exception.
Aber warum wird der String in der App Heizung nicht übergeben, in einer neuen jedoch schon??
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure THauptformular.Button4Click(Sender: TObject); var Jsonstream: TStringStream; idhttp1:TIdHTTP; const Url:String='http://192.168.101.15/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=0';
begin IdHTTP1:= TIdHttp.Create(nil); Jsonstream := TStringStream.Create(''); try IdHTTP1.Request.ContentType:= 'application/json'; Memo4.text := IdHTTP1.Get(Url); finally Jsonstream.Free; end; Memo4.refresh; IdHTTP1.free;
end; |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
Einloggen, um Attachments anzusehen!
_________________ Grüße Rupert
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 01.12.20 01:27
Da muss es schon einen Unterschied geben. Der gezeigte Quelltext ist in Ordnung.
Die Exception und der Hinweis, dass der Wert nicht verfügbar sei, deuten darauf hin, dass eventuell die Indy-Komponente nicht korrekt erstellt wurde. Das siehst du dann an der Stelle aus dem Screenshot daran, dass (wenn es so ist) Self = nil ist. Das würde die Exception erklären.
|
|
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Di 01.12.20 10:23
OK - aber mit derselben Indy-Komponente und einem anderen Projekt klappt die Procedure tadellos!
Ich versteh´s nicht...
Einloggen, um Attachments anzusehen!
_________________ Grüße Rupert
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 01.12.20 10:48
Du erstellst hier eine Komponente IdHTTP1 neu, aber auf dem Formular liegt diese auch?
Wo passiert denn die Schutzverletzung, wie sieht da der Stacktrace aus usw.?
|
|
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Di 01.12.20 19:29
Ich habe den Fehler beheben können.
1. Dass der URL-Parameter nicht übergeben wurde lag am Suchpfad in den Options.
Ich konnte dies zwar nicht nachvollziehen, aber seid ich das Ausgabeverzeichnis gelöscht und wieder eingetragen hatte wurde er übergeben.
2. Dann hatte ich einen neuen Fehler, 10056: Socket already connected
mit dem IdHTTP1.Disconnect ging dieser Fehler weg, und seitdem funktioniert die procedure.
Vielen Dank jedenfalls für die Hilfe und Anregungen!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure THauptformular.Button4Click(Sender: TObject); var idhttp1:TIdHTTP; Const url: String='http://192.168.101.15/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=0';
begin IdHTTP1:= TIdHttp.Create(nil); try IdHTTP1.Request.ContentType:= 'application/json'; Memo4.text := IdHTTP1.Get(Url); finally IdHTTP1.Disconnect; end; Memo4.refresh; IdHTTP1.free; end; |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
_________________ Grüße Rupert
|
|
Rupert
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Di 01.12.20 21:49
So - die gelesenen Daten wurden vorerst provisorisch implementiert, was so aussieht...
Einloggen, um Attachments anzusehen!
_________________ Grüße Rupert
|
|