http binding

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Jimbo
Beiträge: 13
Registriert: 23. Feb 2022 18:21
Answers: 0

http binding

Beitrag von Jimbo »

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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: http binding

Beitrag von udo1toni »

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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Jimbo
Beiträge: 13
Registriert: 23. Feb 2022 18:21
Answers: 0

Re: http binding

Beitrag von Jimbo »

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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: http binding

Beitrag von udo1toni »

Jimbo hat geschrieben: 1. Jul 2023 08:41 Vielleicht habe ich mich falsch ausgedrückt. Der Rechner (Debian11) wo das Script drauf läuft, ist auch mein OH3 Rechner.
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
Hier hole ich von meiner Fronius Symo die gelieferte Leistung ab (ein Datum, welches das Binding nicht bereitstellt)
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

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: http binding

Beitrag von oh73 »

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.
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Jimbo
Beiträge: 13
Registriert: 23. Feb 2022 18:21
Answers: 0

Re: http binding

Beitrag von Jimbo »

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 :

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";
Und hier der Code vom Thing :

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:

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: http binding

Beitrag von oh73 »

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!) .
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: http binding

Beitrag von udo1toni »

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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Jimbo
Beiträge: 13
Registriert: 23. Feb 2022 18:21
Answers: 0

Re: http binding

Beitrag von Jimbo »

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.

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>
]

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: http binding

Beitrag von udo1toni »

Probiere es bitte mal so:

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
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?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten