
Binding für Gerät mit Webserver (Steca-Wechselrichter)
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Und am Rande
man kann beim number Channel dann auch ohne Probleme die unit setzen und fortan mit QuantityType arbeiten,

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 93
- Registriert: 16. Jan 2023 19:27
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Danke, das sieht besser aus damit! Wie bist du darauf gekommen ... das mit dem
Value∩JS:|input == '' ? 0 :parseFloat(input)
Verstehe nicht, wie man das rausfindet .... Was ich hatte konnte man in der Doku finden (wenn ich auch lange gebraucht hab).
Value∩JS:|input == '' ? 0 :parseFloat(input)
Verstehe nicht, wie man das rausfindet .... Was ich hatte konnte man in der Doku finden (wenn ich auch lange gebraucht hab).
-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Du kannst bei Transformationen mehrere Aufträge verketten (nacheinander ablaufen lassen). Hier wird mit JS=Javascript gleich noch ein Leerstring durch 0 ersetzt bzw. der als Text vorliegende Wert in eine Zahl umgewandelt. Wird in der kommenden Version 4.3 sogar noch mal ein Ticken einfacher.
-
- Beiträge: 93
- Registriert: 16. Jan 2023 19:27
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Immer wenn ich denke ich hab es endlich kapiert klappt es nicht.
curl http://192.168.3.241/gen.yield.year.chart.js liefert etwa so was:
Und in regexp eingegeben klappt das hier und mit wird die gewünschte 2.253 ausgegeben.
Trotzdem liefert mir das hier nur NULL:
Noch eine kurze Frage zu einem http Bindung Thing. Kann man mit einem Thing mehrere Seiten abgfragen?
Also diese
http://192.168.3.241/gen.yield.year.chart.js
http://192.168.3.241/measurements.xml
Ich erzeuge (oder versuche es), die Thing/Items via openhab Web-IF zu erzeugen. Das mit xm klappt jetzt, aber ich bekomme das obige nicht mehr hin.
curl http://192.168.3.241/gen.yield.year.chart.js liefert etwa so was:
Code: Alles auswählen
input.setAttribute("value", "2024");
document.getElementById("labelValueId").innerHTML = " 2.253kWh 2024";
document.getElementById("buttonPrevId").disabled = false;
Code: Alles auswählen
.*innerHTML.*([0-9]+\.[0-9]+)
Trotzdem liefert mir das hier nur NULL:
Code: Alles auswählen
UID: http:url:Wechselrichter_gesamt
label: Wechselrichter_gesamt
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: http://192.168.3.241/gen.yield.year.chart.js
delay: 0
stateMethod: GET
refresh: 3
commandMethod: GET
timeout: 3000
bufferSize: 9048
channels:
- id: Wechselrichter_total_channel
channelTypeUID: http:string
label: Wechselrichter_total_channel
description: ""
configuration:
stateTransformation: REGEX:.*innerHTML.*([0-9]+\.[0-9]+)
Also diese
http://192.168.3.241/gen.yield.year.chart.js
http://192.168.3.241/measurements.xml
Ich erzeuge (oder versuche es), die Thing/Items via openhab Web-IF zu erzeugen. Das mit xm klappt jetzt, aber ich bekomme das obige nicht mehr hin.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Ja, da fehlt am Ende noch ein .*
Der Punkt ist, dass REGEX immer auf den gesamten String matchen muss. Nur dann liefert REGEX den Teil innerhalb der ersten Klammer als Wert.
Sobald der Ausdruck korrekt funktioniert, solltest Du den Channel auf number umstellen. Der number Channel kennt zusätzlich einen Parameter unit, den Du dann passend auf kWh setzen kannst:
Code: Alles auswählen
stateTransformation: REGEX:.*innerHTML.*([0-9]+\.[0-9]+).*
^^
Sobald der Ausdruck korrekt funktioniert, solltest Du den Channel auf number umstellen. Der number Channel kennt zusätzlich einen Parameter unit, den Du dann passend auf kWh setzen kannst:
Code: Alles auswählen
UID: http:url:Wechselrichter_gesamt
label: Wechselrichter_gesamt
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: http://192.168.3.241/gen.yield.year.chart.js
delay: 0
stateMethod: GET
refresh: 3
commandMethod: GET
timeout: 3000
bufferSize: 9048
channels:
- id: Wechselrichter_total_channel
channelTypeUID: http:number
label: Wechselrichter_total_channel
description: ""
configuration:
stateTransformation: REGEX:.*innerHTML.*([0-9]+\.[0-9]+).*
unit: kWh
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 93
- Registriert: 16. Jan 2023 19:27
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Danke - das war es tatsächlich.
Ich bin ja kein Held in regexp, aber ich hab mich auf https://regex101.com/ verlassen. Das zeigt die Zahl auch ohne .* als Group an.
Noch mal zum dem http-Binding thing. Ich hab jetzt zwei Things angelegt, weil die Basis-URL bei mir nicht nur die IP, sondern auch die Web-Page beinhaltet. Kann man die (um nur mit einem http Thing zu arbeiten) auch in den Channel verlegen? Also statt zwei Things mit jeweils einem Channel nur ein Thing mit zwei Channels ?
Ich bin ja kein Held in regexp, aber ich hab mich auf https://regex101.com/ verlassen. Das zeigt die Zahl auch ohne .* als Group an.

