Ich war mal so frei, den Code auch als Code zu markieren
Ich gehe davon aus, dass es konkret um diese Werte geht:
Code: Alles auswählen
var webdata_now_p = "90";
var webdata_today_e = "2.10";
var webdata_total_e = "388.7";
Gesetzt den Fall, dass die entsprechenden Schlüsselworte nur an dieser Stelle im Zusammenhang mit Zahlen auftauchen, wäre mein erster Versuch folgender:
Code: Alles auswählen
UID: http:url:deye
label: Deye-Wechselrichter
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: http://192.168.178.58/status.html
delay: 0
stateMethod: GET
refresh: 30
commandMethod: GET
timeout: 3000
bufferSize: 2048
channels:
- id: now
channelTypeUID: http:number
label: Now
description: ""
configuration:
mode: READONLY
stateTransformation: REGEX:.*now.*\"(\d+\.?\d*)\".*
unit: W
- id: today
channelTypeUID: http:number
label: Today
description: ""
configuration:
mode: READONLY
stateTransformation: REGEX:.*today.*\"(\d+\.?\d*)\".*
unit: kWh
- id: total
channelTypeUID: http:number
label: Total
description: ""
configuration:
mode: READONLY
stateTransformation: REGEX:.*total.*\"(\d+\.?\d*)\".*
unit: kWh
Ich habe allerdings gerade kein System zur Hand um es zu verifizieren. Hilfreich wäre auch eine komplette Antwort des Deye, nicht nur der "relevante" Auszug.
Es versteht sich von selbst, dass der REGEX Transformation Service installiert sein muss.
Mit dem unit-Parameter kommt die passende Einheit dazu (die ist jetzt nur geraten...) mit der korrekten Einheit kannst Du automatisch ein passendes Item erzeugen lassen (Number:Power für now und Number:Energy für today und total). Damit kannst Du dann die Anzeige bequem an Deine Bedürfnisse anpassen.
Momentaner Pferdefuß: die Einheiten werden bisher nicht in der Persistence berücksichtigt, was dazu führt, dass man beim Wechsel der
angezeigten Einheit die Charts kaputt macht (in der Persistence werden die angezeigten Werte gespeichert, nicht die "echten" Werte)
Kann aber sein, dass das Problem in openHAB4.0 schon gelöst ist.
Sollten die obigen Regular Expressions nicht passen, so gibt es noch diverse Möglichkeiten

notfalls könnte man z.B. das = mit in das Pattern einbauen, um sicher nur auf die Zuweisung zu matchen.
Erklärung zur Regular Expression:
. ist ein beliebiges Zeichen
\d ist eine Ziffer (0 - 9)
\. ist ein "echter" Punkt
\" ist ein Anführungszeichen als Teil des Patterns
*, + und ? beziehen sich auf das vorangestellte Zeichen
Der * bedeutet, das Zeichen darf beliebig oft hintereinander vorkommen (auch keinmal)
das + bedeutet "mindestens einmal, beliebig oft hintereinander".
das ? bedeutet "maximal einmal".
openHAB verwendet den Teil des Matches, der im einzigen Klammerpaar () steht, welches im Match mit angegeben ist.
Das Pattern
.*now.*\"(\d+\.?\d*)\".* bedeutet also: zuerst beliebig viele beliebige Zeichen (
.*), gefolgt von der Zeichenfolge
now, gefolgt von beliebig vielen beliebigen Zeichen (
.*), gefolgt von einem Anführungszeichen (
\"). Nun folgt mindestens eine Ziffer (
\d+), der eventuell ein Punkt folgt (
\.?), gefolgt von einer beliebigen Anzahl Ziffern (
\d*). Das erste Zeichen, welches danach keine Ziffer ist, muss ein Anführungszeichen sein (
\"), gefolgt von beliebig vielen beliebigen Zeichen (
.*). Übergeben werden alle Ziffern und eventuell zwischendrin ein Punkt.
Regex matcht grundsätzlich auf die kürzestmögliche Zeichenfolge - wobei ich mich nicht darauf verlassen würde, zumindest bei openHAB.