[http] regex transform question

Hi all,

I am connecting to an internal website providing some information about my heating system and I am trying to read some information from that Website.

The website I am parsing delivers this HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 53.0 &deg;C
</td><td>
<input type=text id='value1' VALUE='53.00'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 31.3 &deg;C
</td><td>
<input type=text id='value1' VALUE='31.30'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4967256</td></tr><tr><td>
Brenner Takte Stufe 1: 8549</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2197710</td></tr><tr><td>
Brenner Takte Stufe 2: 8465</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

I am using this REGEX to capture the information desired:

.*8316.*:[ \t]+([-]?[\d\.]+).*

Accoring to regex101 the capture group returns “31.3” which should be read into a channel.
Unfortunately this channel is always “undef” and is not showing that number :frowning:

This is the channel configuration:

  - id: Abgastemperaturist
    channelTypeUID: http:number
    label: Abgastemperatur Istwert
    description: ""
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*8316.*:[ \t]+([-]?[\d\.]+).*

Any help what I am doing wrong is highly appreciated.
Stefan

I don’t see anything obviously wrong with the regex. It follows all the OH regex rules (covers the whole document, one matching group).

What if you make it looser?

.*8316.*:[ \t]+(.*)[ \t]+&deg.*

If that doesn’t work, there might be something up with the space matching. It’s highly unlikely to have tabs so maybe \s+ would be sufficient. The number of spaces shouldn’t change much either so maybe statically defining the number of spaces would be sufficient.

I think the issue you’re seeing is the special case of trying to escape the . character in [\d\.]. Check out the regex docs on the extra \'s needed because of how OH processes the regex:

I am getting either UDEF ‘[\d\.]’ or 0 ‘[\d\.]’ when adding additional ‘\’ to escape things.

I also tried to loosen this to [\S] wich doesn’t require any escaped ‘\’ with no success :frowning:

Interesting - that works, but why?

Are you sure you added the correct pattern of \. Look through the regex doc carefully there’s a whole section about adding extra \ in front of some sequences and in particular when you are trying to get a . literal.

It works because it removes the attempt to get the . literal which was causing your original regex to fail without the additional escape \.

Actually it doesn’t work for all channels in that http-thing :frowning:

I am reading a couple of channels out of that HTTP reply:

channels:
  - id: Kessel_Brennerstufe1
    channelTypeUID: http:switch
    label: Kessel_brennerstufe1
    description: null
    configuration:
      mode: READONLY
      onValue: "255"
      offValue: "0"
      stateTransformation: REGEX:.*8300.*:[ \t]+(.*).-.*
  - id: Kessel_Brennerstufe2
    channelTypeUID: http:switch
    label: Kessel_brennerstufe2
    description: null
    configuration:
      mode: READONLY
      onValue: "255"
      offValue: "0"
      stateTransformation: REGEX:.*8301.*:[ \t]+(.*).-.*
  - id: Kesselpumpe
    channelTypeUID: http:switch
    label: Kesselpumpe
    description: null
    configuration:
      mode: READONLY
      onValue: "255"
      offValue: "0"
      stateTransformation: REGEX:.*8304.*:[ \t]+(.*).-.*
  - id: Abgastemperaturist
    channelTypeUID: http:number
    label: Abgastemperatur Istwert
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*8316.*:[ \t]+(.*)[ \t]+&deg.*
  - id: AbgastemperaturMax
    channelTypeUID: http:number
    label: Abgastemperatur Maximum
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*8318.*:[ \t]+(.*)[ \t]+&deg.*
  - id: BrennerLaufzeitStufe_1
    channelTypeUID: http:number
    label: Brenner Laufzeit Stufe 1
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*Brenner Laufzeit Stufe 1:.(\d+).*
  - id: BrennerLaufzeitStufe_2
    channelTypeUID: http:number
    label: Brenner Laufzeit Stufe 2
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*Brenner Laufzeit Stufe 2:.(\d+).*
  - id: KesseltemperaturAktuell
    channelTypeUID: http:number
    label: Atkuelle Kesseltemperatur
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*8310.*:[ \t]+(.*)[ \t]+&deg.*

Generally that shouldn’t be a bis issue - but either these REGEXes drive me nuts or there is some other confusion in my mind.

My current result is that all Switches return UNDEF
but more interesting - all three temperatur channels return the same value from the
REGEX:.8318.:[ \t]+(.)[ \t]+&deg.

Yes, I did read through it

To use a dot as literal in the regex it has to be escape \., but in a string it has to be escaped twice "\\."

and undersod that in my case I would need one \ do escape the ‘.’ - but why not trying \\ oder \\\ and see what happens :slight_smile:
Just to make shure that I understood it right.

Looser means more flexible. The (.*) matches pretty much everything up to the next space. You know, because you know the source of the data, that it will always be a number, so don’t over specify it. In this case, your attempt to over specify it was erroneous causing the whole thing to fail.

In my experience using regex in OH, it pays to be as loose and accepting as possible. When you start to get clever and neck down the REGEX by making it more specific, the REGEX becomes less flexible and more prone to error.

Unless the HTTP binding works differently, that means something else. Your Items should remain NULL if the transformation fails, not become UNDEF. It might be that the binding is failing to retrieve the page and it might set the Items to UNDEF in that case, though we’ve been told in the past that is an incorrect use of UNDEF but the core maintainers so it should be doing that.

What do you see in the logs? You may need to bump the logging up to debug or trace.

Hmmm, so the Switches are UNDEF but the temps are changing?

It might be that this regex is too loose.

I like to think of REGEX in OH like defining sign posts surrounding the data I want. So it’s possible that the signpoints are not specific enough and it’s skipping down to the same value. You don’t say which temp it’s matching to (the first one? last one? one from the middle?).

Instead of .*8318.*:[ \t]+(.*)[ \t+&deg.* what if we get a little more specific with .*8313.*Maximum:[\s]+(.*)[\s]&deg.*

Of course you’ll need to do the same for the other REGEX (e.g. 8316 needs “Istwert:”, 8310 needs “Kesseltemperatur”, and so on). Also, [ \t]+ is the same thing as [\s]+ (except that \s will also match newlines which isn’t a problem here).

So, just to keep you updated, the

REGEX:.*8300.*:[ \t]+(\d*).*

works for the three switch channels - I am not sure if they have the same issue as the temperatur channels and just reference to a single value in the HTTP

OK, look like there is something wrong with that http binding or even with my OH instance.

Logging in TRACE org.openhab.binding.http shows the request every 10000ms and the return of three new states (AbgastempMax, BrennerlaufzeitStufe_1 and BrennerlaufzeitStufe_2.

But no information about the other Channels.

Setting Logging to DEBUG I do not see anyting in the logs. When disabling and enabling the thing I see two entries in the log:

  • Using the secure client for thing …
  • No authentication configured for thing …

Will try to narrow it down and set the thing itself to log in DEBUG - wondering if that works.

Sorry for those stupid questions - I am damn new to OH and still trying to understand how everything is working.

The REGEX transformation returns an empty string if it doesn’t match. That’s by design so it can be used to filter on cases where, for example, a single MQTT topic receives two different messages with different info. You can use the REGEX transformation to ignore those messages that are irrelevant to that Channel.

So that probably means those REGEX are not matching.

There really is no such thing as putting an individual Thing into debug logging. The Thing is mostly just data. It’s the binding that will log stuff when it interacts with the Thing.

You might need to bump it up to TRACE logging which will log everything.

Finally - I am giving up for today!

Last thing I tried was comparing working and not working Regex.

Working one is the following:

.*8318.*Maximum:[ \t]+(.*)[ \t]+&deg.*
.*Maximum:[ \t]+(.*)[ \t]+&deg.*
.*imum:[\s]+(.*)[\s]+&deg.*

not working ones are:

.*8316.*Istwert:[ \t]+(.*)[ \t]+&deg.*
.*(?i)Istwert:[\s]+(.*)[\s]+&deg.*
(?i).*Istwert:[\s]+(.*)[\s]+&deg.*
.*wert:[\s]+(.*)[\s]+&deg.*

Just to ensure that it doesn’t have anything to do with case sensitivity I tried that mode modifier.

Do all of these fields exist in the page every time it’s polled? Do they appear the same way every time?

Based on the example at the top, there is no reason why .*8318.*Maximum:[ \t]+(.*)[ \t]+&deg.* would work but .*8316.*Istwert:[ \t]+(.*)[ \t]+&deg.* would not.

unfortunately - the website is delivering the same content (except of the values) over and over.
The device queried is a little Arduino Mega connected to my heating system as an interface for the bussystem Brötje is using.

I am tracing on the binding and here is the result:

07:53:16.338 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
07:53:16.340 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:53:16.344 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1
07:53:44.404 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
07:53:44.685 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
07:53:46.290 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 67.4 &deg;C
</td><td>
<input type=text id='value1' VALUE='67.40'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 44.2 &deg;C
</td><td>
<input type=text id='value1' VALUE='44.20'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4985287</td></tr><tr><td>
Brenner Takte Stufe 1: 8598</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2231678</td></tr><tr><td>
Brenner Takte Stufe 2: 8512</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
07:53:46.302 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
07:53:46.305 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:53:46.308 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1
07:54:00.861 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:54:14.406 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
07:54:14.701 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
07:54:16.342 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 67.4 &deg;C
</td><td>
<input type=text id='value1' VALUE='67.40'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 44.0 &deg;C
</td><td>
<input type=text id='value1' VALUE='44.00'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4985287</td></tr><tr><td>
Brenner Takte Stufe 1: 8598</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2231678</td></tr><tr><td>
Brenner Takte Stufe 2: 8512</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
07:54:16.351 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
07:54:16.365 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:54:16.367 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1
07:54:44.414 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
07:54:44.420 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
07:54:45.992 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 67.3 &deg;C
</td><td>
<input type=text id='value1' VALUE='67.30'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 43.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='43.90'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4985287</td></tr><tr><td>
Brenner Takte Stufe 1: 8598</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2231678</td></tr><tr><td>
Brenner Takte Stufe 2: 8512</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
07:54:46.018 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
07:54:46.029 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:54:46.033 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1
07:55:00.881 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:55:14.418 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
07:55:14.438 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
07:55:16.032 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 67.3 &deg;C
</td><td>
<input type=text id='value1' VALUE='67.30'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 43.8 &deg;C
</td><td>
<input type=text id='value1' VALUE='43.80'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4985287</td></tr><tr><td>
Brenner Takte Stufe 1: 8598</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2231678</td></tr><tr><td>
Brenner Takte Stufe 2: 8512</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
07:55:16.063 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
07:55:16.069 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:55:16.079 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1
07:55:44.428 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
07:55:44.481 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
07:55:46.091 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 67.3 &deg;C
</td><td>
<input type=text id='value1' VALUE='67.30'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 43.6 &deg;C
</td><td>
<input type=text id='value1' VALUE='43.60'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4985287</td></tr><tr><td>
Brenner Takte Stufe 1: 8598</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2231678</td></tr><tr><td>
Brenner Takte Stufe 2: 8512</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
07:55:46.116 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
07:55:46.138 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:AbgastemperaturMax
07:55:46.159 [TRACE] [l.HttpDynamicStateDescriptionProvider] - returning new stateDescription for http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1

it might be possible to querry each channel separately by setting the ‘stateextension’ attribute - but this will most probably be a DoS attack on that little Arduino Mega. Therefore I am tying to get every value required with one single request.

As you said Rich - there is no reason that this happens. Unfortunately when setting the binding to DEBUG I am not getting more log entries. Actually they are much less - just two lines when I save the code or dis- and enable the thing.

Wondering if there is something broken in that binding or my OH instance?

Now, where has that fourth entry come from? It’s a duplicate channel, but doesn’t seem to belong to the query before or after by timestamp.

I’d look carefully at the links between Item and channel. No link, no processing of channel.

If you were using file-based xxx.things configuration, I’d suggest checking for duplicate channel names. And a restart after you had everything set. That might still be a good idea after many UI based Thing edits.

Good question - I don’t know :frowning:

Meanwhile I have don the following:

  1. Restart OH container → nothing changed
  2. Deleted the Links, Items and the Thing
  3. Went trhough the Items and deleted every leftover in order to have realy deleted everything in the GUI
  4. Recreated the HTTP Thing again from Scratch
  5. Copied the code for the channels over (don’t want to klick me trough each channel)
  6. Created a Equipment (from the Thing-Page) within the Model creating and linking all channels to items
  7. Restart OH container

And guess what…

No wrong - it stil doesn’t work

so went to the logs again and sudenly there is a change within the TRACE log:

13:12:31.210 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : BundleComponentActivator : ComponentHolder created.
13:12:31.392 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : BundleComponentActivator : ComponentHolder created.
13:12:31.445 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Component created: DS=DS13, implementation=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider, immediate=true, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider]
13:12:31.481 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Component Services: scope=singleton, services=[org.openhab.core.thing.type.DynamicStateDescriptionProvider, org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider]
13:12:31.522 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Component Properties: {}
13:12:31.540 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Querying state disabled
13:12:31.576 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Querying state disabled
13:12:31.591 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Component can not be activated since it is in state disabled
13:12:31.604 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider] : Querying state disabled
13:12:31.612 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Updating target filters
13:12:31.652 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Changed state from disabled to unsatisfiedReference
13:12:31.664 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Component enabled
13:12:31.678 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : ActivateInternal
13:12:31.715 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Querying state unsatisfiedReference
13:12:31.726 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Querying state unsatisfiedReference
13:12:31.741 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Activating component from state unsatisfiedReference
13:12:31.766 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Querying state unsatisfiedReference
13:12:31.773 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Querying state unsatisfiedReference
13:12:31.784 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Changed state from unsatisfiedReference to satisfied
13:12:31.797 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : registration change queue [registered]
13:12:31.857 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Checking constructor public org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider()
13:12:31.883 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Found constructor with 0 arguments : public org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider()
13:12:31.887 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : This thread collected dependencies
13:12:31.890 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : getService (single component manager) dependencies collected.
13:12:31.912 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Querying state satisfied
13:12:31.953 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Querying state satisfied
13:12:31.995 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : getting activate: activate
13:12:32.024 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Locating method activate in class org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider
13:12:32.037 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Declared Method org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider.activate([interface org.osgi.service.component.ComponentContext]) not found
13:12:32.050 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Locating method activate in class java.lang.Object
13:12:32.079 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Declared Method java.lang.Object.activate([interface org.osgi.service.component.ComponentContext]) not found
13:12:32.112 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : activate method [activate] not found, ignoring
13:12:32.137 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Set implementation object for component
13:12:32.141 [DEBUG] [l.HttpDynamicStateDescriptionProvider] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider(342)] : Changed state from satisfied to active
13:12:32.172 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Dependency Manager created $000interface=org.openhab.core.io.net.http.HttpClientFactory, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=0
13:12:32.176 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Dependency Manager created $001interface=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=1
13:12:32.197 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Component created: DS=DS14, implementation=org.openhab.binding.http.internal.HttpHandlerFactory, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[binding.http]
13:12:32.230 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Component Services: scope=singleton, services=[org.openhab.core.thing.binding.ThingHandlerFactory]
13:12:32.234 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Component Properties: {}
13:12:32.238 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Querying state disabled
13:12:32.248 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Querying state disabled
13:12:32.252 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Component can not be activated since it is in state disabled
13:12:32.260 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory] : Querying state disabled
13:12:32.268 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Updating target filters
13:12:32.274 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : No change in target property for dependency $000: currently registered: false
13:12:32.282 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] :  No existing service listener to unregister for dependency $000
13:12:32.300 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Setting target property for dependency $000 to null
13:12:32.305 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : New service tracker for $000, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.io.net.http.HttpClientFactory), initialReferenceFilter (objectClass=org.openhab.core.io.net.http.HttpClientFactory)
13:12:32.314 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $000 tracker reset (closed)
13:12:32.339 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $000 tracking 1 SingleStatic added {org.openhab.core.io.net.http.HttpClientFactory, org.openhab.core.io.net.http.WebSocketFactory}={service.id=282, service.bundleid=173, service.scope=bundle, component.name=org.openhab.core.io.net.http.internal.WebClientFactoryImpl, component.id=156} (enter)
13:12:32.351 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $000 tracking 1 SingleStatic active: false trackerOpened: false optional: false
13:12:32.356 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $000 tracking 1 SingleStatic added {org.openhab.core.io.net.http.HttpClientFactory, org.openhab.core.io.net.http.WebSocketFactory}={service.id=282, service.bundleid=173, service.scope=bundle, component.name=org.openhab.core.io.net.http.internal.WebClientFactoryImpl, component.id=156} (exit)
13:12:32.460 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $000 tracker opened
13:12:32.492 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : registering service listener for dependency $000
13:12:32.511 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : No change in target property for dependency $001: currently registered: false
13:12:32.550 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] :  No existing service listener to unregister for dependency $001
13:12:32.565 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Setting target property for dependency $001 to null
13:12:32.593 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : New service tracker for $001, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider), initialReferenceFilter (objectClass=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider)
13:12:32.610 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $001 tracker reset (closed)
13:12:32.615 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $001 tracking 2 SingleStatic added {org.openhab.core.thing.type.DynamicStateDescriptionProvider, org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider}={service.id=522, service.bundleid=246, service.scope=bundle, component.name=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider, component.id=342} (enter)
13:12:32.621 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $001 tracking 2 SingleStatic active: false trackerOpened: false optional: false
13:12:32.624 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $001 tracking 2 SingleStatic added {org.openhab.core.thing.type.DynamicStateDescriptionProvider, org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider}={service.id=522, service.bundleid=246, service.scope=bundle, component.name=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider, component.id=342} (exit)
13:12:32.647 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : dm $001 tracker opened
13:12:32.679 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : registering service listener for dependency $001
13:12:32.694 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Changed state from disabled to unsatisfiedReference
13:12:32.702 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Component enabled
13:12:32.743 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : ActivateInternal
13:12:32.747 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Querying state unsatisfiedReference
13:12:32.756 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Querying state unsatisfiedReference
13:12:32.764 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Activating component from state unsatisfiedReference
13:12:32.778 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Querying state unsatisfiedReference
13:12:32.785 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Querying state unsatisfiedReference
13:12:32.794 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Changed state from unsatisfiedReference to satisfied
13:12:32.807 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : registration change queue [registered]
13:12:32.856 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Checking constructor public org.openhab.binding.http.internal.HttpHandlerFactory(org.openhab.core.io.net.http.HttpClientFactory,org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider)
13:12:32.880 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : getReferenceClass: Looking for interface class org.openhab.core.io.net.http.HttpClientFactory through loader of org.openhab.binding.http.internal.HttpHandlerFactory
13:12:32.884 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : getParameterClass: Found class org.openhab.core.io.net.http.HttpClientFactory
13:12:32.894 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : getReferenceClass: Looking for interface class org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider through loader of org.openhab.binding.http.internal.HttpHandlerFactory
13:12:32.917 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : getParameterClass: Found class org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider
13:12:32.945 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Found constructor with 2 arguments : public org.openhab.binding.http.internal.HttpHandlerFactory(org.openhab.core.io.net.http.HttpClientFactory,org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider)
13:12:32.972 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : This thread collected dependencies
13:12:32.976 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : getService (single component manager) dependencies collected.
13:12:33.026 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Querying state satisfied
13:12:33.038 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Querying state satisfied
13:12:33.062 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : For dependency $000, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.io.net.http.HttpClientFactory, org.openhab.core.io.net.http.WebSocketFactory}={service.id=282, service.bundleid=173, service.scope=bundle, component.name=org.openhab.core.io.net.http.internal.WebClientFactoryImpl, component.id=156}] service: [null]]]
13:12:33.081 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : For dependency $001, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.thing.type.DynamicStateDescriptionProvider, org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider}={service.id=522, service.bundleid=246, service.scope=bundle, component.name=org.openhab.binding.http.internal.HttpDynamicStateDescriptionProvider, component.id=342}] service: [null]]]
13:12:33.300 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : getting activate: activate
13:12:33.308 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Locating method activate in class org.openhab.binding.http.internal.HttpHandlerFactory
13:12:33.323 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Declared Method org.openhab.binding.http.internal.HttpHandlerFactory.activate([interface org.osgi.service.component.ComponentContext]) not found
13:12:33.333 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Locating method activate in class org.openhab.core.thing.binding.BaseThingHandlerFactory
13:12:33.351 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Found activate method: protected void org.openhab.core.thing.binding.BaseThingHandlerFactory.activate(org.osgi.service.component.ComponentContext)
13:12:33.365 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.manager.ComponentContextImpl]
13:12:33.376 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : invoked activate: activate
13:12:33.386 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Set implementation object for component
13:12:33.392 [DEBUG] [ding.http.internal.HttpHandlerFactory] - bundle org.openhab.binding.http:3.3.0 (246)[org.openhab.binding.http.internal.HttpHandlerFactory(343)] : Changed state from satisfied to active
13:12:33.747 [INFO ] [inding.http.internal.HttpThingHandler] - Using the secure client for thing 'http:url:BSB_LAN_Kessel'.
13:12:33.766 [DEBUG] [inding.http.internal.HttpThingHandler] - No authentication configured for thing 'http:url:BSB_LAN_Kessel'
13:12:33.849 [TRACE] [http.internal.http.RefreshingUrlCache] - Started refresh task for URL 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with interval 30s
13:12:33.868 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:Kessel_Brennerstufe1
13:12:33.893 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:Kessel_Brennerstufe2
13:12:33.911 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:Kesselpumpe
13:12:33.925 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:Abgastemperaturist
13:12:33.934 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:AbgastemperaturMax
13:12:33.941 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_1
13:12:33.949 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:BrennerLaufzeitStufe_2
13:12:33.967 [TRACE] [l.HttpDynamicStateDescriptionProvider] - adding state description for channel http:url:BSB_LAN_Kessel:KesseltemperaturAktuell
13:12:34.850 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
13:12:34.911 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
13:12:36.456 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 55.1 &deg;C
</td><td>
<input type=text id='value1' VALUE='55.10'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 35.1 &deg;C
</td><td>
<input type=text id='value1' VALUE='35.10'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4988538</td></tr><tr><td>
Brenner Takte Stufe 1: 8604</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2232706</td></tr><tr><td>
Brenner Takte Stufe 2: 8518</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
.....
.....
.....
13:18:35.068 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
13:18:35.071 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
13:18:36.742 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 54.6 &deg;C
</td><td>
<input type=text id='value1' VALUE='54.60'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 33.7 &deg;C
</td><td>
<input type=text id='value1' VALUE='33.70'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4988538</td></tr><tr><td>
Brenner Takte Stufe 1: 8604</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2232706</td></tr><tr><td>
Brenner Takte Stufe 2: 8518</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
13:19:05.076 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
13:19:05.084 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
13:19:06.818 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 54.5 &deg;C
</td><td>
<input type=text id='value1' VALUE='54.50'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 33.7 &deg;C
</td><td>
<input type=text id='value1' VALUE='33.70'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4988538</td></tr><tr><td>
Brenner Takte Stufe 1: 8604</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2232706</td></tr><tr><td>
Brenner Takte Stufe 2: 8518</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}
13:19:35.089 [TRACE] [http.internal.http.RefreshingUrlCache] - Requesting refresh (retry=false) from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B' with timeout 10000ms
13:19:35.094 [TRACE] [http.internal.http.RefreshingUrlCache] - Sending to 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Method = {GET}, Headers = {Accept-Encoding: gzip, User-Agent: Jetty/9.4.46.v20220331}, Content = {null}
13:19:36.698 [TRACE] [tp.internal.http.HttpResponseListener] - Received from 'http://192.168.178.15/8300/8301/8304/8310/8316/8318/B': Code = {200}, Headers = {Content-Type: text/html}, Content = {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' SELECTED>Aus</option>
<option value='1'>Ein</option>
<option value='255'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 54.5 &deg;C
</td><td>
<input type=text id='value1' VALUE='54.50'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 33.5 &deg;C
</td><td>
<input type=text id='value1' VALUE='33.50'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4988538</td></tr><tr><td>
Brenner Takte Stufe 1: 8604</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2232706</td></tr><tr><td>
Brenner Takte Stufe 2: 8518</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

}

