Mit der Version 98_HTTPMOD.pm 23642 2021-01-30 14:45:11Z StefanStrobel werden falsch dargestellt, siehe Anlage.
Ist das beabsichtigt?
Aliegende Definition für Raw Definition
defmod DWDbericht HTTPMOD none 0
attr DWDbericht get01Name dwdbericht
attr DWDbericht get01URL https://www.dwd.de/DE/wetter/vorhersage_aktuell/schleswig_holstein_hamburg/vhs_shh_node.html
attr DWDbericht group Wetter
attr DWDbericht model benutzerdefiniert
attr DWDbericht reading01Name today
attr DWDbericht reading01RegOpt s
attr DWDbericht reading01Regex <h2>Vorhersage\s+-\s+heute.*?<pre style="font-family: sans-serif">(.*?)<\/pre>
attr DWDbericht reading02Name tomorrow
attr DWDbericht reading02RegOpt s
attr DWDbericht reading02Regex <h2>Vorhersage\s+-\s+morgen.*?<pre style="font-family: sans-serif">(.*?)<\/pre>
attr DWDbericht reading03Name condition
attr DWDbericht reading03RegOpt s
attr DWDbericht reading03Regex <h2>Wetterlage.*?<pre style="font-family: sans-serif">(.*?)<\/pre>
attr DWDbericht reading04Name report
attr DWDbericht reading04RegOpt s
attr DWDbericht reading04Regex \<p\>\<strong\>(Letzte.Aktualisierung.*?Uhr)\<\/strong\>
attr DWDbericht room 0_Test,1_Rolladen
attr DWDbericht showBody 0
attr DWDbericht stateFormat {ReadingsVal($name,"report","unknown").", <html><a target='_blank' href='".AttrVal($name,'get01URL','none')."'>DWD Wetterbericht</a></html>"}
attr DWDbericht verbose 2
attr DWDbericht widgetOverride reading..Regex:textField-long,86
setstate DWDbericht Letzte Aktualisierung: 02.02.2021, 14.30 Uhr, <html><a target='_blank' href='https://www.dwd.de/DE/wetter/vorhersage_aktuell/schleswig_holstein_hamburg/vhs_shh_node.html'>DWD Wetterbericht</a></html>
setstate DWDbericht 2021-02-02 18:01:07 condition \
Von S�dwesten n�hert sich heute der Ausl�ufer eines Sturmtiefs bei Irland und erreicht in der Nacht zum Mittwoch Schleswig-Holstein. \
\
FROST:\
Heute tags�ber gebietsweise leichter Dauerfrost. In der Nacht zum Mittwoch leichter Frost um -1 Grad.\
\
GLATTEIS (UNWETTER)/SCHNEE:\
Streckenweise Gl�tte durch �berfrierende N�sse. Heute Abend aufkommender Schneefall mit wenigen Zentimetern Neuschnee, in der Nacht im S�den �bergehend in Schneeregen oder gefrierenden Regen mit Glatteisgefahr (Unwetter). Diese Bedingungen verlagern sich bis Mittwoch Mittag ein wenig nordw�rts.\
Bitte beachten Sie die ausgegebene Vorabinformation Unwetter bez�glich des Glatteises.\
\
WIND: \
In der Nacht zum Mittwoch an der Nordsee zunehmender Ostwind mit Windb�en um 55 km/h (Bft 7), auf den Inseln st�rmischen B�en um 65 km/h (Bft 8), zum Mittag auf Helgoland auch Sturmb�en um 75 km/h (Bft 9). \
setstate DWDbericht 2021-02-02 18:01:07 report Letzte Aktualisierung: 02.02.2021, 14.30 Uhr
setstate DWDbericht 2021-02-02 18:01:07 today \
Heute Nachmittag im S�den meist stark, sonst aufgelockert bew�lkt. Abends von S�den aufkommender Schneefall. Temperaturen um 0 Grad. Schwacher, an der Nordsee zunehmend frischer bis starker Ostwind. \
In der Nacht zum Mittwoch stark bew�lkt, gebietsweise Schnee, in der S�dh�lfte teils �bergang in Regen mit erheblicher Glatteisgefahr (UNWETTER). Kaum Abk�hlung auf -2 bis 0 Grad. Schwacher bis m��iger, an den K�sten frischer bis starker Ostwind. \
setstate DWDbericht 2021-02-02 18:01:07 tomorrow \
Am Mittwoch wolkig und gelegentlich Regen, im Norden teils als Schnee im �bergangsbereich Glatteisgefahr durch gefrierenden Regen. Temperaturen von Nord nach S�d 1 bis 4 Grad. M��ig bis frischer, an den K�sten in B�en st�rmischer Ostwind.\
In der Nacht zum Donnerstag weiterhin stark bew�lkt mit etwas Schnee im Norden bei -1 Grad und Regen an der Elbe bei +1 Grad. Schwacher bis m��iger Ostwind.\
Hallo Ellert,
bei mir leider genau das Gleiche.
Nach einigen Versuchen habe ich nun mit dem Attribut bodyDecode einen Lösung gefunden: bodyDecode auf ISO-8859-1 setzen und bei mir ist es wieder gut :-)
Anscheinend wird nicht mehr automatisch utf8 kodiert. Alter Code:
1456 # if no encode is specified and bodyDecode did decode automatically, then encode as utf8 by default
1457 my $fDefault = ($featurelevel > 5.9 ? 'auto' : '');
1458 my $bodyDecode = AttrVal($name, 'bodyDecode', $fDefault);
1459 $encode = 'utf8' if (!$encode && $bodyDecode eq 'auto');
Neuer Code - wurde auskommentiert:
1482 # if no encode is specified and bodyDecode did decode automatically, then encode as utf8 by default
1483 #my $fDefault = ($featurelevel > 5.9 ? 'auto' : '');
1484 #my $fDefault = 'none';
1485 #my $bodyDecode = AttrVal($name, 'bodyDecode', $fDefault);
1486 #$encode = 'utf8' if (!$encode && $bodyDecode eq 'auto');
Änderungssatz: http://svn.fhem.de/trac/changeset/23641/trunk/fhem/FHEM/98_HTTPMOD.pm
Danke für die Hinweise.
bodyDecode auto hatte ich probiert, das hat keine Besserung bewirkt.
Mit dem Attribut showBody 1 und ohne bodyDecode wurde alles richtig dekodiert. Es ist allerdings störend, wenn ständig der Body in den Internals angezeigt wird.
Ist das neue Verhalten ein Fehler oder ist es gewollt?
Hallo,
dieser Effekt war so nicht gewollt.
Ich habe gerade eine neue Version eingecheckt, die wieder utf8-Encoding anschaltet wenn es keine explizite Konfiguration dazu gibt.
Ab morgen kommt das dann per update.
Am saubersten ist die Konfiguration mit einem expliziten readingEncode utf8
Zitat
(get|set|reading)[0-9]*Encode
defines an encoding to be used in a call to the perl function encode to convert the data string read from the device to a reading.
This can be used if the device delivers strings in an encoding like cp850 and after decoding it you want to reencode it to e.g. utf8.
When the attribute bodyDecode is not set to 'none' then this encoding attribute defaults to utf8.
If your reading values contain Umlauts and they are shown as strange looking icons then you probably need to modidify this attribute.
Using this attribute for a set command only makes sense if you want to parse the HTTP response to the HTTP request that the set command sent by defining the attribute
Was ich bewusst geändert habe, ist der Default für bodyDecode.
Wenn nichts angegeben ist, steht bodyDecode jetzt wieder auf none. 'auto' hat zu viele Probleme erzeugt (insbesondere bei JSON-daten, die schon utf8-kodiert waren)
Gruss
Stefan
Danke für die Hinweise und die Korrektur.
Hallo zusammen,
auch nach heutigem Update funktionieren die Umlaute immer noch nicht richtig.
Weiss jemand, warum?
der Code der Version vor dem 31.01.2021 funktionierte noch. Seit diesem update werden die Umlaute nur noch so "ü" dargestellt.
Gruß
Moin.
Bei mir ist es wieder OK.
Hole mir Benzinpreis von einer Webseite.
Dort hatte das "geöffnet" den Telegram Bot geärgert.
Gruß Gerd
Hallo postman,
wie sieht denn Deine Konfiguration aus?
wie hast Du denn bodyDecode gesetzt?
Gruss
Stefan
Hallo StefanStrobel,
ich habe einfach ein
define Name HTTPMOD http://ipadresse/8005
definiert.
Als Antwort kommt
167 - In Teillastbetrieb für HK
Abgefragt wird der BSB-Lan.
Gelöst habe ich es dadurch, dass ich aus dem Modul das bis zum 31.01.2021 aktuell war, den Code in das aktuelle Modul kopiert habe.
Der ist zwar identisch, funktioniert aber seltsamerweise korrekt.
Als Attribute sind diese hier gesetzt:
attr Name readingsName.* Kesselstatus
attr Name readingsRegex.* 8005 .*:[ \t]+([-]?[\d\.]+[^<]*)
attr Name stateFormat { sprintf("%s",ReadingsVal($name,"Kesselstatus",0)) }
Bei "bodeyDecode" ist nichts eintragen.
edit: Im neuen Code ist das so #my $fDefault = ($featurelevel > 5.9 ? 'auto' : '');
my $bodyDecode = AttrVal($name, 'bodyDecode', ' ');
$encode = 'utf8' if (!$encode && $bodyDecode ne 'none');
ich habe es so my $fDefault = ($featurelevel > 5.9 ? 'auto' : '');
my $bodyDecode = AttrVal($name, 'bodyDecode', $fDefault);
$encode = 'utf8' if (!$encode && $bodyDecode eq 'auto');
geändert, so funktioniert es, warum auch immer ???
Gruß
Hallo postman,
für ein paar Monate war auto der Default-Wert für bodyDecode.
Das hat zwar in manchen Fällen die Konfiguration vereinfacht, aber auch viele Probleme verursacht.
Deshalb habe ich den Default wieder auf none gesetzt.
Versuch doch mal das Attribut bodyDecode explizit auf auto zu setzen.
Gruss
Stefan
hallo Stefan,
das hat leider nicht funktioniert.
Habe erstmal wieder das alte Modul wieder eingespielt.
Gruß Uwe
Hallo Uwe,
es gibt drei Stellen, die so etwas Beeinflussen. Das eine ist ein Dekodieren der kompletten HTTP-Response. Dafür ist bodyDecode zuständig. Wenn das Encoding als HTTP-Header mitgeschickt wird, kann bodyDecode das verwenden:
Zitat
bodyDecode
defines an encoding to be used in a call to the perl function decode to convert the raw http response body data string read from the device before further processing / matching
If you have trouble matching special characters or if your reading values contain Umlauts and they are shown as strange looking icons then you might need to use this feature.
If this attribute is set to 'auto' then HTTPMOD automatically looks for a charset header and decodes the body acordingly. If no charset header is found, the body will remain undecoded.
Später wenn die Readings erzeugt werden, kann man die Werte nochmals mit decode und encode behandeln:
Zitat
(get|set|reading)[0-9]*Decode
defines an encoding to be used in a call to the perl function decode to convert the raw data string read from the device to a reading. This can be used if the device delivers strings in an encoding like cp850 instead of utf8.
If your reading values contain Umlauts and they are shown as strange looking icons then you probably need to use this feature. Using this attribute for a set command only makes sense if you want to parse the HTTP response to the HTTP request that the set command sent by defining the attribute setXXParseResponse.
(get|set|reading)[0-9]*Encode
defines an encoding to be used in a call to the perl function encode to convert the data string read from the device to a reading. This can be used if the device delivers strings in an encoding like cp850 and after decoding it you want to reencode it to e.g. utf8.
When the attribute bodyDecode is not set to 'none' then this encoding attribute defaults to utf8. If your reading values contain Umlauts and they are shown as strange looking icons then you probably need to modidify this attribute. Using this attribute for a set command only makes sense if you want to parse the HTTP response to the HTTP request that the set command sent by defining the attribute setXXParseResponse.
wenn dabei in der Doku (get|set|reading)[0-9]*Encode steht, dann ist das als Regex zu verstehen. Das Attribut könnte also reading01Encode lauten.
Die Schreibweise, die in Deiner Konfiguration verwendet wird, ist übrigens schon lange obsolet:
Zitat
Please note that the old syntax readingsRegex.* does not work with all features of HTTPMOD and should be avoided. It might go away in a future version of HTTPMOD
selbst hier war der Eintrag in der Doku als Regex zu verstehen und nicht 1:1 zu verwenden.
Deine Konfiguration
attr Name readingsName.* Kesselstatus
attr Name readingsRegex.* 8005 .*:[ \t]+([-]?[\d\.]+[^<]*)
sollte also besser so lauten:
attr Name bodyDecode auto
attr Name reading01Name Kesselstatus
attr Name reading01Regex 8005 .*:[ \t]+([-]?[\d\.]+[^<]*)
attr Name reading01Encode utf8
wenn es dann immer noch nicht klappt, schau ich es mir gerne noch mal genauer an, dann bräuchte ich aber einen Auszug aus dem Log mit verbose 5 und am besten eine vollständige HTTP-Response inkl. Headern als Anhang.
Gruss
Stefan
Moin Stefan,
ich habe das jetzt ersteinmal auf meinem Testraspi probiert.
Funktioniert so leider noch nicht.
Hier das Log
2021.02.11 10:45:50 4: Kesselstatus: BodyDecode found no charset header (bodyDecode was set to auto)
2021.02.11 10:45:50 5: Kesselstatus: GetCookies is looking for Cookies
2021.02.11 10:45:50 5: Kesselstatus: ExtractSid called, context reading, num 0
2021.02.11 10:45:50 4: Kesselstatus: checking for redirects, code=200, ignore=0
2021.02.11 10:45:50 4: Kesselstatus: no redirects to handle
2021.02.11 10:45:50 5: Kesselstatus: Read callback sets LAST_REQUEST to update
2021.02.11 10:45:50 5: Kesselstatus: CheckAuth decided no authentication required
2021.02.11 10:45:50 5: Kesselstatus: Read starts parsing response to update with defined readings: 01
2021.02.11 10:45:50 5: Kesselstatus: ExtractReading Kesselstatus with regex /(?^:8005 .*:[ \t]+([-]?[\d\.]+[^<]*))/...
2021.02.11 10:45:50 5: Kesselstatus: ExtractReading for reading01-1 sets Kesselstatus to 167 - In Teillastbetrieb für HK
2021.02.11 10:45:50 5: Kesselstatus: ExtractReading value as hex is 313637202d20496e205465696c6c617374626574726965622066c383c2bc7220484b0d0a
2021.02.11 10:45:50 4: Kesselstatus: Read response matched 1, unmatch 0 Reading(s)
2021.02.11 10:45:50 5: Kesselstatus: Read response to update matched Kesselstatus
2021.02.11 10:45:50 5: Kesselstatus: HandleSendQueue called from ReadCallback, qlen = 0
2021.02.11 10:45:50 5: Kesselstatus: HandleSendQueue found no usable entry in queue
2021.02.11 10:46:48 4: Kesselstatus: GetUpdate called (update)
2021.02.11 10:46:48 4: Kesselstatus: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 59.0 sec at 10:47:47.541, interval 59
2021.02.11 10:46:48 5: Kesselstatus: AddToQueue adds type update to URL http:/ip-adresse/8005, no data, no headers, retry 0, initial queue len: 0
2021.02.11 10:46:48 5: Kesselstatus: HandleSendQueue called from AddToSendQueue, qlen = 1
2021.02.11 10:46:48 4: Kesselstatus: HandleSendQueue sends update with timeout 2 to http://ip-adresse/8005, No Data, No Header
2021.02.11 10:46:49 5: Kesselstatus: ReadCallback called from __ANON__
2021.02.11 10:46:49 4: Kesselstatus: Read callback: request type was update retry 0,
header: HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0, body length 4244
2021.02.11 10:46:49 5: Kesselstatus: Read callback: body
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<title>BSB-LAN Web</title>
<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){
var value = document.getElementById('value'+line).value.replace(":", ".");
value = value.replace("---", "");
if(isNaN(value)==false || value == ''){
window.open(document.getElementById('main_link').href+'S'+line+'='+value,'_self');
}}
function setbit(line){
var x=document.getElementById('value'+line); 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(document.getElementById('main_link').href+'S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><A ID=main_link 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'>Sensoren</a></td><td width=20% align=center><a href='/DG'>Zeichne Logdatei</a></td><td width=20% align=center><a href='/Q'>Prüfe auf neue Parameter</a></td></tr>
<tr bgcolor=#f0f0f0><td width=20% align=center><a href='/C'>Einstellungen</a></td><td width=20% align=center><a href='https://1coderookie.github.io/BSB-LPB-LAN/anhang_b.html' target='_new'>URL-Befehle</a></td><td width=20% align=center><a href='https://1coderookie.github.io/BSB-LPB-LAN/inhaltsverzeichnis.html' target='new'>Handbuch</a></td><td width=20% align=center><a href='https://1coderookie.github.io/BSB-LPB-LAN/kap15.html' target='_new'>FAQ</a></td></tr></table><p></p><table align=center width=80%><tr><td>
<tr><td>
8005 Status - Status Kessel: 167 - In Teillastbetrieb für HK
</td><td>
<select id='value8005'>
<option value='0'>---</option>
<option value='1'>STB angesprochen</option>
<option value='2'>Störung</option>
<option value='3'>Wächter angesprochen</option>
<option value='4'>Handbetrieb aktiv</option>
<option value='5'>Schornsteinfegerfkt, Vollast</option>
<option value='6'>Schornsteinfegerfkt, Teillast</option>
<option value='7'>Schornsteinfegerfkt aktiv</option>
<option value='8'>Gesperrt, Manuell</option>
<option value='9'>Gesperrt, Automatisch</option>
<option value='10'>Gesperrt</option>
<option value='11'>Anfahrentlastung</option>
<option value='12'>Anfahrentlastung, Teillast</option>
<option value='13'>Rückl'begrenzung</option>
<option value='14'>Rückl'begrenzung, Teillast</option>
<option value='15'>Freigegeben</option>
<option value='16'>Freigegeben, Teillast</option>
<option value='17'>Nachlauf aktiv</option>
<option value='18'>In Betrieb</option>
<option value='19'>Freigegeben</option>
<option value='20'>Minimalbegrenzung</option>
<option value='21'>Minimalbegrenzung, Teillast</option>
<option value='22'>Minimalbegrenzung aktiv</option>
<option value='23'>Anlagenfrostschutz aktiv</option>
<option value='24'>Frostschutz aktiv</option>
<option value='25'>Aus</option>
<option value='59'>Ladung Pufferspeicher</option>
<option value='123'>STB Test aktiv</option>
<option value='166'>In Betrieb für Heizkreis</option>
<option value='167' SELECTED>In Teillastbetrieb für HK</option>
<option value='168'>In Betrieb für Trinkwasser</option>
<option value='169'>In Teillastbetrieb für TWW</option>
<option value='170'>In Betrieb für HK, TWW</option>
<option value='171'>In Teillastbetrieb für HK, TWW</option>
<option value='172'>Gesperrt, Feststoffkessel</option>
<option value='173'>Freigegeben für HK, TWW</option>
<option value='174'>Freigeben für TWW</option>
<option value='175'>Freigegeben für HK</option>
<option value='176'>Gesperrt, Außentemperatur</option>
<option value='198'>Gesperrt, Ökobetrieb</option>
</select></td><td></td></tr>
</td></tr></table>
</body>
</html>
Wenn ich mir das Log ansehe, werden da die Umlaute korrekt angezeigt (zumindest in dem Teil, der die Antwort vom webserver protokolliert wird).
Anbei als Anlage noch mal der Quellcode aus dem Browser, ich hoffe, das damit das HTTP-Response inkl. Headern als Anhang gemeint ist.
Gruß Uwe
Hallo Uwe,
ich hab Deine Konfiguration und die Daten mal bei mir eingespielt.
ohne Encode kommt der gleiche kaputte Umlaut wie bei Dir.
Mit Encode kommt ein korrektes ü.
Gruss
Stefan
Moin Stefan,
könntest Du mal das define posten?
Meines sieht so aus:
define Kesselstatus HTTPMOD http://ip-adresse/8005 59
attr Kesselstatus bodyDecode auto
attr Kesselstatus reading01Encode utf8
attr Kesselstatus reading01Name Kesselstatus
attr Kesselstatus reading01Regex 8005 .*:[ \t]+([-]?[\d\.]+[^<]*)
attr Kesselstatus stateFormat { sprintf("%s",ReadingsVal($name,"Kesselstatus",0)) }
attr Kesselstatus verbose 5
Die Attribute habe ich mit
attr Kesselstatus userattr reading01Name reading01Regex readingO1Encode
definiert.
Leider funktioniert es so nicht (siehe Bild) :-[
Heute noch mal ein update ausgeführt
Gruß Uwe
Hallo Uwe,
am Define kann es nicht liegen und den userattr-Eintrag kannst Du löschen. Der ist überflüssig.
bodyDecode auto ist in Deinem Fall offenbar auch wirkungslos, denn Dein Gerät schickt laut Log keinen charset-Header mit.
Ich glaube dass der HTTP-Body, den Du gepostet hast, durch das Ausschneiden aus dem Browser nicht mehr die gleiche Codierung hat, wie die Originaldaten.
Deshalb kann ich das Problem bisher nicht nachvollziehen.
Kannst Du die Daten (am besten mit den HTTP-Headern) per wget holen und dann posten?
Gruss / Thanx
Stefan
Hallo nochmal,
ich vermute Dein Problem ist gerade anders herum gelagert als ich dachte:
Die Originaldaten von Deinem Gerät sind vermutlich bereits im utf-8 Encoding, auch wenn kein charset-Header geliefert wird.
Da kein Decode gemacht wird, aber danach ein Encode, sieht das Ergebnis falsch aus.
Vermutlich müsstest Du entweder bodyDecode utf8 und reading01Encode utf8 angeben (auto geht ja nicht mangels charset-Header) oder eben reading01Encode none.
Gruss
Stefan
Hallo Stefan
bodyDecode utf8 ist die Lösung.
Herzlichen Dank für die Hilfe.
Gruß Uwe
Hallo,
ich klinke mich hier mal als Programmierer der Software, um die es geht, ein:
Danke erst einmal, Stefan, für die Problemlösung - ich würde gerne das Problem an der Wurzel lösen und frage mich gerade, warum dieses Problem auftritt, denn sowohl im HTTP-Header als auch im META Tag wird das Charset-Encoding UTF-8 mitgeschickt. Hier der komplette Abruf inkl. HTTP-Headern:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Length: unspecified
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<title>BSB-LAN</title>
<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;}
table {width: 100%; max-width: 1024px; margin: auto;}
td {vertical-align: top;}
td.header {vertical-align: middle;}
input {width: 100%; box-sizing: border-box;} select {width: 100%;}</style>
</head><body>
<script>function set(line){
var value = document.getElementById('value'+line).value.replace(/\.$/, '');
value = value.replace(':', '.');
value = value.replace('---', '');
if(isNaN(value)==false || value == ''){
window.open(document.getElementById('main_link').href+'S'+line+'='+value,'_self');
}}
function setbit(line){
var x=document.getElementById('value'+line); 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(document.getElementById('main_link').href+'S'+line+'='+value,'_self');
}</script>
<font face='Arial'>
<center><h1><a href='/4444/' ID=main_link>BSB-LAN</A></h1></center>
<table align=center><tr bgcolor=#f0f0f0><td class="header" width=20% align=center><a href='/4444/K'>Heizungsfunktionen</a></td><td class="header" width=20% align=center><a href='/4444/K49'>Sensoren</a></td><td class="header" width=20% align=center><a href='/4444/DG'>Zeichne Logdatei</a></td><td class="header" width=20% align=center><a href='/4444/Q'>Prüfe auf neue Parameter</a></td></tr>
<tr bgcolor=#f0f0f0><td class="header" width=20% align=center><a href='/4444/C'>Einstellungen</a></td><td class="header" width=20% align=center><a href='https://1coderookie.github.io/BSB-LPB-LAN/kap08.html#81-auflistung-und-beschreibung-der-url-befehle' target='_new'>URL-Befehle</a></td><td class="header" width=20% align=center><a href='https://1coderookie.github.io/BSB-LPB-LAN/inhaltsverzeichnis.html' target='new'>Handbuch</a></td><td class="header" width=20% align=center><a href='https://1coderookie.github.io/BSB-LPB-LAN/kap15.html' target='_new'>FAQ</a></td></tr></table><p></p><table align=center><tr><td class="header">
<tr><td> 712 Heizkreis 1 - Reduziertsollwert: 21.0 °C</td><td>
<input type=text id='value712' VALUE='21.0'></td><td><input type=button value='Set' onclick="set(712)"></td></tr></td></tr></table>
</body>
</html>
Wo müsste ich hier noch etwas ändern, damit es für die User möglichst transparent läuft?
Hallo freetz,
mit der HTTP-Response, die Du gepostet hast, sollte HTTPMOD problemlos klarkommen.
Der Default für bodyDecode war mal ein paar Monate auf auto. Das hat aber zu viele Probleme verursacht. Wenn es JSON-Daten waren, dann hat sich der JSON-Parser an den dekodierten Daten verschluckt.
Daher ist er jetzt auf none.
Der Default für das Encoding von Readings ist utf8 sofern nicht explizit bodyDecode none angegeben wird.
Beides zusammen ist zu viel wenn schon utf8-Daten gelesen werden und der Anwender weder bodyDecode noch readingXYEncode angibt.
Wenn Anwender explizit angeben was sie wollen, dann sollte es keine Probleme geben. Aber die Defaults führen in verschiedenen Fällen so oder so zu Problemen.
Vielleicht hat ja noch jemand eine Idee, wie man die Defaults "intelligenter" machen kann...
Gruss
Stefan
Hallo Stefan,
danke für die Rückmeldung, dann bin ich erst mal froh, dass es nicht "an mir" liegt - ich denke, UTF-8 als Default macht auf jeden Fall Sinn: ISO-8859-1(?) ist bei den Werten 0x00-0xFF von UTF-8 mit abgedeckt und Standard-ASCII ja sowieso. Und nach über 20 Jahren UTF werden die Ausnahmen auch immer weniger werden :)...
VG, F.
Hallo zusammen,
ich habe hier https://forum.fhem.de/index.php/topic,45176.1035.html nochmal eine neue Version mit geändertem Verhalten zum Testen gepostet.
Es wäre schön wenn Ihr kurz prüfen könntet, ob das für Euch passt.
Gruss
Stefan