JSON online herunterladen und formatieren

Mok_1988

Level-2
Beiträge
356
Reaktionspunkte
88
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

ich habe die Anfrage ob wir ein JSON File mit Wetterdaten auslesen und in WinCC darstellen können.

Gibt es ein geeignetes Tool um ein JSON File herunterzuladen und etwas zu formatieren damit man es leichter analysieren kann?
Das ganze würde ich per Skript in WinCC auswerten wollen und anschließend nur per interner Variable auf dem Bild darstellen

Mir fehlt lediglich der Ansatz das File zyklisch herunterzuladen und etwas zu formatieren.

Grüße
 
Ich nehm für sowas recht gerne Node RED.
Da kannst du per HTTP-Request deine Daten holen und dann dein JSON zerlegen und die Daten in irgendeiner Form irgendwohin schreiben.
Ist quasi so eine Art kostenloses Universal-Gateway. Die meisten Dinge lassen sich grafisch programmieren.
 
Super, vielen Dank für den Tipp. Habe mich etwas eingelesen und eingearbeitet in Node Red und habe es weitestgehend hinbekommen eine Datei zu erzeugen, die nur die gewünschten Daten enthält.

Mit dem Node "Write file" kann man ja nur die msg.payload schreiben. Das sieht immer noch etwas kryptisch aus. Kennst du noch eine Möglichkeit, wie ich nun die wenigen Daten in einzelne Zeilen kopieren kann?

Momentan sieht es so aus:
Code:
{"VAR_A":1,"VAR_B":2,"VAR_C":3}

Ich hätte es gerne so:
Code:
VAR_A: 1
VAR_B: 2
VAR_C: 3
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau dir mal die function bei Node RED an.
Damit kannst du eigene Funktionen in Javascript schreiben und so entweder eine eigene msg erstellen oder die payload ändern.
Bei youtube findet mal auch recht viel zu node RED.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Geht natürlich auch direkt in WinCC:
Code:
Dim oXMLHTTP
Dim oStream

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")

oXMLHTTP.Open "GET", "https://www.wwis.dwd.de/de/json/1347_de.xml", False
oXMLHTTP.Send

If oXMLHTTP.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 2
    oStream.WriteText (oXMLHTTP.responseBody)
    oStream.Position = 0
    oStream.Charset = "latin1"
    
    HMIRuntime.Trace(oStream.ReadText)
Else
    HMIRuntime.Trace("FEHLER")
End If

Für die Verarbeitung von Json bringt Vbs aber nichts mit. Da kannst du dir ggf. eine Klasse aus dem Internet zusammensuchen, oder je nach dem wie komplex das Json Objekt ist, reichen auch ein paar String-Funktionen um das gewünschte daraus zu extrahieren.
 
Die WinCC Rechner hängen nicht direkt im Netz, daher funktioniert das bei meiner Anlage nicht. Habe nun einen extra Rechner mit Node Red und verteile die Dateien übers Netzwerk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achso, ok. Aber das vbs Script kannst du so auch auf jedem Windows Rechner ausführen. Ob man für so eine triviale Aufgabe gleich NodeRed verwenden muss.

Natürlich kann man so eine Aufgabe auch leicht ohne Node RED lösen, aber Node RED ist eben ein Universalgateway und macht sowas extrem einfach.
 
Natürlich kann man so eine Aufgabe auch leicht ohne Node RED lösen, aber Node RED ist eben ein Universalgateway und macht sowas extrem einfach.
Ich weiß nicht was da einfacher ist, denn programmieren musst du es da doch auch. Außerdem den ganzen Krams installieren, einrichten, und dann das Programm auch regelmäßig auf aktuellem Stand halten. Denn du machst hier ja völlig unnötigerweise Serverdienste auf dem Rechner auf. Das hat eben auch etwas mit IT-Sicherheit zu tun.
 
Ich weiß nicht was da einfacher ist, denn programmieren musst du es da doch auch. Außerdem den ganzen Krams installieren, einrichten, und dann das Programm auch regelmäßig auf aktuellem Stand halten. Denn du machst hier ja völlig unnötigerweise Serverdienste auf dem Rechner auf. Das hat eben auch etwas mit IT-Sicherheit zu tun.

Im konkreten Fall kannst du die Aufgabe in Node RED graphisch lösen.
Um einen HTTP-Request in einer Programmiersprache zu lösen, musst du schon einiges nachlesen.
Das interne Message-System von Node RED arbeitet mit JSON. Das kommt einem bei der Aufgabe natürlich auch entgegen.
IT-Security ist natürlich ein Argument. Aber ein selbst programmierter HTTP-Request mit eigener Auswertung ist in dem Fall auch nicht zu verachten. Persönlich finde ich in dem Fall kleine IoT-Gateways auf Linux-Basis nur mit den notwendigen Diensten auch besser als Windows-Lösungen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber ein selbst programmierter HTTP-Request mit eigener Auswertung ist in dem Fall auch nicht zu verachten. Persönlich finde ich in dem Fall kleine IoT-Gateways auf Linux-Basis nur mit den notwendigen Diensten auch besser als Windows-Lösungen.
Ein selbst programmierter HTTP-Request? Dann lass mal einen IT-Sicherheitsfachmann bei dir antanzen, und zeig dem die 5 Zeilen Lösung, vs. deiner NodeRed Installation mit x Millionen Lines of Code die er prüfen soll.

