mysql daten einlesen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

MaxWrestler
Beiträge: 237
Registriert: 11.12.2011, 12:19
Danksagung erhalten: 1 Mal

Re: mysql daten einlesen

Beitrag von MaxWrestler » 20.02.2013, 11:20

Sander hat geschrieben:Ist der Befehl für den http request :" http://<ccu-adresse>?x=dom.GetObject("<systemvariable>").State("<wert>")" richtig?
das muss :D so lauten,

Code: Alles auswählen

http://IP_der_CCU:8181/MaxWrestler.exe?x=dom.GetObject("<systemvariable>").State("<wert>");

Sander
Beiträge: 11
Registriert: 28.01.2013, 10:41

Re: mysql daten einlesen

Beitrag von Sander » 20.02.2013, 11:55

super, das funktioniert :-)

kallo
Beiträge: 66
Registriert: 05.02.2011, 18:02

Re: mysql daten einlesen

Beitrag von kallo » 23.02.2013, 18:39

MaxWrestler hat geschrieben:
Sander hat geschrieben:Ist der Befehl für den http request :" http://<ccu-adresse>?x=dom.GetObject("<systemvariable>").State("<wert>")" richtig?
das muss :D so lauten,

Code: Alles auswählen

http://IP_der_CCU:8181/MaxWrestler.exe?x=dom.GetObject("<systemvariable>").State("<wert>");
Genau das habe ich gesucht. Genial.
Nun mein Problem:
Ich lese meinen Stromzähler per D0-Protokoll aus und sammle alle Daten in einer TXT-Datei. Nun möchte ich jede 15 Minuten die Verbrauchswerte in eine Variable der CCU schreiben. Mit dem oben genannten Tipp klappt das manuell hervoragend. Auf dem Server, wo die TXT liegt, möchte ich nun ein kleines Script laufen lassen, welches alle 15 Minuten den letzten Satz der TXT liest, den Zählerstand dort ermittelt und an die CCU sendet. Ich bin aber leider nur ABAP-Programmierer und habe hier zu Hause kein SAP-System :D
Könnt ihr mir ein Tipp geben, mit welcher Umgebung (Programmierung) ich mir das selber erlernen kann? Sollte möglichst einfach sein.

Gruß
Karsten

Lueghi
Beiträge: 630
Registriert: 01.11.2007, 21:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Siebengebirge (bei Bonn)
Hat sich bedankt: 18 Mal
Danksagung erhalten: 2 Mal

Re: mysql daten einlesen

Beitrag von Lueghi » 23.02.2013, 21:00

Wenn Du NUR Werte von einem anderen Server/Rechner in die CCU schreiben willst, dann geht das auch sehr einfach mit dem Addon dbaccess. Findest Du IMHO auf Kaju's Seite oder irgendwo hier in den Tiefen des Forums ... :).
Gruß Stefan

kallo
Beiträge: 66
Registriert: 05.02.2011, 18:02

Re: mysql daten einlesen

Beitrag von kallo » 23.02.2013, 22:18

Lueghi hat geschrieben:Wenn Du NUR Werte von einem anderen Server/Rechner in die CCU schreiben willst, dann geht das auch sehr einfach mit dem Addon dbaccess. Findest Du IMHO auf Kaju's Seite oder irgendwo hier in den Tiefen des Forums ... :).
Hallo Lueghi,
hab das Addon gerade mal ergoogelt. Es hilft mir aber nicht, den Import in die CCU auf eine Systemvariable zu automatisieren.
Ich brauche ein Script, welches den letzten Datensatz einer TXT-Datei ausliest und z.Bsp. hiermit (http://IP_der_CCU:8181/MaxWrestler.exe?x=dom.GetObject("<systemvariable>").State("<wert>");) in die CCU schreibt.

Gruß Karsten

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 35 Mal

Re: AW: mysql daten einlesen

Beitrag von Familienvater » 23.02.2013, 22:27

Hallo Karsten,

Da unsere Glaskugeln momentan wegen Schneegestöber kein Bild liefern, müsstest Du evtl. mehr Details zum Server/seinem Betriebssystem liefern...

Der Familienvater

Gesendet von meinem Nexus 7 mit Tapatalk 2

kallo
Beiträge: 66
Registriert: 05.02.2011, 18:02

Re: mysql daten einlesen

Beitrag von kallo » 23.02.2013, 23:25

Hallo Familienvater,
stimmt, bei mir liegen 10 cm Neuschnee. Aber ich lüfte das Geheimniss.

Fang mal ganz am Anfang an.
Ich lese meinen Stromzähler mit einem D0-Optokopf aus und damit landen Leistung und Zählerstand in der Software EDL-Cockpit von EasyMeter, die auf meinem Windows-Homeserver (WHS mit Windows Server 2003) 24/7 läuft. Zusätzlich schreibt die Software EDL-Cockpit alle 2 Sek. Leistung und Zählerstand in eine TXT-Datei.
Nun hätte ich gern den Zählerstand in der TXT-Datei alle 15 Minuten in der CCU, damit sie dort a) über die CCU-Historian auswertbar sind und b) über CCU-Historian als CSV exportierbar sind.
Damit dies alle 15 Minuten automatisch passiert, brauche ich ein Windows-Script, welches den letzten Datensatz der TXT-Datei ausliest und in die CCU sendet. So meine Vorstellung. Hast DU eine Idee, wie ich dies angehen könnte? Bin nur ABAP-Entwickler (SAP) und habe mit Windows-Programmierumgebungen nichts am Hut.
Gruß
Karsten

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 35 Mal

