Eine frage habe ich noch vergessen, die nach der openHAB Version. Ab openHAB3 geht es auf jeden Fall mit dem http2/3 Binding los.
Ich gebe hier die Definition als Text über *.things Dateien an, das Thing lässt sich aber ebenso gut über die UI erstellen, die Parameter stehen ohne Einschränkung auch dort zur Verfügung.
Code: Alles auswählen
Thing http:url:pvlog "FooPV Logger" [
baseURL="http://10.0.0.55/status.xml",
refresh=60
] {
Channels:
Type number : gPower "Gauge Power" [ stateTransformation="XPATH:/response/gauge_power", unit="W" ]
Type number : gTemp "Gauge Temp" [ stateTransformation="XPATH:/response/gauge_temp", unit="°C" ]
Type number : gVPV "Gauge VPV" [ stateTransformation="XPATH:/response/gauge_vpv", unit="V" ]
Type number : gIAC "Gauge IAC" [ stateTransformation="XPATH:/response/gauge_iac", unit="A" ]
Type number : eToday "Energy today" [ stateTransformation="XPATH:/response/energy_today", unit="kWh" ]
Type number : eTotal "Energy total" [ stateTransformation="XPATH:/response/energy_total", unit="kWh" ]
Type number : hTotal "Hours total" [ stateTransformation="XPATH:/response/hours_total", unit="h" ]
}
Der Parameter
unit steht ab ~ OH3.4 zur Verfügung, bei einer älteren Version lässt Du den weg.
Die passenden Items dazu (ebenfalls als Text... siehe oben):
Code: Alles auswählen
Number:Power PV_Power "Leistung" {channel="http:url:pvlog:gPower", unit="W", stateDescription=""[pattern="%.1f W"]}
Number:Temperature PV_Temp "Temperatur" {channel="http:url:pvlog:gTemp", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:ElectricPotential PV_VPV "Spannung" {channel="http:url:pvlog:gVPV", unit="V", stateDescription=""[pattern="%.1f V"]}
Number:ElectricCurrent PV_IAC "Strom" {channel="http:url:pvlog:gIAC", unit="A", stateDescription=""[pattern="%.1f A"]}
Number:Energy PV_Today "Arbeit heute" {channel="http:url:pvlog:eToday", unit="kWh", stateDescription=""[pattern="%.1f kWh"]}
Number:Energy PV_Total "Arbeit gesamt" {channel="http:url:pvlog:eTotal", unit="kWh", stateDescription=""[pattern="%.1f kWh"]}
Number:Time PV_Laufz "Betriebsstunden" {channel="http:url:pvlog:hTotal", unit="h", stateDescription=""[pattern="%.1f h"]}
Hier steht der Parameter
unit ab OH4.0 zur Verfügung.
Nutzt Du
unit im Channel, so ist die Verwendung des passenden UoM (Unit of Measurement) Items dringend zu empfehlen, ab OH4 ist dann der Parameter unit verpflichtend (gehört zu den Metadaten).
In künftigen Versionen von openHAB wird die Verwendung von UoM zwingend sein, wenn der Channel als QuantityType (das ist der Datentyp für UoM) zur Verfügung steht - momentan ist es lediglich empfohlen. Es ist also empfehlenswert, sich in das Thema einzuarbeiten, um später gerüstet zu sein.
Unter der Voraussetzung, dass ich die Einheiten korrekt geraten habe
und die Parameter so zur Verfügung stehen (also OH4.x), hast Du anschließend die Daten als Zahlen mit Einheit im Item vorliegen.
Falls die Einheit im Channel falsch ist (z.B. mA statt A, oder Wh statt kWh) kannst Du die Einheit dort einfach passend ändern, siehe auch
https://www.openhab.org/docs/concepts/u ... ement.html als Liste der möglichen Einheiten. Und ganz wichtig: auch exotischere Einheiten (z.B. d°C, zehntel ° Celsius, also die Temperatur, aber mit um eine Stelle nach rechts verschobenem Komma) sind hier möglich.
Die unit im Item bestimmt, in welcher Form die Daten in der Persistence landen, es ist also ganz wichtig, dass diese Größe schon zu Beginn korrekt gewählt wird, sie sollte später nicht mehr geändert werden, sonst entstehen unschöne Sprünge in den Charts und Fehler in Summen- und Durchschnittsberechnungen.
In welcher Form der Wert angezeigt wird, ist hingegen zu jedem Zeitpunkt änderbar über das Pattern.
Alle drei Parameter (unit im Channel, unit im verlinkten Item und pattern des selben Items) sind unabhängig voneinander, müssen aber logischerweise innerhalb der Einheit korrekt sein. Du kannst die Temperatur aber ohne weiteres in d°C empfangen, in K speichern und in °F anzeigen lassen (ohne Dich mit Umrechnungsfaktoren oder Kommaverschiebung rumschlagen zu müssen - das ist der große Pluspunkt von UoM).
Zur Not kannst Du UoM auch komplett weg lassen, dann halt ohne unit Parameter in den Channels und ohne QuantityType Items (nur Number).
Bei XPATH kämpfe ich immer etwas mit dem anzugebenden Path, allerdings sollte der identisch zu dem in der Rule sein.
Solltest Du noch mit openHAB2 unterwegs sein, so gibt es evtl. irgendwo in den Tiefen der englischen Community noch einen Link auf das http2 Binding, das leider nie offiziell Teil von openHAB2 war - ich habe es aber erfolgreich verwendet und kann notfalls auch die *.jar zur Verfügung stellen (bin aber gerade nicht Zuhause...) Unter openHAB2 steht UoM für http nicht zur Verfügung.
Ansonsten bliebe immer noch der Weg über das http1 Binding, welches ohne Einschränkungen auch in openHAB2 zur Verfügung steht. Allerdings geht damit auch noch der Witz der Transformation verloren
so dass Du am Ende doch eine Rule bräuchtest.
Wenn alle Stricke reißen, kannst Du aber zumindest immer noch die Rule anpassen, so dass aus den gelieferten Strings per
Float::parseFloat(<String>) aus dem gelieferten Text direkt eine Zahl erzeugt wird.
Falls die Zahl ein Komma statt eines Punktes als Dezimaltrenner beinhaltet, müsste das zuvor entsprechend ersetzt werden, da die DSL zwingend mit Punkt als Dezimaltrenner arbeitet.
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.7, LXC), mit openHABian eingerichtet