All these messages with “returning new stateDescription…” are gone.

But most items do have their status set - only the status of “KesseltemperaturAktuell” and “Abgastemperaturist” are still “UNDEF”

For testing I also tried to copy the Regex from “AbgastemperaturMax” to “Abgastemperaturist” and gues what - Abgastemperaturist is updated with the “selected” value. Changing it back to the correct REGEX it get UNDEF again.

Any other idea would be highly appreciated - as I am really don’t understand what’s going on there…

If you have control over the source data, have you considered more of a push approach using HTTP POSTs to OH’s REST API or MQTT? That doesn’t necessarily solve the current problem but an API that requires polling is usually unsatisfying when a push approach is available.

Show your current full Thing config (click on the code tab and paste the YAML you find there here in code fences) and a recent full HTML you’ve received. There have been lots of things tried and lots of little changes made where I don’t think we here on the forum know exactly what’s going on.

In the mean time, look at the config for the Channels that work and those that do not and see if you can find a difference (e.g. you’re using a switch Channel where you mean to use a number Channel).

Well, yes - those were TRACE logs and you told us you switched to DEBUG afterwards.

OK - just deleted everything again and restarted my OH Container.

the reconfigured the Thing with different IDs for the Thing as well as each channel - just to make sure that this is different from the earlier things.

