NEWS
Webseite auslesen
-
Hallo zusammen,
ich habe zwar zu dem Thema schon einige Einträge hier gefunden, komme aber leider noch nicht wirklich damit klar. Ich muss dazu sagen, dass ich recht neu bin (sowohl im Umgang mit IOBroker, als auch mit JS). Bisher konnte ich mich mit lesen und "learning by dooing"ganz gut "durchwurschteln", aber bei diesem Thema bin ich echt am verzweifeln.
Folgendes Problem:
Ich lese die Daten meiner Heizung über eine Weboberfläche aus. Das Ganze sieht folgenermaßen aus:
Aufruf:
<hostname><nummer>Der Quelltext dazu (mit nummer=8700):
! ```
`<title>BSB-LAN Web</title>
! <center>
! # BSB-LAN Web
! </center>! Heizungsfunktionen DS18B20-Sensoren DHT22-Sensoren Anzeige Logdatei Konfiguration URL-Befehle HowTo FAQ ! |
8700 Diagnose Verbraucher - Aussentemperatur: 1.0 °C` mit dem RegEx ~~[code]~~8700 .*:[ \t]+([-]?[\d\.]+)[/code]
kann ich den Wert ohne Probleme abfragen. (getestet auf https://regex101.com)! Ich weiß, das es einen Parser Adapter gibt (mit dem es auch funktioniert die Werte auszulesen), allerdings wäre das ziemlich viel Tipparbeit und nicht wirklich dynamisch.
! Ich habe folgendes vor:
! Array mit abzufragenden Nummern
! --> dynamische Adressen erzeugen
! --> dynamische RegEx erzeugen
! --> State anlegen (mit ausgelesenen Namen)
! Das sollte ja theoretisch möglich sein. Die Frage ist jetzt nur: Wie komme ich per Javascript an den Wert, d.h., wie wende ich den RegEx Ausdruck richtig an?
! Was mir während des schreibens noch aufgefallen ist:
! bei manchen Abfragen wird mein RegEx nicht so recht funktionieren.
! Bsp
! Nummer 8000 ergibt:
! >![spoiler]`[code]
! <title>BSB-LAN Web</title>
! <center>
! # BSB-LAN Web
! </center>! Heizungsfunktionen DS18B20-Sensoren DHT22-Sensoren Anzeige Logdatei Konfiguration URL-Befehle HowTo FAQ ! |
8000 Status - Status Heizkreis 1: 114 - Heizbetrieb Komfort
|
<select id="value1"><option value="0">---</option>
<option value="3">Wächter angesprochen</option>
<option value="4">Handbetrieb aktiv</option>
<option value="17">Nachlauf aktiv</option>
<option value="22">Anlagenfrostschutz aktiv</option>
<option value="23">Frostschutz aktiv</option>
<option value="24">Aus</option>
<option value="56">Überhitzschutz aktiv</option>
<option value="101">Raumfrostschutz aktiv</option>
<option value="102">Estrichfunktion aktiv</option>
<option value="103">Eingeschränkt, Kesselschutz</option>
<option value="104">Eingeschränkt, TWW-Vorrang</option>
<option value="105">Eingeschränkt, Puffer</option>
<option value="106">Heizbetrieb eingeschränkt</option>
<option value="107">Zwangsabnahme Puffer</option>
<option value="108">Zwangsabnahme TWW</option>
<option value="109">Zwangsabnahme Erzeuger</option>
<option value="110">Zwangsabnahme</option>
<option value="111">Einschaltopt + Schnellaufheiz</option>
<option value="112">Einschaltoptimierung</option>
<option value="113">Schnellaufheizung</option>
<option value="114" selected="">Heizbetrieb Komfort</option>
<option value="115">Ausschaltoptimierung</option>
<option value="116">Heizbetrieb Reduziert</option>
<option value="117">Vorlauffrostschutz aktiv</option>
<option value="118">Sommerbetrieb</option>
<option value="119">Tages-Eco aktiv</option>
<option value="120">Absenkung Reduziert</option>
<option value="121">Absenkung Frostschutz</option>
<option value="122">Raumtemp’begrenzung</option></select> | |` Aber das ist dann glaube die nächste Baustelle, die Werte abzufragen würde für den Anfang erstmal genügen.! Meine bisherigen Bemühungen hatten als Basis diesen Code:
! >![spoiler]~~[code]~~var request=require("request"); var url="http://192.168.1.102/8700"; const regex= "8700 .*:[ \t]+([-]?[\d\.]+)"; ! function Test(){ request(url, function(err, stat, body) { // var dataArr = body.match(RegEX); //???????????????????????????? }); } Test();[/code]
[/spoiler]
Allerding komme ich damit nicht weiter.
! Wäre schön, wenn mir hier jemand auf die Sprünge helfen würde.
! Gruß
! Marco[/i][/i][/code][/spoiler][/i][/i] -
Blöde Frage, stellt die Heizung die Daten nur per Webseite zur Verfügung?
-
Hallo Wendy,
die Heizung gibt von sich aus gar nichts aus. Findige Nutzer haben mit Hilfe eines Arduinos und eines selbstgebauten Adapters das Gerät dazu überreden können . Das Projekt habe ich achgebaut und kann damit auf die Heizung zugreifen - über html.
Ich habe mir inzwischen schon ein Script zurechtgebastelt, was eigentlich recht gut funktioniert. Sicherlich ist das nicht ganz sauber programmiert, aber Hauptsache es läuft. Für meine ersten Gehversuche mit Javascript und RegEx bin ich eigentlich ganz zufrieden.
So habe ich es jetzt gelöst (Das Array lässt sich beliebig ändern):
var posArr=[700,710,720,721,8000,8003,8007,8009,8308,8310,8311,8312,8331,8333,8390,8510,8530,8700,8741,8744,8830,8831,8832,8950,8951]; var url="http://192.168.1.102/" + posArr.join("/"); start(); function start() { var request = require('request'); request(url, function (err, resp, body) { if (body) { posArr.forEach(function(pos) { var regexWert=new RegExp(pos + " .*:[ \\t]+([-]?[\\d\.]+.)+"); var regexName =new RegExp(pos + ".*- (.*?):"); var regexUnit =new RegExp(pos + ".*:[ ]+[-]?[\\d\.*]+[- ]+(.*)"); var mWert = body.match(regexWert); var mName = body.match(regexName); var mUnit = body.match(regexUnit); mName[1]= mName[1].replace(/\./g,"_"); mName[1]="Heizung_Werte."+mName[1].replace(/ /g,"_"); mWert[1]=parseFloat(mWert[1]); if (mWert && mWert.length > 1) { createState(mName[1], 0, {read: true, write: true, def:"", unit:mUnit[1]}); //, unit:mUnit[1] setState(mName[1], mWert[1],true); } else { console.log("Kann " + pos + " nicht zuordnen"); } }); } else { console.warn(pos + ' NOOO response: ' + err); } }); } schedule("* */5 * * *", start);
Der Quelltext der Abfrage sieht folgendermaßen aus:
! ```
`<title>BSB-LAN Web</title>
! <center>
! # BSB-LAN Web
! </center>! Heizungsfunktionen DS18B20-Sensoren DHT22-Sensoren Anzeige Logdatei Konfiguration URL-Befehle HowTo FAQ ! |
700 Heizkreis 1 - Betriebsart: 3 - Komfort
|
<select id="value1"><option value="0">Schutzbetrieb</option>
<option value="1">Automatik</option>
<option value="2">Reduziert</option>
<option value="3" selected="">Komfort</option></select> | |! |
710 Heizkreis 1 - Komfortsollwert: 21.5 °C
|
| |
! |
720 Heizkreis 1 - Kennlinie Steilheit: 0.34
|
| |
! |
721 Heizkreis 1 - Kennlinie Verschiebung: 0.5 °C
|
| |
! |
8000 Status - Status Heizkreis 1: 114 - Heizbetrieb Komfort
|
<select id="value1"><option value="0">---</option>
<option value="3">Wächter angesprochen</option>
<option value="4">Handbetrieb aktiv</option>
<option value="17">Nachlauf aktiv</option>
<option value="22">Anlagenfrostschutz aktiv</option>
<option value="23">Frostschutz aktiv</option>
<option value="24">Aus</option>
<option value="56">Überhitzschutz aktiv</option>
<option value="101">Raumfrostschutz aktiv</option>
<option value="102">Estrichfunktion aktiv</option>
<option value="103">Eingeschränkt, Kesselschutz</option>
<option value="104">Eingeschränkt, TWW-Vorrang</option>
<option value="105">Eingeschränkt, Puffer</option>
<option value="106">Heizbetrieb eingeschränkt</option>
<option value="107">Zwangsabnahme Puffer</option>
<option value="108">Zwangsabnahme TWW</option>
<option value="109">Zwangsabnahme Erzeuger</option>
<option value="110">Zwangsabnahme</option>
<option value="111">Einschaltopt + Schnellaufheiz</option>
<option value="112">Einschaltoptimierung</option>
<option value="113">Schnellaufheizung</option>
<option value="114" selected="">Heizbetrieb Komfort</option>
<option value="115">Ausschaltoptimierung</option>
<option value="116">Heizbetrieb Reduziert</option>
<option value="117">Vorlauffrostschutz aktiv</option>
<option value="118">Sommerbetrieb</option>
<option value="119">Tages-Eco aktiv</option>
<option value="120">Absenkung Reduziert</option>
<option value="121">Absenkung Frostschutz</option>
<option value="122">Raumtemp’begrenzung</option></select> | |
! |
8003 Status - Status Trinkwasser: 99 - Geladen, Nenntemperatur
|
<select id="value1"><option value="0">---</option>
<option value="3">Wächter angesprochen</option>
<option value="4">Handbetrieb aktiv</option>
<option value="17">Nachlauf aktiv</option>
<option value="24">Frostschutz aktiv</option>
<option value="25">Aus</option>
<option value="53">Rückkühlung aktiv</option>
<option value="66">Ladung Elektroeinsatz</option>
<option value="67">Zwangsladung aktiv</option>
<option value="69">Ladung aktiv</option>
<option value="70">Geladen, Max Speichertemp</option>
<option value="71">Geladen, Max Ladetemp</option>
<option value="75">Geladen</option>
<option value="77">Rückkühlung via Kollektor</option>
<option value="78">Rückkühlung via Erz / Hk's</option>
<option value="79">Entladeschutz aktiv</option>
<option value="80">Ladezeitbegrenzung aktiv</option>
<option value="81">Ladung gesperrt</option>
<option value="82">Ladesperre aktiv</option>
<option value="83">Zwang, Max Speichertemp</option>
<option value="84">Zwang, Max Ladetemperatur</option>
<option value="85">Zwang, Legionellensollwert</option>
<option value="86">Zwang, Nennsollwert</option>
<option value="87">Ladung Elektro, Leg’sollwert</option>
<option value="88">Ladung Elektro, Nennsollwert</option>
<option value="89">Ladung Elektro, Red’sollwert</option>
<option value="90">Ladung Elektro, Fros’sollwert</option>
<option value="91">Elektroeinsatz freigegeben</option>
<option value="92">Push, Legionellensollwert</option>
<option value="93">Push, Nennsollwert</option>
<option value="94">Push aktiv</option>
<option value="95">Ladung, Legionellensollwert</option>
<option value="96">Ladung, Nennsollwert</option>
<option value="97">Ladung, Reduziertsollwert</option>
<option value="98">Geladen, Legio’temperatur</option>
<option value="99" selected="">Geladen, Nenntemperatur</option>
<option value="100">Geladen, Reduz’temperatur</option>
<option value="199">Zapfbetrieb</option>
<option value="200">Bereit</option>
<option value="201">Bereitschaftsladung</option></select> | |
! |
8007 Status - Status Solar: 58 - Ladung Trinkwasser
|
<select id="value1"><option value="0">---</option>
<option value="4">Handbetrieb aktiv</option>
<option value="2">Störung</option>
<option value="52">Kollektorfrostschutz aktiv</option>
<option value="53">Rückkühlung aktiv</option>
<option value="54">Max Speichertemp erreicht</option>
<option value="55">Verdampfungsschutz aktiv</option>
<option value="56">Überhitzschutz aktiv</option>
<option value="57">Max Ladetemp erreicht</option>
<option value="58" selected="">Ladung Trinkwasser</option>
<option value="59">Ladung Pufferspeicher</option>
<option value="60">Ladung Schwimmbad</option>
<option value="61">Min Ladetemp nicht erreicht</option>
<option value="62">Temp’differenz ungenügend</option>
<option value="63">Einstrahlung ungenügend</option>
<option value="151">Lad'ng TWW + Puffer + Sch'bad</option>
<option value="152">Ladung Trinkwasser + Puffer</option>
<option value="153">Ladung Trinkwasser + Sch'bad</option>
<option value="154">Ladung Puffer + Schwimmbad</option></select> | |
! |
8009 Status - Status Brenner: 216 - Standby
|
<select id="value1"><option value="0">?---</option>
<option value="1">?Störstellung</option>
<option value="2">?Startverhinderung</option>
<option value="4">In Betrieb</option>
<option value="18">In Betrieb</option>
<option value="214">?Sicherheitszeit</option>
<option value="218">?Vorlüften</option>
<option value="215">?Inbetriebsetzung</option>
<option value="216" selected="">Standby</option>
<option value="9">??Außerbetriebsetzung</option>
<option value="217">?Heimlauf</option>
<option value="219">?Nachlüften</option></select> | |
! |
8308 Diagnose Erzeuger - Drehzahl Kesselpumpe: 35 %
|
| |
! |
8310 Diagnose Erzeuger - Kesseltemperatur: 29.1 °C
|
| |
! |
8311 Diagnose Erzeuger - Kesselsollwert: 31.0 °C
|
| |
! |
8312 Diagnose Erzeuger - Kesselschaltpunkt: 27.0 °C
|
| |
! |
8331 Diagnose Erzeuger - Startzähler 1.Stufe: 26889
|
| |
! |
8333 Diagnose Erzeuger - Startzähler 2.Stufe: 26886
|
| |
! |
8390 Diagnose Erzeuger - Phasennummer: 4
|
| |
! |
8510 Diagnose Erzeuger - Kollektortemperatur 1: 54.8 °C
|
| |
! |
8530 Diagnose Erzeuger - Betrstunden Solarertrag: 2276 h | | | ! | 8700 Diagnose Verbraucher - Aussentemperatur: -1.3 °C | | | ! | 8741 Diagnose Verbraucher - Raumsollwert 1: 21.5 °C | | | ! | 8744 Diagnose Verbraucher - Vorlaufsollwert 1: 31.0 °C | | | ! | 8830 Diagnose Verbraucher - Trinkwassertemperatur 1: 46.0 °C | | | ! | 8831 Diagnose Verbraucher - Trinkwassersollwert: 45.0 °C | | | ! | 8832 Diagnose Verbraucher - Trinkwassertemperatur 2: 46.0 °C | | | ! | 8950 Diagnose Verbraucher - Schienenvorlauftemperatur: 29.1 °C | | | ! | 8951 Diagnose Verbraucher - Schienenvorlaufsollwert: 31.0 °C | | |
Mein nächstes Projekt wird jetzt die Einbindung meiner KWL, die auch nicht netzwerkfähig ist.
! Gruß Marco[/i][/i] -
Falls noch relevant, hier ein Adapter für bsb_lan:
https://forum.iobroker.net/topic/25406/aufruf-bsb_lan-adapter-brötje-etc
https://github.com/hacki11/ioBroker.bsblan