Re: AW: mysql daten einlesen

Beitrag von Familienvater » 23.02.2013, 23:43

Moin,

also eigentlich würde ich das ganze mit tail, cut und wget machen. Das sind eigentlich unix-Tools, die gibt es auch für Windows. Aber der Homeserver wird bestimmt VB-Script können, damit sollte es auch gehen.
Wie ist die Datei aufgebaut? Welche Felder sind in der Zeile enthalten?
Schreibt Deine Software wirklich alle 2 Sekunden einen Wert bzw. Zeile in die Datei? Dann könnte es evtl. Zugriffs/Gleichzeitigkeitsprobleme geben.

Der Familienvater

Gesendet von meinem Galaxy Nexus mit Tapatalk 2

kallo
Beiträge: 66
Registriert: 05.02.2011, 18:02

Re: mysql daten einlesen

Beitrag von kallo » 23.02.2013, 23:50

Hier die Datei:
Dateianhänge
Stromzaehlerwerte.PNG
Stromzaehlerwerte

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 35 Mal

Re: mysql daten einlesen

Beitrag von Familienvater » 24.02.2013, 12:41

Moin,

folgendes VBScript habe ich mal schnell zusammengegoogelt und getestet, es sollte den letzten Wert der letzten Zeile der Datei an eine ccu mit Namen CCU in die Systemvariable Heute NT übertragen. Es kann sein, das es Probleme gibt, wenn die Datei durch das schreibende Programm dauernd zum schreiben geöffnet ist, oder das Script bei zu vielen Zeilen zu lange braucht, und dann das andere Programm nicht mehr schreiben könnte....

Einfach alles in eine Text-Datei mit der Endung .vbs kopieren und am Anfang evtl. die ' wscript.echo wieder einkommentieren durch löschen des ' , dann kommen Messageboxen, die Dir Infos anzeigen.

Ich kann kein ABAP, aber da Du programmieren kannst, solltest Du Dir das Script an Deine Verhältnisse anpassen können. Und wenn das dann manuell geht, dann musst Du nur noch einen geplanten Task dafür einrichten, das es alle 15 Minuten ausgeführt wird.

Code: Alles auswählen

Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("test.txt", 1)  '<- HIER den Dateinamen der Datei mit den Werten reinschreiben, am besten mit Laufwerk und PFad
Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
     i = i + 1
Loop
objFile.Close
'wscript.echo "Zeilen eingelesen: " & arrFileLines(Ubound(arrFileLines))

Dim Werte
Dim URL
Dim Parameter
Werte = Split(arrFileLines(Ubound(arrFileLines)), ";")

' wscript.echo "Letzte Zeile: " & Werte(Ubound(Werte)-1)

' Achtung: Der VariablenName muss bei enthaltenen Leerzeichen %-Codiert werden, siehe z.B. http://www.url-encode-decode.com/
' Hier im Beispiel heißt die Systemvariable 'Heute NT' -> Heute%20NT
URL="http://CCU:8181/MaxWrestler.exe?x=dom.GetObject(%22Heute%20NT%22).State(%22" & Werte(Ubound(Werte)-1) & "%22);"

' wscript.echo "Zusammengebaute URL: " & URL
Dim Antwort
Antwort=GetDataFromURL(URL,"GET","")

wscript.echo Antwort

Function GetDataFromURL(strURL, strMethod, strPostData)
  Dim lngTimeout
  Dim strUserAgentString
  Dim intSslErrorIgnoreFlags
  Dim blnEnableRedirects
  Dim blnEnableHttpsToHttpRedirects
  Dim strHostOverride
  Dim strLogin
  Dim strPassword
  Dim strResponseText
  Dim objWinHttp
  lngTimeout = 59000
  strUserAgentString = "http_requester/0.1"
  intSslErrorIgnoreFlags = 13056 ' 13056: ignore all err, 0: accept no err
  blnEnableRedirects = True
  blnEnableHttpsToHttpRedirects = True
  strHostOverride = ""
  strLogin = ""
  strPassword = ""
  Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  objWinHttp.SetTimeouts lngTimeout, lngTimeout, lngTimeout, lngTimeout
  objWinHttp.Open strMethod, strURL
  If strMethod = "POST" Then
    objWinHttp.setRequestHeader "Content-type", _
      "application/x-www-form-urlencoded"
  End If
  If strHostOverride <> "" Then
    objWinHttp.SetRequestHeader "Host", strHostOverride
  End If
  objWinHttp.Option(0) = strUserAgentString
  objWinHttp.Option(4) = intSslErrorIgnoreFlags
  objWinHttp.Option(6) = blnEnableRedirects
  objWinHttp.Option(12) = blnEnableHttpsToHttpRedirects
  If (strLogin <> "") And (strPassword <> "") Then
    objWinHttp.SetCredentials strLogin, strPassword, 0
  End If    
  On Error Resume Next
  objWinHttp.Send(strPostData)
  If Err.Number = 0 Then
    If objWinHttp.Status = "200" Then
      GetDataFromURL = objWinHttp.ResponseText
    Else
      GetDataFromURL = "HTTP " & objWinHttp.Status & " " & _
        objWinHttp.StatusText
    End If
  Else
    GetDataFromURL = "Error " & Err.Number & " " & Err.Source & " " & _
      Err.Description
  End If
  On Error GoTo 0
  Set objWinHttp = Nothing
End Function 
Der Familienvater

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“