This is the current config:

UID: http:url:BSB_Interface_Kessel
label: Heizung BSB-Interface Kessel
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.15/8300/8301/8304/8310/8316/8318/B
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  contentType: text/html
  timeout: 10000
  bufferSize: 20480
location: Keller
channels:
  - id: BSB_Kessel_Brennerstufe1
    channelTypeUID: http:switch
    label: Kessel_brennerstufe1
    description: null
    configuration:
      mode: READONLY
      onValue: "255"
      offValue: "0"
      stateTransformation: REGEX:.*8300.*:[ \t]+(\d*).*
  - id: BSB_Kessel_Brennerstufe2
    channelTypeUID: http:switch
    label: Kessel_brennerstufe2
    description: null
    configuration:
      mode: READONLY
      onValue: "255"
      offValue: "0"
      stateTransformation: REGEX:.*8301.*:[ \t]+(\d*).*
  - id: BSB_Kesselpumpe
    channelTypeUID: http:switch
    label: Kesselpumpe
    description: null
    configuration:
      mode: READONLY
      onValue: "255"
      offValue: "0"
      stateTransformation: REGEX:.*8304.*:[ \t]+(\d*).*
  - id: BSB_AbgastemperaturIst
    channelTypeUID: http:number
    label: Abgastemperatur Istwert
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*Istwert:[\s]+(.*)[\d ].*
  - id: BSB_AbgastemperaturMax
    channelTypeUID: http:number
    label: Abgastemperatur Maximum
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*8318.*Maximum:[ \t]+(.*)[ \t]+&deg.*
  - id: BSB_BrennerLaufzeitStufe_1
    channelTypeUID: http:number
    label: Brenner Laufzeit Stufe 1
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*Brenner Laufzeit Stufe 1:.(\d+).*
  - id: BSB_BrennerLaufzeitStufe_2
    channelTypeUID: http:number
    label: Brenner Laufzeit Stufe 2
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*Brenner Laufzeit Stufe 2:.(\d+).*
  - id: BSB_KesseltemperaturAktuell
    channelTypeUID: http:number
    label: Atkuelle Kesseltemperatur
    description: null
    configuration:
      mode: READONLY
      stateTransformation: REGEX:.*8310.*Kesseltemperatur:[ \t]+(.*)[ \t]+&deg.*

