habe ein Problem mit einer API-Abfrage.
Ich möchte in eine Exceltabelle den täglichen Ertrag meiner PV-Anlage einlesen.
Der Wechselrichter ist über API zu erreichen:
Das funktioniert mit dieser VBA:
Sub js_json_api_solax()
Dim req As MSXML2.ServerXMLHTTP60
Dim apiURL, ret As String
Set req = New MSXML2.ServerXMLHTTP60
' Example API: Solax
apiURL = "https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=202403082244053660296xxx&sn=SWNAKZPxxx"
' Verbindung herstellen
req.Open "GET", apiURL, False
req.send
' Status in Zelle A5 ausgeben
Range("a5").Value = req.Status & " - " & req.statusText
' JSON unformatiert in A6 ausgeben
ret = req.responseText
Range("a6").Value = ret
' JSON parsen
Dim jsonObject As Object
Set jsonObject = JsonConverter.ParseJson(ret)
' Variable Temp ausgeben (in Watt)
Range("a7").Value = Round(jsonObject("result")("yieldtoday"))
End Sub
Das Ergebnis sieht so aus:
200 -
{"success":true,"exception":"Query success!","result":{"inverterSN":"XMT072G3042132","sn":"SWNAKZPLHQ","acpower":242.0,"yieldtoday":1.5,"yieldtotal":1490.5,"feedinpower":0.0,"feedinenergy":0.0,"consumeenergy":0.0,"feedinpowerM2":null,"soc":null,"peps1":null,"peps2":null,"peps3":null,"inverterType":"4","inverterStatus":"102","uploadTime":"2024-03-09 15:22:57","batPower":null,"powerdc1":252.0,"powerdc2":0.0,"powerdc3":null,"powerdc4":null,"batStatus":null},"code":0}
In "A7" lass ich mir dann "yieldtoday" ausgeben. Dieser Wert ist Original z.B. 1.5, wird aber in "A7" aufgerundet auf 2,0. angezeigt.
Warum?????
Das ist aber nur das kleinere Problem. Außerdem möchte ich aus meinem Stromzähler die kWh ausgeben.
Das Zählermodul von Powerfox ist auch über API auslesbar. Dafür nutzte ich die gleiche VBA, nur mit geänderter URL:
https://bscheff@t-online.de:ehb21bxxxx@backend.powerfox.energy/api/2/my/main/current?unit=kwh
Gebe ich diese in den Browser ein kommt als Ergebnis:
{"outdated":false,"watt":264,"timestamp":1709996595,"a_Plus":6689.116,"a_Minus":400.307}
Bei Nutzung der VBA
Sub js_json_api_powerfox()
Dim req As MSXML2.ServerXMLHTTP60
Dim apiURL, ret As String
Set req = New MSXML2.ServerXMLHTTP60
' Example API: Powerfox
apiURL = "https://bscheff@t-online.de:ehb21bxxx@backend.powerfox.energy/api/2/my/main/current?unit=wh"
' Verbindung herstellen
req.Open "", apiURL, False
req.send
' Status in Zelle A1 ausgeben
Range("a9").Value = req.Status & " - " & req.statusText
' JSON unformatiert in A2 ausgeben
ret = req.responseText
Range("a10").Value = ret
' JSON parsen
Dim jsonObject As Object
Set jsonObject = JsonConverter.ParseJson(ret)
' Variable Temp ausgeben (in Watt)
Range("a11").Value = Round(jsonObject("main")("a_Plus"))
End Sub
kommt aber der Fehler: Laufzeitfehler -2147012891 (80072ee5)
Systemfehler: -2147012891
' Verbindung herstellen
req.Open "GET", apiURL, False "Ist gelb markiert"
req.send
Ich komme nicht dahinter warum es nicht mit VBA funzt.
Bin für jeden Tipp dankbar.