Noch mal zum dem http-Binding thing. Ich hab jetzt zwei Things angelegt, weil die Basis-URL bei mir nicht nur die IP, sondern auch die Web-Page beinhaltet. Kann man die (um nur mit einem http Thing zu arbeiten) auch in den Channel verlegen? Also statt zwei Things mit jeweils einem Channel nur ein Thing mit zwei Channels ?
-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Moin,
du kannst als baseURL: http://192.168.3.241/ und bei den Channels unter "Status-URL Erweiterung" gen.yield.year.chart.js bzw. measurements.xml eintragen.
PS: Bei dem chart.js-Ding bin etwas unsicher. Könnte dies nicht zum Jahreswechsel Probleme geben, wenn der Wert kein Punkt mehr enthält? Ich bin heute Vormittag an der RegEx-Geschichte gescheitert und habe nur eine etwas unschönere Lösung mit JavaScript hin bekommen.
du kannst als baseURL: http://192.168.3.241/ und bei den Channels unter "Status-URL Erweiterung" gen.yield.year.chart.js bzw. measurements.xml eintragen.
PS: Bei dem chart.js-Ding bin etwas unsicher. Könnte dies nicht zum Jahreswechsel Probleme geben, wenn der Wert kein Punkt mehr enthält? Ich bin heute Vormittag an der RegEx-Geschichte gescheitert und habe nur eine etwas unschönere Lösung mit JavaScript hin bekommen.
Code: Alles auswählen
JS:|parseFloat(input.split('kWh')[0].split('"').slice(-1)[0].replaceAll('.',''))
-
- Beiträge: 93
- Registriert: 16. Jan 2023 19:27
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Ja, das chart.js ist schon aus anderen Gründen nicht wirklich genial.
Es gibt eine page "gen.yield.total.chart.js", die generiert wirklich eine Gesamtleistung. Allerdings in MWh und damit "nur" mit einer Auflösung in 0.001 = 1kWh
Die "gen.yield.year.chart.js" dagegen in kWh, aber leider in dieser Form:
Also eigentlich müsste man die Zahlen im data [] zusammenrechnen, weil sonst beginnt es im neuen Jahr wieder mit "0". Aber das überfordert mich im Moment. Wenn es bei 12 Einträgen bleibt, kann man das wahrscheinich mit einem enstprechend langen Regexp hinbekommen. Nur kann man damit auch rechnen in der Regexp? Naja, hab noch ein paar Tage das rauszubekommen. Mein alter WR war gestorben, der neue (gebrauchte) hat doch ein etwas anderes Web-IF.
Es gibt eine page "gen.yield.total.chart.js", die generiert wirklich eine Gesamtleistung. Allerdings in MWh und damit "nur" mit einer Auflösung in 0.001 = 1kWh
Die "gen.yield.year.chart.js" dagegen in kWh, aber leider in dieser Form:
Code: Alles auswählen
...
"data": [
0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,2.865000]
}
]
}
var max = 50;
var steps = 1;
var input = document.getElementById("inputId");
input.setAttribute("min", "2012");
input.setAttribute("max", "2024");
input.setAttribute("value", "2024");
document.getElementById("labelValueId").innerHTML = " 2.865kWh 2024";
document.getElementById("buttonPrevId").disabled = false;
-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
ok, dachte "labelValueId" enthält den Jahreswert mit formatierten 2865 kWh. Data scheint ja Teil eines größeren JSON zu sein. Das sollte sich gut auslesen und mit einer Schleife aufaddieren lassen.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Binding für Gerät mit Webserver (Steca-Wechselrichter)
Ja, das wäre durchaus möglich. Der passende REGEX Ausdruck ist aber auch nicht weiter kompliziert:
Code: Alles auswählen
stateTransformation: REGEX:.*innerHTML.*([0-9]+\.?[0-9]*).*
^
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet