TIA Mit Comfort Panel Wetterdaten auslesen

Screwkey

Level-1
Beiträge
12
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen :),

ich bin wieder mal jemand der eine Wettervorhersage braucht. Ich habe schon einiges darüber gefunden und mit einer Runtime z.b. auf einem PanelPC funktioniert auch alles.
Aber was ich bis jetzt nicht gefunden habe ist das ganze auf einem COMFORT PANEL. Dieses kann laut Recherche nämlich keine ActiveX Steuerelemente und auch so ist man beim VBscripting ziemlich eingeschränkt.

Bei den meisten Varianten gibt es oft 2 Scripte, eins zum abholen der Wetterdaten von z.b. weather365.net o.Ä., und eins zum einlesen in die Steuerung.

Zum abholen
Code:
'################################################################
'#                  Wetterdaten lesen                           #
'################################################################


Const DownloadDest = "https://api.weather365.net/foreign/citygeoip.php?tm=3&hpw=0&cityid=3098"
Const LocalFile = "C:\Weather\wetter.htm"
Const DownloadType = "binary"
'Const webUser =
'Const webPass =
Dim strURL


  Dim xmlhttp

  Set xmlhttp=CreateObject("MSXML2.ServerXMLHTTP.3.0")
  strURL = DownloadDest

  
  xmlhttp.open "GET", strURL, False
  xmlhttp.send
  
  If xmlhttp.status = 200 Then
    Dim FSO
    Set FSO=CreateObject("Scripting.FileSystemObject") 
    If FSO.FileExists(LocalFile) Then
      FSO.DeleteFile LocalFile
    End If
    Set FSO=Nothing
    
Dim objStream
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Type = 1 'adTypeBinary
    objStream.Open
    objStream.Write xmlhttp.responseBody
    objStream.SaveToFile LocalFile
    objStream.Close
    Set objStream = Nothing
End If

Set xmlhttp=Nothing

Set xmlhttp=CreateObject("MSXML2.ServerXMLHTTP.3.0") diese Zeile wird immer angemeckert, ok das Comfort Panel kann das wohl nicht. Dann hab ich einen kleinen PC an das Panel gehängt und lass diesen das Script ausführen, das funktioniert auch soweit.

Zum einlesen verwende ich dann dieses Script
Code:
On Error Resume Next
'version 1.5.2    
'letzte änderung: 2018.07.16
'gültig für neue wetterdatei
'extrahiert aus der antwort http://www.weather365.net/foreign/city3a.php?cityid=25079 die daten

Dim FSO2
Dim indatei
Dim outdatei

Set FSO2 = CreateObject("Scripting.FileSystemObject")
Set indatei = FSO2.OpenTextFile("\\SERVER\Weather\wetter.htm",1) 'name der heruntergeladenen datei
Set outdatei = FSO2.CreateTextFile("\\SERVER\Weather\wetter.txt",True) 'name der datei mit den extrahierten daten


Dim startpos, inzeile, endpos, index, suchebody, body_gefunden
Dim ort_gefunden, ort
Dim weitere(24)
index=1
'datei einlesen 
Do While indatei.AtEndOfStream <> True
  startpos = 0
    inzeile = LTrim(indatei.ReadLine)
    'diverse zeichen ersetzen
    inzeile = Replace(inzeile,Chr(9),"") 'tab

'<body> finden
    suchebody = InStr(inzeile,"<body>")
    If suchebody > 0 Then 
        body_gefunden = 1
    End If

    If body_gefunden = 1 Then
        'ort
        startpos = InStr(inzeile,"<a href")
        If startpos > 0 And ort_gefunden = 0 Then
            ort_gefunden = 1
            'finde > hinter href. also start der daten
            startpos = InStr(inzeile,">")
            'finde < .also ende der daten
            endpos=InStr(startpos+1,inzeile,"<")
            ort = Mid(inzeile,startpos+1,endpos-startpos-1)
            outdatei.WriteLine ort
        End If
        'weitere
        startpos = InStr(inzeile,"<td class")
        If startpos > 0 Then 'and ort_gefunden = 0 then
            'finde <td class. anfang daten
            startpos = InStr(inzeile,">")
            endpos=InStr(startpos+1,inzeile,"<")
            weitere(index) = Mid(inzeile,startpos+1,endpos-startpos-1)
            ' °C entfernen
            weitere(index) = Replace(weitere(index),"°C","")
'            outdatei.writeline weitere(index)
            index = index + 1
        End If
    End If
Loop

'daten erst am ende schreiben um gleiche reihenfolge zu haben wie vorher
outdatei.WriteLine weitere(1)    'tag
outdatei.WriteLine weitere(5)    'max
outdatei.WriteLine weitere(9)    'min
outdatei.WriteLine weitere(13)    'Niederschlagswahrscheinlichkeit
outdatei.WriteLine weitere(17)    'Wind
outdatei.WriteLine weitere(21)    'Richtung

