http binding
-
- Beiträge: 13
- Registriert: 23. Feb 2022 18:21
http binding
Hallo,
ich habe folgendes Problem....
Ich lese mit einem kleinen Script meine Wechselrichter mittels HTML Abfrage aus und Speicher die Daten auf meinem Linux-Rechner in einer .json Datei.
({"name": "WECHSELRICHTER","ablese": "30.06.2023 21:32","value": 2,"today": 2.0,"total": 381.4})
Nun möchte ich mit OH3 (auch auf diesem Rechner) Items bilden aus diesen Werten. Dazu nutze ich das HTTP Binding, bekomme aber leider kein Daten. Wie muss die Base URL lauten wenn ich auf eine Datei zugreifen möchte oder gibt da eventuell ander Wege ?
Viele Grüße
Jan
ich habe folgendes Problem....
Ich lese mit einem kleinen Script meine Wechselrichter mittels HTML Abfrage aus und Speicher die Daten auf meinem Linux-Rechner in einer .json Datei.
({"name": "WECHSELRICHTER","ablese": "30.06.2023 21:32","value": 2,"today": 2.0,"total": 381.4})
Nun möchte ich mit OH3 (auch auf diesem Rechner) Items bilden aus diesen Werten. Dazu nutze ich das HTTP Binding, bekomme aber leider kein Daten. Wie muss die Base URL lauten wenn ich auf eine Datei zugreifen möchte oder gibt da eventuell ander Wege ?
Viele Grüße
Jan
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: http binding
Das http Binding ist eigentlich dazu gedacht, die Daten direkt aus dem Wechselrichter zu lesen.
Wenn Du die Daten von einem anderen Rechner per http holen willst, musst Du dort extra einen Webserver laufen lassen, der die Datei zur Verfügung stellt.
Wenn Du die Daten von einem anderen Rechner per http holen willst, musst Du dort extra einen Webserver laufen lassen, der die Datei zur Verfügung stellt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 13
- Registriert: 23. Feb 2022 18:21
Re: http binding
Hallo Udo, danke für die Antwort.
Vielleicht habe ich mich falsch ausgedrückt. Der Rechner (Debian11) wo das Script drauf läuft, ist auch mein OH3 Rechner.
Ich habe nur ein Verständnisproblem die Daten aus der .json Datei in OH3 zu Integrieren.
Viele Grüße
Jan
Vielleicht habe ich mich falsch ausgedrückt. Der Rechner (Debian11) wo das Script drauf läuft, ist auch mein OH3 Rechner.
Ich habe nur ein Verständnisproblem die Daten aus der .json Datei in OH3 zu Integrieren.
Viele Grüße
Jan
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: http binding
Das ist letztlich egal. Wenn Du das http Binding nutzen willst, brauchst Du einen Webserver als Quelle.
Du brauchst kein externes Script, um die Daten vom Wechselrichter zu holen, jedenfalls nicht, wenn sie dort in irgendeiner sinnvollen Form abrufbar sind. Stattdessen trägst Du im http Thing die baseURL ein (solange es um ein Gerät geht, welches Du nicht aktiv steuern kannst, ist das der Teil der Adresse, der für alle Channel gleich ist), legst einen oder mehrere Channel an und trägst dort jeweils die stateExtension ein (der Teil der Adresse, der sich von Channel zu Channel unterscheidet).
Beispiel:
Code: Alles auswählen
UID: http:url:froniusm
label: FroniusMeter
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: http://192.168.178.35/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System
delay: 0
stateMethod: GET
refresh: 10
commandMethod: GET
timeout: 8000
bufferSize: 2048
channels:
- id: realpow
channelTypeUID: http:number
label: Real Power
description: null
configuration:
mode: READWRITE
escapedUrl: false
unit: W
stateTransformation: JSONPATH:$.Body.Data.1.PowerReal_P_Sum
Die baseURL ist in diesem Fall die komplette Adresse, weil ich keinen weiteren Channel (mit anderer Teiladresse) benötige.
Der Channel ist als number Channel definiert und bekommt automatisch die Einheit W hinzugefügt. Somit kann ich den Channel anschließend mit einem Number:Power Item verlinken.
Da Fronius auf der angegebenen Adresse ein JSON Objekt liefert, ich aber nur an einem Datum aus diesem Objekt interessiert bin, setze ich noch die stateTransformation auf das konkrete Datum.
Im Ergebnis liefert der Channel dann alle 10 Sekunden (refresh Parameter) ein Datum wie 1234 W.
Grundsätzlich kannst Du natürlich die Daten auch extern einsammeln und dann den Inhalt der Datei nach openHAB schaffen, das ist aber vergleichsweise umständlich. Solange die Datei nicht zu groß ist, könntest Du das mit dem exec Binding machen.
Allerdings:
1. ist das exec Binding ziemlich speziell. Nicht, dass man nicht zu Ziel käme, aber es ist halt umständlich.
2. liefert das exec Binding ausschließlich string als output des aufgerufenen Scripts ab. Das bedeutet, Du musst JSONPATH zwingend im Link zwischen Channel und Item verwenden. Damit kannst Du UoM nicht verwenden. Das mag nun eher "egal" sein, aber mittelfristig wirst Du feststellen, das UoM, wenn auch komplex, eine feine Sache ist, es ist schön, wenn man das von Beginn an implementiert hat.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 302
- Registriert: 7. Mär 2021 14:49
Re: http binding
das einfachste wäre wie Udo schon schreibt die Daten mit http Binding direkt aus dem Wechselrichter aus zu lesen.
aber wenn der so exotische Daten liefert, das es ohne dem Script nicht geht, müsste man wissen welches Script das ist?
bei Php ist das z.B. einfach, das Json Script mit echo ausgeben,
mit opehab das Php-Script dann in einer Rule abfragen mit
var request = sendHttpGetRequest("http://deine_IP/Pfad_zu/dein_Script.php",10000)
in der Variable request ist dann der Json String welcher weiter bearbeitet werden kann.
Beispiel,
value.postUpdate(transform("JSONPATH", "$.value", request)
bei Php gibt es aber auch noch die Möglichkeit die Werte mit PUT direkt über die Rest Api in das entsprechende Item zu schreiben.
aber wenn der so exotische Daten liefert, das es ohne dem Script nicht geht, müsste man wissen welches Script das ist?
bei Php ist das z.B. einfach, das Json Script mit echo ausgeben,
mit opehab das Php-Script dann in einer Rule abfragen mit
var request = sendHttpGetRequest("http://deine_IP/Pfad_zu/dein_Script.php",10000)
in der Variable request ist dann der Json String welcher weiter bearbeitet werden kann.
Beispiel,
value.postUpdate(transform("JSONPATH", "$.value", request)
bei Php gibt es aber auch noch die Möglichkeit die Werte mit PUT direkt über die Rest Api in das entsprechende Item zu schreiben.
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux
-
- Beiträge: 13
- Registriert: 23. Feb 2022 18:21
Re: http binding
Guten Abend,
ich kann nun den Deye-Wechselrichter mit dem HTML-Binding auslesen. Allerdings schreibt er den gesamten Inhalt in das Item. Ich bekomme es nicht hin mit dem StateTransformation. Es steht ja nicht im JSON-Format in der HTML.
Hier der relevante Auzug aus der HTML :
Und hier der Code vom Thing :
ich kann nun den Deye-Wechselrichter mit dem HTML-Binding auslesen. Allerdings schreibt er den gesamten Inhalt in das Item. Ich bekomme es nicht hin mit dem StateTransformation. Es steht ja nicht im JSON-Format in der HTML.
Hier der relevante Auzug aus der HTML :
Code: Alles auswählen
</style>
<script type="text/javascript">
var height=0;function fileText(id,value){if(document.getElementById(id)){document.getElementById(id).innerHTML=value}}function changeFont(){reCon("main_div").style.fontFamily=window.parent.reFont()}function child_getH(){var nh=document.body.offsetHeight+100;if(nh<500||nh==null){nh=500}if(height!=nh){height=nh;window.parent.child_height(height)}}function reCon(id){return document.getElementById(id)}function ready(){try{window.parent.show_ifr()}catch(e){}child_getH()}function show(v){var c=document.getElementById(v);if(c!=null){c.style.display=""}}function hide(v){var c=document.getElementById(v);if(c!=null){c.style.display="none"}};
</script>
<script type="text/javascript">
var webdata_sn = "";
var webdata_msvn = "";
var webdata_ssvn = "";
var webdata_pv_type = "";
var webdata_rate_p = "";
var webdata_now_p = "90";
var webdata_today_e = "2.10";
var webdata_total_e = "388.7";
Code: Alles auswählen
UID: http:url:c455bde1a9
label: HTTP URL Thing
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: test_1
channelTypeUID: http:number
label: test_1
description: ""
configuration:
mode: READONLY
stateTransformation:
-
- Beiträge: 302
- Registriert: 7. Mär 2021 14:49
Re: http binding
das sollte mit
transform("REGEX", ..... gehen, aber das kann Udo besser erklären!
man könnte auch in einer Rule das String Item noch mit Splitt auseinandernehmen, aber REGEX dürfte einfacher sein (wenn man es versteht ! ich nicht so richtig!) .
transform("REGEX", ..... gehen, aber das kann Udo besser erklären!
man könnte auch in einer Rule das String Item noch mit Splitt auseinandernehmen, aber REGEX dürfte einfacher sein (wenn man es versteht ! ich nicht so richtig!) .
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: http binding
Ich war mal so frei, den Code auch als Code zu markieren 
Ich gehe davon aus, dass es konkret um diese Werte geht:
Gesetzt den Fall, dass die entsprechenden Schlüsselworte nur an dieser Stelle im Zusammenhang mit Zahlen auftauchen, wäre mein erster Versuch folgender:
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.

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";
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
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

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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 13
- Registriert: 23. Feb 2022 18:21
Re: http binding
Hallo Udo,
vielen Dank für deinen ausführlichen Bericht zum REGEX Transformation Service. In meinem Beispiel hattest du natürlich auch wieder Recht.
Der ganze Auszug aus der HTML zeigt, das die Schlüsselwörter mehrfach auftauchen.
Der Versuch das Schlüsselwort zu verlängern (var webdata_now_p) ist leider auch gescheitert.
vielen Dank für deinen ausführlichen Bericht zum REGEX Transformation Service. In meinem Beispiel hattest du natürlich auch wieder Recht.

Der ganze Auszug aus der HTML zeigt, das die Schlüsselwörter mehrfach auftauchen.
Der Versuch das Schlüsselwort zu verlängern (var webdata_now_p) ist leider auch gescheitert.
Code: Alles auswählen
[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
.in_body
{
margin-top:0px;
margin-left:0px;
margin-right:0px;
margin-bottom:0px;
background-color:transparent;
}
.div_c
{
margin-left:50px;
margin-right:50px;
margin-top:50px;
margin-bottom:50px;
}
.cu
{
cursor:pointer;
}
.b
{
font-weight:bold;
}
.lab_5
{
font-size:16px;
color:#666666;
margin-left:-20px;
}
.lab_l2
{
float:left;
width:32%;
color:#666666;
margin-bottom:-2px;
font-size:14px;
}
.lab_r2
{
float:left;
width:68%;
color:#666666;
text-align:right;
font-size:14px;
}
.cl
{
clear:left;
}
.line
{
height:1px;
background-color:#666666;
width:100%;
margin-top:5px;
margin-bottom:5px;
}
.sp_5
{
height:5px;
width:500px;
}
.sp_20
{
height:20px;
width:500px;
}
.label
{
float:left;
width:50%;
color:#666666;
margin-bottom:-2px;
font-size:14px;
}
.lab_r
{
float:left;
width:50%;
color:#666666;
text-align:right;
font-size:14px;
}
.lab_l
{
float:left;
width:40%;
color:#666666;
margin-bottom:-2px;
margin-left:10%;
font-size:14px;
}
.line_l
{
height:1px;
background-color:#666666;
width:450px;
margin-top:5px;
margin-bottom:5px;
margin-left:50px;
}
.sub
{
display:inline-block;
width:16px;
text-align:center;
}
</style>
<script type="text/javascript">
var height=0;function fileText(id,value){if(document.getElementById(id)){document.getElementById(id).innerHTML=value}}function changeFont(){reCon("main_div").style.fontFamily=window.parent.reFont()}function child_getH(){var nh=document.body.offsetHeight+100;if(nh<500||nh==null){nh=500}if(height!=nh){height=nh;window.parent.child_height(height)}}function reCon(id){return document.getElementById(id)}function ready(){try{window.parent.show_ifr()}catch(e){}child_getH()}function show(v){var c=document.getElementById(v);if(c!=null){c.style.display=""}}function hide(v){var c=document.getElementById(v);if(c!=null){c.style.display="none"}};
</script>
<script type="text/javascript">
var webdata_sn = " ";
var webdata_msvn = " ";
var webdata_ssvn = " ";
var webdata_pv_type = "";
var webdata_rate_p = "";
var webdata_now_p = "141";
var webdata_today_e = "2.20";
var webdata_total_e = "394.4";
var webdata_alarm = "";
var webdata_utime = "1";
var cover_mid = "";
var cover_ver = "";
var cover_wmode = "";
var cover_ap_ssid = "";
var cover_ap_ip = "";
var cover_ap_mac = "";
var cover_sta_ssid = "";
var cover_sta_rssi = "";
var cover_sta_ip = "192.168.178.58";
var cover_sta_mac = "";
var status_a = "1";
var status_b = "0";
var status_c = "0";
function initPageText(){var list=window.parent.reList("status");fileText("st1",list["t1"]);fileText("st2",list["t2"]);fileText("st3",list["t3"]);for(var i=1;i<=27;i++){if(i!=14){fileText("tx"+i,list[i])}}changeFont();child_getH()}function upfold(v){if(document.getElementById("up_"+v+"_div").style.display=="none"){show("up_"+v+"_div");reCon("p_"+v).innerHTML="-"}else{hide("up_"+v+"_div");reCon("p_"+v).innerHTML="+"}}function init_main_page(){var on=window.parent.reTip("1");var off=window.parent.reTip("2");document.getElementById("cover_mid").innerHTML=cover_mid;document.getElementById("cover_ver").innerHTML=cover_ver;document.getElementById("cover_ap_status").innerHTML=off;document.getElementById("cover_sta_status").innerHTML=off;if(cover_wmode!="STA"){document.getElementById("cover_ap_status").innerHTML=on;document.getElementById("cover_ap_ssid").innerHTML=cover_ap_ssid;document.getElementById("cover_ap_ip").innerHTML=cover_ap_ip;document.getElementById("cover_ap_mac").innerHTML=cover_ap_mac}if(cover_wmode!="AP"){document.getElementById("cover_sta_status").innerHTML=on;document.getElementById("cover_sta_ssid").innerHTML=cover_sta_ssid;document.getElementById("cover_sta_rssi").innerHTML=cover_sta_rssi;document.getElementById("cover_sta_ip").innerHTML=cover_sta_ip;document.getElementById("cover_sta_mac").innerHTML=cover_sta_mac}if(webdata_sn==""){webdata_sn="---"}fileText("webdata_sn",webdata_sn);if(webdata_msvn==""){webdata_msvn="---"}fileText("webdata_msvn",webdata_msvn);if(webdata_ssvn==""){webdata_ssvn="---"}fileText("webdata_ssvn",webdata_ssvn);if(webdata_pv_type==""){webdata_pv_type="---"}fileText("webdata_pv_type",webdata_pv_type);if(webdata_rate_p==""){webdata_rate_p="---"}fileText("webdata_rate_p",webdata_rate_p+" W");if(webdata_now_p==""||webdata_now_p==0){webdata_now_p="---"}fileText("webdata_now_p",webdata_now_p+" W");if(webdata_today_e==""){webdata_today_e="---"}fileText("webdata_today_e",webdata_today_e+" kWh");if(webdata_total_e==""){webdata_total_e="---"}fileText("webdata_total_e",webdata_total_e+" kWh");if(webdata_alarm==""){webdata_alarm="---"}fileText("webdata_alarm",webdata_alarm);if(webdata_utime==""){if(document.getElementById("webdata_sn").innerHTML=="---"){webdata_utime="---"}else{webdata_utime=value+window.parent.reTip("5")}}fileText("webdata_utime",webdata_utime);var st_en=window.parent.reTip("3");var st_dis=window.parent.reTip("4");var st_un=window.parent.reTip("41");if(status_a=="1"){document.getElementById("cover_remote_status_a").innerHTML=st_en}else{if(status_a=="0"){document.getElementById("cover_remote_status_a").innerHTML=st_dis}else{document.getElementById("cover_remote_status_a").innerHTML=st_un}}if(status_b=="1"){document.getElementById("cover_remote_status_b").innerHTML=st_en}else{if(status_b=="0"){document.getElementById("cover_remote_status_b").innerHTML=st_dis}else{document.getElementById("cover_remote_status_b").innerHTML=st_un}}};
</script>
</head>
<body class="in_body" onload="init_main_page();">
<div class="div_c" id="main_div">
<div class="lab_5 cu b" onclick="upfold(1);child_getH();"><span class="sub" id="p_1">-</span><span id="st1" style="margin-left:3px"></span></div>
<div class="sp_5"></div>
<div id="up_1_div">
<div class="lab_l2" id="tx1"></div>
<div class="lab_r2" id="webdata_sn"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" id="tx2"></div>
<div class="lab_r2" id="webdata_msvn"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" id="tx3"></div>
<div class="lab_r2" id="webdata_ssvn"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" id="tx4"></div>
<div class="lab_r2" id="webdata_pv_type"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" id="tx5"></div>
<div class="lab_r2" id="webdata_rate_p"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx6"></div>
<div class="lab_r2" id="webdata_now_p" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx7"></div>
<div class="lab_r2" id="webdata_today_e" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx8"></div>
<div class="lab_r2" id="webdata_total_e" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx9"></div>
<div class="lab_r2" id="webdata_alarm" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx10"></div>
<div class="lab_r2" id="webdata_utime" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
</div>
<div class="sp_20"></div>
<div class="lab_5 cu b" onclick="upfold(2);child_getH();"><span class="sub" id="p_2">+</span><span id="st2" style="margin-left:3px"></span></div>
<div class="sp_5"></div>
<div id="up_2_div" style="display:none">
<div class="label" id="tx11"></div>
<div class="lab_r" id="cover_mid"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="label" id="tx12"></div>
<div class="lab_r" id="cover_ver"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="label" id="tx13"></div>
<div class="lab_r" id="cover_ap_status" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l" id="ap_ssid">SSID</div>
<div class="lab_r" id="cover_ap_ssid"></div>
<div class="cl"></div>
<div class="line_l"></div>
<div class="lab_l" id="tx15"></div>
<div class="lab_r" id="cover_ap_ip"></div>
<div class="cl"></div>
<div class="line_l"></div>
<div class="lab_l" id="tx16"></div>
<div class="lab_r" id="cover_ap_mac"></div>
<div class="cl"></div>
<div class="line_l"></div>
<div class="label" id="tx17"></div>
<div class="lab_r" id="cover_sta_status" style="color:#666666;font-weight:bold;"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="lab_l" id="tx18"></div>
<div class="lab_r" id="cover_sta_ssid"></div>
<div class="cl"></div>
<div class="line_l"></div>
<div class="lab_l" id="tx19"></div>
<div class="lab_r" id="cover_sta_rssi"></div>
<div class="cl"></div>
<div class="line_l"></div>
<div class="lab_l" id="tx20"></div>
<div class="lab_r" id="cover_sta_ip"></div>
<div class="cl"></div>
<div class="line_l"></div>
<div class="lab_l" id="tx21"></div>
<div class="lab_r" id="cover_sta_mac"></div>
<div class="cl"></div>
<div class="line_l"></div>
</div>
<div class="sp_20"></div>
<div class="lab_5 cu b" onclick="upfold(3);child_getH();"><span class="sub" id="p_3">+</span><span id="st3" style="margin-left:3px"></span></div>
<div class="sp_5"></div>
<div id="up_3_div" style="display:none">
<div class="label" id="tx25"></div>
<div class="lab_r" id="cover_remote_status_a"></div>
<div class="cl"></div>
<div class="line"></div>
<div class="label" id="tx26"></div>
<div class="lab_r" id="cover_remote_status_b"></div>
<div class="cl"></div>
<div class="line"></div>
</div>
</div>
<script type="text/javascript">
initPageText();
ready();
</script>
</body>
</html>
]
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: http binding
Probiere es bitte mal so:
Gerade bei mir getestet liefert es so ein korrektes Ergebnis. Die Backslashes vor den Anführungszeichen sind offensichtlich nicht notwendig.
Habe ich oben darauf hingewiesen, dass die REGEX Transformation installiert sein muss?
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_p = "(\d+\.?\d*)".*
unit: W
- id: today
channelTypeUID: http:number
label: Today
description: ""
configuration:
mode: READONLY
stateTransformation: REGEX:.*today_e = "(\d+\.?\d*)".*
unit: kWh
- id: total
channelTypeUID: http:number
label: Total
description: ""
configuration:
mode: READONLY
stateTransformation: REGEX:.*total_e = "(\d+\.?\d*)".*
unit: kWh
Habe ich oben darauf hingewiesen, dass die REGEX Transformation installiert sein muss?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet