udo1toni hat geschrieben:Kommen denn immer noch Kommunikationsfehler? Selbstheilung ist irgendwie immer spooky...
Was die Werte betrifft: Da Du explizit nach intValue wandelst, schneidet openHAB natürlich die Nachkommastellen ab. openHAB arbeitet mit Float als Zahlenwert. Float hat leider erhebliche Nachteile bei der Darstellung von Dezimalwerten, was die Genauigkeit betrifft. Allein dadurch könnten hier schon erhebliche Abweichungen vom durch Fronius berechneten Wert zustande kommen.
Änderungsvorschlag:
rule "Co² Einsparung"
when
Time cron "0 * * * * ?"
then
co2_solar.postUpdate(((Total_Energy.state as Number) * 53).intValue / 100)
end
Das sollte für eine Rundung auf zwei Nachkommastellen sorgen. Du könntest aber auch komplett auf das .intValue verzichten.
Die Fehlermeldung ist auch weiterhin da, nur zeigt er mir jetzt Werte an.
Habe die Regel so ähnlich im Internet gefunden und nach meinen Bedürfnissen angepasst. Also ich weiß nicht welchen Vorteil bzw Nachteil ich durch intValue habe. Wie würdest du es denn lösen?
Na ja, .intValue ergibt den Integer Wert der Zahl. Damit werden also alle Nachkommastellen abgeschnitten. Entweder, Du schiebst das entsprechend um zwei Stellen (wie in meinem Beispiel gezeigt) oder Du lässt es einfach weg, dann hat der Wert halt im Zweifel viele Nachkommastellen, was aber in der UI nicht auffallen dürfte, da hast Du die Ausgabe ja ohnehin auf zwei Nachkommastellen begrenzt.
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.9 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
udo1toni hat geschrieben:Na ja, .intValue ergibt den Integer Wert der Zahl. Damit werden also alle Nachkommastellen abgeschnitten. Entweder, Du schiebst das entsprechend um zwei Stellen (wie in meinem Beispiel gezeigt) oder Du lässt es einfach weg, dann hat der Wert halt im Zweifel viele Nachkommastellen, was aber in der UI nicht auffallen dürfte, da hast Du die Ausgabe ja ohnehin auf zwei Nachkommastellen begrenzt.
Perfekt es funktioniert. Habe jetzt noch einfach den Wert durch Addition so korrigiert dass es mit dem Wert vom Solarweb passt.
Zuerst installierst Du per papeUI das http-Binding.
Danach siehst Du in VSC im Ordner "services" eine Datei namens "http.cfg". Dort fügst Du folgende Zeilen ein:
//http-Binding
Number Current_L1 "Strom L1 [%2f A]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.Current_AC_Phase_1)]" }
Number Current_L2 "Strom L2 [%2f A]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.Current_AC_Phase_2)]" }
Number Current_L3 "Strom L3 [%2f A]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.Current_AC_Phase_3)]" }
Number PF_L1 "Leistungsfaktor L1 [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Phase_1)]" }
Number PF_L2 "Leistungsfaktor L2 [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Phase_2)]" }
Number PF_L3 "Leistungsfaktor L3 [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Phase_3)]" }
Number PF_sum "Leistungsfaktor Summe [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Sum)]" }
Number Energiebezug "bezogene Energie [%2f Wh AC]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.EnergyReal_WAC_Sum_Consumed)]" }
Number Energieeinspeisung "eingespeiste Energie [%2f Wh AC]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.EnergyReal_WAC_Sum_Produced)]" }
Die Liste kannst Du noch erweitern, das SmartMeter sendet noch mehr Werte. Für meine Zwecke genügt das.
Die Leistungswerte sind Wh, die musst Du noch in kWh umrechnen.
Zur Sicherheit OH einmal neu start
violine21 hat geschrieben: 18. Aug 2020 20:46
Zuerst installierst Du per papeUI das http-Binding.
Danach siehst Du in VSC im Ordner "services" eine Datei namens "http.cfg". Dort fügst Du folgende Zeilen ein:
//http-Binding
Number Current_L1 "Strom L1 [%2f A]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.Current_AC_Phase_1)]" }
Number Current_L2 "Strom L2 [%2f A]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.Current_AC_Phase_2)]" }
Number Current_L3 "Strom L3 [%2f A]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.Current_AC_Phase_3)]" }
Number PF_L1 "Leistungsfaktor L1 [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Phase_1)]" }
Number PF_L2 "Leistungsfaktor L2 [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Phase_2)]" }
Number PF_L3 "Leistungsfaktor L3 [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Phase_3)]" }
Number PF_sum "Leistungsfaktor Summe [%2f]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PowerFactor_Sum)]" }
Number Energiebezug "bezogene Energie [%2f Wh AC]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.EnergyReal_WAC_Sum_Consumed)]" }
Number Energieeinspeisung "eingespeiste Energie [%2f Wh AC]" { http="<[froniusrtd:30000:JSONPATH($.Body.Data.EnergyReal_WAC_Sum_Produced)]" }
Die Liste kannst Du noch erweitern, das SmartMeter sendet noch mehr Werte. Für meine Zwecke genügt das.
Die Leistungswerte sind Wh, die musst Du noch in kWh umrechnen.
Zur Sicherheit OH einmal neu start
Ganz lieben Dank für deine Mühe und dass du mir deine Daten zur Verfügung stellst.
Habe jetzt alles so eingegeben und abgespeichert. Den Neustart habe ich auch gemacht.
Leider werden mir keine Werte angezeigt in der Sitemap.
Finde auch in der PaperUI kein Thing für den Smart-Meter.
Kann auch kein Thing per PaperUI anlegen.
Edit: Ich musste nur JsonPath Transformation Service installieren dann hat es geklappt.
Wollt's gerade schreiben. Hab ich vergessen, mit aufzuführen.
Das hatte ich bereits vorher mal installiert, darum ist es mir gerade nicht gleich eingefallen.