outdatei.WriteLine weitere(2)
outdatei.WriteLine weitere(6)
outdatei.WriteLine weitere(10)
outdatei.WriteLine weitere(14)
outdatei.WriteLine weitere(18)
outdatei.WriteLine weitere(22)

outdatei.WriteLine weitere(3)
outdatei.WriteLine weitere(7)
outdatei.WriteLine weitere(11)
outdatei.WriteLine weitere(15)
outdatei.WriteLine weitere(19)
outdatei.WriteLine weitere(23)

outdatei.WriteLine weitere(4)
outdatei.WriteLine weitere(8)
outdatei.WriteLine weitere(12)
outdatei.WriteLine weitere(16)
outdatei.WriteLine weitere(20)
outdatei.WriteLine weitere(24)

outdatei.Close

'daten in DB schreiben

SmartTags("db_wetter_neu_wetter.ort") = ort

SmartTags("db_wetter_neu_wetter.tag1_tag") = weitere(1)    'tag
SmartTags("db_wetter_neu_wetter.tag1_temax") = weitere(5)    'max
SmartTags("db_wetter_neu_wetter.tag1_temin") = weitere(9)    'min
SmartTags("db_wetter_neu_wetter.tag1_regen") = weitere(13)    'Niederschlagswahrscheinlichkeit
SmartTags("db_wetter_neu_wetter.tag1_wind") = weitere(17)    'Wind
SmartTags("db_wetter_neu_wetter.tag1_wrichtung") = weitere(21)    'Richtung

SmartTags("db_wetter_neu_wetter.tag2_tag") = weitere(2)    'tag
SmartTags("db_wetter_neu_wetter.tag2_temax") = weitere(6)    'max
SmartTags("db_wetter_neu_wetter.tag2_temin") = weitere(10)    'min
SmartTags("db_wetter_neu_wetter.tag2_regen") = weitere(14)    'Niederschlagswahrscheinlichkeit
SmartTags("db_wetter_neu_wetter.tag2_wind") = weitere(18)    'Wind
SmartTags("db_wetter_neu_wetter.tag2_wrichtung") = weitere(22)    'Richtung

SmartTags("db_wetter_neu_wetter.tag3_tag") = weitere(3)    'tag
SmartTags("db_wetter_neu_wetter.tag3_temax") = weitere(7)    'max
SmartTags("db_wetter_neu_wetter.tag3_temin") = weitere(11)    'min
SmartTags("db_wetter_neu_wetter.tag3_regen") = weitere(15)    'Niederschlagswahrscheinlichkeit
SmartTags("db_wetter_neu_wetter.tag3_wind") = weitere(19)    'Wind
SmartTags("db_wetter_neu_wetter.tag3_wrichtung") = weitere(23)    'Richtung

SmartTags("db_wetter_neu_wetter.tag4_tag") = weitere(4)    'tag
SmartTags("db_wetter_neu_wetter.tag4_temax") = weitere(8)    'max
SmartTags("db_wetter_neu_wetter.tag4_temin") = weitere(12)    'min
SmartTags("db_wetter_neu_wetter.tag4_regen") = weitere(16)    'Niederschlagswahrscheinlichkeit
SmartTags("db_wetter_neu_wetter.tag4_wind") = weitere(20)    'Wind
SmartTags("db_wetter_neu_wetter.tag4_wrichtung") = weitere(24)    'Richtung

Hat auf einem PanelPC wunderbar funktioniert. Auf einem COMFORT PANEL bekomm ich es nicht zum laufen. Oder sagen wir so, es gibt keine Werte in den DB aus und legt auch die txt-Datei nicht an. Fehler gibt es auch nicht aus.

Der kleine PC hat Win7 drauf. Das Panel heißt "HMI" und ist auf dem PC als Benutzer mit Passwort angelegt. Das Panel fragt auch beim hochfahren immer nach dem Passwort. Der Ordner Weather ist auch freigegeben.
Ich lege auch schon mit einem ähnlichen Pfad Archive auf dem PC ab, und das funktioniert. Die Verbindung sollte also stehen.

Mein Wunsch wäre es erstmal bei diesem Kunden es mit dem kleinen PC hinzubekommen.
ABER später auch NUR MIT EINEM COMFORT PANEL, wenn es möglich ist!!

Danke schon mal für eure Hilfe :D

Grüßle Flo
 
Hi
erstmal was grundsätzliches. Wenn du "On Error Resume Next" machst gibt er klar keinen Fehler aus. Du solltest die Fehler behandeln dann siehst du vielleicht auch dein Problem. Ich persönlich hab die Fehler immer in ein eigenes Logfile geschrieben.

 
Übrigens unterscheidet sich die VB-Syntax an einigen Stellen zwischen PC (Windows) und Panel (WinCE), manches geht auch einfach nicht. Da hilft nur ein genauer Blick auf die WinCE-Syntax, wie sie in WinCC flex für Panel verwendet wird.
 
Zurück
Oben