Hallo
Ich habe das Problem bereits gelöst und will euch hier eine kleine Zusammenfassung meines Problems mit meiner Lösung posten!
Umgebung
- Shelly Gen2 / Gen3 (z. B. Shelly Plus 2PM)
- Interner Temperatursensor
- Shelly Script schreibt Temperatur in KVS
- Excel VBA liest Werte über KSV.Get
Problem
Die Temperaturwerte sind am Shelly korrekt, aber in Excel falsch:
- Shelly Web-Interface → korrekt
- Shelly Script Konsole → korrekt
- Browser-Abfrage http://<ip>/rpc/KVS.Get?key=temp_100 → korrekt
- Excel zeigt veraltete oder komplett falsche Werte
Beispiel:
- Shelly Konsole: 53,4 °C
- Excel: 14,7 °C
Shelly Script
Code
function updateTemp() {
Shelly.call(
"HTTP.GET",
{ url: "http://127.0.0.1/rpc/Temperature.GetStatus?id=100" },
function(res) {
let json = JSON.parse(res.body);
Shelly.call("KVS.Set", {
key: "temp_100",
value: json.tC,
ttl: 0
});
print("Sensor 100 =", json.tC, "°C");
}
);
}
updateTemp();
Alles anzeigen
Der Wert wird korrekt gespeichert und aktualisiert!
Ursache
Nicht Shelly, nicht der Sensor – sondern Excel/VBA.
Die Hauptprobleme waren:
- HTTP-Caching
- Excel verwendet bei identischen URLs zwischengespeicherte Antworten
- Falsche JSON-Prüfung
- If Not JSON("value") Is Nothing → Objekt erforderlich
- Dezimaltrennzeichen ( . vs , )
- Kein Zeitstempel → keine Kontrolle, ob der Wert aktuell ist
Lösung
- Temperatur ausschließlich aus dem KVS lesen
- URL mit Cache-Busting-Parameter versehen
- JSON.Exists("value") verwenden
- Optional Zeitstempel zur Kontrolle speichern
VBA-Code
Code
Sub ReadShellyTemperature()
Dim ip As String
Dim url As String
Dim http As Object
Dim json As Object
Dim tempValue As Double
ip = "192.168.0.241"
url = "http://" & ip & "/rpc/KVS.Get?key=temp_100&_=" & _
Format(Now, "yyyymmddhhmmss")
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.Send
Set json = JsonConverter.ParseJson(http.responseText)
If json.Exists("value") Then
tempValue = CDbl(json("value"))
Debug.Print "Temperatur:", tempValue
End If
End Sub
Alles anzeigen
Ergebnis
- Excel-Wert = Shelly-Konsole = KVS-Wert
- Keine veralteten Messungen mehr
- Verhalten reproduzierbar und stabil
Daher
Shelly RPC & KVS funktionieren korrekt
Sensorwerte sind zuverlässig
Excel/VBA benötigt explizites Cache-Busting und saubere JSON-Behandlung
Beim Auslesen von Shelly-KVS aus externen Systemen immer Caching verhindern!