FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Sidey am 22 September 2018, 22:50:20

Titel: Zeilenumbrüche im Reading verschwinden
Beitrag von: Sidey am 22 September 2018, 22:50:20
Hallo zusammen,

ich komme gerade an einem Punkt mit meimem "unittest" Modul nicht weiter.

Ich schreibe den Satus meiner tests in ein Reading und lese es dann mit einem shell script aus.

Im Reading steht dann z.B. Folgendes nachdem ich ein ReadingUpdate ausgeführt habe:


'ok 1 - Dispatch was called
ok 2 - message is for module TCM97001
'

Im Browser wird das Reading auch genau so angezeigt, solange ich keinen Refresh des Fensters mache.

Mein Problem ist, dass der Zeilenumbruch irgendwie entfernt wird. Aktualisiere ich mein Browserfenster steht folgendes im Reading und beim Abruf via Telnet kommt es auch genau so heraus.
'ok 1 - Dispatch was called ok 2 - message is for module TCM97001'

Ich habe schon verschiedenes probiert, aber der Zeilenumbruch wird irgendwie entfernt. Ich habe bislang nur nicht gefunden wo / wie ich es umgehen könnte.

Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: rudolfkoenig am 23 September 2018, 11:13:32
FHEMWEB konvertiert den Inhalt eines Readings vor der Anzeige nicht, und die Browser zeigen Newlines nicht an.
Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: Sidey am 24 September 2018, 15:48:38
Okay, das Problem ist weitgehend verstanden.

Beim Zugriff via Telnet von einer Shell sorgt der IFS Parameter dafür, dass Zeilenumbrüche entfernt werden.

Das konnte ich leicht anpassen.

Dass der Browser es nicht darstellt verstehe ich.
Wie würde ich denn vorgehen, wenn ich Zeilenumbrüche durch <br> ersetzen wollte?

Gesendet von meinem XT1650 mit Tapatalk

Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: CoolTux am 24 September 2018, 15:50:37
RegEx, suchen und ersetzen \n durch <br> sollte gehen.
Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: Sidey am 24 September 2018, 15:54:11
Zitat von: CoolTux am 24 September 2018, 15:50:37
RegEx, suchen und ersetzen \n durch <br> sollte gehen.
Danke für die Raketen schnelle Antwort.
Dass mit der Regel ist klar. Ich präzisieren meine Frage. :)

Wie konvertieren ich \n bei der Ausgabe via FhemWeb ersetzt aber nicht beim Zugriff via Telnet.

Das bekomme ich im Modul doch nicht mit wie ausgegeben wird, oder?

Grüße Sidey

Gesendet von meinem XT1650 mit Tapatalk

Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: CoolTux am 24 September 2018, 16:08:09
Bin mir gerade unsicher, aber


if( $hash->{cl} and $hash->{cl}->{TYPE} eq 'FHEMWEB' ) {
...
...
} elsif( $hash->{cl} and $hash->{cl}->{TYPE} eq 'telnet' ) {
...
...
}


Kann aber auch totaler Blödsinn sein. Kann es leider gerade nicht testen.


Grüße
Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: Sidey am 24 September 2018, 16:48:34
Okay verstehe , aber FHEMweb greift doch direkt auf das Reading zu und ruft den Inhalt nicht durch eine von mir definierte Schnittstelle ab, oder?

Gesendet von meinem XT1650 mit Tapatalk

Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: CoolTux am 24 September 2018, 16:59:39
 Stimmt hast Recht. Der Inhalt steht ja schon im Reading drin. Also Blödsinn. Ich würde behaupten wenn es drin steht kann dein Modul das ausliefern des Inhalts nicht ändern.
Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: rudolfkoenig am 24 September 2018, 21:16:40
Ich habe FHEMWEB angepasst, damit Reading- und Internal Werte mit \n in einem <pre> Tag angezeigt werden.
Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: Sidey am 24 September 2018, 23:55:32
Danke, das ist echt  8)

:) :) :) :) :)

