Moin an alle, jeder hat zum Teil zur Lösung beigetragen, das Ergebnis möchte ich Euch (und der Nachwelt
) nicht vorenthalten.
Weil es mal wieder typisch eQ3 ist.
Push (= Fire and forget) macht durchaus Sinn, wobei in diesen speziellen Fall die Daten nicht zeitkritisch sind.
Ich glaube ich werde das auch so final umsetzen, war aber trotzdem neugierig, wieso das mit dem Pull hapert.
Ich hole mir so ja auch Wetterdaten und ein paar Daten aus meiner Wärmepumpe.
Code: Alles auswählen
string stdout;
string stderr;
integer xLen = 0;
integer xPos = 0;
string strFilter = "xyz";
string strResult;
string url ='http://ccu3-176.mydomain.tld:8181/test.exe?xyz=dom.GetObject(ID_SYSTEM_VARIABLES).Get("TH RSZG Humi").Value()';
system.Exec("wget --timeout=10 -q -O - '" # url # "'", &stdout, &stderr);
!stderr delivers only result with wget option -v instead of -q
WriteLine(stderr);
xPos = stdout.Find(strFilter) +4;
xLen = stdout.Length() - (xPos +12);
strResult = stdout.Substr(xPos, xLen);
WriteLine(strResult);
WriteLine("Hallo Welt!");
Anmerkungen:
- IP statt FQDN macht den (ersten) Aufruf schneller weil die Namensauflösung wegfällt, wenngleich nicht unbedingt best practise.
- Name der exe ist ja wohl völlig egal
- xyz=dom.GetObject... xyz ist ja nur das zurückgelieferte XML Tag. Zum Filtern sollte das Tag aber eindeutig sein(sprich x= ist schlecht).
- Port 8181 / 8183 macht bei mir (CCU3 zu CCU3) keinen Unterschied. Geht beides.
- dom.GetObject(ID_SYSTEM_VARIABLES).Get("TH RSZG Humi") und dom.GetObject("TH RSZG Humi") macht keinen Unterschied.
- Die Korrekturwerte +4 und (xPos +12) filtern die XML Tag vor und hinter dem Wert raus.
- Die Frage, warum "- (xPos +12)" und nicht "-xPos - 12", möge eQ3 beantworten, die haben es nicht so mit allgemeiner Mathematik.
- Anmeldung (wget mit --user UserName --password Passwort) war bei mir akut nicht erforderlich, muss ich testen, kann nicht schaden.
Warum es vorher nicht funktioniert hat war die Tatsache, dass da eine XML Struktur zurückkommt (kann man sich ja im Browser angucken). Sollte einer String variable eigentlich wurscht sein, ist es aber nicht. Das direkte Ausgeben von stdout liefert nichts.
Wenn ich den stdout aber auseinander rupfe, dann bekomme ich was ich will. Das brachte mich mal auf die Idee zu gucken, woran es scheitert, und siehe da
liefert den XML string, allerdings ohne die erste Klammer, also "xlm>" anstelle "<xml>"
jedoch
liefert nichts. Muss ich jetzt nicht unbedingt verstehen. Eigentlich kenne ich diese Funktion (aus anderern Programmiersprachen) nur so, das die 1 "starte mit dem ersten Zeichen" bedeutet.