The HTML I am parsing is this:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>BSB-LAN Web</title>
<link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png" />
<style>A:link  {color:blue;text-decoration: none;} A:visited {color:blue;text-decoration: none;} A:hover {color:red;text-decoration: none;background-color:yellow} A:active {color:blue;text-decoration: none;} A:focus {color:red;text-decoration: none;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line,formnr){
if(isNaN(document.getElementById('value'+formnr).value)==false){
window.open('S'+line+'='+document.getElementById('value'+formnr).value,'_self');
}}
function setbit(line,formnr){
var x=document.getElementById('value'+formnr); var value=0;
for (var i=0; i<x.options.length; i++) {
if(x.options[i].selected){
value=value+eval(x.options[i].value);
}}
window.open('S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A HREF='/'>BSB-LAN Web</A></h1></center>
<table width=80% align=center><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/K'>Heizungsfunktionen</a></td><td width=20% align=center><a href='/T'>DS18B20-Sensoren</a></td><td width=20% align=center><font color=#000000>DHT22-Sensoren</font></td><td width=20% align=center><a href='/DG'>Anzeige Logdatei</a></td></tr><tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Konfiguration</a></td><td width=20% align=center><a href='/O'>URL-Befehle</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/HOWTO_de.md' target='new'>HowTo</a></td><td width=20% align=center><a href='http://github.com/fredlcore/bsb_lan/blob/master/FAQ_de.md' target='_new'>FAQ</a></td>
</tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8300 Diagnose Erzeuger -  1. Brennerstufe T2: 255 - Ein
</td><td>
<select id='value1'>
<option value='0'>Aus</option>
<option value='1' selected>Ein</option>
</select></td><td></td></tr>
<tr><td>
8301 Diagnose Erzeuger -  2. Brennerstufe T8: 0 - Aus
</td><td>
<select id='value1'>
<option value='0' selected>Aus</option>
<option value='1'>Ein</option>
</select></td><td></td></tr>
<tr><td>
8304 Diagnose Erzeuger -  Kesselpumpe Q1: 255 - Ein
</td><td>
<select id='value1'>
<option value='0'>Aus</option>
<option value='1'>Ein</option>
<option value='255' SELECTED>Ein</option>
</select></td><td></td></tr>
<tr><td>
8310 Diagnose Erzeuger -  Kesseltemperatur: 50.4 &deg;C
</td><td>
<input type=text id='value1' VALUE='50.40'></td><td></td></tr>
<tr><td>
8316 Diagnose Erzeuger -  Abgastemperatur Istwert: 46.0 &deg;C
</td><td>
<input type=text id='value1' VALUE='46.00'></td><td></td></tr>
<tr><td>
8318 Diagnose Erzeuger -  Abgastemperatur Maximum: 71.9 &deg;C
</td><td>
<input type=text id='value1' VALUE='71.90'></td><td></td></tr>
<tr><td>Brenner Laufzeit Stufe 1: 4989296</td></tr><tr><td>
Brenner Takte Stufe 1: 8606</td></tr>
<tr><td>Brenner Laufzeit Stufe 2: 2232868</td></tr><tr><td>
Brenner Takte Stufe 2: 8520</td></tr>
<tr><td>TWW Laufzeit: 0</td></tr><tr><td>
TWW Takte: 0</td></tr>
</td></tr></table>
</body>
</html>

You are absoluteley right. I was missing this option already 8 years back when I was implementing that stuff. However - the software running on the Arduino is not written by myself - I am just using another project which implemented the interface (including the required hardware to connecto to the system). Newer Version would be available but I need to purchase new connection hardware as well as Arduino as the MEGA is not powerful enough for the updated Version.

As I do have a kind of working solution, I don’t see the need to invest anothe 100 bucks to just upgrade a working system.