Zweck der Zwei-Teilung: ReGa Blockade vermeiden, deshalb erst Datenabruf ohne Auswertung und Verarbeitung der Antwort erst nach eingetroffener Antwort.
Teil A Daten mit Skript abrufen und Antwort in Datei /tmp/DATEINAME.txt schreiben:
Code: Alles auswählen
!- url Daten-Quelle (nach Prüfung des http-Aufrufs im Browser !!!)
string url = "http://...
WriteLine("URL: " # url);
!- CUxD-Gerät und tmp-Datei
string CUXD_Device = "CUxD.CUX2801xxx:y";
string dateinamemitpfad = "/tmp/DATEINAME.txt"; !- zu schreibende Datei
!- Datenabruf starten:
dom.GetObject(CUXD_Device#".CMD_SETS").State("wget --tries=2 --timeout=10 --quiet --output-document=- '"#url#"' > " # dateinamemitpfad);
dom.GetObject(CUXD_Device#".CMD_RUNS").State(1);
WriteLine("Ende");
Code: Alles auswählen
dom.GetObject(CUXD_Device#".CMD_SETS").State("curl --connect-timeout 10 --max-time 10 'http://XYZ/json?cmd=weather' | jq '.| {Wetterpause: .weather.break, ZuRegnerisch: .weather.condition.toorainy}' > /tmp/wetterpause.txt");
Code: Alles auswählen
!- Variablendefinitionen
string stdout; !- Deklaration für system.Exec Befehl
string stderr;
string dateinamemitpfad = "/tmp/DATEINAME.txt"; !- zu lesende Datei
string antwort;
integer zahl; ! brauche ich meist bei der Auswertung
!- Lesen der Antwort
system.Exec("cat " # dateinamemitpfad, &antwort);
WriteLine("Antwort: " # antwort);
Auswertungen mache ich mit jq (ist Bestandteil von Raspberrymatic, ich weiss nicht ob jq auch bei CCU2/3 dabei ist)
jq ist unheimlich mächtig, ich bin entsprechend meinem Bedarf an der Oberfläche geblieben
https://stedolan.github.io/jq/manual/#Basicfilters
Antwort auswerten
Code: Alles auswählen
!- printf gibt an Konsole aus, echo was ausgegeben werden soll, Ziel: Stringvariable stdout, Auswertebegriff hier .observations.[0].stationID
system.Exec("printf $(echo '"#antwort#"' | jq '.observations.[0].stationID')", &stdout, &stderr);
dom.GetObject('MEINE_SV').State(stdout); ! Schreiben der entsprechenden SV
WriteLine("MeineSV: " # stdout);
weitere jq Beispiele:
Code: Alles auswählen
jq '.observations' ! Gliederungsbegriff
jq '.observations.[0]' ! gibt erstes Element von observations zurück
jq '.observations.[0].stationID' ! gibt stationID des ersten Elements von observations zurück
Code: Alles auswählen
jq '.[632|tostring].name'