Man kann es auch mit Powershell machen, alles komplett inklusive json Verarbeitung:
Code:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$d = Invoke-RestMethod -uri 'https://www.wwis.dwd.de/de/json/1347_de.xml' -Method get -UseDefaultCredentials
$o = foreach($date in $d.city.forecast.forecastDay){(-join($date.forecastDate,";",$date.minTemp,";",$date.maxTemp))}
$o | Out-File dump.txt

4 Zeilen, und dafür will jemand NodeRed installieren.
 
@Thomas_v2.1
Natürlich sind deine Argumente begründet.
Allerdings ist Node RED millionenfach im Einsatz.
Und das auch bei vielen großen IT-Firmen und Providern.
Die Basismodule sind ausgiebig getestet.
Installiert man exotische Module, dann ist das Risiko vorhanden … Ganz klar.

Mit dem aktuellen Hype um Low Code wird die Diskussion um Security sicher wieder geführt werden müssen.
Da macht mir Node RED noch die wenigsten Sorgen
 
Allerdings ist Node RED millionenfach im Einsatz.
Und das auch bei vielen großen IT-Firmen und Providern.
Die Basismodule sind ausgiebig getestet.
Da will ich nicht widersprechen – sehe da aber kein Argument in Sachen Sicherheit.

Erstens macht es für Angreifer Sinn, sich auf weit verbreitete Systeme zu konzentrieren (als lohnenswerte Basis) und zweites kann man sich als Angreifer darauf verlassen, dass zahlreiche Systeme nicht gewartet werden, d.h. dass bekannte und eigentlich behobene Lücken noch eine weile nutzbar sind.

Wer so etwas nutzt, muss seine System im Blick haben und alle Updates durchführen.

Selber frickeln macht nur Sinn, wenn man genau weiß, was man tut. Die Hackertools finden natürlich auch selbst gebaute Schwachstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Selber frickeln macht nur Sinn, wenn man genau weiß, was man tut. Die Hackertools finden natürlich auch selbst gebaute Schwachstellen.

Hier grätsche ich mal dazwischen:
Node RED kommt ganz sicher nicht aus der Frickel-Ecke.
Es kommt ursprünglich von IBM und ist seit 2013 Open Source.
Lange schon wird es von allen großen Cloudanbietern (Amazon, Microsoft, IBM, ...) unterstützt und als IoT-Lösung propagiert.
In die Frickelecke ist es erst durch die Smart-Home-Bastler geraten.
Hier gibt es ganz klar unsichere, schlecht getestete und supportete Module von denen man im professionellen Einsatz die Finger lassen sollte.
Beschränkt man sich auf die Kernfunktionen, dann ist Node RED ein sehr sicheres Tool genau für solche Anwendungsfälle wie eben hier.
 
Erstens macht es für Angreifer Sinn, sich auf weit verbreitete Systeme zu konzentrieren (als lohnenswerte Basis) und zweites kann man sich als Angreifer darauf verlassen, dass zahlreiche Systeme nicht gewartet werden, d.h. dass bekannte und eigentlich behobene Lücken noch eine weile nutzbar sind.

Node RED kommt ganz sicher nicht aus der Frickel-Ecke.
Sicher nicht. Habe ich auch nicht so geschrieben. Mir ging es nur darum, dass man solche Systeme (NodeRED, MQTT, Socker ... ) aktuell halten muss, auch ohne dass man frickelt. Weil Lücken, sobald sie bekannt sind, ausgenutzt werden.

Ist im Web doch auch so, Wordpress-Seiten sind deutlich erfolgreicher anzugreifen weniger bekannte Systeme.

Ich habe selber mal einen alte Joomla-Installation vergessen. Irgandwann hatte ich ein paar tausend SPAM-Mails im Posteingang, die nicht zustellbar waren. Ohen größere Folgen, der Provider hat relativ schnell die Reißleine gezogen.
 
Sicher nicht. Habe ich auch nicht so geschrieben. Mir ging es nur darum, dass man solche Systeme (NodeRED, MQTT, Socker ... ) aktuell halten muss, auch ohne dass man frickelt. Weil Lücken, sobald sie bekannt sind, ausgenutzt werden.
Der Grundsatz gilt aber für alle IT-Systeme.
Fängt beim Betriebssystem an und endet noch lange nicht bei Node RED :)
 
Zurück
Oben