ich benutze openhab 3.4.4 auf einem esprimo q920 unter ubuntu 22.04.2 lts. Die Konfiguration der things/items erfolgt über das GUI.
Ich habe das JS Addon installiert und unter /etc/openhab/transform zuletzt das Beispiel aus der openhab doku benutzt um zu sehen ob ich überhaupt bis zum JS Skript vordringe:
Code: Alles auswählen
(function(i) {
var array = i.split(" ");
return array[array.length - 1].length;
})(input)
Aber ich schaffe es einfach nicht eine per HTTP Binding aus dem LAN geholte Statusseite (z.b. vom Drucker oder der Wärmepumpe) per Staustransformation im Channel mit Javascript nachzubearbeiten. Aus den Channels habe ich Punkte im Model angelegt, wodurch gleichzeitig Items erzeugt wurden.
Konkret möchte ich die mehrere Betriebswerte der Wärempumpe im LAN als HTML seite abholen (URL im thing hinterlegt), dann pro Channel anhand passender Strings als Delimiter die einzelnen Temperaturen und Verbrauchswerte extrahieren und diese, weil sie im Zahlenformat ein Komma aufweisen, durch einem Dezimalpunkt ersetzen.
Das Holen und Zerteilen der HTML Seite funktionierte per REGEX in der State Transformation.
Ein nachgeschaltetes (verkettet mit "∩" ) zweites REGEX für die Komma zu Punkt Ersetzung bzw. Ersetzung per JS script innerhalb der Status-Transformation gelang mir nicht. Ebenso wenig nur ein einziges JS script in der State Transformation, das dann Zerteilen und Ersetzen vornehmen könnte. Eine "nur-JS Lösung" wäre mir lieber, also folgender YAML Code (mit dem JS code aus dem Beispiel, nur um einmal überhaupt eine Wirkung des JS zu sehen):
Code: Alles auswählen
UID: http:url:b132691ba1
label: t_http_dummy_js
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: true
baseURL: http://192.168.1.11/PRESENTATION/HTML/TOP/PRTINFO.HTML
delay: 0
stateMethod: GET
refresh: 10
commandMethod: GET
contentType: text/html
timeout: 5000
bufferSize: 2048
channels:
- id: t_http_dummy_js
channelTypeUID: http:string
label: dummy3
description: null
configuration:
mode: READONLY
- id: t_http_dummy_js4
channelTypeUID: http:string
label: dummy4
description: null
configuration:
mode: READONLY
stateTransformation: JS:jstest2.js
Hat jemand eine Idee welche Trivialfehler ich hier mache und ob Verketten mit ∩ funktioniert? Ich murkse seit Tagen rum...
Ich dachte vom Channel käme ein String, der dann REGEX oder JS durchläuft , bei ∩ beide nacheinader, und dann als String zum Item weitergereicht würde (Konvertierung in ein Zahlenformat wäre noch zu lösen). Wenn ein Fehler in der Transformation aufträte, würde der original HTML output durchgereicht, wonach es hier aussieht.