Grüße Sidey
Titel: Antw:Zeilenumbrüche im Reading verschwinden
Beitrag von: abc2006 am 19 November 2020, 11:59:49
Moin,
ich muss das hier nochmal aufwärmen:

Browser: Firefox und Chromium, am PC und auf dem Handy.
Inhalt der Variablen in der myUtils:

my $debug = "Debugging\ ";
$debug .= "\n Winter";
$debug .= "\nSolarPower: $solarpower > eigenverbrauch $eigenverbrauch + 100";
$debug .= "\n_soc > 95 && soc < 99.7; modbus: $modbus = \n\tsolarpower $solarpower\n\t + wrinput $wrinput\n\t + addpower $addpower";
$data{debug} = $debug;

sub feedindebug{
return $data{debug};
}


Das Device:
attr <device> userreading debug {feedindebug();}

das Reading:
debug

Debugging Winter SolarPower: 8697 > eigenverbrauch 1850 + 100 _soc <= 95 && solarpower > 8000; modbus: -451.5 = total_power -800 + over 348.5


ein list:

Internals:
   FUUID      5f061010-f33f-c595-f970-c82fbc33102ebff0
   NAME       Stromzaehler
   NR         24
   STATE      Mbus: -346; EigenV: 1911 W; WRinput -2581 W; Pges: -670 W
   TYPE       dummy
   READINGS:
     2020-11-19 11:25:42   1_SolarPower    8648
     2020-11-19 11:25:42   1_wrinput       -2581
     2020-11-19 11:25:42   2_soc           74.8
     2020-11-19 11:25:42   3_eigenverbrauch 1911
     2020-11-19 11:25:42   4_modbus        -346
     2020-11-19 11:25:42   6_Battpwr       7113
     2020-11-19 11:25:42   debug           Debugging
Winter
SolarPower: 8648 > eigenverbrauch 1911 + 100
_soc <= 95 && solarpower > 8000; modbus: -346 = total_power -670 + over 324
     2020-11-19 11:25:42   total_power     -670
     2020-11-06 18:51:51   total_power_L1  -111.049573651576
     2020-11-06 18:51:51   total_power_L2  63
     2020-11-06 18:51:51   total_power_L3  -11
Attributes:
   room       Solar_PV
   stateFormat {sprintf("Mbus: %d; EigenV: %d W; WRinput %d W; Pges: %d W",
ReadingsVal($name,"4_modbus",0),
ReadingsVal($name,"3_eigenverbrauch",0),
ReadingsVal($name,"1_wrinput",0),
ReadingsVal($name,"total_power",0))}
   userReadings 4_modbus {feedInPower();},
2_soc {ReadingsNum("BMS","1_SOC_BMS_total",0);},
1_wrinput {ReadingsNum("fsp10k","AC_input_active_Power_total",0);},
1_SolarPower {ReadingsNum("fsp10k","Solar_input_power_1",0) + ReadingsNum("fsp10k","Solar_input_power_2",0);},
3_eigenverbrauch {(ReadingsNum($name,"1_wrinput",0)-ReadingsNum($name,"total_power",0))*-1;},
debug {feedindebug();},
6_Battpwr {ReadingsNum("BMS","1_Power_total",0);}


Der HTML-Quelltext:
<td><div class='dval' class='dval' informId='Stromzaehler-debug'><pre>Debugging
Winter
SolarPower: 8701 &gt; eigenverbrauch 1445 + 100
_soc &lt;= 95 &amp;&amp; solarpower &gt; 8000; modbus: 35.5 = total_power -315 + over 350.5</pre></div></td>
<td><div informId='Stromzaehler-debug-ts'>2020-11-19 11:24:28</div></td>
</tr>


Zeilenumbrüche werden dargestellt im Zeitraum von F5 drücken bis zur nächsten aktualisierung des Readings.
<br>, <br /> usw funktionieren wegen dem pre alle nicht mehr.

Wo liegt mein Denkfehler?
Ist das ein Browser-Problem?
Danke und Grüße,
Stephan